隔离顶点着色器的声明和代码

在 DirectX 9.0 中,创建顶点着色器的声明和代码不再绑定在一起。 支持顶点着色器的设备的 DirectX 9.0 版本驱动程序必须处理声明和代码对象的单独创建和管理。 但是,此 DirectX 9.0 驱动程序仍必须能够管理将声明和代码组合在一起的顶点着色器对象,因为 DirectX 8.0 运行时可能会请求创建此类顶点着色器对象。 有关详细信息,请参阅 顶点着色器

DirectX 9.0 运行时将单独的句柄池中的句柄分配给声明对象和代码对象。 DirectX 9.0 驱动程序必须将这些句柄存储在单独的数组中。 与 DirectX 8.0 中的顶点着色器句柄空间一样,DirectX 9.0 使用灵活的顶点格式共享顶点着色器声明句柄空间, (FVF) 代码。 将句柄的位设置为零表示顶点着色器声明,否则指示 FVF 代码。 有关详细信息,请参阅参考光栅器 (refrast.cpp 示例代码) 。

DirectX 9.0 驱动程序在其 D3dDrawPrimitives2 函数中处理D3DDP2OP_CREATEVERTEXSHADERDECL操作代码时,会收到顶点着色器声明。 D3DHAL_DP2CREATEVERTEXSHADERDECL结构和 D3DVERTEXELEMENT9 结构的数组,这些结构定义构成着色器声明的顶点元素,遵循命令流中的操作代码。 如果实现 DirectX 9.0 驱动程序以处理着色器声明的顶点元素,则必须支持顶点数据的所有可能用途。 也就是说,它必须支持所有 D3DDECLUSAGE 类型以及这些类型的多个含义 (usage-index 值) 。 有关 D3DVERTEXELEMENT9 和 D3DDECLUSAGE 的详细信息,请参阅最新的 DirectX SDK 文档。

DirectX 9.0 驱动程序在处理D3DDP2OP_CREATEVERTEXSHADERFUNC操作代码时接收顶点着色器代码。 D3DHAL_DP2CREATEVERTEXSHADERFUNC 结构和顶点着色器代码遵循命令流中的操作代码。 有关单个着色器代码的格式以及构成每个着色器代码的标记的详细信息,请参阅 Direct3D 驱动程序着色器代码

DirectX 9.0 驱动程序处理D3DDP2OP_SETVERTEXSHADERDECL并D3DDP2OP_SETVERTEXSHADERFUNC操作代码,以使特定顶点着色器声明和代码在顶点着色器汇编程序中是最新的。 驱动程序处理D3DDP2OP_DELETEVERTEXSHADERDECL并D3DDP2OP_DELETEVERTEXSHADERFUNC操作代码,以从顶点着色器汇编程序中删除这些顶点着色器声明和代码。 对于其中每个操作代码,命令流中都遵循 D3DHAL_DP2VERTEXSHADER 结构。 此结构仅包含一个成员,该成员标识要设置或删除的声明或代码的句柄。