d3dfmt_unknown을 idirect3ddevice9 :: createTexture ()로 전달합니다.
문제
Createetexture 기능으로 DirectX에서 메모리에서 텍스처를 만들면 이것에 대해 궁금합니다.
HRESULT CreateTexture(
UINT Width,
UINT Height,
UINT Levels,
DWORD Usage,
D3DFORMAT Format,
D3DPOOL Pool,
IDirect3DTexture9** ppTexture,
HANDLE* pSharedHandle
);
... 그리고 들어갑니다 D3DFMT_UNKNOWN
형식 정확히 무슨 일이 일어날까요? 첫 번째 또는 두 번째 레벨의 표면을 얻으려고하면 오류가 발생합니까? 실패 할 수 있습니까? 그래픽 장치는 선택의 임의 형식 만 선택합니까? 이로 인해 다른 그래픽 카드 모델/브랜드 사이에 문제가 발생할 수 있습니까?
해결책
방금 시도했는데 실패하지 않습니다.
언제 Usage
설정되었습니다 D3DUSAGE_RENDERTARGET
또는 D3DUSAGE_DYNAMIC
, 그것은 지속적으로 나왔습니다 D3DFMT_A8R8G8B8
, 내가 뒷 버퍼 형식 또는 기타 설정에 무엇을했는지에 관계없이. 그래픽 카드와 관련이 있는지 모르겠습니다. 내 생각에 알 수없는 수단 인 "Pick for Me", 32 비트 형식이 내 카드에서 가장 쉽다는 것입니다.
사용이 있었을 때 D3DUSAGE_DEPTHSTENCIL
, 일관되게 실패했습니다.
내 최선의 결론은 그 지정입니다 D3DFMT_UNKNOWN
형식은 DirectX에게 그것이 무엇인지 선택할 수 있도록합니다. 아니면 항상 불이행 일 것입니다 D3DFMT_A8R8G8B
.
슬프게도, 나는 어디서나 문서에서 이것을 확인할 수 없습니다. : |
다른 팁
MSDN 말하지 않습니다. 그러나 나는 당신이 결과적으로 "d3derr_invalidcall"을 얻을 것이라고 확신합니다.
메소드가 성공하면 반환 값은 d3d_ok입니다. 메소드가 실패하면 반환 값은 다음 중 하나 일 수 있습니다.
나는 이것이 "정의되지 않은"범주에 속한다고 생각합니다. 일부 드라이버는 할당에 실패하는 반면 다른 드라이버는 할당에 실패합니다. 나는 WDK 에서이 조건을 처리해야한다고 말한 적이 없다. 디버그 DX 런타임을 활성화하면 오류 메시지가 표시됩니다.