将D3DFMT_UNKNOWN传递给IDirect3DDevice9 :: CreateTexture()

时间:2009-07-30 04:27:54

标签: c++ directx textures

如果您使用CreateTexture函数在DirectX中在内存中创建纹理,我有点想知道这个:

HRESULT CreateTexture(
  UINT Width,
  UINT Height,
  UINT Levels,
  DWORD Usage,
  D3DFORMAT Format,
  D3DPOOL Pool,
  IDirect3DTexture9** ppTexture,
  HANDLE* pSharedHandle
);

...并传入D3DFMT_UNKNOWN格式应该发生什么?如果我试图获得第一级或第二级的表面会导致错误吗?可以失败吗?图形设备是否只选择其选择的随机格式?这会导致不同的显卡型号/品牌之间出现问题吗?

3 个答案:

答案 0 :(得分:2)

我刚试了一下它并没有失败,主要是

Usage设置为D3DUSAGE_RENDERTARGETD3DUSAGE_DYNAMIC时,无论我对后台缓冲区格式或其他设置做了什么,它都始终显示为D3DFMT_A8R8G8B8。我不知道这是否与我的显卡有关。我的猜测是,指定未知的方式,“选择我”,32位格式对我的卡最简单。

当使用率为D3DUSAGE_DEPTHSTENCIL时,它会一直失败。

所以我最好的结论是,将D3DFMT_UNKNOWN指定为格式可以让DirectX选择它应该是什么。或者它总是默认为D3DFMT_A8R8G8B

可悲的是,我无法在任何文档中确认任何此类内容。 :|

答案 1 :(得分:0)

MSDN没有说。但我很确定你会得到“D3DERR_INVALIDCALL”。

  

如果方法成功,则返回   值为D3D_OK。如果方法失败,   返回值可以是其中之一   以下:D3DERR_INVALIDCALL,   D3DERR_OUTOFVIDEOMEMORY,   E_OUTOFMEMORY。

答案 2 :(得分:0)

我认为这属于“未定义”类别。一些驱动程序将无法分配,而其他驱动程序可能默认为某些东西。我从来没有在WDK中看到任何说这种情况需要处理的事情。我猜你是否启用调试DX运行时会看到错误信息。