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

쏘씩오브럽송님의 프로필 이미지

작성한 질문수

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

shader의 blob관련 질문 드립니다.

작성

·

348

0

이전 Texture 강의 들으며 실습할 때까지는 문제가 없었는데 DepthStencilBuffer 강의를 들으며 실습한 후 Engine을 빌드하는 것 까지는 성공하였습니다.

그런데 디버그할 시에 blob이 null이어서 예외가 발생하는데 무엇이 문제일까요? 디버깅하며 확인해보니 Shader.h의 멤버변수로 선언된 _vs, _ps, _err 모두 아래와 같이 null값이 저장되어 있습니다.

연관이 있는지는 모르겠지만 아래와 같은 경고가 함께 뜨는데 이것과 연관이 있는 것일까요?

답변 2

1

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

위 내용만으로는 알기가 힘듭니다.
강의 코드를 그대로 복붙해봐도 동일한 문제가 발생하는지 
조금씩 줄여가며 범인을 색출해야 할 것으로 보입니다.
_vsBlob = 로 만들 때 breakpoint를 걸어보거나,
로그 메시지가 없는지 확인이 필요할 것 같네요.

올려주신 코드의 솔루션을 실행하면 문제없이 실행 되는데 코드를 제가 만든 프로젝트로 복붙해서 사용하는 건 위와 같이 오류가 발생하네요 ㅜㅜ 여러 가지 시도해보면서 찾아보겠습니다. 감사합니다~

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

위로를 드리자면 저도 강의를 만들 때 이런 류의 문제를 100번은 만났습니다 ㅎㅎㅎ
정말 사소한 문제이거나 뭔가 경로가 잘못 되었거나 등 다양한 이유가 있을 수 있으니 무운을 빕니다

0

쉐이더를 만들때 즉 CreateShader 부분에서 D3D 컴파일 시 HResult 아웃풋을 줍니다.

그때 그 HResult의 에러코드를 확인하면 어떤 종류의 문제인지 알수 있습니다.

  HRESULT result = ::D3DCompileFromFile(path.c_str(), nullptr, D3D_COMPILE_STANDARD_FILE_INCLUDE, 
                                                                    name.c_str(), version.c_str(), compile_flag, 0, &blob, &m_err_blob);

 

이런 형태로 result 아웃풋을 받고, result의 에러를 확인하세요.

대부분의 경우엔 경로 문제거나 쉐이더 컴파일 에러 등등으로 예상됩니다.