如果您使用CreateTexture函数在DirectX中在内存中创建纹理,我有点想知道这个:
HRESULT CreateTexture(
UINT Width,
UINT Height,
UINT Levels,
DWORD Usage,
D3DFORMAT Format,
D3DPOOL Pool,
IDirect3DTexture9** ppTexture,
HANDLE* pSharedHandle
);
...并传入D3DFMT_UNKNOWN
格式应该发生什么?如果我试图获得第一级或第二级的表面会导致错误吗?可以失败吗?图形设备是否只选择其选择的随机格式?这会导致不同的显卡型号/品牌之间出现问题吗?
答案 0 :(得分:2)
我刚试了一下它并没有失败,主要是
当Usage
设置为D3DUSAGE_RENDERTARGET
或D3DUSAGE_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运行时会看到错误信息。