DirectX (1)

민혁 공부방·2024년 8월 8일


1. 윈도우 창을 1000, 800크기로 먼저 만들어준다.
2. CDevice::GetInstance()를 호출한다.

이는 윈도우가 만들어진 이후에 호출해야 하며,

  1. 마찬가지로, CSceneManager에 InitScene() 함수로 들어가서
    S01_DXPipeline()을 동적으로 받아준다. (push_back)
    이를 생성자에 호출하지 않는 이유는 생성자는 단 한번만 실행이 되는데
    동적으로 Scene를 유동적으로 변화를 시킬 수 있기 때문에
    새로운 함수를 만들어서 추가한다.

이제 CDevice::GetInstance()를 보자.
우선 생성자에서 InitDevice() 메소드를 호출한다.

1. Device(장치)

  • DirectX에서 그래픽 리소스를 생성하고, 버퍼를 관리하며, 셰이더를 실행하는 작업을 수행한다.
    일반적으로 하드웨어 가속을 사용하기 위해 D3D_DRIVER_TYPE_HARDWARE 옵션으로 장치를 생성
  1. DeviceContext (장치 컨텍스트)
  • ID3D11DeviceContext 는 렌더링 명령을 생성하고 장치에 전달하는 역할을 한다.
    즉, 장치의 상태를 관리하고 렌더링 명령을 생성한다.
  1. Swap Chain(스왑 체인)
  • IDXGISwapChain 은 전면버퍼와 후면버퍼를 교환하며 화면을 그래픽을 표시한다.
    장점 : 화면에 깜빡임 없는 재생성과 렌더링 결과를 표시할 수 있다.
    이는, 윈도우의 백 버퍼를 관리하고 프레임의 렌더링 순서를 조정한다.


D3D11CreateDeviceAndSwapChain 메소드는
위에 주석으로 그래픽 장치와 SwapChain을 생성해주는 부분이다.
D3D11CreateDeviceAndSwapChain() 함수에 대한 각 변수가 무엇인지 알아야하는데,

이 전체값을 hr로 나타내었다.
HRESULT는 함수 호출의 성공/실패로 나타낸다.

D3D_FEATURE_LEVEL을
vector형태로 feature_level에 저장을
하고, 각 HLSL(High Level Shader
Language – Direct의 기능수준)을 나타내준다.

select_feature로 선언한 변수는
현재 DirectX 의 버전을 알아내주는
부분인데, 컴퓨터 환경에 따라서 다르다.

BufferDesc는 SwapChain의 모드 설명을 나타내기 위한 구조체이다.
화면 모드 속성을 정의하는데,
< 각 옵션에 대한 설명 >
Width: 화면의 너비 (픽셀 단위)
Height: 화면의 높이 (픽셀 단위)
RefreshRate: 화면의 리프레시 속도 (Numerator와 Denominator로 분리됨)
Format: 픽셀 형식 (예: DXGI_FORMAT_R8G8B8A8_UNORM)
ScanlineOrdering: 스캔라인 순서
Scaling: 화면 스케일링 방법
이렇게 봐주기만 하면 될 것 같다.

DXGI_SWAP_CHAIN_DESC 매개변수를 받는 desc는
SwapChain을 설정하기 위한 구조체인데 위에 BufferDesc 변수를 desc.BufferDesc에 저장한다.

< 각 옵션에 대한 설명 >
BufferDesc: DXGI_MODE_DESC 타입으로 스왑 체인의 버퍼 모드 설명을 포함
SampleDesc: 멀티샘플링 설정
BufferUsage: 버퍼 사용 방법 (예: DXGI_USAGE_RENDER_TARGET_OUTPUT)
BufferCount: 스왑 체인의 버퍼 수
OutputWindow: 렌더링할 윈도우 핸들
Windowed: 창 모드인지 여부
SwapEffect: 스왑 효과 (예: DXGI_SWAP_EFFECT_DISCARD)

assert.h 헤더파일에 필요로하는 assert는
함수 호출의 성공/실패의 여부를 나타내는 hr을 받아준다.
만약 실패하게 되면, 경고창이 뜨면서 다음으로 넘어가지 않게 된다.
그 후 윈도우 크기에 맞춰서 BackBuffer을 생성해준다.
** BackBuffer을 생성해주는 과정

RTV(Rander Target View)
SwapChain의 버퍼를 가져와서(GetBuffer) ID3D11Texture2D 텍스처를 생성한다.
정상으로 실행이 된다면, Device를 사용하여 RTV를 생성해준다.
I로 시작하는 변수는 이중포인터형으로 되어있고 COM형 인터페이스는 release를 통해 제거를 해야 한다.

profile
한번 더 복습하기 위한 개인 공간입니다!

0개의 댓글