Stati di effetto (Direct3D 9)

Gli stati degli effetti vengono usati per inizializzare gli stati della pipeline in preparazione per l'elaborazione dei vertici e dei pixel.

effect state [ [index] ] = expression;

Dove:

  • stato dell'effetto: simile agli stati tradizionali della pipeline di funzioni fisse. Di seguito è riportato un elenco completo di stati.
  • [ [index] ] - Indice intero facoltativo. L'indice identifica uno stato specifico all'interno di una matrice di stati di effetto. Le parentesi esterne indicano che un indice è facoltativo. Se viene usato un indice, assicurarsi di usare le parentesi quadre interne.
  • expression - Espressione di assegnazione di stato. Vedere Espressioni (Direct3D 9).

Ogni stato ha un tipo di dati nativo. Si tratta del tipo di dati in cui lo stato prevede che i valori siano presenti quando l'effetto li assegna. I tipi di dati previsti per ogni stato sono elencati di seguito.

Si noti che l'interfaccia dell'effetto tenterà di eseguire il cast dei valori al tipo appropriato il prima possibile. I valori letterali possono essere cast in fase di compilazione. È necessario eseguire il cast di variabili non letterali (ad esempio variabili regolari) quando vengono chiamati i metodi Set appropriati. Ad esempio, l'interfaccia dell'effetto eseguirà il cast dei valori impostati usando SetBool, SetValue e altre funzioni simili, se necessario. Per migliorare le prestazioni, assicurarsi che i valori passati all'interfaccia dell'effetto siano già il tipo corretto e non saranno necessari il cast. Se il runtime non è in grado di eseguire il cast di un valore, viene restituito un errore.

Gli stati degli effetti possono essere suddivisi nelle categorie seguenti:

Stati di luce

Per abilitare le prestazioni migliori per l'applicazione di un effetto, tutti i componenti di una luce o di un materiale devono essere specificati nel file di effetto. Gli stati che non si dichiarano sono impostati su un valore predefinito perché non è possibile impostare singolarmente gli stati di luce direct3D.

Stato chiaro Tipo Valori
LightAmbient[n] float4 Vedere il membro Ambient di D3DLIGHT9.
LightAttenuation0[n] float Vedere il membro Attenuazione0 di D3DLIGHT9.
LightAttenuation1[n] float Vedere il membro Attenuazione1 di D3DLIGHT9.
LightAttenuation2[n] float Vedere il membro Attenuazione2 di D3DLIGHT9.
LightDiffuse[n] float4 Vedere il membro Diffuso di D3DLIGHT9.
LightDirection[n] float3 Vedere il membro Direction di D3DLIGHT9.
LightEnable[n] bool TRUE o FALSE. Vedere l'argomento bEnable in LightEnable.
LightFalloff[n] float D3DCOLORVALUE. Vedere il membro Falloff di D3DLIGHT9.
LightPhi[n] float Vedere il membro Phi di D3DLIGHT9.
LightPosition[n] float3 Vedere il membro Position di D3DLIGHT9.
LightRange[n] float Vedere il membro Range di D3DLIGHT9.
LightSpecular[n] float4 Vedere il membro Speculare di D3DLIGHT9.
LightTheta[n] float Vedere il membro Theta di D3DLIGHT9.
LightType[n] dword Lo stesso valore della matrice di valori fino a n D3DLIGHTTYPE senza il prefisso D3DLIGHT_.

 

Esempio:

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>;

In questo modo, l'illuminazione, il punto di illuminazione, imposta la posizione di luce su float3<10.0f, 1.0f, 23.0f> e imposta il colore dell'ambiente su float4<0.7f, 0.0f, 0.0f, 1.0f>.

Stati materiali

Gli stati che non si dichiarano sono impostati su un valore predefinito perché non esiste alcun modo per Direct3D di impostare singolarmente gli stati del materiale.

Stato materiale Tipo Valori
MaterialAmbient float4 Lo stesso valore di Ambient
MaterialDiffuse float4 Lo stesso valore di Diffusione
MaterialEmissive float4 Stesso valore di Emissive
MaterialPower float Stesso valore di Power
MaterialSpecular float4 Stesso valore di Speculare

 

Esempio:

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

Verrà impostato il colore diffuso su float4<0,7f, 0,0f, 0,0f, 1,0f e rendere la potenza del materiale 3.0f> .

Stati di rendering

Esistono due tipi di stati di rendering:

Stati di rendering della pipe pixel

Gli stati di rendering dei file di effetto hanno nomi simili agli stati fissi della pipeline della funzione, spesso con il prefisso rimosso.

Stato di rendering Tipo Valori
AlfaBlendEnable bool Vero o Falso. Gli stessi valori di D3DRS_ALPHABLENDENABLE in D3DRENDERSTATETYPE.
AlfaFunc dword Gli stessi valori di D3DCMPFUNC senza il prefisso D3DCMP_. Vedere D3DRS_ALPHAFUNC.
AlfaRef dword Gli stessi valori di D3DRS_ALPHAREF.
AlphaTestEnable dword Vero o Falso. Vedere D3DRS_ALPHATESTENABLE.
BlendOp dword Gli stessi valori di D3DBLENDOP senza il prefisso D3DBLENDOP_.
ColorWriteEnable dword Combinazione bit per bit di ROSSO, VERDE, BLU e ALFA. Vedere D3DRS_COLORWRITEENABLE.
DepthBias float Gli stessi valori di D3DRS_DEPTHBIAS.
DestBlend dword Gli stessi valori di D3DBLEND senza il prefisso D3DBLEND_.
DitherEnable bool Vero o Falso. Gli stessi valori di D3DRS_DITHERENABLE.
Fillmode dword Gli stessi valori di D3DFILLMODE senza il prefisso D3DFILL_.
LastPixel dword Vero o Falso. Vedere D3DRS_LASTPIXEL.
ShadeMode dword Gli stessi valori di D3DSHADEMODE senza il prefisso D3DSHADE_.
SlopeScaleDepthBias float Gli stessi valori di D3DRS_SLOPESCALEDEPTHBIAS.
SrcBlend dword Gli stessi valori di D3DBLEND senza il prefisso D3DBLEND_.
SRGBWriteEnable bool Vero o Falso. Gli stessi valori di D3DRS_SRGBWRITEENABLE.
StencilEnable bool Vero o Falso. Gli stessi valori di D3DRS_STENCILENABLE.
StencilFail dword Gli stessi valori di D3DSTENCILCAPS senza il prefisso D3DSTENCILCAP_. Vedere D3DRS_STENCILFAIL.
StencilFunc dword Gli stessi valori di D3DCMPFUNC senza il prefisso D3DCMP_. Vedere D3DRS_STENCILFUNC.
StencilMask dword Gli stessi valori di D3DRS_STENCILMASK.
StencilPass dword Gli stessi valori di D3DSTENCILCAPS senza il prefisso D3DSTENCILCAP_. Vedere D3DRS_STENCILPASS.
StencilRef INT Stessi valori di D3DRS_STENCILREF.
StencilWriteMask dword Gli stessi valori di D3DRS_STENCILWRITEMASK.
StencilZFail dword Gli stessi valori di D3DSTENCILCAPS senza il prefisso D3DSTENCILCAP_. Vedere D3DRS_STENCILZFAIL.
TextureFactor dword Stessi valori di D3DCOLOR. Stessi valori di D3DRS_TEXTUREFACTOR.
Wrap0 - Wrap15 dword I valori corrispondono ai valori usati da D3DRS_WRAP0. I valori validi sono:
  • COORD0 (che corrisponde a D3DWRAPCOORD_0)
  • COORD1 (che corrisponde a D3DWRAPCOORD_1)
  • COORD2 (che corrisponde a D3DWRAPCOORD_2)
  • COORD3 (che corrisponde a D3DWRAPCOORD_3)
  • U (che corrisponde a D3DWRAP_U)
  • V (che corrisponde a D3DWRAP_V)
  • W (che corrisponde a D3DWRAP_W)
ZEnable dword Gli stessi valori di D3DZBUFFERTYPE senza il prefisso D3DZB_.
ZFunc dword Gli stessi valori di D3DCMPFUNC senza il prefisso D3DCMP_. Vedere D3DRS_ZFUNC.
ZWriteEnable bool Vero o Falso. Vedere D3DRS_ZWRITEENABLE.

Esempio:

AlphaBlendEnable = TRUE;
FillMode = WIREFRAME;

In questo modo verrà abilitata la fusione alfa e verrà eseguito il rendering di tutte le geometrie in wireframe.

Stati di rendering della pipe dei vertici

Gli stati di rendering dei file di effetto hanno nomi simili agli stati della pipeline di funzioni fisse, spesso con il prefisso rimosso.

Stato di rendering Tipo Valori
Di ambiente float4 Stessi valori di D3DRS_AMBIENT.
AmbientMaterialSource dword Stessi valori di D3DMATERIALCOLORSOURCE senza il prefisso D3DMCS_. Vedere D3DRS_AMBIENTMATERIALSOURCE.
Ritaglio bool Vero o Falso. Stessi valori di D3DRS_CLIPPING.
ClipPlaneEnable dword Combinazione bit per bit di macro D3DCLIPPLANE0 - D3DCLIPPLANE5. Vedere D3DCLIPPLANEn e D3DRS_CLIPPLANEENABLE.
ColorVertex bool Vero o Falso. Stessi valori di D3DRS_COLORVERTEX.
CullMode dword Stessi valori di D3DCULL senza il prefisso D3DCULL_.
DiffuseMaterialSource dword Stessi valori di D3DMATERIALCOLORSOURCE senza il prefisso D3DMCS_. Vedere D3DRS_DIFFUSEMATERIALSOURCE.
EmissiveMaterialSource dword Stessi valori di D3DMATERIALCOLORSOURCE senza il prefisso D3DMCS_. Vedere D3DRS_EMISSIVEMATERIALSOURCE.
FogColor dword Stessi valori di D3DCOLOR. Vedere D3DRS_FOGCOLOR.
FogDensity float Stessi valori di D3DRS_FOGDENSITY.
FogEnable bool Vero o Falso. Stessi valori di D3DRS_FOGENABLE.
FogEnd float Stessi valori di D3DRS_FOGEND.
FogStart float Stessi valori di D3DRS_FOGSTART.
FogTableMode dword Stessi valori di D3DFOGMODE. Vedere D3DRS_FOGTABLEMODE in D3DRENDERSTATETYPE.
FogVertexMode dword Stessi valori di D3DFOGMODE senza il prefisso D3DFOG_.
IndexedVertexBlendEnable bool Vero o Falso. Stessi valori di D3DRS_INDEXEDVERTEXBLENDENABLE.
Luce bool Vero o Falso. Stessi valori di D3DRS_LIGHTING.
LocalViewer bool Vero o Falso. Stessi valori di D3DRS_LOCALVIEWER.
MultiSampleAntialias bool Gli stessi valori di D3DRS_MULTISAMPLEANTIALIAS.
MultiSampleMask dword Gli stessi valori di D3DRS_MULTISAMPLEMASK.
NormalizzareNormals bool Vero o Falso. Gli stessi valori di D3DRS_NORMALIZENORMALS.
PatchSegments float Gli stessi valori di nSegments in SetNPatchMode.
PointScale_A float Gli stessi valori di D3DRS_POINTSCALE_A.
PointScale_B float Gli stessi valori di D3DRS_POINTSCALE_B.
PointScale_C float Gli stessi valori di D3DRS_POINTSCALE_C.
PointScaleEnable bool Gli stessi valori di D3DRS_POINTSCALEENABLE.
PointSize float Gli stessi valori di D3DRS_POINTSIZE.
PointSize_Min float Gli stessi valori di D3DRS_POINTSIZE_MIN.
PointSize_Max float Gli stessi valori di D3DRS_POINTSIZE_MAX senza il prefisso D3DRS_.
PointSpriteEnable bool Vero o Falso. Gli stessi valori di D3DRS_POINTSPRITEENABLE.
RangeFogEnable bool Vero o Falso. Gli stessi valori di D3DRS_RANGEFOGENABLE.
SpecularEnable bool Vero o Falso. Gli stessi valori di D3DRS_SPECULARENABLE.
SpecularMaterialSource dword Gli stessi valori di D3DMATERIALCOLORSOURCE senza il prefisso D3DMCS_. Vedere D3DRS_SPECULARMATERIALSOURCE.
TweenFactor float Gli stessi valori di D3DRS_TWEENFACTOR.
VertexBlend dword Gli stessi valori di D3DVERTEXBLENDFLAGS senza il prefisso D3DVBF_. Vedere D3DRS_VERTEXBLEND.

 

Esempio:

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

In questo modo il colore ambientale float4<0.7f, 0.0f, 0.0f, 1.0f>, imposta la modalità di sbattemento backface su antiorario e imposta il colore della nebbia su rosso.

Stati dell'esempio

Uno stato di esempio rappresenta un oggetto sampler.

State Tipo Valori
Campionatore Campionatore NULL o un blocco di stato del sampler.

 

Stati di fase sampler

Gli stati della fase di esempio vengono usati per esempi di trame. Lo stato del sampler determina i tipi di filtro e le modalità di indirizzamento della trama.

Stato dell'esempio Tipo Valori
AddressU[16] dword Gli stessi valori di D3DTEXTUREADDRESS senza il prefisso D3DTADDRESS_. Vedere D3DSAMP_ADDRESSU.
AddressV[16] dword Gli stessi valori di D3DTEXTUREADDRESS senza il prefisso D3DTADDRESS_. Vedere D3DSAMP_ADDRESSV.
AddressW[16] dword Gli stessi valori di D3DTEXTUREADDRESS senza il prefisso D3DTADDRESS_. Vedere D3DSAMP_ADDRESSW.
BorderColor[16] D3DCOLOR Gli stessi valori di D3DTEXTUREFILTERTYPE senza il prefisso D3DTEXF_. Vedere D3DSAMP_BORDERCOLOR.
MagFilter[16] dword Gli stessi valori di D3DTEXTUREFILTERTYPE senza il prefisso D3DTEXF_. Vedere D3DSAMP_MAGFILTER.
MaxAnisotropy[16] dword Gli stessi valori di D3DSAMP_MAXANISOTROPY senza il prefisso D3DSAMP_.
MaxMipLevel[16] INT Gli stessi valori di D3DSAMP_MAXMIPLEVEL senza il prefisso D3DSAMP_.
MinFilter[16] dword Gli stessi valori di D3DSAMP_MINFILTER senza il prefisso D3DSAMP_.
MipFilter[16] dword Gli stessi valori di D3DSAMP_MIPFILTER senza il prefisso D3DSAMP_.
MipMapLodBias[16] float Gli stessi valori di D3DSAMP_MIPMAPLODBIAS senza il prefisso D3DSAMP_.
SRGBTexture bool Stesso valore di D3DSAMP_SRGBTEXTURE senza il prefisso D3DSAMP_.

 

Esempio:

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

Questo blocca i valori UVW in modo che siano compresi tra 0 e 1.

Stati shader

Esistono solo due stati di effetto shader: uno associato a un oggetto vertex shader e l'altro associato a un oggetto pixel shader.

Stato shader Tipo Valori
Pixelshader Pixelshader NULL, un blocco di assembly, una destinazione di compilazione o un parametro pixel shader.
VertexShader vertexshader NULL, un blocco di assembly, una destinazione di compilazione o un parametro pixel shader.

 

Esempio:

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

Verrà compilato VSTexture, un vertex shader definito in precedenza nel file con estensione fx, nel vertex shader versione 1.1 e quindi imposterà tale shader compilato come vertex shader. Il pixel shader viene assegnato a NULL.

Stati costanti shader

Gli stati delle costanti shader vengono usati per accedere ai parametri costanti dello shader.

Stato costante shader Tipo Valori
PixelShaderConstant float[m[n]] m x n matrice di float; m e n sono facoltativi.
PixelShaderConstant1 float4 Un float 4D.
PixelShaderConstant2 float4x2 Due float 4D.
PixelShaderConstant3 float4x3 Tre float 4D.
PixelShaderConstant4 float4x4 Quattro float 4D.
PixelShaderConstantB bool[m[n]] m x n matrice di bools; m e n sono facoltativi.
PixelShaderConstantI int[m[n]] m x n matrice di ints. m e n sono facoltativi.
PixelShaderConstantF float[m[n]] m x n matrice di float. m e n sono facoltativi.
VertexShaderConstant float[m[n]] m x n matrice di float. m e n sono facoltativi.
VertexShaderConstant1 float4 Un float 4D.
VertexShaderConstant2 float4x2 Due float 4D.
VertexShaderConstant3 float4x3 Tre float 4D.
VertexShaderConstant4 float4x4 Quattro float 4D.
VertexShaderConstantB bool[m[n]] m x n matrice di valori booleani. m e n sono facoltativi.
VertexShaderConstantI int[m[n]] m x n matrice di ints. m e n sono facoltativi.
VertexShaderConstantF float[m[n]] m x n matrice di float. m e n sono facoltativi.

 

Stati trama

Gli stati delle trame inizializzano le trame usate dal frullatore multitextura.

Stato trama Tipo Valori
Trama[8] trama NULL o un parametro trama.

 

Stati della fase trama

Gli stati della fase della trama configurano trame e le fasi della trama nel frullatore multitextura.

Stato fase trama Tipo Valori
AlphaOp[8] dword Uguale a D3DTEXTUREOP senza il prefisso D3DTOP_. Vedere D3DTSS_ALPHAOP.
AlphaArg0[8] dword Uguale a D3DTA senza il prefisso D3DTA_. Vedere D3DTSS_ALPHAARG0.
AlphaArg1[8] dword Uguale a D3DTA senza il prefisso D3DTA_. Vedere D3DTSS_ALPHAARG1.
AlphaArg2[8] dword Uguale a D3DTA senza il prefisso D3DTA_. Vedere D3DTSS_ALPHAARG2.
ColorArg0[8] dword Uguale a D3DTA senza il prefisso D3DTA_. Vedere D3DTSS_COLORARG0.
ColorArg1[8] dword Uguale a D3DTA senza il prefisso D3DTA_. Vedere D3DTSS_COLORARG1.
ColorArg2[8] dword Uguale a D3DTA senza il prefisso D3DTA_. Vedere D3DTSS_COLORARG2.
ColorOp[8] dword Uguale a D3DTEXTUREOP senza il prefisso D3DTOP_. Vedere D3DTSS_COLOROP.
BumpEnvLScale[8] float Gli stessi valori di D3DTSS_BUMPENVLSCALE senza il prefisso D3DTSS_TCI.
BumpEnvLOffset[8] float Gli stessi valori di D3DTSS_BUMPENVLOFFSET senza il prefisso D3DTSS_TCI.
BumpEnvMat00[8] float Stessi valori di D3DTSS_BUMPENVMAT00.
BumpEnvMat01[8] float Stessi valori di D3DTSS_BUMPENVMAT01.
BumpEnvMat10[8] float Stessi valori di D3DTSS_BUMPENVMAT10.
BumpEnvMat11[8] float Stessi valori di D3DTSS_BUMPENVMAT11.
ResultArg[8] dword Uguale a D3DTA senza il prefisso D3DTA_. Vedere D3DTSS_RESULTARG.
TexCoordIndex[8] dword Gli stessi valori di D3DTSS_TEXCOORDINDEX senza il prefisso D3DTSS_TCI.
TextureTransformFlags[8] dword Stessi valori dei valori D3DTEXTURETRANSFORMFLAGS senza il prefisso D3DTTFF_. Vedere D3DTSS_TEXTURETRANSFORMFLAGS.

 

Stati di trasformazione

Impostare gli stati di trasformazione per inizializzare le matrici di trasformazione. Gli effetti usano matrici trasposte per l'efficienza. È possibile fornire matrici trasposte a un effetto oppure un effetto trasporrà automaticamente le matrici prima di usarle.

Trasforma stato Tipo Valori
ProjectionTransform float4x4 Matrice 4x4 di float. Gli stessi valori di D3DTS_PROJECTION senza il prefisso D3DTS_.
TextureTransform[8] float4x4 Matrice 4x4 di float. Stessi valori di D3DTRANSFORMSTATETYPE senza il prefisso D3DTS_.
ViewTransform float4x4 Matrice 4x4 di float. Gli stessi valori di D3DTS_VIEW senza il prefisso D3DTS_.
WorldTransform float4x4 Matrice 4x4 di float.

 

Formato effetto