É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
- États matériels
- États de rendu
- États de l’échantillonneur
- États de phase de l’échantillonneur
- États du nuanceur
- États de la constante du nuanceur
- États de texture
- États de l’étape de texture
- Transformer les états
É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 :
|
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. |