DirectX Init

조한별·2022년 12월 6일
0

DirectX Init 순서

  1. Device 생성 //CPU -> Vertex, 상수, Shader Resource View
  2. Device Context 생성 //GPU
  3. Swap Cahin 설정 //

DirectX는 COM Interface로 만듬

HResult

  • OS에서 오류 및 경고 조건을 나타내는 데 사용되는 데이터형
  • 어떤 함수가 HRESULT 형을 사용하면 함수의 상태 정보를 리턴 받을 수 있다

assert(bool)

  • 디버그용 에러 출력 함수 정확히는 매크로이다
  • bool값에 따라 true일 땐 pass / false일 땐 failed
  • failed엔 프로그램을 해당 코드 지점에서 일시 중단한다

ex)

HRESULT hr  =D3D11CreateDeviceAndSwapChain(
        nullptr,
        D3D_DRIVER_TYPE_HARDWARE,
        0,
        D3D11_CREATE_DEVICE_DEBUG | D3D11_CREATE_DEVICE_BGRA_SUPPORT, // 3D+2D(글자)
        nullptr,
        0,
        D3D11_SDK_VERSION,
        &swapChainDesc,
        &swapChain,
        &device,
        nullptr,
        &deviceContext
    );

assert(SUCCEEDED(hr));

ID3D11Texture2D* backBuffer;

hr = swapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (void**)&backBuffer);
assert(SUCCEEDED(hr));

COM Interface로 설계된 것은 Delete가 아닌 Release로 제거해야한다

안전하게 할당 해제하기

#define  SAFE_DELETE(p)  {if(p) { delete(p); (p)=NULL;}}
#define  SAFE_RELEASE(p) {if(p) {(p)->Release(); (p)=NULL;}}

NULL로 초기화하는 이유

  • 간혹 이미 delete했는데 해당 주소는 남아있어 엉뚱한 데이터를 제거하는 경우가 있기 때문
IDXGISwapChain::Present(UINT SyncInterval, UINT Flags);

렌더링된 이미지를 사용자에게 표시하는 함수
반환값은 HRESULT
Present(0, 0) => GPU 사양과는 관계없이 출력
Present(1, 0) => 모니터와 동기화 대신 시간이 오래걸림

Matrix projection = XMMatrixPerspectiveFovLH(XM_PIDIV4,
	(float)WIN_WIDTH / (float)WIN_HEIGHT, 0.1f, 1000.0f);

projection = XMMatrixPerspectiveFovLH(시야각, 종횡 비율, 최소거리, 최대거리);

profile
게임프로그래머 지망생

0개의 댓글