找回密码
 立即注册
首页 业界区 科技 DX12 VS2022环境搭建踩坑

DX12 VS2022环境搭建踩坑

尚腱埂 7 天前
在2025年基本上不管Unity还是UE都至少推荐装VS2022的版本了,但龙书《DirectX 12 3D 游戏开发实战》的代码库还默认用的是VS2015,所以项目配置多少有些不一样,这里记录一下踩的几个坑。

  • 编译遇到C2102等报错:设置“符合模式”为“否”
  • 无法解析的外部符号main:设置“子系统”为“窗口”
如果你是下载的国内中文版本的配套资源,直接打开里面的MyD3D12Project,可能也就不存在这些问题。
国内中文版配套资源下载地址:异步社区 - DirectX 12 3D 游戏开发实战
搭建工程

首先照常拉取随书附带的代码仓库:d3dcoder/d3d12book
确保Visual Studio中已经安装好了C++项目的前置内容(通过Visual Studio Installer修改工作负荷):
1.webp

打开VS2022,新建C++的空项目,项目目录放置在d3d12book下的一个新建文件夹下,例如d3d12book/MyDemos/HelloDX12,注意需要勾选“将解决方案和项目放在同一目录中”:
2.webp

之后按照书上的步骤,将d3d12book\Chapter 6 Drawing in Direct3D\Box下的:

  • BoxApp.cpp代码
  • Shaders目录
拷贝一份到工程文件夹d3d12book\MyDemos\HelloDX12下:
3.webp

然后,在VS的解决方案资源管理器工具栏下,右键HelloDX12(或你写的工程名),选择“添加/现有项”,将BoxApp.cpp添加到项目中:
4.webp

再进行一次“添加/现有项”,这次将d3d12book\Common下的所有.h和.cpp文件都添加到工程(不需要拷贝代码,仅添加):
5.webp

这里如果直接运行,VS编译结束后会向你抱怨一些问题:
6.webp

设置“符合模式”为“否”

这里的报错主要是因为VS2022工程默认开启“符合模式”,对C++语言检查更加严格,旧代码一些写法在新标准下无法通过编译验证,我们主要做DX12开发练习,没有必要去重新全部修改代码,关掉该模式即可。
右键解决方案“HelloDX12”(注意不要右键到最上面那个),选择最下方的“属性”,找到“配置属性 -> C/C++ -> 语言”,选择“符合模式”为“否(/permissive)”,更改后点击“应用”:
7.webp

重试编译后,可以看到之前的报错内容都不会再提示,但又出现了新的问题:
8.webp

设置“子系统”为“窗口”

这里的原因是VS2022新建的空项目,默认是使用的控制台程序模式,程序会在代码集中寻找int main(void)函数作为入口函数,而我们程序明显不是控制台,而是一个窗口程序(毕竟是渲染程序),可以在BoxApp.cpp中找到窗口程序的入口函数WinMain:
  1. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance,
  2.                    PSTR cmdLine, int showCmd)
  3. {
  4.     // codes
  5. }
复制代码
同样的,右键打开解决方案属性,找到“配置属性 -> 连接器 -> 系统”下的“子系统”,将选项修改为“窗口(/SUBSYSTEM:WINDOWS)”:
9.webp

大功告成!

再次尝试编译运行,就能看到Chapter 6的Box顶点着色实例程序了,左键控制Box旋转,右键控制摄像机离Box的距离。
10.webp


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册