LPD3DHAL_VALIDATETEXTURESTAGESTATECB fonction de rappel (d3dhal.h)

La fonction D3dValidateTextureStageState retourne le nombre de passes où le matériel peut effectuer les opérations de fusion spécifiées dans l’état actuel.

Syntaxe

LPD3DHAL_VALIDATETEXTURESTAGESTATECB Lpd3dhalValidatetexturestagestatecb;

DWORD Lpd3dhalValidatetexturestagestatecb(
  LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA unnamedParam1
)
{...}

Paramètres

unnamedParam1

pvtssd [in]

Pointe vers une structure D3DHAL_VALIDATETEXTURESTAGESTATEDATA qui contient les informations requises pour que le pilote détermine et retourne le nombre de passes requises pour effectuer les opérations de fusion.

Valeur retournée

D3dValidateTextureStageState retourne l’un des codes de rappel suivants :

Remarques

Les pilotes Microsoft Direct3D qui prennent en charge la texturation doivent implémenter D3dValidateTextureStageState.

L’implémentation de cette fonction par le pilote doit évaluer l’état de texture actuel pour toutes les étapes de texture associées au contexte. Si le matériel du pilote peut effectuer les opérations de fusion spécifiées, le pilote doit retourner le nombre de passes sur les données d’état requises par son matériel. Si le matériel ne peut pas effectuer les opérations de fusion spécifiées, le pilote doit retourner l’un des codes d’erreur suivants dans le membre ddrval de la structure D3DHAL_VALIDATETEXTURESTAGESTATEDATA à pvtssd :

Code d'erreur Signification
D3DERR_CONFLICTINGTEXTUREFILTER Le matériel ne peut pas effectuer à la fois le filtrage triligne et le multitexturing en même temps.
D3DERR_TOOMANYOPERATIONS Le matériel ne peut pas gérer le nombre spécifié d’opérations.
D3DERR_UNSUPPORTEDALPHAARG Le matériel ne prend pas en charge un argument alpha spécifié.
D3DERR_UNSUPPORTEDALPHAOPERATION Le matériel ne prend pas en charge une opération alpha spécifiée.
D3DERR_UNSUPPORTEDCOLORARG Le matériel ne prend pas en charge un argument de couleur spécifié.
D3DERR_UNSUPPORTEDCOLOROPERATION Le matériel ne prend pas en charge une opération de couleur spécifiée.
D3DERR_UNSUPPORTEDFACTORVALUE Le matériel ne prend pas en charge une D3DTA_TFACTOR supérieure à 1.0.
D3DERR_WRONGTEXTUREFORMAT Le matériel ne prend pas en charge l’état actuel dans le format de texture sélectionné.

 

Direct3D appelle D3dValidateTextureStageState en réponse à une demande d’application via un appel à IDirect3DDevice7 ::ValidateDevice. Le nombre de passes retournées par le pilote est propagé vers l’application, qui peut ensuite décider si elle va continuer le rendu à l’aide de l’état actuel ou si elle doit modifier les opérations de fusion pour un rendu plus rapide ou pour effectuer un rendu du tout. Il n’existe aucune limite au nombre de passes qu’un conducteur peut retourner.

Un pilote qui retourne plusieurs passes est responsable de l’exécution correcte des passes sur toutes les données d’état et primitives lors du rendu.

Demandes susceptibles d’échouer dans D3dValidateTextureStageState :

  • L’utilisation de valeurs itérées diffuses comme ARG, ou l’opération BLENDDIFFUSE est partiellement prise en charge sur le matériel actuel. De nombreuses parties peuvent introduire uniquement des données de couleur itérées à la dernière étape de l’opération de texture.

  • Essayez de spécifier la texture de chaque étape comme arg1 de préférence à arg2.

  • Tentative d’utilisation de valeurs diffuses ou scalaires à des étapes de fusion multitexture arbitraires. Pour de nombreuses cartes, ces valeurs ne peuvent être utilisées qu’à l’état de fusion de texture final ; pour d’autres, seulement à la première étape.

  • Essayez d’en faire plus dans la première texture que simplement répliquer alpha sur les canaux de couleur ou inverser l’entrée. Pour de nombreuses cartes, les unités de fusion associées à la première texture sont incapables de gérer des opérations plus complexes que celles-ci. Les exemples ci-dessous essaient d’utiliser uniquement l’unité de fusion de la deuxième texture, si cela est possible. La première unité est supposée être dans son état par défaut dans les exemples.

    dev.SetTextureStageState( n, D3DTSS_COLORARG1, D3DTA_TEXTURE );   *
    dev.SetTextureStageState( n, D3DTSS_COLOROP, D3DTOP_SELECTARG1 ); *
    
  • L’exécution d’opérations pour l’alpha de sortie qui sont plus complexes ou sensiblement différentes des opérations spécifiées pour les canaux de couleur est moins susceptible d’être prise en charge.

  • Tentative d’utilisation simultanée de D3DTA_TFACTOR et de D3DTA_DIFFUSE. Certains matériels ne le prennent pas en charge.

  • Tentative d’utilisation simultanée de plusieurs textures et filtrage triligne mappé MIP. De nombreuses cartes ne prennent pas en charge ces opérations en même temps. Si le filtrage triligne a été demandé pour une texture impliquée dans des opérations de multitexture et qu’il échoue à la validation, désactivez triligneur et réessayez. Dans ce cas, il peut être préférable d’effectuer un rendu multipass à la place.

Configuration requise

Condition requise Valeur
Plateforme cible Desktop (Expérience utilisateur)
En-tête d3dhal.h (inclure D3dhal.h)

Voir aussi

D3DHAL_VALIDATETEXTURESTAGESTATEDATA

D3dDrawPrimitives2