Cara: Membuat Hull Shader

Shader lambung adalah tahap pertama dari tiga tahap yang bekerja sama untuk mengimplementasikan tessellation. Output hull-shader mendorong tahap tessellator, serta tahap domain-shader. Topik ini menunjukkan cara membuat shader lambung.

Shader lambung mengubah sekumpulan titik kontrol input (dari shader vertex) menjadi satu set titik kontrol output. Jumlah titik input dan output dapat bervariasi dalam konten dan angka tergantung pada transformasi (transformasi umum akan menjadi transformasi dasar).

Shader lambung juga menghasilkan informasi konstanta patch, seperti faktor tessellation, untuk shader domain dan tessellator. Tahap tesselator fungsi tetap menggunakan faktor tessellation serta status lain yang dideklarasikan dalam shader lambung untuk menentukan berapa banyak tessellate.

Untuk membuat shader lambung

  1. Desain shader lambung. Lihat Cara: Mendesain Hull Shader.

  2. Mengkompilasi kode shader

  3. Buat objek hull-shader menggunakan ID3D11Device::CreateHullShader.

    HRESULT CreateHullShader(
      const void *pShaderBytecode,  
      SIZE_T BytecodeLength,  
      ID3D11ClassLinkage *pClassLinkage,  
      ID3D11HullShader **ppHullShader
    );
    
  4. Inisialisasi tahap alur menggunakan ID3D11DeviceContext::HSSetShader.

    void HSSetShader(
      ID3D11HullShader *pHullShader,  
      ID3D11ClassInstance *const *ppClassInstances,
      UINT NumClassInstances
    );
    

Shader domain harus terikat ke alur jika shader lambung terikat. Secara khusus, tidak valid untuk langsung mengalirkan titik kontrol shader lambung dengan shader geometri.

Cara Menggunakan Direct3D 11

Gambaran Umum Tessellation