d3d12龙书学习之MiniEngine的最小化实现(一)

文章目录MiniEngine介绍项目目的前期准备龙书第四章的实现过程0. 创建win32窗口1. 创建ID3D12Device接口实例2. 创建ID3D12Fence对象,并查询描述符大小3. 检测4x MSAA的支持(这一步骤没有必要性)4. 创建命令队列、命令列表分配器和主命令列表5. 创建交换链6. 创建描述符堆7. 调整后台缓冲区大小,创建渲染目标视图8. 创建深度/模板缓冲区以及视图9....
摘要由CSDN通过智能技术生成

MiniEngine介绍

MiniEngine是Microsoft的一个dx12的核心实现,项目地址:https://github.com/Microsoft/DirectX-Graphics-Samples
可以在MiniEngine的基础上直接开发游戏,MiniEngine实现了很多常用功能:
在这里插入图片描述

项目目的

对于魔力高清单机版来说,选一个简单的引擎是很有必要的。
初步计划的是tiled map地图、3d角色。后期再把地图物件换成3d。
简单调研了几个商业引擎,感觉总有各种各样的不满意。学习成本非常高,所以准备自己实现一套很简单的引擎,只做当前项目需要的功能。

在实现引擎之前,需要打好基础,也就是学习d3d12的龙书。
龙书中的代码结构不太喜欢,这时候看微软的dx12例子,发现了MiniEngine引擎,觉得非常棒。

但学习MiniEngine也比较麻烦,文件非常多。于是准备做拆解。

通过龙书学习,每次只使用MiniEngine种最少的文件来实现当前章节功能,添加中文注释。
相信随着龙书的学习,可以慢慢地把MiniEngine的功能回复回来。也就可以做到吃透MiniEngine代码。

本次学习的项目地址:https://github.com/mversace/DirectX12-MiniEngine-Dragon

前期准备

  1. 本项目采用的是最新的visual studio 2019
  2. 下载微软官方的MiniEngine源码:https://github.com/Microsoft/DirectX-Graphics-Samples/tree/master/MiniEngine
  3. 下载d3d12龙书的源码:https://github.com/d3dcoder/d3d12book

龙书第四章的实现过程

这一章节主要讲的是dx12的初始化。
根据教材本次项目分为如下步骤:

  1. 创建ID3D12Device接口实例
  2. 创建ID3D12Fence对象,并查询描述符大小
  3. 检测4x MSAA的支持(这一步骤没有必要性)
  4. 创建命令队列、命令列表分配器和主命令列表
  5. 创建交换链
  6. 创建描述符堆
  7. 调整后台缓冲区大小,创建渲染目标视图
  8. 创建深度/模板缓冲区以及视图
  9. 设置视口、裁剪矩形

第一次拆解工程,讲的会比较详细,之后的博客对于拆解过程就简单略过。

实际上在此之前,需要先创建一个win32窗口,并做好消息循环。这是很基础的东西,不深入讨论,简单介绍下:

0. 创建win32窗口

先看下MiniEngine的实现,该项目的启动工程在ModelViewer种的ModelViewer_VS15.sln
打开之后在开始找入口函数:
在这里插入图片描述
很容易发现是采用一个宏定义包起来的

CREATE_APPLICATION( ModelViewer )

在GameCore.h中
#define CREATE_APPLICATION( app_class ) \
    MAIN_FUNCTION() \
    { \
        IGameApp* app = new app_class(); \
        GameCore::RunApplication( *app, L#app_class ); \
        delete app; \
        return 0; \
    }

我不喜欢这种宏定义的方式

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值