[DirectX] DirectX11 시작, 템플릿 static 변수

라멘커비·2024년 3월 27일
1

DirectX 2D

목록 보기
5/24
post-custom-banner

DX11
마소가 그래픽카드를 전보다는 쉽게 사용할 수 있는 코드 뭉치(lib, dll)인 directX를 출시했음. cpu에 대한 최적화내용도 함께 있음.
9에서부터 게임이 쏟아져 나왔다. 11도 9보다는 어렵지만 할만하고 안정권. 12에서는 렌더링과 쓰레드에 대해 제대로 아는 사람만 쓸 수 있는 느낌.
directx는 com 객체 방식이라는 내부 구현방식을 가지고 있다.
com객체(그런게있다~)

그래픽카드는 왜 빠른가??
1. 압도적인 수학연산 전문화
칩셋에서 기계어 명령어를 순차적으로 연산되게 만든다. 일반적인 cpu는 다양한 일을 해야하기 때문에 훨씬 많은 명령어를 가지고 있다. 그런데 그래픽카드는 특화된 기능의 명령어를 가지고 있다.
2. 압도적인 병렬성
일반적인 CPU는 1개의 코어가 1개의 명령어를 처리. 16코어는 한 번에 16개의 명령어를 처리할 수 있는 가능성. 그래픽카드는 애초에 병렬로 처리. 이유는 픽셀 1개 1개를 쓰레드로 처리함. 1280 X 720 화면에 뭔가를 그리면 1280 * 720 개의 쓰레드를 동시에 운용하는 수준의 병렬성을 가짐.

Dx11 디바이스 컨텍스트

DX11로 리소스 로드, 관리하고 싶다 -> ID3D11Device 에서 찾으면 된다. (이미지가 하드웨어 어딘가에 있으니까?)
그림을 그리고 싶다 -> ID3D11DeviceContext 에서 찾으면 된다.

SwapChain

SwapChain : WinAPI에서의 더블 버퍼링, 다렉에서 아예 기능 제공.
최종적으로 나오는 이미지 처리하기 때문에 사용하지 않을 수가 없는 고정되어있는 기능이라고 보면 됨. 그림이 그려지기까지 고정돼있는 과정을 렌더링 파이프라인이라고 한다. (간혹가다 회사에서 질문할 수 있음) 스왑체인은 렌더링 파이프라인의 가장 마지막단계를 담당.
모니터에 출력. 렌더링에서 기존에 있던 그림을 깨끗하게 지우고 다시 그리는 건 어느 렌더링이나 거의 공통적임. 모니터 하드웨어에 뭔가를 출력하는 과정 안에 우리가 낑겨서 출력하는 것이다.

샘플링

화면에 색 표시할 방법. 모니터에 걸러지게 할 방법 느낌?ㅋㅋ.

  • 격자가 모니터의 픽셀이라고 할 때 삼각형에 닿은 애들을 얼마나, 어떻게 빨간색을 칠할지

  • 점이 많은 샘플링이 적용되면 왜 흐릿한 색이 나올까?
    점이 적게 닿으면 색깔을 약하게 칠하는 것. 텍스처마다 설정할 수 있음.

엔진

텍스처 => 이미지 그 자체. const상태 느낌. 수정 기능 없음. HBITMAP자체
렌더타겟 => 그 이미지를 편집하고 그리고 복사하는 기능을 가진 애.

UnName 리소스는 왜필요? 언제쓰임?

shared_ptr을 사용해도 릴리즈 시점은 내가 쥐고있어야 한다. 포인터랑 다른점은 delete 자체를 안해도 된다는 점밖에 없음. ex) 텍스처는 엔진이 종료될 때 모두 지워진다.

리소스 관리 방식이 동일해야 함 -> 묶음

템플릿 static 변수 선언하는 법

(헤더에 전역 변수 넣으면 그 헤더 추가하는 곳마다 그 변수 생기는 거임. 헤더가 여러곳에서 쓰이면 무조건 에러남.)

template<typename ResType>
std::map<std::string, std::shared_ptr<ResType>> UEngineResources<ResType>::NameResources;

template<typename ResType>
std::list<std::shared_ptr<ResType>> UEngineResources<ResType>::UnNameResources;
profile
일단 시작해보자
post-custom-banner

0개의 댓글