États d’effet (Direct3D 9)

Les états d’effet sont utilisés pour initialiser les états de pipeline en préparation du traitement des vertex et des pixels.

effect state [ [index] ] = expression;

Où :

  • état d’effet : semblable aux états de pipeline de fonction fixe traditionnels. Une liste complète des états est fournie ci-dessous.
  • [ [index] ] : index entier facultatif. L’index identifie un état particulier dans un tableau d’états d’effet. Les crochets externes indiquent qu’un index est facultatif. Si un index est utilisé, veillez à utiliser les crochets internes.
  • expression : expression d’affectation d’état. Consultez Expressions (Direct3D 9).

Chaque état a un type de données natif. Il s’agit du type de données dans lequel l’état attend des valeurs lorsque l’effet les affecte. Les types de données attendus par chaque état sont répertoriés ci-dessous.

Notez que l’interface d’effet tente de caster les valeurs dans le type approprié le plus tôt possible. Les valeurs littérales peuvent être castées au moment de la compilation. Les non-littéraux (c’est-à-dire les variables régulières) doivent être castés lorsque les méthodes Set appropriées sont appelées. Par exemple, l’interface d’effet castera des valeurs définies à l’aide de SetBool, SetValue et d’autres fonctions similaires si nécessaire. Pour de meilleures performances, assurez-vous que les valeurs passées à l’interface d’effet sont déjà du type correct et n’auront pas besoin de cast. Si le runtime ne peut pas caster une valeur, une erreur est retournée.

Les états d’effet peuvent être divisés en catégories suivantes :

États lumineux

Pour optimiser les performances d’application d’un effet, tous les composants d’une lumière ou d’un matériau doivent être spécifiés dans le fichier d’effet. Les états que vous ne parvenez pas à déclarer sont définis sur une valeur par défaut, car Direct3D n’a aucun moyen de définir des états lumineux individuellement.

État lumineux Type Valeurs
LightAmbient[n] float4 Consultez le membre Ambient de D3DLIGHT9.
LightAttenuation0[n] float Consultez le membre Attenuation0 de D3DLIGHT9.
LightAttenuation1[n] float Consultez le membre Attenuation1 de D3DLIGHT9.
LightAttenuation2[n] float Consultez le membre Attenuation2 de D3DLIGHT9.
LightDiffuse[n] float4 Consultez le membre Diffuse de D3DLIGHT9.
LightDirection[n] float3 Consultez le membre Direction de D3DLIGHT9.
LightEnable[n] bool TRUE ou FALSE. Consultez l’argument bEnable dans LightEnable.
LightFalloff[n] float D3DCOLORVALUE. Consultez le membre Falloff de D3DLIGHT9.
LightPhi[n] float Consultez le membre Phi de D3DLIGHT9.
LightPosition[n] float3 Consultez le membre Position de D3DLIGHT9.
LightRange[n] float Consultez le membre Range de D3DLIGHT9.
LightSpecular[n] float4 Consultez le membre spéculaire de D3DLIGHT9.
LightTheta[n] float Consultez le membre Theta de D3DLIGHT9.
LightType[n] dword Même valeur que le tableau de jusqu’à n valeurs D3DLIGHTTYPE sans le préfixe D3DLIGHT_.

 

Exemple :

LightEnable[0] = TRUE;
LightType[0] = POINT;
LightPosition[0] = float3<10.0f, 1.0f, 23.0f>;
LightAmbient[0] = float4<0.7f, 0.0f, 0.0f, 1.0f>;

Cela permet d’éclairer, de mettre le point sur le type, de définir la position de la lumière sur float3<10.0f, 1.0f, 23.0f> et de définir la couleur ambiante sur float4<0.7f, 0.0f, 0.0f, 1.0f>.

États matériels

Les états que vous ne parvenez pas à déclarer sont définis sur une valeur par défaut, car Direct3D n’a aucun moyen de définir des états matériels individuellement.

État matériel Type Valeurs
MaterialAmbient float4 Même valeur que Ambient
MaterialDiffuse float4 Même valeur que Diffuse
MaterialEmissive float4 Même valeur que Emissive
MaterialPower float Même valeur que Power
MaterialSpecular float4 Même valeur que Specular

 

Exemple :

MaterialDiffuse = float4<0.7f, 0.0f, 0.0f, 1.0f>;
MaterialPower = 3.0f;

Cela définit la couleur diffuse sur float4<0.7f, 0.0f, 0.0f, 1.0f> et rend la puissance du matériau 3.0f.

États de rendu

Il existe deux types d’états de rendu :

États de rendu du canal de pixels

Les états de rendu du fichier d’effet ont des noms similaires aux états de pipeline de fonction fixe, souvent avec le préfixe supprimé.

État du rendu Type Valeurs
AlphaBlendEnable bool True ou False. Mêmes valeurs que D3DRS_ALPHABLENDENABLE dans D3DRENDERSTATETYPE.
AlphaFunc dword Mêmes valeurs que D3DCMPFUNC sans le préfixe D3DCMP_. Voir D3DRS_ALPHAFUNC.
AlphaRef dword Mêmes valeurs que D3DRS_ALPHAREF.
AlphaTestEnable dword True ou False. Voir D3DRS_ALPHATESTENABLE.
BlendOp dword Mêmes valeurs que D3DBLENDOP sans le préfixe D3DBLENDOP_.
ColorWriteEnable dword Combinaison au niveau du bit de ROUGE, VERT, BLEU et ALPHA. Voir D3DRS_COLORWRITEENABLE.
DepthBias float Mêmes valeurs que D3DRS_DEPTHBIAS.
DestBlend dword Mêmes valeurs que D3DBLEND sans le préfixe D3DBLEND_.
DitherEnable bool True ou False. Mêmes valeurs que D3DRS_DITHERENABLE.
FillMode dword Mêmes valeurs que D3DFILLMODE sans le préfixe D3DFILL_.
LastPixel dword True ou False. Voir D3DRS_LASTPIXEL.
ShadeMode dword Mêmes valeurs que D3DSHADEMODE sans le préfixe D3DSHADE_.
SlopeScaleDepthBias float Mêmes valeurs que D3DRS_SLOPESCALEDEPTHBIAS.
SrcBlend dword Mêmes valeurs que D3DBLEND sans le préfixe D3DBLEND_.
SRGBWriteEnable bool True ou False. Mêmes valeurs que D3DRS_SRGBWRITEENABLE.
StencilEnable bool True ou False. Mêmes valeurs que D3DRS_STENCILENABLE.
GabaritFail dword Mêmes valeurs que D3DSTENCILCAPS sans le préfixe D3DSTENCILCAP_. Voir D3DRS_STENCILFAIL.
StencilFunc dword Mêmes valeurs que D3DCMPFUNC sans le préfixe D3DCMP_. Voir D3DRS_STENCILFUNC.
StencilMask dword Mêmes valeurs que D3DRS_STENCILMASK.
StencilPass dword Mêmes valeurs que D3DSTENCILCAPS sans le préfixe D3DSTENCILCAP_. Voir D3DRS_STENCILPASS.
StencilRef int Mêmes valeurs que D3DRS_STENCILREF.
StencilWriteMask dword Mêmes valeurs que D3DRS_STENCILWRITEMASK.
StencilZFail dword Mêmes valeurs que D3DSTENCILCAPS sans le préfixe D3DSTENCILCAP_. Voir D3DRS_STENCILZFAIL.
TextureFactor dword Mêmes valeurs que D3DCOLOR. Mêmes valeurs que D3DRS_TEXTUREFACTOR.
Wrap0 - Wrap15 dword Les valeurs sont les mêmes que celles utilisées par D3DRS_WRAP0. Les valeurs autorisées sont :
  • COORD0 (qui correspond à D3DWRAPCOORD_0)
  • COORD1 (qui correspond à D3DWRAPCOORD_1)
  • COORD2 (qui correspond à D3DWRAPCOORD_2)
  • COORD3 (qui correspond à D3DWRAPCOORD_3)
  • U (qui correspond à D3DWRAP_U)
  • V (qui correspond à D3DWRAP_V)
  • W (qui correspond à D3DWRAP_W)
ZEnable dword Mêmes valeurs que D3DZBUFFERTYPE sans le préfixe D3DZB_.
ZFunc dword Mêmes valeurs que D3DCMPFUNC sans le préfixe D3DCMP_. Voir D3DRS_ZFUNC.
ZWriteEnable bool True ou False. Voir D3DRS_ZWRITEENABLE.

Exemple :

AlphaBlendEnable = TRUE;
FillMode = WIREFRAME;

Cela permet le mélange alpha et rend toutes les géométries rendues dans un wireframe.

États de rendu du canal de vertex

Les états de rendu de fichier d’effet ont des noms similaires aux états de pipeline de fonction fixes, souvent avec le préfixe supprimé.

État du rendu Type Valeurs
Ambiant float4 Mêmes valeurs que D3DRS_AMBIENT.
AmbientMaterialSource dword Mêmes valeurs que D3DMATERIALCOLORSOURCE sans le préfixe D3DMCS_. Voir D3DRS_AMBIENTMATERIALSOURCE.
Découpage bool True ou False. Mêmes valeurs que D3DRS_CLIPPING.
ClipPlaneEnable dword Combinaison de bits de macros D3DCLIPPLANE0 - D3DCLIPPLANE5. Consultez D3DCLIPPLANEn et D3DRS_CLIPPLANEENABLE.
ColorVertex bool True ou False. Mêmes valeurs que D3DRS_COLORVERTEX.
CullMode dword Mêmes valeurs que D3DCULL sans le préfixe D3DCULL_.
DiffuseMaterialSource dword Mêmes valeurs que D3DMATERIALCOLORSOURCE sans le préfixe D3DMCS_. Voir D3DRS_DIFFUSEMATERIALSOURCE.
EmissiveMaterialSource dword Mêmes valeurs que D3DMATERIALCOLORSOURCE sans le préfixe D3DMCS_. Voir D3DRS_EMISSIVEMATERIALSOURCE.
FogColor dword Mêmes valeurs que D3DCOLOR. Voir D3DRS_FOGCOLOR.
FogDensity float Mêmes valeurs que D3DRS_FOGDENSITY.
FogEnable bool True ou False. Mêmes valeurs que D3DRS_FOGENABLE.
FogEnd float Mêmes valeurs que D3DRS_FOGEND.
FogStart float Mêmes valeurs que D3DRS_FOGSTART.
FogTableMode dword Mêmes valeurs que D3DFOGMODE. Consultez D3DRS_FOGTABLEMODE dans D3DRENDERSTATETYPE.
FogVertexMode dword Mêmes valeurs que D3DFOGMODE sans le préfixe D3DFOG_.
IndexedVertexBlendEnable bool True ou False. Mêmes valeurs que D3DRS_INDEXEDVERTEXBLENDENABLE.
Éclairage bool True ou False. Mêmes valeurs que D3DRS_LIGHTING.
LocalViewer bool True ou False. Mêmes valeurs que D3DRS_LOCALVIEWER.
MultiSampleAntialias bool Mêmes valeurs que D3DRS_MULTISAMPLEANTIALIAS.
MultiSampleMask dword Mêmes valeurs que D3DRS_MULTISAMPLEMASK.
NormalizeNormals bool True ou False. Mêmes valeurs que D3DRS_NORMALIZENORMALS.
PatchSegments float Mêmes valeurs que nSegments dans SetNPatchMode.
PointScale_A float Mêmes valeurs que D3DRS_POINTSCALE_A.
PointScale_B float Mêmes valeurs que D3DRS_POINTSCALE_B.
PointScale_C float Mêmes valeurs que D3DRS_POINTSCALE_C.
PointScaleEnable bool Mêmes valeurs que D3DRS_POINTSCALEENABLE.
PointSize float Mêmes valeurs que D3DRS_POINTSIZE.
PointSize_Min float Mêmes valeurs que D3DRS_POINTSIZE_MIN.
PointSize_Max float Mêmes valeurs que D3DRS_POINTSIZE_MAX sans le préfixe D3DRS_.
PointSpriteEnable bool True ou False. Mêmes valeurs que D3DRS_POINTSPRITEENABLE.
RangeFogEnable bool True ou False. Mêmes valeurs que D3DRS_RANGEFOGENABLE.
SpecularEnable bool True ou False. Mêmes valeurs que D3DRS_SPECULARENABLE.
SpecularMaterialSource dword Mêmes valeurs que D3DMATERIALCOLORSOURCE sans le préfixe D3DMCS_. Voir D3DRS_SPECULARMATERIALSOURCE.
TweenFactor float Mêmes valeurs que D3DRS_TWEENFACTOR.
VertexBlend dword Mêmes valeurs que D3DVERTEXBLENDFLAGS sans le préfixe D3DVBF_. Voir D3DRS_VERTEXBLEND.

 

Exemple :

Ambient = float4<0.7f, 0.0f, 0.0f, 1.0f>;
CullMode = CCW;
FogColor = 0xff0000;

La couleur ambiante float4<0.7f, 0.0f, 0.0f, 0.0f, 1.0f>, définit le mode d’élimination du backface sur le sens inverse des aiguilles d’une montre et définit la couleur du brouillard sur rouge.

États de l’échantillonneur

Un état d’échantillonneur représente un objet sampler.

State Type Valeurs
Échantillonneur Sampler NULL, ou un bloc d’état de l’échantillonneur.

 

États de phase de l’échantillonneur

Les états d’étape de l’échantillonneur sont utilisés pour échantillonner des textures. L’état de l’échantillonneur détermine les types de filtrage et les modes d’adressage de texture.

État de l’échantillonneur Type Valeurs
AddressU[16] dword Mêmes valeurs que D3DTEXTUREADDRESS sans le préfixe D3DTADDRESS_. Voir D3DSAMP_ADDRESSU.
AddressV[16] dword Mêmes valeurs que D3DTEXTUREADDRESS sans le préfixe D3DTADDRESS_. Voir D3DSAMP_ADDRESSV.
AddressW[16] dword Mêmes valeurs que D3DTEXTUREADDRESS sans le préfixe D3DTADDRESS_. Voir D3DSAMP_ADDRESSW.
BorderColor[16] D3DCOLOR Mêmes valeurs que D3DTEXTUREFILTERTYPE sans le préfixe D3DTEXF_. Voir D3DSAMP_BORDERCOLOR.
MagFilter[16] dword Mêmes valeurs que D3DTEXTUREFILTERTYPE sans le préfixe D3DTEXF_. Voir D3DSAMP_MAGFILTER.
MaxAnisotropy[16] dword Mêmes valeurs que D3DSAMP_MAXANISOTROPY sans le préfixe D3DSAMP_.
MaxMipLevel[16] int Mêmes valeurs que D3DSAMP_MAXMIPLEVEL sans le préfixe D3DSAMP_.
MinFilter[16] dword Mêmes valeurs que D3DSAMP_MINFILTER sans le préfixe D3DSAMP_.
MipFilter[16] dword Les mêmes valeurs que D3DSAMP_MIPFILTER sans le préfixe D3DSAMP_.
MipMapLodBias[16] float Les mêmes valeurs que D3DSAMP_MIPMAPLODBIAS sans le préfixe D3DSAMP_.
SRGBTexture bool Même valeur que D3DSAMP_SRGBTEXTURE sans le préfixe D3DSAMP_.

 

Exemple :

AddressU[0] = CLAMP;
AddressV[0] = CLAMP;
AddressW[0] = CLAMP;

Cela permet aux valeurs UVW de se trouver entre 0 et 1.

États du nuanceur

Il n’existe que deux états de nuanceur d’effet : l’un associé à un objet de nuanceur de vertex et l’autre associé à un objet de nuanceur de pixels.

État du nuanceur Type Valeurs
Pixelshader Pixelshader NULL, un bloc d’assembly, une cible de compilation ou un paramètre de nuanceur de pixels.
VertexShader vertexshader NULL, un bloc d’assembly, une cible de compilation ou un paramètre de nuanceur de pixels.

 

Exemple :

VertexShader = compile vs_1_1 VSTexture();
PixelShader  = NULL;

Cette opération compile VSTexture, un nuanceur de vertex défini précédemment dans le fichier .fx, dans le nuanceur de vertex version 1.1, puis définit ce nuanceur compilé en tant que nuanceur de vertex. Le nuanceur de pixels est affecté à NULL.

États de la constante du nuanceur

Les états de constante du nuanceur sont utilisés pour accéder aux paramètres de constante du nuanceur.

État de la constante du nuanceur Type Valeurs
PixelShaderConstant float[m[n]] m x n tableau de floats; m et n sont facultatifs.
PixelShaderConstant1 float4 Un float 4D.
PixelShaderConstant2 float4x2 Deux flotteurs 4D.
PixelShaderConstant3 float4x3 Trois flotteurs 4D.
PixelShaderConstant4 float4x4 Quatre flotteurs 4D.
PixelShaderConstantB bool[m[n]] m x n tableau de bools; m et n sont facultatifs.
PixelShaderConstantI int[m[n]] m x n tableau d’ints. m et n sont facultatifs.
PixelShaderConstantF float[m[n]] m x n tableau de floats. m et n sont facultatifs.
VertexShaderConstant float[m[n]] m x n tableau de floats. m et n sont facultatifs.
VertexShaderConstant1 float4 Un float 4D.
VertexShaderConstant2 float4x2 Deux flotteurs 4D.
VertexShaderConstant3 float4x3 Trois flotteurs 4D.
VertexShaderConstant4 float4x4 Quatre flotteurs 4D.
VertexShaderConstantB bool[m[n]] m x n tableau de bools. m et n sont facultatifs.
VertexShaderConstantI int[m[n]] m x n tableau d’ints. m et n sont facultatifs.
VertexShaderConstantF float[m[n]] m x n tableau de floats. m et n sont facultatifs.

 

États de texture

Les états de texture initialisent les textures utilisées par le mélangeur multitexte.

État de la texture Type Valeurs
Texture[8] texture NULL ou un paramètre de texture.

 

États de l’étape de texture

Les états de phase de texture configurent les textures et les étapes de texture dans le mélangeur multitexture.

État de l’étape de texture Type Valeurs
AlphaOp[8] dword Identique à D3DTEXTUREOP sans le préfixe D3DTOP_. Voir D3DTSS_ALPHAOP.
AlphaArg0[8] dword Identique à D3DTA sans le préfixe D3DTA_. Voir D3DTSS_ALPHAARG0.
AlphaArg1[8] dword Identique à D3DTA sans le préfixe D3DTA_. Voir D3DTSS_ALPHAARG1.
AlphaArg2[8] dword Identique à D3DTA sans le préfixe D3DTA_. Voir D3DTSS_ALPHAARG2.
ColorArg0[8] dword Identique à D3DTA sans le préfixe D3DTA_. Voir D3DTSS_COLORARG0.
ColorArg1[8] dword Identique à D3DTA sans le préfixe D3DTA_. Voir D3DTSS_COLORARG1.
ColorArg2[8] dword Identique à D3DTA sans le préfixe D3DTA_. Voir D3DTSS_COLORARG2.
ColorOp[8] dword Identique à D3DTEXTUREOP sans le préfixe D3DTOP_. Voir D3DTSS_COLOROP.
BumpEnvLScale[8] float Mêmes valeurs que D3DTSS_BUMPENVLSCALE sans le préfixe D3DTSS_TCI.
BumpEnvLOffset[8] float Les mêmes valeurs que D3DTSS_BUMPENVLOFFSET sans le préfixe D3DTSS_TCI.
BumpEnvMat00[8] float Mêmes valeurs que D3DTSS_BUMPENVMAT00.
BumpEnvMat01[8] float Mêmes valeurs que D3DTSS_BUMPENVMAT01.
BumpEnvMat10[8] float Mêmes valeurs que D3DTSS_BUMPENVMAT10.
BumpEnvMat11[8] float Mêmes valeurs que D3DTSS_BUMPENVMAT11.
ResultArg[8] dword Identique à D3DTA sans le préfixe D3DTA_. Voir D3DTSS_RESULTARG.
TexCoordIndex[8] dword Les mêmes valeurs que D3DTSS_TEXCOORDINDEX sans le préfixe D3DTSS_TCI.
TextureTransformFlags[8] dword Mêmes valeurs que les valeurs D3DTEXTURETRANSFORMFLAGS sans le préfixe D3DTTFF_. Voir D3DTSS_TEXTURETRANSFORMFLAGS.

 

États de transformation

Définissez les états de transformation pour initialiser des matrices de transformation. Les effets utilisent des matrices transposees pour plus d’efficacité. Vous pouvez fournir des matrices transposees à un effet, ou un effet transposera automatiquement les matrices avant de les utiliser.

État de transformation Type Valeurs
ProjectionTransform float4x4 Matrice 4x4 de floats. Les mêmes valeurs que D3DTS_PROJECTION sans le préfixe D3DTS_.
TextureTransform[8] float4x4 Matrice 4x4 de floats. Mêmes valeurs que D3DTRANSFORMSTATETYPE sans le préfixe D3DTS_.
ViewTransform float4x4 Matrice 4x4 de floats. Les mêmes valeurs que D3DTS_VIEW sans le préfixe D3DTS_.
WorldTransform float4x4 Matrice 4x4 de floats.

 

Format de l’effet