DirectX는 COM Interface로 만듬
HResult
assert(bool)
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로 초기화하는 이유
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(시야각, 종횡 비율, 최소거리, 최대거리);