Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Registro de entrada del sombreador de vértices para una constante de punto flotante de cuatro componentes. Establezca un registro constante con def: frente a o SetVertexShaderConstantF.
El archivo de registro constante es de solo lectura desde la perspectiva del sombreador de vértices. Cualquier instrucción única puede acceder solo a un registro constante. Sin embargo, cada origen de esa instrucción puede desenredarse de forma independiente y negar ese vector a medida que se lee.
El comportamiento de las constantes del 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 se limita únicamente 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 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 mediante 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 establece 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 |
Temas relacionados