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
- Stati materiali
- Stati di rendering
- Stati dell'esempio
- Stati di fase sampler
- Stati shader
- Stati costanti shader
- Stati trama
- Stati della fase trama
- Trasforma stati
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:
|
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. |