DirectX11程序从VS2010转到VS2015的配置与使用
这篇文章是CSDN文章“龙书D3D11 Demo配置(VS2015+win10)”的一个实践(另一篇文章“如何使用VS2015编译运行DX11版本龙书配套源码”也讲了同样的内容)。写下来的目的一是巩固所学知识,二是防止原博客丢失造成的损失。两篇原文的链接如下:
https://blog.csdn.net/tjj00686/article/details/49110501
https://blog.csdn.net/Pobber/article/details/51971939
首先,我已经有Introduction_to_3D_Game_Programming_with_Directx_11教材的随书源码,这些源码例子已经在VS2010上成功编译运行。由于VS2010已经比较过时,为了配合后续程序编写,我希望能够写一个VS2015版本的DirectX11程序。尽管VS2015已经能够直接使用DirectX11进行编程,但由于我是通过指导教材来学习的,暂时还没有时间去尝试新版(VS2015)的DirectX11;所以我希望把之前在旧版(VS2010编写)所做的工作迁移到VS2015上。以后有时间再去研究新版DirectX11的使用。
接下来是具体的迁移步骤:
1、下载Effects framework,原文给出的链接如下:
https://github.com/Microsoft/FX11
“下载源代码,打开Effects11_2015.sln解决方案,并且使用VS2015重新生成lib库文件的Debug版本和Release版本。将Debug版本的lib库文件重命名为Effects11d.lib,Release版本的lib库文件重命名为Effects11.lib。并复制d3dx11effect.h和Effects11d.lib和Effects11.lib到本书代码附带的Common文件夹里(覆写旧的文件)。”这是原文的描述,但我希望我的DirectX11程序在最终发布的时候是静态编译的,所以我需要生成静态库。因此在生成库文件的时候要做两点改变,如下图所示:
这样修改之后编译运行生成的就是win32、debug版本的静态库,如果要生成x64或者release版本的库,只要修改属性页的相应位置并保证“MFC的使用”和“运行库”匹配就行了。此外,我希望生成多个版本的库文件,以便调试和发布的时候可以方便的切换版本,所以我没有将库文件放入Common文件夹中,而是单独创建了一个库文件夹。我在这里首先是创建了一个DirectX11的文件夹,专门用来放置DirectX11项目需要引用的文件。然后把库文件夹放在了这个文件夹下。如下所示:
2、下载供VS2015使用的Common文件夹。原文链接如下:
https://github.com/DrinkMoon/directx11-pratices/tree/master/Common_vs2015
我把这个Common_VS2015文件夹放在DirectX11文件夹下,和库文件夹并列。如下所示:
在下载的FX-master项目中找到d3dx11effect.h,并放入到Common_VS2015文件夹下,替换旧的文件(查看d3dx11effect.h的源代码,发现它是有版本号的,如果不进行替换,编译所使用的d3dx11effect.h与引用的d3dx11effect.h版本号就很可能会不一致,进而出现问题。由于没有这样测试过,所以不清楚具体会出什么问题,有待考证)。d3dx11effect.h的位置如下:
3、下载DDSTextureLoader。原文给出的下载链接如下:
https://github.com/Microsoft/DirectXTex
我使用了纹理,理论上需要下载这个,并将DDSTextureLoader.h/cpp放到Common_VS2015文件夹下。但是由于我用的是别人用过的Common_VS2015,实际上他已经做了替换,所以我没有进行替换,只是重新加载了Common_VS2015中的文件。因为这个链接上的代码一直在更新,所以是否需要下载并替换要自己做决定。
4、下载dxerr.lib的替代品。原文给出了一个博客链接,在这篇文章的最后有一个链接可以下载dxerr_nov2015.zip,解压之后放到Common_VS2015文件夹中。原文博客链接如下:
https://blogs.msdn.microsoft.com/chuckw/2012/04/24/wheres-dxerr-lib/
5、关于Mesh。原文提到了Mesh相关函数集的下载,但是没有说具体用法。我没有下载。在其他配置完成之后发现不需要下载这个,Demo也能正常运行。它的作用可能是曲面细分之类的,我没有用到,具体功能有待进一步研究。
现在按照原文中的步骤来修改Demo。步骤如下:
1、将随书源码中的例子BlendDemo复制到VS2015常放置项目的文件夹下(修改复制的文件是良好的习惯,建议这样做)。然后用VS2015打开它,提示要升级,点击确定。这个时候Common文件夹中的文件无法打开,需要重新加载,把Common_VS2015中需要使用到的文件加载进来。这里我把它们全部加载了进来。
2、修改项目属性。
(1)、“VC++目录”->“包含目录”->“D:\Tools\DirectX11\Common_VS2015”。包含目录填写自己的Common_VS2015文件夹所在目录。
(2)、“VC++目录”->“库目录”->“D:\Tools\DirectX11\Effects11\Win32_Debug_Static_MTd”。库目录填写自己要使用的Effects11库的目录。
(3)、“配置属性”->“常规”->“MFC的使用”->“在静态库中使用MFC”。
(4)、“配置属性”->“C/C++目录”->“代码生成”->“运行库”->“多线程调试 (/MTd)”。
(5)、“配置属性”->“链接器”->“输入”->“附加依赖项”。填写以下值:
d3d11.lib
Effects11d.lib
d3dcompiler.lib
dxguid.lib
下面这些是系统默认库,如果已经继承了就不用填写,如果没有继承就需要手动填写。我这里刚打开的时候是默认继承的,但是删掉dxerr.lib库之后就不会继承了,所以进行了手动添加。
winmm.lib
comctl32.lib
usp10.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.lib
(6)、“配置属性”->“常规”->“字符集”->“使用多字节字符集”。
3、移除代码中的#include <d3dx11.h>, 以及链接的d3dx11.lib, 还有其他一切依赖于d3dx11的代码(这个地方需要注意,并不是说只要包含d3dx11这样字符的就要删除,需要仔细辨别)。
4、移除链接的dxerr.lib, 添加dxerr.h/cpp到Demo中,修改#include <dxerr.h>为#include “dxerr.h”。
5、添加#include "DDSTextureLoader.h"到 d3dUtil.h。
6、替换#include <xnamath.h>#为include <DirectXMath.h>和#include <DirectXPackedVector.h>。
7、在使用类似XMVector,XMMatrixTranspose时, 改为DirectX::XMVector, DirectX::XMMatrixTranspose。为了避免这么麻烦,可以在引用DirectXMath.h的地方添加using namespace DirectX,在引用DirectXPackedVector.h的地方添加using namespace DirectX::PackedVector,这样就不用到处添加名字空间前缀了。
8、移除所有使用D3DX11INLINE的地方,或者替换为C++关键字inline。
9、取消使用d3dHelper::CreateTexture2DArraySRV,推荐使用texassemble工具(https://directxtex.codeplex.com/wikipage?title=Texassemble&referringTitle=Texconv)离线创建纹理数组。
10、在d3dUtil.h中,替换DXTrace调用时用到的参数__FILE__为__FILEW__, 因为现在获取文件名以宽字符串的方式。
11、在d3dUtil.cpp中,修改ExtractFrustumPlanes函数:
void ExtractFrustumPlanes(XMFLOAT4 planes[6], CXMMATRIX T){XMFLOAT4X4 M;XMStoreFloat4x4(&M, T);//// Left//planes[0].x = M(0,3) + M(0,0);planes[0].y = M(1,3) + M(1,0);planes[0].z = M(2,3) + M(2,0);planes[0].w = M(3,3) + M(3,0);//// Right//planes[1].x = M(0,3) - M(0,0);planes[1].y = M(1,3) - M(1,0);planes[1].z = M(2,3) - M(2,0);planes[1].w = M(3,3) - M(3,0);//// Bottom//planes[2].x = M(0,3) + M(0,1);planes[2].y = M(1,3) + M(1,1);planes[2].z = M(2,3) + M(2,1);planes[2].w = M(3,3) + M(3,1);//// Top//planes[3].x = M(0,3) - M(0,1);planes[3].y = M(1,3) - M(1,1);planes[3].z = M(2,3) - M(2,1);planes[3].w = M(3,3) - M(3,1);//// Near//planes[4].x = M(0,2);planes[4].y = M(1,2);planes[4].z = M(2,2);planes[4].w = M(3,2);//// Far//planes[5].x = M(0,3) - M(0,2);planes[5].y = M(1,3) - M(1,2);planes[5].z = M(2,3) - M(2,2);planes[5].w = M(3,3) - M(3,2);// Normalize the plane equations.for(int i = 0; i < 6; ++i){XMVECTOR v = XMPlaneNormalize(XMLoadFloat4(&planes[i]));XMStoreFloat4(&planes[i], v);}}
12、替换D3DX11CreateShaderResourceViewFormFile为DirectX::CreateDDSTextureFromFile, 在BlendDemo中:
ID3D11Resource* texResource = nullptr;HR(DirectX::CreateDDSTextureFromFile(md3dDevice,L"Textures/grass.dds", &texResource, &mGrassMapSRV));ReleaseCOM(texResource); // view saves referenceHR(DirectX::CreateDDSTextureFromFile(md3dDevice,L"Textures/water2.dds", &texResource, &mWavesMapSRV));ReleaseCOM(texResource); // view saves referenceHR(DirectX::CreateDDSTextureFromFile(md3dDevice,L"Textures/WireFence.dds", &texResource, &mBoxMapSRV));ReleaseCOM(texResource); // view saves reference
经过这些修改之后,就可以编译运行了(可能需要添加图形工具,如果原来没有添加的话)。以下链接是我修改好的BlendDemo以及相关的资料。
https://download.csdn.net/download/liang9jian/10866377
DirectX11程序从VS2010转到VS2015的配置与使用相关推荐
- VS2015上配置opencv2.4.11
VS2015上配置opencv2.4.11版方法总结 最近给电脑重装了系统,需要的软件各种装.今天阅读了很多网上的博客,几经波折完成了opencv的配置.配置opencv与其他函数包或者软件相比算是麻 ...
- QT:(3)在VS2015下配置qt
接上一篇我们已经在Win10下安装了QT5.12.8.因为使用VS2015习惯了所以想在VS2015上配置一下qt.方法如下: 1.在开始菜单下选择VS2015打开.(可以是VS的其他版本,本人使用的 ...
- .NET平台下WEB应用程序的部署(安装数据库和自动配置)
.NET平台下WEB应用程序的部署(安装数据库和自动配置) 李洪根 在.NET平台下,部署 Web 解决方案是比较方便的.我们可以利用Visual Studio.NET 2003添加一个WEB安装 ...
- VS2015+OpenGL配置方法
VS2015+OpenGL配置方法 参考VS2015安装+OpenGL环境配置及测试 有几点需要注意: 没必要将VS全部功能进行安装 执行OpenGL环境配置的第(4)步之前必须将平台改为x64 Op ...
- .NET平台下WEB应用程序的部署(安装数据库和自动配置,启动条件)
转自:http://blog.csdn.net/lihonggen0/article/details/13654 首先,创建一个安装和部署项目.步骤如下: 1.在 "解决方案资源管理器 &q ...
- PCL 1.8.1 在VS2015中配置 包含目录、库目录和附加依赖项
PCL 1.8.1 在VS2015中配置 包含目录.库目录和附加依赖项 1. 包含目录 2. 库目录 3. 附加依赖项 如果想要永久配置,需要在属性管理器中进行. 1. 包含目录 C:\Program ...
- PTK(Pulmonarytoolkit)环境搭建与 ITK4.13+VS2015的配置
Github来源: https://github.com/tomdoel/pulmonarytoolkit 环境准备: *matlab>=R2011a *C++编译器(VS2015) *Matl ...
- 无法定位程序输入点(cmake opencv_contrib,并配置后)
无法定位程序输入点(cmake opencv_contrib,并配置后) 检查后发现是系统环境变量没有把之前opencv的给删除掉,删除掉原来的系统变量就好了
- VS2015安装配置SQLite3数据库
SQLite官方下载页只提供SQLite3.def和SQlite3.dll文件的下载,若使用VC++编程的话,还需要SQLite3.lib库文件,才能调用编译成功.我们可以使用 Visual C++ ...
- VS2010 Intel OpenCL安装与配置
VS2010 Intel OpenCL安装与配置 步骤: 1. 了解系统配置,选择合适的安装包 2. 安装 "intel_sdk_for_opencl_setup ...
最新文章
- 学习:正则表达式的基本语法
- Swift 反射Mirror的使用
- Java ---- 序列化
- linux下的socket通信小程序分享——第三圣子
- 谷歌浏览器怎样通过检查验证图片路径问题
- 将字符串的部分保存,剩余删去,或只保留指定一段子字符串
- ssh作业批改系统_如何看待「全国至少十省份叫停家长批改作业」?能否从根源解决问题?...
- 这几年人工智能和大数据的真实就业规律
- Java基础知识复习(二)
- 译 | Azure 应用服务中的程序崩溃监控
- Java 8 Friday:Java 8将彻底改变数据库访问
- 安装python缺少dll_python报错DLL load failed:找不到模块怎么解决?
- Hadoop1.x中HDFS工作原理
- QThread Class
- 内存模拟块设备驱动程序设计
- 编程基本功:即使是脚本,也尽量减少硬代码,都使用变量
- Code::Blocks代码自动提示设置及常用快捷键 .
- 获取北京时间 日开始时间戳
- html设计简历表,HTML table制作个人简历
- 1 Arduino开发软件和下载程序
热门文章
- linux 回收站目录,探索linux系统回收站与U盘中的.Trash文件夹区别之处
- python3中26个英文字母排序_26个英文字母的排序是怎样排的?
- java公众号第三方开发平台_微信开放平台之公众号第三方平台开发及全网发布验证...
- mysql挂马_虚拟主机/数据库中挂马清理方法
- 机器学习_深度学习毕设题目汇总——图像分类
- DC-1详解(绝对的详细!)
- warning: #61-D: integer operation result is out of range
- 离散-关系矩阵乘法运算
- Excel 纵向查找函数 vlookup() 使用入门
- 中国万网CEO张向东解读被阿里收购幕后