近日学习 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 文件时报错解决方案相关推荐

  1. 填坑之路 DirectX11(一)error LNK2019:无法解析的外部符号D3D11CreateDeviceAndSwapChain

    在使用 DX11 进行练习的时候遇到了这样一个错误: 在网上搜了很久都没有找到解决方案,然而在 C++ 中必须要了解的两个概念:链接库和头文件. 以前我是学 Java 的,在 Java 中只有 &qu ...

  2. 填坑之路——使用阿里云OSS上传文件

    如下,引入aliyun-oss失败: com.alibaba.cloud:aliyun-oss-spring-boot-starter:unknown 原因: 在2.2.0.RELEASE以后的版本中 ...

  3. 【pd读取csv文件踩坑】读取csv文件时报错:UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xb5 in position 0

    写在前面: 由于CSDN的审查机制的原因,更多博客内容请访问我的个人博客或GitHub: 个人博客地址:个人博客 GitHub地址:GitHub 你是否有过之前用pd.read打开csv文件都正常,但 ...

  4. 填坑之路!SpringBoot导包坑之spring-boot-starter-parent

    填坑之路!SpringBoot导包坑之spring-boot-starter-parent 大誌 2018-11-14 21:03:25 104522 收藏 83 分类专栏: Bug 文章标签: Sp ...

  5. Android Studio 3.0~3.x正式版填坑之路

    序言 总看别人的文章,今天尝试着自己来写一篇.在逛论坛时候,无意间发现Android Studio 3.0正式版本推送更新了,早听说AS 3.0添加了许多新功能,然后手贱迫不及待地想先睹为快,结果正中 ...

  6. 一款车载GPS定位产品后端服务器架构的填坑之路(一)

    文章名字取得有些唬人.这里说"架构"二字也是有些夸大,其实也就是实现一些简单的位置解析功能.数据存储等功能.整理出来,也只是给后来者一些借鉴.希望看到的能够去除糟粕,取其精华. 2 ...

  7. 微信小程序填坑之路其一:wx.request发送与服务端接受

    一.序言 应公司要求要求,要用小程序开发一个信息录入系统.没办法只能听话来填坑. 先介绍一下环境:客户端--小程序:服务端--java:数据库--mysql:服务器--centos7 需求:客户端输入 ...

  8. NIOS_II填坑之路——EPCS出现“Cannot open flash device”解决办法

    读写EPCS出现"Cannot open flash device"的解决办法 SOPC填坑--第n天 代码看了千万遍,Debug千万遍,alt_flash_open_dev(EP ...

  9. C# AutoCAD二次开发: 读取DWG文件将全部实体变为一个块。

    读取DWG文件将全部实体变为一个块 将DWG文件中所有DBObject组成一个块, 如果DWG文件中有属性参照, 则属性变为块属性. 我刚开始学习不久.Net AutoCAD的二次开发, 所以记录在这 ...

  10. H5嵌入原生开发小结----兼容安卓与ios的填坑之路

    一开始听说开发H5,以为就是做适配现代浏览器的移动网页,心想不用管IE了,欧也.到今天,发现当初too young too simple,兼容IE和兼容安卓与IOS,后者让你更抓狂.接下来数一下踩过的 ...

最新文章

  1. linux 系统调用表 sys_call_table 获取方法
  2. 专题 18 Inline Assembly(在C语言中嵌套使用汇编)
  3. Java入门遇到的问题
  4. Linux版本Membase无法写入default bucket的问题分析
  5. Knockout中ko.utils中处理数组的方法集合
  6. Eclipse中看不到jsp的页面效果
  7. servlet文件上传下载_Servlet上传文件和下载文件示例
  8. 基于JAVA+SpringMVC+MYSQL的数码商城
  9. 字符串--验证回文串
  10. Linux 命令(52)—— ipcrm 命令
  11. CCNA2.0笔记_TCP/IP概述
  12. Matlab R2010b 安装使用教程 【详细】
  13. js实现商城特效---鼠标移入图片放大
  14. 椭圆曲线上的加密算法——MV(Menezes-Vanstone)算法的具体实现
  15. Character.isAlphabetic()方法判断中文字符时,返回值为true
  16. 3D模型欣赏:人形武器 古代兵器 【3D游戏建模教程】
  17. PHP钓鱼教程,记录一次wifi钓鱼的调试 ——新手
  18. linux中fflush函数和printf函数 【转】
  19. JAVA并发-Future/CompletableFuture
  20. 操作系统课设(文件管理)

热门文章

  1. 【转】我的算法学习之路
  2. 新年里真挚的情怀共祝愿南阳好
  3. node-sails后台搭建
  4. 英雄联盟一直连接不上服务器连接异常,LOL服务器连接异常怎么办
  5. 河钢唐钢微尔云计算中心对外签订首个合同
  6. OpenHarmony轻量系统开发【8】其它驱动开发示例
  7. golang备忘录003: 使用waitgroup进行graceful shutdown
  8. LOJ.2863.[IOI2018]组合动作(交互)
  9. 单片机继电器控制实验程序C语言,继电器控制实验
  10. EFF 测试 Privacy Badger,禁止第三方跟踪