Giter VIP home page Giter VIP logo

mkxjun / directx11-with-windows-sdk Goto Github PK

View Code? Open in Web Editor NEW
1.4K 45.0 353.0 388.49 MB

现代DX11系列教程:使用Windows SDK(C++)开发Direct3D 11.x

Home Page: https://directx11.tech

License: MIT License

C++ 80.02% C 11.16% HLSL 1.84% CMake 2.10% Batchfile 0.05% Dockerfile 0.01% Python 2.36% JavaScript 0.02% Shell 0.10% Makefile 0.08% M4 0.08% HTML 0.80% Ada 0.35% Assembly 0.54% Pascal 0.22% C# 0.21% DIGITAL Command Language 0.01% Roff 0.01% Inno Setup 0.04% Rust 0.03%
directx11 windows-sdk dx11 visual-studio visual-studio-code cmake win7-11 imgui assimp

directx11-with-windows-sdk's Introduction

DirectX11 With Windows SDK教程演示项目

现代DX11系列教程:使用Windows SDK(C++)开发Direct3D 11.x

000

注意:

  • 2.x.x和1.x.x的主要区别在于19章之后的代码有大幅修改。
  • 若更新项目后渲染显示有问题,尝试删除Shaders/Cache文件夹

博客教程

CSDN目前停更

QQ群交流

QQ群号:727623616

欢迎大家来交流,以及项目有什么问题也可以在这里提出。

CMake构建项目

命令行构建

在Win10系统下,若安装cmake的时候添加了环境变量,则可以直接运行build_msvc.cmd来生成项目并构建项目,完成后打开build文件夹可以找到解决方案,然后切换到Release x64就可以直接运行。

GUI构建

使用cmake-gui.exe填写源码路径和构建路径,然后只需要关注下面一个变量:

004

  • WIN_SYSTEM_SUPPORT:默认关闭,仅Win7用户需要勾选

然后就可以点Generate生成项目,生成的解决方案位于build文件夹内,或者点Open Project打开

打开教程项目

打开CMake生成的项目,建议切换成Release x64。若要指定运行哪个项目,需要对项目右键-设为启动项。然后就可以生成并运行了

注意:

  1. 目前教程仅支持VS2017(或平台工具集v141)及更高版本!
  2. 由于Assimp不支持Win32(x86),本项目仅支持64位系统
  3. Win7打开需要安装Service Pack 1以及KB2670838补丁

项目概况

语言:

  • C++17
  • HLSL Shader Model 5.0

目前项目使用了下述代码库或文件:

作为教程演示项目,这里并不是以实现一个软引擎为目标。建议读者在跟随教程学习的同时要动手实践。

打包教程示例程序

以项目31的程序(Release x64)为例,其文件结构应为:

Project 31
|----Model/                    (挑出项目用到的模型)
|----Texture/                  (挑出项目用到的纹理)
|----31 Shadow Mapping/        (此处命名自由发挥,比如bin)
     |----31 Shadow Mapping.exe
     |----imgui.ini
     |----assimp-vc14*-mt.dll  (从build/Assimp/bin/Release(或Debug)复制一份)
     |----Shaders/

支持/赞赏博主

博客和项目维护不易,如果本系列教程对您有所帮助,希望能够扫码支持一下博主。

使用Direct3D 11.x(Windows SDK)编写的魔方

点此查看

最近更新

  • 2023/12/12 Ver2.38.5
    • 修复项目39的模型读取问题

历史更新记录

directx11-with-windows-sdk's People

Contributors

hebohang avatar mkxjun avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

directx11-with-windows-sdk's Issues

Win10中交换链效果的替换建议警告

换成VS2019后,以Debug模式打开教程项目,在调试输出窗口会看到以下内容:

DXGI WARNING: IDXGIFactory::CreateSwapChain: Blt-model swap effects (DXGI_SWAP_EFFECT_DISCARD and DXGI_SWAP_EFFECT_SEQUENTIAL) are legacy swap effects that are predominantly superceded by their flip-model counterparts (DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL and DXGI_SWAP_EFFECT_FLIP_DISCARD). Please consider updating your application to leverage flip-model swap effects to benefit from modern presentation enhancements. More information is available at http://aka.ms/dxgiflipmodel. [ MISCELLANEOUS WARNING #294: ]

更换VS2019后出现大量编译警告

由于VS2019新增了 C++ Core Guidelines 检查程序,有了更加细致的语法检查,现在有以下Warning:

  1. 部分类成员未在构造函数初始化(C26495)
  2. 算术溢出(C26450)
  3. 移动拷贝、移动赋值运算符可以使用noexcept(C26439)
  4. WinMain的批注不一致:此实例无批注。(C28251)

....还有很多暂时不列举

目前基本上已经解决,可能还有少数我还没发现的Warning...

Cpp端反射生成CBuffer可能存在内存问题

可能存在bug的代码段 EffectHelper.cpp Lines 646~651

某一个Effect中存在两个Shader:Shader1和Shader2
有一个CBuffer内有若干个成员变量,但Shader1只使用了其中的某几个,C++段反射生成的Buffer的buffer size大小并不是完整的CBuffer的大小。(我的情况:CBuffer完整应是576bytes,但Shader1反射生成的Buffer只有560bytes)

而Shader2使用了完整的CBuffer,反射生成的Buffer大小为完整CBuffer大小(我的情况:Shader2反射生成的Buffer为576bytes)。但是因为在m_CBuffers中已经存在BindPoint相同的Buffer,所以Shader2反射生成的Buffer并没有覆盖到m_CBuffers中。

最终我的情况:渲染是没有问题的,但在关闭程序,析构CBufferData中的cbufferData数组(在m_CBuffers[x]中)时,会报内存越界的错误 (error: crt detected that the application wrote to memory after end of heap buffer)。

我的解决方法:

Lines 647
if (it == m_CBuffers.end()) 改成 if (it == m_CBuffers.end() || it->second.cbufferData.size() < cbDesc.Size)

Lines 649
m_CBuffers.emplace(...)
改成
if (!m_CBuffers.emplace(...).second) { m_CBuffers[sibDesc.BindPoint] = CBufferData(...); }

这样改的话对于目前我的项目来说是没有报内存越界的错了。
因为我的水平有限,这样改目前还不知道会不会引起其他问题。
如果有,请回复告知我一下,谢谢。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.