C++ Can';无法让CreateDDSTextureFromFile工作
所以,我已经试着解决我的问题几个小时了,但我不知道我做错了什么。谈到DirectX编程,我是个新手,所以我一直在学习一些教程,现在,我正在尝试创建一个obj加载程序。 然而,我不能让我的纹理工作 以下是我尝试加载DDS纹理的方式:C++ Can';无法让CreateDDSTextureFromFile工作,c++,directx,directx-11,hresult,dds-format,C++,Directx,Directx 11,Hresult,Dds Format,所以,我已经试着解决我的问题几个小时了,但我不知道我做错了什么。谈到DirectX编程,我是个新手,所以我一直在学习一些教程,现在,我正在尝试创建一个obj加载程序。 然而,我不能让我的纹理工作 以下是我尝试加载DDS纹理的方式: ID3D11ShaderResourceView* tempMeshSRV = nullptr; hr = CreateDDSTextureFromFile(gDevice, L"boxTexture.dds", NULL, &tempMeshSRV);
ID3D11ShaderResourceView* tempMeshSRV = nullptr;
hr = CreateDDSTextureFromFile(gDevice, L"boxTexture.dds", NULL, &tempMeshSRV);
if (SUCCEEDED(hr))
{
textureNameArray.push_back(L"boxTexture.dds");
material[matCount - 1].texArrayIndex = meshSRV.size();
meshSRV.push_back(tempMeshSRV);
material[matCount - 1].hasTexture = true;
}
然而,我的HRESULT永远不会成功,但它也不会崩溃。如果我浏览hr,它只会说“HRESULT_FROM_WIN32(不支持错误),我还试图删除If语句,但这只会使我的框变黑。
知道我做错了什么吗=/
提前感谢!如果您查看CreateTextureFromDDS的源代码(CreateDDSSTextureFromFile调用该源代码来执行主数据处理)-您将看到有很多原因可能会导致“来自WIN32的HRESULT(错误\u不受支持)”
打开或读取文件可能不会出现问题,因为这会返回不同的错误代码。因此,最有可能是不支持的DXGI_格式、格式错误的立方体映射、无效的mipmap计数或无效的图像尺寸(即大于此处的限值:)。最有可能的问题是“boxture.dds”“是每像素24位格式的文件。在Direct3D 9中,这是
D3DFMT_R8G8B8
,相当普遍。但是,每像素有24位,因此需要进行格式转换才能工作
中的DDSTextureLoader模块设计为最小开销函数,因此根本不进行运行时转换。如果数据直接映射到DXGI格式,则会加载。如果没有,它将失败,并从WIN32发出HRESULT\u(错误\u不受支持)
根据您的使用场景,有两种不同的解决方案
LoadFromDDSFile
函数,该函数具有用于处理旧DDS文件格式的大量转换代码- D3DFMT_R8G8B8(24bpp RGB)-使用32bpp格式
- D3DFMT_X8B8G8R8(32bpp RGBX)-使用BGRX、BGRA或RGBA
- D3DFMT_A2R10G10B10(BGRA 10:10:10:2)-使用RGBA 10:10:10:2
- D3DFMT_X1R5G5B5(BGR 5:5:5)-使用BGRA 5:5:1或BGR 5:6:5
- D3DFMT_A8R3G3B2,D3DFMT_R3G3B2(BGR 3:3:2)-扩展到支持的格式
- D3DFMT_P8、D3DFMT_A8P8(8位调色板)-扩展到支持的格式
- D3DFMT_A4L4(亮度4:4)-扩展到支持的格式
- D3DFMT_UYVY(YUV 4:2:2 16bpp)-快速旋转至YUY2
另请参见看起来您正在使用DirectXTex库,因此您应该拥有实际的源代码。如果您尝试在调试器中单步执行该函数,它在哪里失败?我正在使用DirectX工具包。我进去了,但是。。我不确定错误的确切位置。请注意,您可以使用meshconvert from将波前OBJ模型转换为VBO、CMO或SDKMESH,然后使用
Model
加载这些模型。寻找一个走查。是的,它似乎不喜欢我的DXGI\u格式:DXGI\u格式未知;格式=GetDXGIFormat(标题->ddspf);它将格式设置为未知。这是为什么?要么文件已损坏,实际上不是DDS文件,要么是某种奇怪/旧格式。没有访问给你带来麻烦的图像文件,这是我能做的最好的了。尝试在一个程序中查看图像,该程序将允许您查看DDS,并查看它是否在那里工作。DXGI_FORMAT_UNKNOWN的意思是:图像数据的格式是未知的(因此,除了将数据保存到其他文件之外,没有其他有用的方法)。如果这是唯一的错误,您可以尝试将其设置为每种格式,并查看结果(如果有),直到它看起来正确为止。那你就知道格式了。