【文件属性】:
文件名称:将会显示深蓝色-万历十五年。万历十五年
文件大小:5.06MB
文件格式:PDF
更新时间:2021-06-09 16:06:22
shader
用于平滑动画的双缓存等的渲染。本章焦点是学习 Direct3D 的设置。如果执行这段代码,清单 2.11 将会显示深蓝色
的背景。
清单 2.11:清除渲染目标和显示新的渲染场景。
float clearColor[4] = { 0.0f, 0.0f, 0.25f, 1.0f };
d3dContext_->ClearRenderTargetView( backBufferTarget_, clearColor );
swapChain_->Present( 0, 0 );
清理 Cleaning Up
任何 Direct3D 程序的最后一件事情是清理并且释放你所创建的对象。例如在程序开始时,你创建了一个 Direct3D
设备,一个 D3D 渲染环境,一个交换链,以及一个渲染目标视图,当程序结束时,你必须释放这些对象将资源归还
系统进行再利用。COM 对象持有一个引用计数,告诉系统什么时候将它从内存中删除是安全的。通过使用 Release
函数,将会减少对象的引用数,当引用计数为 0 时,系统将对象删除以便回收再利用。
释放 D3D 对象的一个例子见于清单 2.12。在清单中首先检查对象确保不为 NULL,再对它们调用 Release 函数。
以它们所创建的逆序释放对象是一个好的主义。
清单 2.12:释放所创建的 Direct3D 11 对象。
if( backBufferTarget_ ) backBufferTarget_->Release( );
if( swapChain_ ) swapChain_->Release( );
if( d3dContext_ ) d3dContext_->Release( );
if( d3dDevice_ ) d3dDevice_->Release( );
(小提示:在对象调用 Release 函数之前总是检查确保对象非 NULL,可以减少由于无效指针导致你的游戏由于未
定义行为所产生的崩溃。)
格式 Formats
有时你会被要求提供具体的 DXGI 格式。不同格式用于描述不同的事物,比如描述图像的布局,每一颜色使用
的 bits 数,或者对于顶点缓存(第三章)的顶点布局。最常见的是,DXGI 格式用于描述交换链中的缓存布局。DXGI 格
式不是具体的某一类型的数据,只是描述它们是什么结构。
一个 DXGI 格式的例子是,DXGI_FORMAT_R8G8B8A8_UNORM 用于描述数据对于 RGBA 的每一部分用 8bits 来存
储。当定义顶点,使用 DXGI_FORMAT_R32G32B32_FLOAT 格式时,将对于三个部分都用 32bits 来存储。尽管格式可
以是 RGB,它只是描述数据的布局,而不管数据用于何处。
有时你可以看到对于每部分有相同的比特数但是后缀不同的格式。例如 DXGI_FORMAT_R32G32B32A32_FLOAT
和 DXGI_FORMAT_R32G32B32A32_UINT,这表示它们描述的对象的每一部分使用两种格式都使用相同数量的 bit,但
是包含这些 bit 的数据类型不同。这里考虑全部类型的格式。
对于没有声明类型的对象可以用无类型的格式。使用此种格式表明对象的每一部分使用的 bits 数量而不关心所
包含的数据类型,例如 DXGI_FORMAT_R32G32B32A32_TYPELESS 格式。公共格式列表见于表 2.1 中。
表 2.1:Direct3D 公共格式
格式 描述
DXGI_FORMAT_R32G32B32A32_TYPELESS 组成无类型 RGBA 分量的 128 位格式
DXGI_FORMAT_R32G32B32A32_FLOAT 浮点类型 RGBA 分量的 128 位格式
DXGI_FORMAT_R32G32B32A32_UINT 无符号整型 RGBA 分量的 128 位格式
DXGI_FORMAT_R32G32B32A32_SINT 有符号整型 RGBA 分量的 128 位格式
DXGI_FORMAT_R8G8B8A8_TYPELESS 组成无类型 RGBA 分量的 32 位格式
DXGI_FORMAT_R8G8B8A8_UINT 无符号整型 RGBA 分量的 32 位格式
DXGI_FORMAT_R8G8B8A8_SINT 有符号整型 RGBA 分量的 32 位格式