Séparation des déclarations et du code pour les nuanceurs de vertex

Dans DirectX 9.0, les déclarations et le code d’un nuanceur de vertex ne sont plus liés quand le nuanceur de vertex est créé. Un pilote de version DirectX 9.0 pour un appareil qui prend en charge les nuanceurs de vertex doit gérer des créations et une gestion distinctes des objets de déclaration et de code. Toutefois, ce pilote DirectX 9.0 doit toujours être en mesure de gérer un objet de nuanceur de vertex, qui combine à la fois des déclarations et du code, car le runtime DirectX 8.0 peut demander de créer un tel objet de nuanceur de vertex. Pour plus d’informations, consultez Nuanceurs de vertex.

Le runtime DirectX 9.0 affecte des handles provenant de pools de handles distincts aux objets de déclaration et de code. Le pilote DirectX 9.0 doit stocker ces handles dans des tableaux distincts. Comme l’espace de gestion du nuanceur de vertex dans DirectX 8.0, DirectX 9.0 partage l’espace de gestion de déclaration du nuanceur de vertex avec des codes de format de vertex flexible (FVF). La définition du bit zéro du handle indique une déclaration de nuanceur de vertex, sinon un code FVF. Pour plus d’informations, consultez le rastériseur de référence (exemple de code refrast.cpp ).

Le pilote DirectX 9.0 reçoit une déclaration de nuanceur de vertex lorsqu’il traite le code d’opération D3DDP2OP_CREATEVERTEXSHADERDECL dans sa fonction D3dDrawPrimitives2 . Une structure D3DHAL_DP2CREATEVERTEXSHADERDECL et un tableau de structures D3DVERTEXELEMENT9 qui définissent les éléments de vertex qui composent la déclaration du nuanceur suivent le code d’opération dans le flux de commandes. Si le pilote DirectX 9.0 est implémenté pour traiter les éléments de vertex de la déclaration du nuanceur, il doit prendre en charge toutes les utilisations possibles des données de vertex. Autrement dit, il doit prendre en charge tous les types D3DDECLUSAGE ainsi que plusieurs significations (valeurs d’index d’utilisation) pour ces types. Pour plus d’informations sur D3DVERTEXELEMENT9 et D3DDECLUSAGE, consultez la documentation la plus récente du Kit de développement logiciel (SDK) DirectX.

Le pilote DirectX 9.0 reçoit le code de nuanceur de vertex lorsqu’il traite le code d’opération D3DDP2OP_CREATEVERTEXSHADERFUNC. Une structure D3DHAL_DP2CREATEVERTEXSHADERFUNC et le code de nuanceur de vertex suivent le code d’opération dans le flux de commandes. Pour plus d’informations sur le format du code de nuanceur individuel et les jetons qui composent chaque code de nuanceur, consultez Direct3D Driver Shader Codes.

Le pilote DirectX 9.0 traite les codes d’opération D3DDP2OP_SETVERTEXSHADERDECL et D3DDP2OP_SETVERTEXSHADERFUNC pour rendre le code et la déclaration de nuanceur de vertex particuliers à jour dans l’assembleur de nuanceur de vertex. Le pilote traite les codes d’opération D3DDP2OP_DELETEVERTEXSHADERDECL et D3DDP2OP_DELETEVERTEXSHADERFUNC pour supprimer ces déclarations de nuanceur de vertex et le code de l’assembleur de nuanceur de vertex. Pour chacun de ces codes d’opérations, une structure D3DHAL_DP2VERTEXSHADER suit dans le flux de commandes. Cette structure contient un seul membre qui identifie le handle de la déclaration ou le code à définir ou à supprimer.