목록Programing/DirectX (26)
공부중
void D3D12HelloWindow::OnRender() { // 장면을 렌더링 하는데 필요한 모든 명령을 기록 PopulateCommandList(); // 명령 리스트 실행. ID3D12CommandList* ppCommandLists[] = { m_commandList.Get() }; m_commandQueue->ExecuteCommandLists(_countof(ppCommandLists), ppCommandLists); // 프레임 전환 ThrowIfFailed(m_swapChain->Present(1, 0)); WaitForPreviousFrame(); } PopulateCommandList에서 주석에 적힌대로 렌더링시 필요한 모든 명령을 기록했었다. 그리고 명령리스트 배열을 만들어서 m_..
LRESULT CALLBACK Win32Application::WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { DXSample* pSample = reinterpret_cast(GetWindowLongPtr(hWnd, GWLP_USERDATA)); switch (message) { case WM_CREATE: { // Save the DXSample* passed in to CreateWindow. LPCREATESTRUCT pCreateStruct = reinterpret_cast(lParam); SetWindowLongPtr(hWnd, GWLP_USERDATA, reinterpret_cast(pCreateStruct->lpCre..
void D3D12HelloWindow::OnInit() { LoadPipeline(); LoadAssets(); } 길고긴 LoadPipeLine함수가 끝나고 다음은 LoadAssets함수의 내부를 살펴보자. // sample asset들 불러오기 void D3D12HelloWindow::LoadAssets() { // 명령 리스트 생성 ThrowIfFailed(m_device->CreateCommandList(0 ,D3D12_COMMAND_LIST_TYPE_DIRECT ,m_commandAllocator.Get() ,nullptr ,IID_PPV_ARGS(&m_commandList))); /* 명령리스트는 기록 상태에서 생성되지만 아무것도 없다. 아직 기록하지는 않고 메인 루프는 닫히기를 기대하므로 ..
몸이 다 나은건 아니지만 틈틈히 공부는 해야되지 않겠는가 ㅠ 몸도 안좋은데 게으름도 넘쳐나니 ... 아무튼 이번코드는 다음과 같다. // 이 샘플은 전체 화면 전환을 지원하지 않습니다. ThrowIfFailed(factory->MakeWindowAssociation(Win32Application::GetHwnd(), DXGI_MWA_NO_ALT_ENTER)); ThrowIfFailed(swapChain.As(&m_swapChain)); m_frameIndex = m_swapChain->GetCurrentBackBufferIndex(); // 설명자 힙(descriptor heaps)을 작성하십시오. { // 렌더 타겟 뷰 (RTV) 서술자 힙을 기술하고 생성하십시오. D3D12_DESCRIPTOR_HEA..
// 명령 대기열을 설명하고 작성하십시오. D3D12_COMMAND_QUEUE_DESC queueDesc = {}; queueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE; queueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT; ThrowIfFailed(m_device->CreateCommandQueue(&queueDesc, IID_PPV_ARGS(&m_commandQueue))); 명령 대기열(Command Queue)부분인데 . 이 튜토리얼에서는 Init만 하고 딱히 명령을 내리는 부분이 없으므로(삼각형도 띄우지 않음) 자세한 내용은 다음 튜토리얼에서 때가 되면 정리해볼 예정이다. // 스왑 체인(swap chain)을 기술하고 생성하십시..
ComPtr factory; ThrowIfFailed(CreateDXGIFactory2(dxgiFactoryFlags, IID_PPV_ARGS(&factory))); if (m_useWarpDevice) { ComPtr warpAdapter; ThrowIfFailed(factory->EnumWarpAdapter(IID_PPV_ARGS(&warpAdapter))); ThrowIfFailed(D3D12CreateDevice( warpAdapter.Get(), D3D_FEATURE_LEVEL_11_0, IID_PPV_ARGS(&m_device) )); } else { ComPtr hardwareAdapter; GetHardwareAdapter(factory.Get(), &hardwareAdapter); Thr..
UINT dxgiFactoryFlags = 0; #if defined(_DEBUG) // 디버그 레이어를 활성화합니다 (그래픽 도구의 "선택적 기능"필요). // 참고 : 장치 생성 후 디버그 레이어를 활성화하면 활성 장치가 무효화됩니다. { ComPtr debugController; if (SUCCEEDED(D3D12GetDebugInterface(IID_PPV_ARGS(&debugController)))) { debugController->EnableDebugLayer(); // 추가 디버그 레이어를 사용합니다. dxgiFactoryFlags |= DXGI_CREATE_FACTORY_DEBUG; } } #endif #if defined를 가지고 디버그(_DEBUG)모드에서 #endif 까지의 코드를 ..
이어서... 다시 Main.cpp를 살펴보고 Run 멤버 함수를 살펴보자. //********************************************************* // //FileName : Main.cpp // //********************************************************* #include "stdafx.h" #include "D3D12HelloWindow.h" _Use_decl_annotations_ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow) { D3D12HelloWindow sample(1280, 720, L"D3D12 Hello Window"); re..