转换 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