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 (索引缓冲区)