Vorgehensweise: Erstellen eines Hull-Shaders

Ein Rumpfshader ist die erste von drei Phasen, die zusammenarbeiten, um die Tessellation zu implementieren. Die Hull-Shader-Ausgaben steuern die Tessellatorphase sowie die Domain-Shader-Stufe. In diesem Thema wird gezeigt, wie Sie einen Hull-Shader erstellen.

Ein Hull-Shader transformiert einen Satz von Eingabesteuerungspunkten (aus einem Vertexshader) in einen Satz von Ausgabesteuerungspunkten. Die Anzahl der Eingabe- und Ausgabepunkte kann je nach Transformation in Inhalt und Anzahl variieren (eine typische Transformation wäre eine Basistransformation).

Ein Hull-Shader gibt auch Patchkonstanteninformationen aus, z. B. Tessellationsfaktoren, für einen Domänenshader und den Tessellator. Die Tessellatorphase mit fester Funktion verwendet die Tessellationsfaktoren sowie andere in einem Rumpfshader deklarierte Zustand, um zu bestimmen, wie viel tesseliert werden soll.

So erstellen Sie einen Rumpfshader

  1. Entwerfen sie einen Rumpfshader. Weitere Informationen finden Sie unter Vorgehensweise: Entwerfen eines Rumpfshaders.

  2. Kompilieren des Shadercodes

  3. Erstellen Sie mithilfe von ID3D11Device::CreateHullShader ein Hull-Shader-Objekt.

    HRESULT CreateHullShader(
      const void *pShaderBytecode,  
      SIZE_T BytecodeLength,  
      ID3D11ClassLinkage *pClassLinkage,  
      ID3D11HullShader **ppHullShader
    );
    
  4. Initialisieren Sie die Pipelinephase mit ID3D11DeviceContext::HSSetShader.

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

Ein Domänenshader muss an die Pipeline gebunden werden, wenn ein Hull-Shader gebunden ist. Insbesondere ist es nicht gültig, Hüllen-Shader-Kontrollpunkte direkt mit dem Geometry-Shader zu streamen.

Verwenden von Direct3D 11

Übersicht über Tessellation