Home > 未分类 > 认识D3D10资源

认识D3D10资源

资源类型(Direct3D 10)

 

Direct3D(10)渲染管线中用到的所有资源可分为两类:缓冲和纹理。原始数据(元素)的一个集合称为缓冲;纹素(纹理元素)的集合称为纹理。

 

有两种方式来完整定义资源布局(存储映像):

l  固定类型:在创建资源时明确指定资源类型。

l  无类型:在将资源绑定到管线时完整指定其类型。

 

缓冲资源:

缓冲是一系列具确定类型的数据集合;缓冲内由元素组成。每个元素为1~4元组。例如:分组的数值(如R8A8G8B8),单一的8位整数,32位浮点数等。这些数据类型用于存储诸如顶点缓冲中的位置向量、法向量、纹理坐标,以及索引缓冲中的索引值,甚至设备状态等等。

缓冲被创建为没有结构的资源。因此,缓冲不能够包含Mip级别,读取时不能使用过滤,不能够多重采样。

 

缓冲类型:

l  顶点缓冲

l  索引缓冲

l  常量缓冲

 

顶点缓冲:

缓冲为元素的集合,顶点缓冲包含的元素为逐顶点数据。一个最简单的例子是含有一种数据类型如位置数据的顶点缓冲。形如:

 

1:包含位置信息的顶点缓冲

 

在更多情况下顶点缓冲含有能够充分描述3D顶点的所有数据。例如含有位置、法向量以及纹理坐标的顶点缓冲。这些数据常常以逐顶点元素集合的形式存在:

 

2:包含位置、法向量和纹理坐标数据的顶点缓冲

该顶点缓冲含有8个逐顶点数据;每个顶点存储了3个元素(位置、法向量、纹理坐标)。位置和法向量均分别使用332-比特浮点型数来表示(DXGI_FORMAT_R32G32B32_FLOAT),而纹理坐标使用两个32-比特浮点数表示(DXGI_FORMAT_R32G32_FLOAT)。

为了访问顶点缓冲中的数据,需要知道希望访问的顶点,以及下列缓冲参数:

l  偏移量:从缓冲开始处到需访问的第一个顶点的字节数。该数值提交到ID3D10Device::IASetVertexBuffers方法。

l  基础顶点位置:从上述设定的偏移量后第一个顶点到调用特定绘制函数时所使用的第一个顶点的字节数。

 

在建立顶点缓冲之前,需要通过调用ID3D10Device::CreateInputLayout方法建立一个输入布局对象(Input-layout object),来定义顶点缓冲布局。一旦创建Input-layout object,调用ID3DDevice::IASetInputLayout将它绑定到输入集成阶段。

使用ID3D10Device::CreateBuffer创建顶点缓冲。

 

索引缓冲:

索引缓冲含有16位或32位整型索引构成的连续集合;每个索引用于表示顶点缓冲中的一个顶点。使用索引缓冲一起将一个或多个顶点缓冲提交到IA阶段称为Indexing。索引缓冲形式如下:

 

3:索引缓冲示意

 

索引缓冲中序列化索引值由下列参数定位:

l  偏移量:从缓冲起点到所设置第一个索引的字节数,该参数提交到ID3D10Device::IASetIndexBuffer方法。

l  索引起始位置:从偏移量到特定绘制函数调用时所用第一个顶点的字节数。

l  索引数量:渲染所用索引数量。

 

同样使用ID3D10Device::Createbuffer创建索引缓冲。

通过使用条带分割索引符,可使一个索引缓冲索引多个线段或三角条带。分隔符即为索引值所能达到的最大值(对16位索引为0xffff32位为0xffffffff)。

 

4:条带分割索引符

 

常量缓冲:

Direct3D10引入一种新的缓冲用于提供着色器常量,称为着色器常量缓冲,或简称常量缓冲。从概念上讲它仅类似于单元素顶点缓冲。

 

5:着色器常量缓冲示意

 

每个元素存储一个14元组常量,由所存储数据类型决定。创建着色器常量缓冲的方法为调用ID3D10Device::CreateBuffer,并指定常量缓冲绑定标识D3D10_BIND_CONSTANT_BUFFER

使用ID3D10Device::GSSetConstantBuffersID3D10Device::PSSetConstantBuffers,ID3D10Device::VSSetConstantBuffers将常量缓冲绑定到管线。

Shader中使用内建函数load读取常量缓冲。每个着色器阶段最多允许15个常量缓冲,每个缓冲最多存储4096个常量。

常量缓冲还用于存储流输出阶段(Stream-output)的结果。

 

Advertisements
Categories: 未分类
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: