2025년 4월 1일 화요일

Direct3D 0002 - Direct3D 초기화 (2) - Textures formats, Swap Chain

DXGI

DXGI(DirectX Graphics Infrastructure)는 그래픽 디바이스와 운영체제(Windows)간의 인터페이스를 담당하는 라이브러리이다. 이는 Direct3D와 그래픽 하드웨어를 연결하여 창, 스왑 체인, 디스플레이 출력 등을 관리한다. (스왑 체인은 후술)

DXGI_FORMAT

dxgi_format은 dxgi에서 사용되는 픽셀포맷(enum)이다.

DXGI_FORMAT_R32G32B32_FLOAT
  32비트 RGB
DXGI_FORMAT_R16G16B16A16_UNORM
DXGI_FORMAT_R32G32_UNIT
DXGI_FORMAT_R8G8B8A8_UNORM
DXGI_FORMAT_R8G8B8A8_SNORM
DXGI_FORMAT_R8G8B8A8_SINT
DXGI_FORMAT_R8G8B8A8_UINT
DXGI_FORMAT_R16G16B16A16_TYPELESS

Swap Chain

Swap Chain과 Page flipping
애니메이션이 깜박이는 현상을 방지하기 위해, 미리 화면을 그려 back buffer에 저장하고 front buffer와 교체해준다.
매 프레임마다 화면을 교체해줄 때 front buffer와 back buffer의 역할을 바꿔준다.
이 과정을 presenting이라고 부른다.
direct3d에서는 swap chain은 IDXGISwapChain 인터페이스를 통해 사용된다.

DXGI_SWAP_CHAIN_DESC swapChainDesc = {};
swapChainDesc.BufferCount = 2;  // 더블 버퍼링
swapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD;
swapChainDesc.OutputWindow = hwnd;  // 윈도우 핸들
swapChainDesc.SampleDesc.Count = 1; // 멀티샘플링 없음(다음 글에 설명)
swapChainDesc.Windowed = TRUE;

ComPtr<IDXGISwapChain> swapChain;
dxgiFactory->CreateSwapChain(commandQueue.Get(), &swapChainDesc, &swapChain);

ComPtr<ID3D12Resource> backBuffer;
swapChain->GetBuffer(0, IID_PPV_ARGS(&backBuffer));

swapChain->Present(1, 0);  // VSync 활성화



댓글 없음:

댓글 쓰기