0x00 安装 Visual Studio 2019


安装 Visual Studio 2019 以及相关组件。

注:安装组件时带的 Windows 10 SDK 可以在 Individual components 中更换,这里更换为 10.0.19041.0。

0x01 新建工程


打开 Visual Studio 2019 并创建一个空项目,名字随意。

0x02 下载源码


源码下载地址:https://github.com/d3dcoder/d3d12book

下载完成后将整个 CommonChapter 6 Drawing in Direct3D\\Box 中的 ShadersBoxApp.cpp 复制到 0x02 步骤创建的项目中。

我的项目名为 dx12,拷贝后的文件结构如下(红色框中的是复制过来的文件):

0x03 构建项目


1.右键单击解决方案资源管理器的项目名称,在弹出的下拉菜单中依次选择 Add(添加) -> Existing Item(现有项),将文件 BoxApp.cpp 以及 Common 文件夹中的所有文件添加到项目中。添加后,解决方案资源管理器看起来应该和下图相同。

2.右键单击解决方案资源管理器的项目名称,在弹出的下拉菜单中选择 Properties(属性)。再从 Configuration Properties(配置属性) -> General(常规) 选项卡中,将 Windows SDK Version 设置为版本10.0.19041.0(0x01 安装的 Windows 10 SDK 版本)。

3.在主菜单中选择 Debug(调试) -> Start Debugging(开始调试)进行编译。

0x04 解决报错


点击开始调试后并没有成功运行项目,还有一些报错需要解决。

error C1083

首先是 BoxApp.cpp 中,遇到报错,无法打开源文件:

这一报错是由于我们创建的项目的文件结构与官方示例项目的文件结构有所不同。这里可以按照示例的文件结构来构建我们的项目,也可以修改这里的引用路径,使之符合我们的项目结构。我用的是第二种方法,修改后报错消失:

error C2664

error C2664: 'HANDLE CreateEventExW(LPSECURITY_ATTRIBUTES,LPCWSTR,DWORD,DWORD)': cannot convert argument 2 from 'bool' to 'LPCWSTR'

这里的报错位于 d3dApp.cpp 的 547 行,无法将 bool 转换为 LPCWSTR。这里可以将第二个参数修改为 nullptr来解决。

// 修改前
HANDLE eventHandle = CreateEventEx(nullptr, false, false, EVENT_ALL_ACCESS); // 修改后
HANDLE eventHandle = CreateEventEx(nullptr, nullptr, false, EVENT_ALL_ACCESS);

error LNK2019

error LNK2019: unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)

这里的错误是因为,新建的空项目默认使用的是 main 函数作为入口,需要将它修改为符合示例项目的 WinMain

修改步骤如下:

  1. 右键单击解决方案资源管理器的项目名称,在弹出的下拉菜单中依次选择 Properties(属性)
  2. 依次选择 C/C++ -> Preprocessor -> Preprocessor Definitions,删除其中的 _CONSOLE 添加 _WINDOWS
  3. 依次选择 Linker -> System -> SubSystem,选择 Windows(/SUBSYSTEM:WINDOWS)

HR Failed

运行后,弹出错误提示窗:

hr failed in dx12\Common\d3dUtil.cpp; line 111; error: The system cannot find the path specified.

这里的错误是因为,Start Debugging 运行生成的 .exe 位于 Debug 文件夹下,不符合项目指定的 Shader 路径(位于 BoxApp.cpp 第 354 行):

mvsByteCode = d3dUtil::CompileShader(L"Shaders\\color.hlsl", nullptr, "VS", "vs_5_0");
mpsByteCode = d3dUtil::CompileShader(L"Shaders\\color.hlsl", nullptr, "PS", "ps_5_0");

打开项目目录,结构如下:

这里简单地将上面的路径修改一下即可:

// 修改后
mvsByteCode = d3dUtil::CompileShader(L"..\\Shaders\\color.hlsl", nullptr, "VS", "vs_5_0");
mpsByteCode = d3dUtil::CompileShader(L"..\\Shaders\\color.hlsl", nullptr, "PS", "ps_5_0");

0x05 最终运行


在解决了上面的错误之后,不出意外的话,再次点击 Start Debugging(开始调试) ,项目就应该可以成功运行 Box 演示程序了。

ps:示例按住鼠标左键可以旋转正方体,按住鼠标右键可以放大缩小正方体。

DX12龙书 00 - 环境配置:通过 Visual Studio 2019 运行示例项目的更多相关文章

  1. OpenGL 开发环境配置:Visual Studio 2017 + GLFW + GLEW

    Step1:Visual Studio 2017 Why 开发环境,后面编译GLFW 和 GLEW也要用 How 这里使用的是Visual Studio 2017的 Community 版本,直接官网 ...

  2. Visual Studio 2019新建Web项目

    选择创建新项目 选择ASP.NET Web 应用程序,下一步 填好相关信息,位置是保存项目的位置,点击创建 创建你需要的项目项,我们这里选择空项目,点击创建 添加文件 右击项目名 -> 添加 - ...

  3. 使用Visual Studio 2019开发Qt程序

    安装Qt 如标题,你首先需要到 http://download.qt.io/ 去下载并安装Qt,并在引导下安装MSVC组件(这里不做过多解释) Visual Studio 2019 配置 打开VS20 ...

  4. Windows 10 更新补丁后Visual Studio 2017 运行项目出现错误

    问题: 今天更新了Windows 10(版本 1709)推送最新补丁后,打开Visual Studio 2017运行Web项目,都出现“指定的参数超出有效值的范围 参数名:site”,如下图: 解决方 ...

  5. .net转PHP从零开始-配置visual studio 2013 PHP开发环境php for visual studio

    作为一个.net开发者,一直在visual studio这款强大的编辑器宠爱下,其他编辑器都不会用,也用着不熟练.最近这不是转php吗,使用php编辑器很不爽,觉得还是用visual studio舒服 ...

  6. Revit二次开发环境配置(Revit 2020 +Visual Studio 2019)

    Revit二次开发环境搭建(Revit 2019+Visual Studio 2017)准备内容 Revit 2019开发环境的搭建,需要安装的内容如下: Revit 2019(主要的开发环境) Vi ...

  7. python从零开始基础入门——开发环境搭建:Visual Studio Code

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:山海皆可平z PS:如有需要Python学习资料的小伙伴可以加点击下方 ...

  8. Apache Cordova开发环境搭建(一)-Visual Studio

    原文:Apache Cordova开发环境搭建(一)-Visual Studio 一.使用Visual Studio开发Apache Cordova手机App 1.版本要求,Visual Studio ...

  9. OpenCV(c++)-1 安装和配置OpenCV4.4(Windows+visual studio 2019)

    @ 目录 安装OpenCV4 在Windows系统安装OpenCV4 配置visual studio 2019 配置包含路径 验证配置结果 安装OpenCV4 OpenCV是一个基于BSD许可(开源) ...

随机推荐

  1. Lua_C_C#

    lua调用c函数 https://www.cnblogs.com/etangyushan/p/4384368.html Lua中调用C函数 https://www.cnblogs.com/sifenk ...

  2. ract-native常用命令

    1.新建项目:react-native init AwesomeProject 2.运动项目 cd AwesomeProject react-native run-ios 3.添加第三方插件: yar ...

  3. 记一次内存飙升的Windbg

    背景 突然间接到运维的报警,我们一个服务,内存找过了6GB的占用.才6GB 也不是很大,因为在处理别的事情,服务dump一下暂时一放,然后半小时之后,接到了运维的Kafka堆积报警.然后切换着重启了一 ...

  4. FastJSON解析JSON的时候保证深堆的顺序

    普通的JSONObject.parseObject(),解析的时候,底层采用HashMap解析所以是无序的, JSONObject params = JSONObject.parseObject(ex ...

  5. dya49:django:wsgrief&模板渲染Jinjia2&django的MTV/MVC框架&创建/启动一个django项目

    目录 1.自定义web框架wsgiref版 2.自定义web框架wsgiref版-优化版 3.模板渲染JinJa2 4.MTV和MVC框架 5.django:下载安装&创建启动 自定义web框 ...

  6. MyEclipse web项目连接数据库

    1.Build path添加jdbc驱动包 2.编写驱动类 import java.sql.Connection; import java.sql.DriverManager; import java ...

  7. 浅谈DOM事件的优化

    在 JavaScript 程序的开发中,经常会用到一些频繁触发的 DOM 事件,如 mousemove.resize,还有不是那么常用的鼠标滚轮事件:mousewheel (在 Firefox 中,滚 ...

  8. 阿里云openssl升级,实现nginx主动推送,nginx主动推送能够有效减少不必要的报文传输,减少用户请求次数,以达到更快访问速度

    现有版本检查 [root@node3 ~]# openssl version               #这个版本是无法支持http2.0主动推送功能.需要升级为2019版本. OpenSSL 1. ...

  9. [LeetCode]105. 从前序与中序遍历序列构造二叉树(递归)、108. 将有序数组转换为二叉搜索树(递归、二分)

    题目 05. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 题解 使用HashMap记录当前子树根节点在中序遍历中的位置,方便每次 ...

  10. Linux内存子系统——Locking Pages(内存锁定)

    该部分内容可以参考libc man page 3.5 LockingPages 概述 你可以让系统将特定的虚拟内存页与实际页帧相"关联",并保持这样的状态(称为锁定).该部分内存不 ...