Bagikan melalui


Register float konstan (referensi HLSL VS)

Daftar input shader vertex untuk konstanta floating-point komponen empat. Atur register konstan dengan def - vs atau SetVertexShaderConstantF.

File register konstanta bersifat baca-saja dari perspektif shader vertex. Setiap instruksi tunggal hanya dapat mengakses satu register konstanta. Namun, setiap sumber dalam instruksi tersebut dapat secara independen menggeser dan meniadakan vektor tersebut saat dibaca.

Perilaku konstanta shader telah berubah antara Direct3D 8 dan Direct3D 9.

  • Untuk Direct3D 9, konstanta diatur dengan defx menetapkan nilai ke ruang konstanta shader. Masa pakai konstanta yang dideklarasikan dengan defx terbatas pada eksekusi shader itu saja. Sebaliknya, konstanta yang diatur menggunakan API SetXXXShaderConstantX menginisialisasi konstanta di ruang global. Konstanta di ruang global tidak disalin ke ruang lokal (terlihat oleh shader) hingga SetxxxXShaderConstants dipanggil.
  • Untuk Direct3D 8, konstanta yang diatur dengan defx atau API menetapkan nilai ke ruang konstanta shader. Setiap kali shader dijalankan, konstanta digunakan oleh shader saat ini terlepas dari teknik yang digunakan untuk mengaturnya.

Register konstanta ditetapkan sebagai absolut atau relatif:

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

Register konstanta dapat dibaca, oleh karena itu, baik dengan menggunakan indeks absolut atau dengan indeks relatif dari register alamat. Membaca dari register di luar rentang yang dikembalikan (0,0, 0,0, 0,0, 0,0).

Contoh

Berikut adalah contoh yang menyatakan dua konstanta floating-point dalam shader.

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

Konstanta ini dimuat setiap kali SetVertexShader dipanggil.

Berikut adalah contoh menggunakan 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 );
    }

Jika Anda mengatur nilai konstanta dengan API, tidak ada deklarasi shader yang diperlukan.

Versi shader vertex 1_1 2_0 2_sw 2_x 3_0 3_sw
Daftar Konstanta x x x x x x

 

Vertex Shader Registers