Procedura: Creare uno shader di Hull

Uno shader dello scafo è la prima delle tre fasi che collaborano per implementare la tessellazione. L'hull-shader restituisce la fase del tessellatore, nonché la fase del domain-shader. Questo argomento illustra come creare uno shader dello scafo.

Uno hull shader trasforma un set di punti di controllo di input (da un vertex shader) in un set di punti di controllo di output. Il numero di punti di input e output può variare nel contenuto e nel numero a seconda della trasformazione (una trasformazione tipica sarebbe una trasformazione di base).

Un shader dello scafo restituisce anche informazioni costanti patch, ad esempio fattori di tessellazione, per un domain shader e il tessellatore. La fase di tessellatore a funzione fissa usa i fattori di tessellazione e altri stati dichiarati in uno shader dello scafo per determinare quanto tessellare.

Per creare uno shader dello scafo

  1. Progettare uno shader dello scafo. Vedere Procedura: Progettare uno shader di Hull.

  2. Compilare il codice shader

  3. Creare un oggetto hull-shader usando ID3D11Device::CreateHullShader.

    HRESULT CreateHullShader(
      const void *pShaderBytecode,  
      SIZE_T BytecodeLength,  
      ID3D11ClassLinkage *pClassLinkage,  
      ID3D11HullShader **ppHullShader
    );
    
  4. Inizializzare la fase della pipeline usando ID3D11DeviceContext::HSSetShader.

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

Un domain shader deve essere associato alla pipeline se è associato uno shader dello scafo. In particolare, non è valido per trasmettere direttamente i punti di controllo dello shader dello scafo con il geometry shader.

Come usare Direct3D 11

Panoramica della tessellazione