如果您使用CreateTexture函数在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 的形式出现,无论如何我做了后台缓冲格式或其他设置。我不知道这是否与我的显卡有关。我的猜测是指定未知的方式,“选择我”,并且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