Guide pratique pour créer un nuanceur de coque

Un nuanceur de coque est la première des trois étapes qui fonctionnent ensemble pour mettre en œuvre le pavage. Les sorties du nuanceur de coque pilotent l’étape du tessellateur, ainsi que l’étape du nuanceur de domaine. Cette rubrique montre comment créer un nuanceur de coque.

Un nuanceur de coque transforme un ensemble de points de contrôle d’entrée (à partir d’un nuanceur de vertex) en un ensemble de points de contrôle de sortie. Le nombre de points d’entrée et de sortie peut varier en contenu et en nombre en fonction de la transformation (une transformation classique serait une transformation de base).

Un nuanceur de coque génère également des informations constantes de patch, telles que des facteurs de pavage, pour un nuanceur de domaine et le tessellateur. L’étape de tessellateur à fonction fixe utilise les facteurs de pavage ainsi que d’autres états déclarés dans un nuanceur de coque pour déterminer la quantité de pavage.

Pour créer un nuanceur de coque

  1. Concevoir un nuanceur de coque. Consultez Guide pratique pour concevoir un nuanceur de coque.

  2. Compiler le code du nuanceur

  3. Créez un objet hull-shader à l’aide de ID3D11Device::CreateHullShader.

    HRESULT CreateHullShader(
      const void *pShaderBytecode,  
      SIZE_T BytecodeLength,  
      ID3D11ClassLinkage *pClassLinkage,  
      ID3D11HullShader **ppHullShader
    );
    
  4. Initialisez la phase de pipeline à l’aide de ID3D11DeviceContext::HSSetShader.

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

Un nuanceur de domaine doit être lié au pipeline si un nuanceur de coque est lié. En particulier, il n’est pas valide de diffuser directement en continu les points de contrôle du nuanceur de coque avec le nuanceur de géométrie.

Utilisation de Direct3D 11

Vue d’ensemble de tessellation