인프런 커뮤니티 질문&답변

rcc24님의 프로필 이미지
rcc24

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12

선생님 질문있어요

작성

·

233

0

안녕하세요?

선생님 초보라 질문 수준이 낮은 점 이해해주시길 바랍니다(__)

삼각형을 띄울 때 Game::Init함수에서 3개의 vertex에 대한 정보를 mesh에 던져주고

mesh::init함수에서 헤당 정보를 받고 createcommittedresource, map, unmap 등의 과정을 거쳐서

data buffer에 복사된 메모리를 GPU에서 그릴때 참조할 수 있도록 vertex buffer view를 통해

필요한 정보를 던져주고 shader는 init에서 shader file(default.hsli)을 읽어서 update할 때 

SetPipelineState를 콜하면서 GPU가 어떤 작업을 해야하는지 설명해준다고 이해하면 되나요?

그리고 추가로 constant buffer view를 사용할 때도 위의 과정과 비슷하게 Game::Update함수에서

transform에 대한 정보를 만들어서 mesh에 set을 하고 mesh에서는 render함수에서 받은 정보를

constant buffer에 push를 하게 되면 pushdata함수 내에서 transform 정보를 buffer에 복사하고

SetGraphicsRootConstantBufferView를 콜해서 GPU에 해당 내용을 전달할 것을 예약하고

shader는 default.hsli에 추가된 내용인 GPU register에 저장될(?) 정보들을 offset으로 활용해서

기존 삼각형을 변경할 것을 GPU에 알려준다고 정리하면 되는건지요?

너무 초보적인 질문이라 죄송합니다(__)

답변 1

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

필요한 정보를 던져주고 shader는 init에서 shader file(default.hsli)을 읽어서 update할 때  SetPipelineState를 콜하면서 GPU가 어떤 작업을 해야하는지 설명해준다고 이해하면 되나요?

-> 맞습니다.
이미 필요한 코드 데이터는 gpu에 로딩이 되어 있지만,
SetPipelineState을 통해 GPU가 어떤 셰이더(정책)로
파이프라인을 돌려야 할지 교체해주는 것이죠.

그리고 추가로 constant buffer view를 사용할 때도 위의 과정과 비슷하게
Game::Update함수에서 transform에 대한 정보를 만들어서
mesh에 set을 하고 mesh에서는 render함수에서 받은 정보를
constant buffer에 push를 하게 되면 pushdata함수 내에서 transform 정보를 buffer에 복사하고SetGraphicsRootConstantBufferView를 콜해서 GPU에 해당 내용을 전달할 것을 예약하고
shader는 default.hsli에 추가된 내용인 GPU register에 저장될(?) 정보들을 offset으로 활용해서
기존 삼각형을 변경할 것을 GPU에 알려준다고 정리하면 되는건지요?

-> 맞습니다. dx11에서는 view라는 용어를 활용하던 것이
dx12에서는 descriptor heap이라는 용어로 통합되었는데 개념은 그렇습니다.
그리고 dx12 이전에는 저렇게 commandQueue를 활용하지 않았기에
지금처럼 골치 아프게 예약하진 않았습니다.

그나저나 나중에 나오겠지만 hlsli 확장자는 hlsl로 미리 수정을 해주시면 되겠습니다.
hlsli는 c++로 치면 .h 파일 같은건데 저걸로 하면 vs에서 컴파일 단계에서 잡아주질 못하더군요.

마지막으로 DX 공부는 장치 초기화 부분이 매우 극혐이라
(저를 포함) 거기서 사람들이 많이들 좌절하게 되는데,
고비를 넘기신 것을 축하드립니다.
전체 큰그림도 잘 파악하셨네요.

rcc24님의 프로필 이미지
rcc24
질문자

감사합니다ㅠ 천천히 잘 따라가볼께요.

rcc24님의 프로필 이미지
rcc24

작성한 질문수

질문하기