Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Rejestr wejściowy cieniowania wierzchołków dla czteroskładnikowej stałej zmiennoprzecinkowej. Ustaw stały rejestr przy użyciu def — vs lub SetVertexShaderConstantF.
Plik rejestru stałego jest tylko do odczytu z perspektywy cieniowania wierzchołków. Każda pojedyncza instrukcja może uzyskiwać dostęp tylko do jednego rejestru stałego. Jednak każde źródło w tej instrukcji może niezależnie swizzle i negować ten wektor podczas jego odczytywania.
Zachowanie stałych cieniowania zmieniło się między Direct3D 8 i Direct3D 9.
- W przypadku direct3D 9 stałe ustawione z defx przypisują wartości do przestrzeni stałej cieniowania. Okres istnienia stałej zadeklarowanej z defx jest ograniczony tylko do wykonywania tego cieniowania. Z drugiej strony stałe ustawiane przy użyciu interfejsów API SetXXXShaderConstantX inicjują stałe w przestrzeni globalnej. Stałe w przestrzeni globalnej nie są kopiowane do przestrzeni lokalnej (widocznej dla cieniowania), dopóki nie zostanie wywołana funkcja SetxxxShaderConstants.
- W przypadku direct3D 8 stałe ustawione za pomocą defx lub interfejsów API przypisują wartości do przestrzeni stałej cieniowania. Za każdym razem, gdy cieniator jest wykonywany, stałe są używane przez bieżący moduł cieniowania niezależnie od techniki używanej do ich ustawiania.
Stały rejestr jest wyznaczony jako bezwzględny lub względny:
c[n] ; absolute
c[a0.x + n] ; relative - supported only in version 1_1
Rejestr stały można zatem odczytać przy użyciu indeksu bezwzględnego lub indeksu względnego z rejestru adresowego. Odczyty z rejestrów poza zakresem zwracają (0.0, 0.0, 0.0, 0.0, 0.0).
Przykłady
Oto przykład deklarujący dwie stałe zmiennoprzecinkowe w cieniowaniu.
def c40, 0.0f,0.0f,0.0f,0.0f;
Te stałe są ładowane za każdym razem, gdy jest wywoływana SetVertexShader.
Oto przykład użycia interfejsu 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 );
}
W przypadku ustawiania wartości stałych za pomocą interfejsu API nie jest wymagana deklaracja cieniowania.
| Wersje cieniowania wierzchołków | 1_1 | 2_0 | 2_sw | 2_x | 3_0 | 3_sw |
|---|---|---|---|---|---|---|
| Rejestr stały | x | x | x | x | x | x |
Tematy pokrewne