Direct3D 9) (顶点缓冲区

IDirect3DVertexBuffer9 接口表示的顶点缓冲区是包含顶点数据的内存缓冲区。 顶点缓冲区可以包含任何可通过使用 IDirect3DDevice9 接口中的呈现方法呈现的顶点类型(转换或未转换、亮起或未亮起)。 你可以处理顶点缓冲区中的顶点以执行转换、照明、生成剪裁标志等操作。 转换始终会执行。

顶点缓冲区的灵活性使其成为重复使用已转换几何图形的理想暂存点。 你可以创建单顶点缓冲区,对其中的顶点进行转换、照明和剪裁,以及将场景中的模型呈现所需的次数而不对其进行再转换,甚至在内插的呈现状态更改时也是如此。 当呈现使用多个纹理的模型时,这很有用:几何图形只转换一次,然后它的各个部分可以呈现所需的次数,并与所需的纹理更改交错。 在处理顶点后进行的呈现状态更改在下次处理顶点时生效。

说明

对顶点缓冲区的功能进行描述:如果它只能存在于系统内存中,则它仅用于写入操作,以及它可以包含的顶点的类型和数量。 所有这些特征都保存在 D3DVERTEXBUFFER_DESC 结构中。

Format 成员设置为 D3DFMT_VERTEXDATA 以指示这是顶点缓冲区。 Type 标识顶点缓冲区的资源类型。 Usage 结构成员包含常规功能标志。 D3DUSAGE_SOFTWAREPROCESSING标志指示顶点缓冲区将用于软件顶点处理。 Usage 中存在D3DUSAGE_WRITEONLY标志指示顶点缓冲区内存仅用于写入操作。 这样,驱动程序即可将顶点数据置于最佳内存位置,以实现快速处理和呈现。 如果未使用 D3DUSAGE_WRITEONLY 标志,则驱动程序不太可能将数据置于读取操作效率低下的位置。 这会牺牲一些处理和呈现速度。 如果未指定此标志,则假定应用程序对顶点缓冲区中的数据执行读取和写入操作。

池指定为顶点缓冲区分配的内存类。 D3DPOOL_SYSTEMMEM标志指示系统在系统内存中创建了顶点缓冲区。

Size 成员存储顶点缓冲区数据的大小(以字节为单位)。 FVF 成员包含标识缓冲区包含的顶点类型的 D3DFVF 的组合。

内存池和使用情况

可以使用 IDirect3DDevice9::CreateVertexBuffer 方法创建顶点缓冲区,该方法将池 (内存类) 和用法参数。 还可以使用指定的 FVF 代码创建 IDirect3DDevice9::CreateVertexBuffer,以用于固定函数顶点处理或作为进程顶点的输出。 有关详细信息,请参阅 FVF 顶点缓冲区 (Direct3D 9)

当为该设备启用混合模式或软件顶点处理 (D3DCREATE_MIXED_VERTEXPROCESSING/D3DCREATE_SOFTWARE_VERTEXPROCESSING) 时,可以设置D3DUSAGE_SOFTWAREPROCESSING标志。 必须为混合模式下的软件顶点处理配合使用的缓冲区设置D3DUSAGE_SOFTWAREPROCESSING,但在混合模式下使用硬件顶点处理时,不应设置该缓冲区以获得最佳性能。 (D3DCREATE_HARDWARE_VERTEXPROCESSING) 。 但是,当将单个缓冲区用于硬件和软件顶点处理时,设置D3DUSAGE_SOFTWAREPROCESSING是唯一的选择。 混合设备以及软件设备允许D3DUSAGE_SOFTWAREPROCESSING。

即使顶点处理是在硬件中完成的,也可以通过指定D3DPOOL_SYSTEMMEM将顶点和索引缓冲区强制进入系统内存。 当驱动程序将这些缓冲区放入 AGP 内存时,这是一种避免页面锁定内存过大的方法。

本部分介绍在 Direct3D 应用程序中了解和使用顶点缓冲区所需的概念。 信息分为以下部分。

Direct3D 资源

从顶点缓冲区和索引缓冲区呈现 (Direct3D 9)

(Direct3D 9) 索引缓冲区