Registro flotante constante (referencia de VS de HLSL)

Registro de entrada del sombreador de vértices para una constante de punto flotante de cuatro componentes. Establezca un registro constante con def - vs o SetVertexShaderConstantF.

El archivo de registro constante es de solo lectura desde la perspectiva del sombreador de vértices. Cualquier instrucción única solo puede tener acceso a un registro constante. Sin embargo, cada origen de esa instrucción puede desenlazarse de forma independiente y negar ese vector tal y como se lee.

El comportamiento de las constantes de sombreador ha cambiado entre Direct3D 8 y Direct3D 9.

  • Para Direct3D 9, las constantes establecidas con defx asignan valores al espacio constante del sombreador. La duración de una constante declarada con defx solo se limita a la ejecución de ese sombreador. Por el contrario, las constantes establecidas mediante las API SetXXXShaderConstantX inicializan constantes en el espacio global. Las constantes del espacio global no se copian en el espacio local (visible para el sombreador) hasta que se llama a SetxxxShaderConstants.
  • Para Direct3D 8, las constantes establecidas con defx o las API asignan valores al espacio constante del sombreador. Cada vez que se ejecuta el sombreador, el sombreador actual usa las constantes independientemente de la técnica utilizada para establecerlas.

Un registro constante se designa como absoluto o relativo:

c[n]           ; absolute
c[a0.x + n]    ; relative - supported only in version 1_1

El registro constante se puede leer, por lo tanto, mediante un índice absoluto o con un índice relativo de un registro de direcciones. Las lecturas de los registros fuera del intervalo devuelven (0.0, 0.0, 0.0, 0.0).

Ejemplos

Este es un ejemplo que declara dos constantes de punto flotante dentro de un sombreador.

def c40, 0.0f,0.0f,0.0f,0.0f;

Estas constantes se cargan cada vez que se llama a SetVertexShader .

Este es un ejemplo de uso de la API.

    // Set up the vertex shader constants.
    {
        D3DXMATRIXA16 mat;
        D3DXMatrixMultiply( &mat, &m_matView, &m_matProj );
        D3DXMatrixTranspose( &mat, &mat );

        D3DXVECTOR4 vA( sinf(m_fTime)*15.0f, 0.0f, 0.5f, 1.0f );
        D3DXVECTOR4 vD( D3DX_PI, 1.0f/(2.0f*D3DX_PI), 2.0f*D3DX_PI, 0.05f );

        // Taylor series coefficients for sin and cos.
        D3DXVECTOR4 vSin( 1.0f, -1.0f/6.0f, 1.0f/120.0f, -1.0f/5040.0f );
        D3DXVECTOR4 vCos( 1.0f, -1.0f/2.0f, 1.0f/ 24.0f, -1.0f/ 720.0f );

        m_pd3dDevice->SetVertexShaderConstantF(  0, (float*)&mat,  4 );
        m_pd3dDevice->SetVertexShaderConstantF(  4, (float*)&vA,   1 );
        m_pd3dDevice->SetVertexShaderConstantF(  7, (float*)&vD,   1 );
        m_pd3dDevice->SetVertexShaderConstantF( 10, (float*)&vSin, 1 );
        m_pd3dDevice->SetVertexShaderConstantF( 11, (float*)&vCos, 1 );
    }

Si va a establecer valores constantes con la API, no se requiere ninguna declaración del sombreador.

Versiones del sombreador de vértices 1_1 2_0 2_sw 2_x 3_0 3_sw
Registro constante x x x x x x

 

Registros del sombreador de vértices