转换 Direct3D 固定函数状态
如果用户模式显示驱动程序支持每种着色器类型 2.0 或更高版本,Microsoft Direct3D 运行时会将 Direct3D 固定函数状态转换为顶点或像素着色器版本 2.0。 但是,运行时不会转换着色器版本。 例如,如果应用程序使用顶点或像素着色器版本 1.1,则版本 1.1 将不转换传递给用户模式显示驱动程序,而不管驱动程序是否支持着色器版本 2.0 或更高版本。 灵活的顶点格式 (FVF) 代码用于固定函数处理。
DirectX 版本的转换器功能
固定函数顶点和像素着色器转换器的工作原理取决于所使用的 Microsoft DirectX 版本:
DirectX 9.0
固定函数顶点和像素着色器转换器可与 Windows Vista 显示驱动程序模型配合使用。
默认情况下,转换器处于启用状态。
使用固定函数顶点或像素着色器转换器时,将禁用纯设备。 当应用程序请求纯设备时,Direct3D 运行时会创建 HAL 设备。
运行时支持混合顶点处理。
软件顶点处理始终使用固定函数顶点着色器转换器。
当驱动程序支持顶点着色器 2.0 或更高版本时,硬件顶点处理使用固定函数顶点着色器转换器。
当驱动程序支持像素着色器版本 2.0 或更高版本时,硬件顶点处理使用固定函数像素着色器转换器。
在混合顶点处理模式下,当为硬件启用固定函数顶点着色器转换器时,浮点常量数将设置为硬件可以支持的内容。
DirectX 8.0 及更早版本
固定函数顶点和像素着色器转换器只能与 Windows Vista 显示驱动程序模型配合使用。
默认情况下,转换器处于启用状态。
软件顶点处理不支持固定函数顶点着色器转换器。
当驱动程序支持顶点着色器 2.0 或更高版本时,硬件顶点处理使用固定函数顶点着色器转换器。
当驱动程序支持像素着色器版本 2.0 或更高版本时,硬件顶点处理使用固定函数像素着色器转换器。
注意 对于 DirectX 8.0 之前的 DirectX 版本,固定函数到着色器映射代码是在Ddraw.dll中实现 的 。
未使用的User-Mode显示驱动程序函数
启用固定函数顶点着色器转换器时,Direct3D 运行时不会调用以下 用户模式显示驱动程序函数 :
未使用的呈现状态
以下呈现状态不会由 Direct3D 运行时 (传递,如果错误传递,驱动程序) 启用固定函数顶点着色器转换器时可以忽略这些状态:
D3DRS_VERTEXBLEND
D3DRS_INDEXEDVERTEXBLENDENABLE
D3DRS_TWEENFACTOR
D3DRS_FOGVERTEXMODE
D3DRS_LIGHTING
D3DRS_AMBIENT
D3DRS_COLORVERTEX
D3DRS_LOCALVIEWER
D3DRS_DIFFUSEMATERIALSOURCE
D3DRS_SPECULARMATERIALSOURCE
D3DRS_AMBIENTMATERIALSOURCE
D3DRS_EMISSIVEMATERIALSOURCE
D3DRS_POINTSCALEENABLE
D3DRS_POINTSCALE_A
D3DRS_POINTSCALE_B
D3DRS_POINTSCALE_C
D3DRS_NORMALIZENORMALS
忽略的纹理阶段状态
Direct3D 运行时将所有纹理阶段状态传递给驱动程序。 启用固定函数像素着色器转换器时,驱动程序应忽略以下纹理阶段状态:
D3DTSS_COLOROP
D3DTSS_COLORARG1
D3DTSS_COLORARG2
D3DTSS_ALPHAOP
D3DTSS_ALPHAARG1
D3DTSS_ALPHAARG2
D3DTSS_BUMPENVMAT00
D3DTSS_BUMPENVMAT01
D3DTSS_BUMPENVMAT10
D3DTSS_BUMPENVMAT11
D3DTSS_BUMPENVLSCALE
D3DTSS_BUMPENVLOFFSET
D3DTSS_COLORARG0
D3DTSS_ALPHAARG0
D3DTSS_RESULTARG
D3DTSS_CONSTANT