0x00 安装 Visual Studio 2019

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

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

0x01 新建工程

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

0x02 下载源码

下载完成后将整个 Common 及 Chapter 6 Drawing in Direct3D\\Box 中的 Shaders 和 BoxApp.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。

修改步骤如下:

右键单击解决方案资源管理器的项目名称,在弹出的下拉菜单中依次选择 Properties(属性)。

依次选择 C/C++ -> Preprocessor -> Preprocessor Definitions,删除其中的 _CONSOLE 添加 _WINDOWS。

依次选择 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_DX12龙书 00 - 环境配置:通过 Visual Studio 2019 运行示例项目相关推荐

  1. 【Tools】Visual Studio 2019搭建Qt开发环境

    00. 目录 文章目录 00. 目录 01. 概述 02. Visual Studio 2019安装 03. Qt6安装 04. qt-vsaddin插件下载 05. qt-vsaddin插件安装 0 ...

  2. 汇编语言 + Visual Studio 2019——Visual Studio 2019 中汇编语言环境解决方案

    基本概念 MASM:Microsoft汇编程序(俗称MASM)是一种工业软件开发工具,已经由主要的操作系统供应商维护和更新了30多年.它从未被软化或折衷为对消费者友好的工具,并且被设计为供专业程序员用 ...

  3. visual studio 2019安装配置可编写c/c++语言的IDE环境

    visual studio 2019安装配置可编写c/c++语言的IDE环境 IDE的下载和安装: 首先,到visual studio官网下载vs2019的安装程序. 学生.或个人开发者免费下载第一个 ...

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

    Revit 2019开sql教程发环境java基础教程的搭建,需要python基础教程安装的c#教程内容如下: Revit 2019(主要vb.net教程的开发环境) Visual Studio 20 ...

  5. 【Unity3D】Unity 脚本 ② ( Visual Studio 2019 中的 Unity 编译环境配置 | Unity 编辑器关联外部 C# 脚本编辑器 Visual Studio )

    文章目录 一. Visual Studio 2019 中的 Unity 编译问题 二. Unity 编辑器中关联外部 C# 脚本编辑器 三. 设置游戏运行时脚本更新行为 一. Visual Studi ...

  6. <Visual Studio 2019安装及环境配置教程>

    目录 1.Visual Studio 2019下载安装: 1.1 进入官网 1.2 选择所需Visual Studio 2019安装包 1.3  Visual Studio 2019 版本说明 1.4 ...

  7. [Qt小白磨刀石]使用Visual Studio 2019+Qt 5.14.2创建GUI程序指南之开发环境配置篇

    1. Visual studio 2019 的安装 a) 点此地址进入 Visual Studio 官网,下载 Community 2019 版(实际下载的为安装器) b) 安装完后会启动 Visua ...

  8. 【Android NDK 开发】Visual Studio 2019 使用 CMake 开发 JNI 动态库 ( 动态库编译配置 | JNI 头文件导入 | JNI 方法命名规范 )

    文章目录 I . JNI 与 NDK 区别 II . Visual Studio 编译动态库 III. 配置 导入 jni.h 头文件 IV . IntelliJ IDEA Community Edi ...

  9. visual studio 2019配置OnnxRuntime+推理+vgg16

    配置onnxruntime onnxruntime 动态库下载 你可以下载vgg16模型加代码运行这个项目 代码在git vgg16模型链接 链接: https://pan.baidu.com/s/1 ...

最新文章

  1. 推特千赞Demo袭来!简笔画变照片的GauGAN,编故事的GPT-2,浏览器皆可玩
  2. [TensorRT] ERROR: Network must have at least one output
  3. python练习册 每天一个小程序 第0013题
  4. GT考试(bzoj 1009)
  5. 画师id_100位插画师是怎么过日子的?
  6. Nginx 部署 Vue 项目刷新页面出现404
  7. 快速pow和sqrt的小技巧 hdu4282
  8. 如果看了此文,你还不懂傅里叶变换,那就过来掐死我吧(完整版)
  9. 01分数规划解析(转载)
  10. 一个简单的开源PHP爬虫框架『Phpfetcher』
  11. java win7 管理员权限_win7系统获取管理员权限批处理的操作方法
  12. MapReduce剥洋葱
  13. MAC Book Pro 使用 libmodbus
  14. 关于字符串的输入几种方法
  15. java及vue实现获取电脑打印机及打印功能
  16. Dubbo官方入门实例
  17. Error reading Prometheus: An error occurred within the plugin
  18. 如何提高友盟推送的消息到达率
  19. java之SimpleDateFormat日期格式化
  20. (转)用宏获取函数名

热门文章

  1. pydicom数据的读取
  2. 2021-2027全球与中国成人助听器市场现状及未来发展趋势
  3. 购买域名之后要怎么用
  4. 计算机软考英语题翻译,软考专业英语真题、译文及答案.docx
  5. 时间日期与时间戳转换(Linux C)
  6. 情人节程序员用HTML网页表白【做我女朋友】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript
  7. java下载文件到默认浏览器路径
  8. Leetcode典型题解答和分析、归纳和汇总——T155(最小栈)
  9. WebSphere MQ ibm[转]
  10. 2020 年天津理工大学研究生招生考试 数据结构部分