[DX11 입문 제6장] 6.15 연습문제 2번에 대한 질문입니다.

GPG 시리즈 관련 질답, 논의 공간.

운영자: 류광

Post Reply
wj05092013@gmail.com

6.15 연습문제 2번에 대한 질문입니다.

전체글 글쓴이: wj05092013@gmail.com » 2017-08-01 21:48

상자 예제를 정점의 위치 성분을 담은 정점 버퍼 하나와 정점 색상 성분을 담은 버퍼 하나, 총 두 개의 버퍼를 사용하도록 수정하는 문제인데요...
제가 생각한대로 해봤는데 어디가 잘못된 것인지 계속 상자가 검게만 나오네요 ㅠㅠ

제가 수정한 부분은,
D3D11_INPUT_ELEMENT_DESC arInputElmDesc[] =
{
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }
};
일단 책에 나와있는대로 slot 번호와 offset을 수정했고,

BuildGeometryBuffer 함수에서 위치정보를 담을 정점 버퍼 하나와 별개로, 색상정보만 담을 정점 버퍼 하나를 더 만들었습니다.

이후에 그리기 함수에서,
ID3D11Buffer * arVB[2] = { m_pBoxPosVB, m_pBoxColorVB };
UINT arStrides[2] = { sizeof(S_CUSTOMVERTEX_POS), sizeof(S_CUSTOMVERTEX_COLOR) };
UINT arOffsets[2] = { 0, 0 };
m_pContext->IASetVertexBuffers(0, 2, arVB, arStrides, arOffsets);

이런식으로 두 버퍼를 배열로 묶어 바인딩했습니다.

아무래도 찍어 맞추는 식으로 풀다보니 틀린 부분이 많을것 같은데...
잘못된 부분 짚어주시면 감사하겠습니다.ㅠㅠ

사용자 아바타
류광
전체글: 3757
가입일: 2001-07-25 09:00
사는 곳: GPGstudy
연락처:

Re: 6.15 연습문제 2번에 대한 질문입니다.

전체글 글쓴이: 류광 » 2017-08-02 12:40

글에 나온 것만 보면 맞게 하신 것 같은데 이상하네요. m_pBoxPosVB와 m_pBoxColorVB를 초기화하고 해당 버퍼들을 생성하는 코드도 한 번 보고 싶습니다.

wj05092013@gmail.com

Re: 6.15 연습문제 2번에 대한 질문입니다.

전체글 글쓴이: wj05092013@gmail.com » 2017-08-04 17:47

버퍼 DESC 작성 시 오타였습니다. 죄송합니다...

아무래도 렌더링 파이프라인까지의 내용들을 제대로 이해하지 않은 상태에서 코드 작성을 하다보니 실수도 더 많아지는것 같아, 허술한 부분을 다시 짚어보는 중입니다!

추가로 한가지 더 질문이 있습니다.

4.7 연습문제 3번에서
IDXGIAdapter::CheckInterfaceSupport 메서드를 이용하라고 되어있는데
MSDN을 보니 이 함수는 direct3d 10 인터페이스까지만 체크 가능하다고 되어있습니다.
실제로 문제를 풀다보니 모든 adapter에 대하여 DXGI_ERROR_UNSUPPORTED가 반환됩니다.

이 부분 질문이 있었는데 제가 못봤던..거겠죠??

사용자 아바타
류광
전체글: 3757
가입일: 2001-07-25 09:00
사는 곳: GPGstudy
연락처:

Re: 6.15 연습문제 2번에 대한 질문입니다.

전체글 글쓴이: 류광 » 2017-08-04 23:46

검색해 보니 CheckInterfaceSupport 질문은 없었네요.

아마도 저자가 DX 9나 10 책에서 그대로 복&붙했나 봅니다. 저도 그냥 번역해 버렸고요.

조만간 정오표에 등록하겠습니다. 고맙습니다!

----

해당 MSDN 페이지를 안 보신 다른 회원분들을 위해 잠깐 언급하자면, DX 11부터는 CheckInterfaceSupport를 사용하지 말고, 그냥 직접 인터페이스를 생성해 보면 된다고 합니다. 예를 들어 ID3D11Device::CreateBlendState 메서드가 실패하면 현재 시스템이 ID3D11BlendState 인터페이스를 지원하지 않는 것입니다.

Post Reply

접속 중인 사용자

이 포럼을 보고 있는 사용자: 회원 0 명, 손님 3 명