填坑之路 DirectX11(二)使用 DirectXTex 读取 DDS 文件时报错解决方案
近日学习 Direct3D 需要加载一幅纹理贴图到内存中,但由于新的 Windows SDK 不包含 d3dx11.lib,所以只能依赖第三方库进行开发。
了解到 DirectXTex 可以处理该需求后,二话不说往项目中引入依赖,然而在代码正常运行的前提下,纹理贴图无法加载到内存中,于是就产生了这篇文章。
本文目的:
(1)学会往自己的 Direct3D 项目中添加额外的引用;
(2)分析读取 DDS 文件时报错的原因并解决
引用 DirectXTex 库
按照下图的步骤一步一步来,不会出现任何问题:
然后在你需要使用到这个库的地方引入头文件:
#include<DirectXTex.h>
然后就可以愉快的写代码用里面的东西了。怎么使用这里不详细说,我在这里给出一个 GitHub 上的示例代码,实际上这个仓库已经有非常详细的文档教我们怎么使用了:DirectXTex GitHub 地址
示例
在没有使用这个库前,我依旧使用 d3dx11.lib 这一个库,但是它必须要安装 DirectX SDK 且配置路径才可以用,很不方便,之前的导入资源的代码是这样的:
D3DX11CreateShaderResourceViewFromFile(d3dDevice, filePath, 0, 0, &carBodyColorMap, 0);
使用了 DirectXTex 后,我在项目中需要读取 DDS 资源到内存中,所以阅读 GitHub 的文档后代码就是下面这样子:
wchar_t const* filename = L"filePath";
wchar_t ext[_MAX_EXT] = {};
_wsplitpath_s(filename, nullptr, 0, nullptr, 0, nullptr, 0, ext, _MAX_EXT);
ScratchImage image;
LoadFromDDSFile(filename, DDS_FLAGS_NONE, nullptr, image);
HRESULT res = CreateShaderResourceView(d3dDevice, image.GetImages(), image.GetImageCount(), image.GetMetadata(), &carBodyColorMap);
GitHub的教程会很详细,非常推荐去读文档!
报错原因
在读入 DDS 文件成功后,画面并没有渲染贴图资源,非常诡异地有一块黑掉了。
然后查了网上的资料后也没有什么结果,突然发现控制台输出了报错信息:
D3D11 ERROR: ID3D11Device::CreateTexture2D: A Texture2D created with the following Format (0x47, BC1_UNORM) experiences aligment restrictions on the dimensions of the Resource. The dimensions, which are (Width: 827, Height: 964), must be multiples of (Width: 4, Height: 4). [ STATE_CREATION ERROR #101: CREATETEXTURE2D_INVALIDDIMENSIONS]
关键就在这一句:
which are (Width: 827, Height: 964), must be multiples of (Width: 4, Height: 4)
说明 dds 图片的宽高必须都是 4
的倍数,所以我们只要调整图片的宽高满足要求即可!
填坑之路 DirectX11(二)使用 DirectXTex 读取 DDS 文件时报错解决方案相关推荐
- 填坑之路 DirectX11(一)error LNK2019:无法解析的外部符号D3D11CreateDeviceAndSwapChain
在使用 DX11 进行练习的时候遇到了这样一个错误: 在网上搜了很久都没有找到解决方案,然而在 C++ 中必须要了解的两个概念:链接库和头文件. 以前我是学 Java 的,在 Java 中只有 &qu ...
- 填坑之路——使用阿里云OSS上传文件
如下,引入aliyun-oss失败: com.alibaba.cloud:aliyun-oss-spring-boot-starter:unknown 原因: 在2.2.0.RELEASE以后的版本中 ...
- 【pd读取csv文件踩坑】读取csv文件时报错:UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xb5 in position 0
写在前面: 由于CSDN的审查机制的原因,更多博客内容请访问我的个人博客或GitHub: 个人博客地址:个人博客 GitHub地址:GitHub 你是否有过之前用pd.read打开csv文件都正常,但 ...
- 填坑之路!SpringBoot导包坑之spring-boot-starter-parent
填坑之路!SpringBoot导包坑之spring-boot-starter-parent 大誌 2018-11-14 21:03:25 104522 收藏 83 分类专栏: Bug 文章标签: Sp ...
- Android Studio 3.0~3.x正式版填坑之路
序言 总看别人的文章,今天尝试着自己来写一篇.在逛论坛时候,无意间发现Android Studio 3.0正式版本推送更新了,早听说AS 3.0添加了许多新功能,然后手贱迫不及待地想先睹为快,结果正中 ...
- 一款车载GPS定位产品后端服务器架构的填坑之路(一)
文章名字取得有些唬人.这里说"架构"二字也是有些夸大,其实也就是实现一些简单的位置解析功能.数据存储等功能.整理出来,也只是给后来者一些借鉴.希望看到的能够去除糟粕,取其精华. 2 ...
- 微信小程序填坑之路其一:wx.request发送与服务端接受
一.序言 应公司要求要求,要用小程序开发一个信息录入系统.没办法只能听话来填坑. 先介绍一下环境:客户端--小程序:服务端--java:数据库--mysql:服务器--centos7 需求:客户端输入 ...
- NIOS_II填坑之路——EPCS出现“Cannot open flash device”解决办法
读写EPCS出现"Cannot open flash device"的解决办法 SOPC填坑--第n天 代码看了千万遍,Debug千万遍,alt_flash_open_dev(EP ...
- C# AutoCAD二次开发: 读取DWG文件将全部实体变为一个块。
读取DWG文件将全部实体变为一个块 将DWG文件中所有DBObject组成一个块, 如果DWG文件中有属性参照, 则属性变为块属性. 我刚开始学习不久.Net AutoCAD的二次开发, 所以记录在这 ...
- H5嵌入原生开发小结----兼容安卓与ios的填坑之路
一开始听说开发H5,以为就是做适配现代浏览器的移动网页,心想不用管IE了,欧也.到今天,发现当初too young too simple,兼容IE和兼容安卓与IOS,后者让你更抓狂.接下来数一下踩过的 ...
最新文章
- linux 系统调用表 sys_call_table 获取方法
- 专题 18 Inline Assembly(在C语言中嵌套使用汇编)
- Java入门遇到的问题
- Linux版本Membase无法写入default bucket的问题分析
- Knockout中ko.utils中处理数组的方法集合
- Eclipse中看不到jsp的页面效果
- servlet文件上传下载_Servlet上传文件和下载文件示例
- 基于JAVA+SpringMVC+MYSQL的数码商城
- 字符串--验证回文串
- Linux 命令(52)—— ipcrm 命令
- CCNA2.0笔记_TCP/IP概述
- Matlab R2010b 安装使用教程 【详细】
- js实现商城特效---鼠标移入图片放大
- 椭圆曲线上的加密算法——MV(Menezes-Vanstone)算法的具体实现
- Character.isAlphabetic()方法判断中文字符时,返回值为true
- 3D模型欣赏:人形武器 古代兵器 【3D游戏建模教程】
- PHP钓鱼教程,记录一次wifi钓鱼的调试 ——新手
- linux中fflush函数和printf函数 【转】
- JAVA并发-Future/CompletableFuture
- 操作系统课设(文件管理)
热门文章
- 【转】我的算法学习之路
- 新年里真挚的情怀共祝愿南阳好
- node-sails后台搭建
- 英雄联盟一直连接不上服务器连接异常,LOL服务器连接异常怎么办
- 河钢唐钢微尔云计算中心对外签订首个合同
- OpenHarmony轻量系统开发【8】其它驱动开发示例
- golang备忘录003: 使用waitgroup进行graceful shutdown
- LOJ.2863.[IOI2018]组合动作(交互)
- 单片机继电器控制实验程序C语言,继电器控制实验
- EFF 测试 Privacy Badger,禁止第三方跟踪