繁体   English   中英

无法使CreateDDSTextureFromFile工作

Can't get CreateDDSTextureFromFile to work

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

所以,我一直试图找出我的问题几个小时,但我不知道我做错了什么。 当谈到DirectX编程时,我是一个菜鸟,所以我一直在关注一些教程,现在,我正在尝试创建一个obj加载器。 http://www.braynzarsoft.net/index.php?p=D3D11OBJMODEL

但是,我不能让我的纹理工作。

这是我尝试加载DDS纹理的方法:

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永远不会成功,但它也不会崩溃。 如果我翻过小时,它只是说“HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED)”我也试图删除if语句,但这只会把我的方块变成黑色。对我做错了什么的想法?= /

提前致谢!

2 个回复

最可能的问题是你的“boxTexture.dds”是一个每像素24位格式的文件。 在Direct3D 9中,这是D3DFMT_R8G8B8并且相当普遍。 但是,每像素24位没有DXGI等效格式 ,因此需要格式转换才能工作。

DirectX Tool Kit中的DDSTextureLoader模块设计为最小开销函数,因此根本不进行运行时转换 如果数据直接映射到DXGI格式,则会加载。 如果没有,则失败并显示HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED)

根据您的使用场景,有两种不同的解决方案。

  1. 理想的解决方案是将'boxTexture.dds'转换为支持的格式。 您可以使用随DirectXTex提供的texconv命令行工具执行此操作 这是迄今为止最好的选择,因此可能需要进行一次昂贵的转换操作,而不是一次性运行应用程序并加载数据。
  2. 如果你实际上没有控制你正在尝试加载的dds文件的来源(即它们是用户提供的任意文件,或者你正在做某种必须支持传统格式的内容工具),那么你应该使用DirectXTex '全脂' LoadFromDDSFile函数,具有用于处理传统DDS文件格式的广泛转换代码。

请注意, CodePlex wiki文档中的许多传统格式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: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) - Swizzle到YUY2

另请参见Direct3D 11纹理和块压缩

如果您查看CreateTextureFromDDS的源代码(由CreateDDSTextureFromFile调用以进行主数据处理) - http://directxtk.codeplex.com/SourceControl/latest#Src/DDSTextureLoader.cpp - 您将看到有一个很多原因你可能会得到“HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED)”。

打开或读取文件不太可能是一个问题,因为这会返回不同的错误代码。 因此很可能是不受支持的DXGI_FORMAT,格式错误的立方体贴图,无效的mipmap计数或无效的图像尺寸(即大于此处的限制: http//msdn.microsoft.com/en-us/library/ff819065 (v = vs.85).aspx )。

1 无法使NSScrollView工作

好的,我即将在NSScrollView中使用它。 为什么Y坐标被翻转,以及如何更改它。 另外,我必须在NSScrollView通常附带的“自定义视图”中添加数百个子视图,但是滚动条不会激活:( ...

2 无法使realloc()工作

代码应打开并读取包含标点符号,空格等单词的文件并存储在字符串中,但是经过20次尝试,它会引发错误,而且我似乎无法在这里使用realloc()来工作,我期望是问题。 动态分配给该数组20个char指针,当达到限制时,该数组应按两倍重新分配。 我该如何解决? ...

3 无法使jQuery工作

我一直在用jquery做一些有用的事情。 我正在使用Drupal CMS,它默认情况下集成了jquery。 我可以看到调用jquery的Drupal代码可以正常工作。 我也可以点击 在Firebug中,其中显示了jquery代码。 我将其视为“ jquery被加载并执行”。 ...

4 无法使TransactionScope工作

如何使用TransactionScope ? 我几乎找不到任何信息。 我的项目无法识别TransactionScope ,当我尝试调用它时会变成红色。 我尝试using System.Transactions.TransactionScope; 但它也不起作用。 同样,一旦工作, ...

5 无法使makefile工作

我正在做LazyFoo游戏教程 。 我已经按照说明下载了SDL库。 我按照Linux指令使用命令行指导。 我创建了一个名为“ FooPoo”的目录,并将第一节课的源代码放入该目录中。 然后我按照他说的去做: 将此Makefile代码保存到名为“ Makefile”的 ...

6 无法使js fadeIn()工作

试图弄清楚当我滚动到页面底部时如何使用fadeIn()函数。 如今,这似乎是一种相当普遍的技术,我想使用它。 我的代码如下,但是我找不到找到淡入图像的方法。 ...

7 无法使TypeNameHandling工作

我有这两个类和一个操作方法 在我的Global.asax的Application_Start中,下面一行。 我发布的json数据如下所示。 当调用动作我期望的类型a参数是MyNamespace.B但MyNamespace.A所以异常被抛出。 我在下面的代码中编写了代 ...

8 无法使Paypal IPN工作

我正在尝试通过Paypal在我的网站上捐款。 结果,我希望显示捐赠者。 为此,我使用ipn。 我想通了并使它正常工作,但似乎仅在贝宝(Paypal)沙箱中可以正常工作。 这是我的代码:page.php ipnlistener.php: 谁能解释我在想什么? 谢谢 ! ...

9 无法使strstr()工作

我有一项杂务工作,我无法完全在一个区域中正常工作,特别是在我尝试比较字符串的地方。 这是作业: 您将编写一个程序来提示用户输入学生姓名,年龄,gpa和毕业日期。 然后,您的程序将读取所有学生信息,并将其存储到链接列表中。 然后,程序将打印学生的姓名。 接下来,程序将提示用户输入 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM