Direct3D 9) (设备类型和顶点处理要求
顶点处理操作(包括转换和照明)的性能在很大程度上取决于顶点缓冲区在内存中的位置以及正在使用哪种类型的呈现设备。 应用程序在创建顶点缓冲区时控制这些缓冲区的内存分配。 设置D3DPOOL_SYSTEMMEM内存标志时,在系统内存中创建顶点缓冲区。 使用D3DPOOL_DEFAULT内存标志时,设备驱动程序将确定为顶点缓冲区分配内存的最佳位置,通常称为驱动程序最佳内存。 驱动程序最佳内存可以是本地视频内存、非本地视频内存或系统内存。
使用 IDirect3DDevice9::CreateVertexBuffer 设置D3DUSAGE_SOFTWAREPROCESSING常量可对顶点缓冲区数据进行软件顶点处理。 在混合模式下,软件顶点处理需要此标志。 标志不能用于硬件顶点处理模式。 与软件顶点处理一起使用的顶点缓冲区包括:
- IDirect3DDevice9::P rocessVertices 的所有输入流。
- IDirect3DDevice9::D rawPrimitive 和 IDirect3DDevice9::D rawIndexedPrimitive 的所有输入流。
用于确定顶点缓冲区的内存位置(系统或驱动程序最佳位置)的原因与纹理的内存位置相同。 当在驱动程序最佳内存中分配顶点缓冲区时,硬件中的顶点处理(包括转换和照明)效果最佳,而软件顶点处理最适合在系统内存中分配的顶点缓冲区。 对于纹理,当纹理在驱动程序最佳内存中分配时,硬件光栅化效果最佳,而软件光栅化最适合系统内存纹理。
Microsoft Direct3D 9 支持独立处理顶点,而无需使用 IDirect3DDevice9::P rocessVertices 方法呈现任何基元。 此独立顶点处理始终在主机处理器上的软件中执行。 因此,必须使用 D3DUSAGE_SOFTWAREPROCESSING 标志创建用作 IDirect3DDevice9::SetStreamSource 集的源的顶点缓冲区。 使用软件顶点处理时, IDirect3DDevice9::P rocessVertices 提供的功能与 IDirect3DDevice9::D rawPrimitive 和 IDirect3DDevice9::D rawIndexedPrimitive 方法提供的功能相同。
如果应用程序执行其自己的顶点处理并将转换、点亮和剪裁的顶点传递给呈现方法,则应用程序可以直接将顶点写入驱动程序最佳内存中分配的顶点缓冲区。 这种技术可以避免后来进行冗余的复制操作。 请注意,如果应用程序从顶点缓冲区读回数据,此方法将不起作用,因为主机从驱动程序最佳内存执行的读取操作可能非常慢。 因此,如果应用程序需要在处理过程中读取数据或以不定期方式将数据写入缓冲区,则系统内存顶点缓冲区是更好的选择。
通过将未转换的顶点传递到顶点缓冲区呈现方法) (Direct3D 顶点处理功能时,可以根据设备类型和设备创建标志在硬件或软件中进行处理。 建议在池D3DPOOL_DEFAULT分配顶点缓冲区,以便在几乎所有情况下都能获得最佳性能。 当设备使用硬件顶点处理时,可以根据标志D3DUSAGE_DYNAMIC和D3DUSAGE_WRITEONLY完成一些额外的优化。 有关使用这些标志的详细信息,请参阅 IDirect3DDevice9::CreateVertexBuffer。
相关主题