Vorgehensweise: Erstellen eines Hüllen-Shaders

Ein Hüllen-Shader ist die erste von drei Phasen, die zusammenarbeiten, um Mosaikzu implementieren. Die Ausgaben des Hüllen-Shaders steuern die Mosaikstufe sowie die Domänen-Shader-Stufe. In diesem Thema wird gezeigt, wie Sie einen Hüllen-Shader erstellen.

Ein Hüllen-Shader wandelt einen Satz von Eingabesteuerpunkten (von einem Scheitelpunkt-Shader) in eine Reihe von Ausgabekontrollpunkten um. Die Anzahl der Eingabe- und Ausgabepunkte kann je nach Transformation in Inhalt und Anzahl variieren (eine typische Transformation wäre eine Basistransformation).

Ein Hüllen-Shader gibt auch Patchkonstanteninformationen wie Mosaikfaktoren für einen Domänen-Shader und den Mosaikator aus. Die Tessellatorphase mit fester Funktion verwendet die Mosaikfaktoren sowie einen anderen Zustand, der in einem Hüllen-Shader deklariert ist, um zu bestimmen, wie viel mosaikiert werden soll.

So erstellen Sie einen Hüllen-Shader

  1. Entwerfen sie einen Hüllen-Shader. Weitere Informationen finden Sie unter Vorgehensweise: Entwerfen eines Hüllen-Shaders.

  2. Kompilieren des Shadercodes

  3. Erstellen Sie mit id3D11Device::CreateHullShaderein Shaderobjekt.

    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änen-Shader muss an die Pipeline gebunden werden, wenn ein Hüllen-Shader gebunden ist. Insbesondere ist es nicht gültig, mit dem geometry-Shader direkt Hüllen-Shader-Kontrollpunkte zu streamen.

Verwenden von Direct3D 11

Übersicht über Mosaik