顶点缓冲区 (Direct3D 9)

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

顶点缓冲区的灵活性使它们成为重用转换后的几何图形的理想暂存点。 可以创建单个顶点缓冲区、转换、光线和剪辑其中顶点,并根据需要多次在场景中呈现模型,而无需重新转换它,即使呈现状态发生交错更改。 当呈现使用多个纹理的模型时,这非常有用:几何图形仅转换一次,然后可以根据需要呈现其部分,并交错所需的纹理更改。 处理顶点后进行的呈现状态更改将在下次处理顶点时生效。

描述

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

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

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

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

内存池和使用情况

可以使用 IDirect3DDevice9::CreateVertexBuffer 方法创建顶点缓冲区,该方法采用池(内存类)和使用参数。 IDirect3DDevice9::CreateVertexBuffer 也可以使用指定的 FVF 代码创建,以便在固定函数顶点处理中或作为进程顶点的输出。 有关详细信息,请参阅 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)