DX12知识点——0,预备知识
关键词:Direct3D 12概述,组件对象模型(COM,Component Object Model),纹理格式,交换链和页面翻转Direct3D 12概述:
通过Direct3D这种底层图形应用程序编程接口(Api),即可在应用程序中对图形处理器(GPU)进行控制和编程。例如向GPU提交一个清除某渲染目标(如清屏)的命令,可以调用Direct3D中的ID3D12GraphicsCommandList::ClearRenderTargetView方法。Direct3D 12比起11支持了多线程,并且也更偏底层,也更具体化。当然使用起来难度也更高,好处是,性能的提升。
组件对象模型(COM,Component Object Model)
这是一种令DirectX不受编程语言束缚的技术,我们通常视其为一种接口。用C++语言写DX程序时,COM帮我们隐藏了大量底层细节,我们只需知道:要获取指向某COM接口的指针,需借助特定函数或者另一COM接口的方法——而不是用C++语言中的关键字new去创建一个COM接口。另外,COM对象会统计其引用次数;因此在使用完某接口时,我们便应调用它的Release方法,而不是用delete来删除——当COM对象的引用计数为0时,它将自行释放自己所占用的内存。
纹理格式
2D纹理(2D Texture)是一种由数据元素构成的矩阵(可将此“矩阵”看作2D数组)。它的用途之一是存储2D图像数据。这种情况下,纹理中每个纹素存储的都是一个像素的颜色。不过纹理的用途不止这些,法线贴图(normal mapping)的技术,其纹理中每个元素(即纹素)存储的就是一个3D向量而非颜色信息。下面简单举几个DX12中的格式:
1,DXGI_FORMAT_R32G32B32_FLOAT:每个元素由3个32位浮点数分量构成。
2,DXGI_FORMAT_R16G16B16A16_UNORM:每个元素由4个16位分量构成,每个分量都被映射到区间。
……
交换链和页面翻转
我们可以想一下,如果画面是随着每个像素实时呈现的会有什么问题,那就是会造成画面闪烁,为避免这个问题,我们将一帧全屏绘制好的画面存到一种称为后台缓冲区的离屏(off-screen,即不可直接呈现在显示设备上之意)纹理内。这样做便不会觉察出帧的绘制过程。硬件管理的俩种纹理缓冲区:前台缓冲区和后台缓冲区。
前台缓冲区存储的是当前画面上的图像数据,动画的下一帧绘制在后台缓冲区中,当后台缓冲区中的动画帧绘制完成后,前后互换,这种操作叫做呈现(presenting)。
使用俩个缓冲区的情况称为双缓冲,当然也有三重缓冲,不过对一般的应用来说,双重足够了。
页:
[1]