Вопрос

Мне немного интересно об этом, если вы создаете текстуру в памяти в DirectX с помощью функции CreateTexture:

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 , независимо от того, что Я сделал для формата заднего буфера или других настроек. Я не знаю, связано ли это с моей видеокартой или нет. Я предполагаю, что указание неизвестного означает «выбрать для меня» и что 32-разрядный формат является самым легким для моей карты.

Когда использовалось D3DUSAGE_DEPTHSTENCIL , оно последовательно не выполнялось.

Итак, мой лучший вывод заключается в том, что указание D3DFMT_UNKNOWN в качестве формата дает DirectX выбор того, каким он должен быть. Или, возможно, он всегда по умолчанию равен D3DFMT_A8R8G8B .

К сожалению, я нигде не могу подтвердить это ни в одной документации. : |

Другие советы

MSDN не говорит , Но я почти уверен, что вы получите " D3DERR_INVALIDCALL " в результате.

  

Если метод завершается успешно, возврат   значение D3D_OK. Если метод не удается,   возвращаемое значение может быть одним из   следующее: D3DERR_INVALIDCALL,   D3DERR_OUTOFVIDEOMEMORY,   E_OUTOFMEMORY.

Я думаю, что это относится к " неопределенному " категория. Некоторые драйверы потерпят неудачу при распределении, в то время как другие могут по умолчанию что-то делать Я никогда не видел в WDK ничего, что говорило бы о том, что с этим условием нужно справиться. Я предполагаю, что если вы включите время отладки DX, вы увидите сообщение об ошибке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top