将会显示深蓝色-万历十五年。万历十五年

时间:2024-06-29 09:53:02
【文件属性】:

文件名称:将会显示深蓝色-万历十五年。万历十五年

文件大小:5.06MB

文件格式:PDF

更新时间:2024-06-29 09:53:02

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 位格式


网友评论