이것 때문에 이틀 동안 삽질한 것 같다... __ __
device, immediate context 생성하고 필요한 리소스들 만들어서 바인딩하고 드로우
삼각형이 제대로 나오지가 않고 검은 화면만 나와서 VS 그래픽 디버거 돌려보았는데
저 부분에서 계속 예외가 발생...
출력 창에서 오류 내역을 보면, IASetIndexBuffer 시 인덱스 버퍼의 포맷을 R32_UINT 로 사용할 수 없다고 나온다.
D3D11 ERROR: ID3D11DeviceContext::IASetIndexBuffer: The Format (0x2a, R32_UINT) is not valid for usage as an IAIndexBuffer Format. [ STATE_SETTING ERROR #242: DEVICE_IASETINDEXBUFFER_FORMAT_INVALID]
D3D11: **BREAK** enabled for the previous message, which was: [ ERROR STATE_SETTING #242: DEVICE_IASETINDEXBUFFER_FORMAT_INVALID ]
그래서 인덱스 버퍼 타입 바꾸고 R16_UINT 로 설정해서 실행했더니 예외 발생은 안 하고 잘 돌아가기는 함...
뭐가 문제일까 하면서 여러가지 바꾸면서 삽질하다가
혹시 R32_UINT 포맷을 지금 환경에서 지원을 안 하는 건가??라는 생각으로 immediate context 생성 부분을 확인하면서...
저것을 보고 모든 악의 원인을 알게되었다...
D3D11CreateDevice 에서 device 와 immedate context 생성 시, 저 feature level 배열을 넣어주고 있었는데 여기서 2가지 실수 가 있었다.
1. D3D_FEATURE_LEVEL_9_1 는 IASetIndexBuffer 시 R32_UINT 포맷을 지원 안 한다.
2. D3D11CreateDevice 의 pFeatureLevels 역할
장치 생성 시 pFeatureLevels 매개 변수에 넣은 feature level 배열의 첫 번째 원소부터 보며 gpu 가 해당 level 을 지원할 경우 그 level 기준으로 생성하게 된다.
그래서 지원 가능한 첫 번째 9_1 로 생성이 되어 R32_UINT 를 사용 못한다고 나온 것이다...
'Development' 카테고리의 다른 글
convolution matrix (0) | 2021.08.08 |
---|---|
DirectX 12 를 공부하면서 (0) | 2021.07.03 |
Go 를 이용한 Discord SVN 커밋 알림 봇 제작 (0) | 2020.12.12 |