效果狀態可用來初始化管線狀態,以準備頂點和像素處理。
effect state [ [index] ] = expression;
哪裡:
- 效果狀態 - 類似於傳統的固定函式管線狀態。 以下提供狀態的完整清單。
- [ [index] ] - 選擇性整數索引。 索引會識別效果狀態陣列中的特定狀態。 外括弧表示索引是選擇性的。 如果使用索引,請務必使用內部括弧。
- 表達式 - 狀態指派表達式。 請參閱 表示式 (Direct3D 9)。
每個狀態都有原生數據類型。 這是當效果指派值時,狀態預期值會進入的數據類型。 每個狀態預期的數據類型如下所列。
請注意,效果介面會嘗試儘早將值轉換成適當的類型。 常值可以在編譯時期轉換。 呼叫適當的 Set 方法時,需要轉換非常值(亦即一般變數)。 例如,效果介面會視需要使用 setBool setBool、SetValue和類似的函式來轉換值。 為了提升效能,請確定傳遞至效果介面的值已經是正確的類型,而且不需要轉型。 如果運行時間無法轉換值,則會傳回錯誤。
效果狀態可以分成下列類別:
淺色狀態
若要啟用套用效果的最佳效能,效果檔案中應指定光線或材質的所有元件。 無法宣告的狀態會設定為某些預設值,因為 Direct3D 無法個別設定光線狀態。
| 淺色狀態 | 類型 | 值 |
|---|---|---|
| LightAmbient[n] | float4 | 請參閱 D3DLIGHT9的環境成員。 |
| LightAttenuation0[n] | 浮 | 請參閱 D3DLIGHT9的衰減0 成員。 |
| LightAttenuation1[n] | 浮 | 請參閱 D3DLIGHT9的衰減1 成員。 |
| LightAttenuation2[n] | 浮 | 請參閱 D3DLIGHT9的衰減2 成員。 |
| LightDiffuse[n] | float4 | 請參閱 D3DLIGHT9的擴散成員。 |
| LightDirection[n] | float3 | 請參閱 D3DLIGHT9的 Direction 成員。 |
| LightEnable[n] | bool | TRUE 或 FALSE。 請參閱 LightEnable中的 bEnable 自變數。 |
| LightFalloff[n] | 浮 | D3DCOLORVALUE。 請參閱 D3DLIGHT9的 Falloff 成員。 |
| LightPhi[n] | 浮 | 請參閱 D3DLIGHT9的 Phi 成員。 |
| LightPosition[n] | float3 | 請參閱 D3DLIGHT9的位置成員。 |
| LightRange[n] | 浮 | 請參閱 D3DLIGHT9的 Range 成員。 |
| LightSpecular[n] | float4 | 請參閱 D3DLIGHT9的反射成員。 |
| LightTheta[n] | 浮 | 請參閱 D3DLIGHT9的 Theta 成員。 |
| LightType[n] | dword | 與最多 n 個 D3DLIGHTTYPE 值陣列的值相同,不含D3DLIGHT_前置詞。 |
例:
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>;
這會啟用光源,使點光源類型、將光源位置設定為 float3<10.0f、1.0f、23.0f>,並將環境色彩設定為 float4<0.7f、0.0f、0.0f、0.0f、1.0f>。
材料狀態
您無法宣告的狀態會設定為某些預設值,因為 Direct3D 無法個別設定材質狀態。
| 材質狀態 | 類型 | 值 |
|---|---|---|
| MaterialAmbient | float4 | 與環境 相同的值 |
| MaterialDiffuse | float4 | 與 擴散 相同的值 |
| MaterialEmissive | float4 | 與 Emissive 相同的值 |
| MaterialPower | 浮 | 與 Power 相同的值 |
| MaterialSpecular | float4 | 與 反射 相同的值 |
例:
MaterialDiffuse = float4<0.7f, 0.0f, 0.0f, 1.0f>;
MaterialPower = 3.0f;
這會將擴散色彩設定為 float4<0.7f、0.0f、0.0f、1.0f>,並讓材質的功率 3.0f。
轉譯狀態
轉譯狀態有兩種類型:
圖元管道轉譯狀態
效果檔案轉譯狀態的名稱類似於固定函式管線狀態,通常會移除前置詞。
| 轉譯狀態 | 類型 | 值 |
|---|---|---|
| AlphaBlendEnable | bool | True 或 False。 與 D3DRENDERSTATETYPE中的D3DRS_ALPHABLENDENABLE值相同。 |
| AlphaFunc | dword | 與不含D3DCMP_前置詞的 D3DCMPFUNC 值相同。 請參閱D3DRS_ALPHAFUNC。 |
| AlphaRef | dword | 與D3DRS_ALPHAREF相同的值。 |
| AlphaTestEnable | dword | True 或 False。 請參閱D3DRS_ALPHATESTENABLE。 |
| BlendOp | dword | 與不含D3DBLENDOP_前置詞的 D3DBLENDOP 值相同。 |
| ColorWriteEnable | dword | RED、GREEN、BLUE 和 ALPHA 的位組合。 請參閱D3DRS_COLORWRITEENABLE。 |
| DepthBias | 浮 | 與D3DRS_DEPTHBIAS相同的值。 |
| DestBlend | dword | 與不含D3DBLEND_前置詞 D3DBLEND 相同的值。 |
| DitherEnable | bool | True 或 False。 與D3DRS_DITHERENABLE相同的值。 |
| FillMode | dword | 與不含D3DFILL_前置詞 D3DFILLMODE 相同的值。 |
| LastPixel | dword | True 或 False。 請參閱D3DRS_LASTPIXEL。 |
| ShadeMode | dword | 與不含D3DSHADE_前置詞 D3DSHADEMODE 相同的值。 |
| SlopeScaleDepthBias | 浮 | 與D3DRS_SLOPESCALEDEPTHBIAS相同的值。 |
| SrcBlend | dword | 與不含D3DBLEND_前置詞 D3DBLEND 相同的值。 |
| SRGBWriteEnable | bool | True 或 False。 與D3DRS_SRGBWRITEENABLE相同的值。 |
| StencilEnable | bool | True 或 False。 與D3DRS_STENCILENABLE相同的值。 |
| 樣板Fail | dword | 與不含D3DSTENCILCAP_前置詞的 D3DSTENCILCAPS 值相同。 請參閱D3DRS_STENCILFAIL。 |
| 樣板Func | dword | 與不含D3DCMP_前置詞的 D3DCMPFUNC 值相同。 請參閱D3DRS_STENCILFUNC。 |
| 樣板Mask | dword | 與D3DRS_STENCILMASK相同的值。 |
| StencilPass | dword | 與不含D3DSTENCILCAP_前置詞的 D3DSTENCILCAPS 值相同。 請參閱D3DRS_STENCILPASS。 |
| StencilRef | int | 與D3DRS_STENCILREF相同的值。 |
| StencilWriteMask | dword | 與D3DRS_STENCILWRITEMASK相同的值。 |
| StencilZFail | dword | 與不含D3DSTENCILCAP_前置詞的 D3DSTENCILCAPS 值相同。 請參閱D3DRS_STENCILZFAIL。 |
| TextureFactor | dword | 與 D3DCOLOR相同的值。 與D3DRS_TEXTUREFACTOR相同的值。 |
| Wrap0 - Wrap15 | dword | 值與D3DRS_WRAP0所使用的值相同。 有效值為:
|
| ZEnable | dword | 與不含D3DZB_前置詞 D3DZBUFFERTYPE 相同的值。 |
| ZFunc | dword | 與不含D3DCMP_前置詞的 D3DCMPFUNC 值相同。 請參閱D3DRS_ZFUNC。 |
| ZWriteEnable | bool | True 或 False。 請參閱D3DRS_ZWRITEENABLE。 |
例:
AlphaBlendEnable = TRUE;
FillMode = WIREFRAME;
這會啟用 Alpha 混合,並讓所有幾何在線框中轉譯。
頂點管道轉譯狀態
效果檔案轉譯狀態的名稱類似於固定函式管線狀態,通常會移除前置詞。
| 轉譯狀態 | 類型 | 值 |
|---|---|---|
| 氛圍 | float4 | 與D3DRS_AMBIENT相同的值。 |
| AmbientMaterialSource | dword | 與不含D3DMCS_前置詞的 D3DMATERIALCOLORSOURCE 值相同。 請參閱D3DRS_AMBIENTMATERIALSOURCE。 |
| 裁剪 | bool | True 或 False。 與D3DRS_CLIPPING相同的值。 |
| ClipPlaneEnable | dword | D3DCLIPPLANE0的位組合 - D3DCLIPPLANE5巨集。 請參閱 D3DCLIPPLANEn 和 D3DRS_CLIPPLANEENABLE。 |
| ColorVertex | bool | True 或 False。 與D3DRS_COLORVERTEX相同的值。 |
| CullMode | dword | 與不含D3DCULL_前置詞 D3DCULL 相同的值。 |
| DiffuseMaterialSource | dword | 與不含D3DMCS_前置詞的 D3DMATERIALCOLORSOURCE 值相同。 請參閱D3DRS_DIFFUSEMATERIALSOURCE。 |
| EmissiveMaterialSource | dword | 與不含D3DMCS_前置詞的 D3DMATERIALCOLORSOURCE 值相同。 請參閱D3DRS_EMISSIVEMATERIALSOURCE。 |
| FogColor | dword | 與 D3DCOLOR相同的值。 請參閱D3DRS_FOGCOLOR。 |
| FogDensity | 浮 | 與D3DRS_FOGDENSITY相同的值。 |
| FogEnable | bool | True 或 False。 與D3DRS_FOGENABLE相同的值。 |
| FogEnd | 浮 | 與D3DRS_FOGEND相同的值。 |
| FogStart | 浮 | 與D3DRS_FOGSTART相同的值。 |
| FogTableMode | dword | 與 D3DFOGMODE相同的值。 請參閱 D3DRENDERSTATETYPE中的D3DRS_FOGTABLEMODE。 |
| FogVertexMode | dword | 與不含D3DFOG_前置詞的 D3DFOGMODE 值相同。 |
| IndexedVertexBlendEnable | bool | True 或 False。 與D3DRS_INDEXEDVERTEXBLENDENABLE相同的值。 |
| 照明 | bool | True 或 False。 與D3DRS_LIGHTING相同的值。 |
| LocalViewer | bool | True 或 False。 與D3DRS_LOCALVIEWER相同的值。 |
| MultiSampleAntialias | bool | 與D3DRS_MULTISAMPLEANTIALIAS相同的值。 |
| MultiSampleMask | dword | 與D3DRS_MULTISAMPLEMASK相同的值。 |
| NormalizeNormals | bool | True 或 False。 與D3DRS_NORMALIZENORMALS相同的值。 |
| PatchSegments | 浮 | 與 SetNPatchMode中的 nSegments 相同值。 |
| PointScale_A | 浮 | 與D3DRS_POINTSCALE_A相同的值。 |
| PointScale_B | 浮 | 與D3DRS_POINTSCALE_B相同的值。 |
| PointScale_C | 浮 | 與D3DRS_POINTSCALE_C相同的值。 |
| PointScaleEnable | bool | 與D3DRS_POINTSCALEENABLE相同的值。 |
| PointSize | 浮 | 與D3DRS_POINTSIZE相同的值。 |
| PointSize_Min | 浮 | 與D3DRS_POINTSIZE_MIN相同的值。 |
| PointSize_Max | 浮 | 與不含D3DRS_前置詞D3DRS_POINTSIZE_MAX相同的值。 |
| PointSpriteEnable | bool | True 或 False。 與D3DRS_POINTSPRITEENABLE相同的值。 |
| RangeFogEnable | bool | True 或 False。 與D3DRS_RANGEFOGENABLE相同的值。 |
| SpecularEnable | bool | True 或 False。 與D3DRS_SPECULARENABLE相同的值。 |
| SpecularMaterialSource | dword | 與不含D3DMCS_前置詞的 D3DMATERIALCOLORSOURCE 值相同。 請參閱D3DRS_SPECULARMATERIALSOURCE。 |
| TweenFactor | 浮 | 與D3DRS_TWEENFACTOR相同的值。 |
| 頂點Blend | dword | 與不含D3DVBF_前置詞 D3DVERTEXBLENDFLAGS 相同的值。 請參閱D3DRS_VERTEXBLEND。 |
例:
Ambient = float4<0.7f, 0.0f, 0.0f, 1.0f>;
CullMode = CCW;
FogColor = 0xff0000;
這會讓環境色彩 float4<0.7f、0.0f、0.0f、1.0f>、將後面撲殺模式設為逆時針,並將霧色設定為紅色。
取樣器狀態
取樣器狀態代表取樣器物件。
| 州 | 類型 | 值 |
|---|---|---|
| 採樣 | 採樣 | NULL或取樣器狀態區塊。 |
取樣器階段狀態
取樣器階段狀態是用來取樣紋理。 取樣器狀態會決定篩選類型和紋理尋址模式。
| 取樣器狀態 | 類型 | 值 |
|---|---|---|
| AddressU[16] | dword | 與不含D3DTADDRESS_前置詞的 D3DTEXTUREADDRESS 值相同。 請參閱D3DSAMP_ADDRESSU。 |
| AddressV[16] | dword | 與不含D3DTADDRESS_前置詞的 D3DTEXTUREADDRESS 值相同。 請參閱D3DSAMP_ADDRESSV。 |
| AddressW[16] | dword | 與不含D3DTADDRESS_前置詞的 D3DTEXTUREADDRESS 值相同。 請參閱D3DSAMP_ADDRESSW。 |
| BorderColor[16] | D3DCOLOR | 與不含D3DTEXF_前置詞 D3DTEXTUREFILTERTYPE 相同的值。 請參閱D3DSAMP_BORDERCOLOR。 |
| MagFilter[16] | dword | 與不含D3DTEXF_前置詞 D3DTEXTUREFILTERTYPE 相同的值。 請參閱D3DSAMP_MAGFILTER。 |
| MaxAnisotropy[16] | dword | 與不含D3DSAMP_前置詞D3DSAMP_MAXANISOTROPY相同的值。 |
| MaxMipLevel[16] | int | 與不含D3DSAMP_前置詞的D3DSAMP_MAXMIPLEVEL值相同。 |
| MinFilter[16] | dword | 與不含D3DSAMP_前置詞D3DSAMP_MINFILTER相同的值。 |
| MipFilter[16] | dword | 與不含D3DSAMP_前置詞D3DSAMP_MIPFILTER相同的值。 |
| MipMapLodBias[16] | 浮 | 與不含D3DSAMP_前置詞D3DSAMP_MIPMAPLODBIAS相同的值。 |
| SRGBTexture | bool | 與不含D3DSAMP_前置詞的D3DSAMP_SRGBTEXTURE值相同。 |
例:
AddressU[0] = CLAMP;
AddressV[0] = CLAMP;
AddressW[0] = CLAMP;
這會限制介於 0 到 1 之間的 UVW 值。
著色器狀態
只有兩種效果著色器狀態:一個與頂點著色器對象相關聯,另一個與圖元著色器對象相關聯。
| 著色器狀態 | 類型 | 值 |
|---|---|---|
| PixelShader | pixelshader | NULL、元件區塊、編譯目標或像素著色器參數。 |
| 頂點Shader | 頂點陰影器 | NULL、元件區塊、編譯目標或像素著色器參數。 |
例:
VertexShader = compile vs_1_1 VSTexture();
PixelShader = NULL;
這會將 .fx 檔案稍早定義的頂點著色器 VSTexture 編譯為頂點著色器 1.1 版,然後將編譯的著色器設定為頂點著色器。 像素著色器會指派給 NULL。
著色器常數狀態
著色器常數狀態可用來存取著色器常數參數。
| 著色器常數狀態 | 類型 | 值 |
|---|---|---|
| PixelShaderConstant | float[m[n]] | m x n 個 floats 陣列;m 和 n 是選擇性的。 |
| PixelShaderConstant1 | float4 | 一個 4D 浮點數。 |
| PixelShaderConstant2 | float4x2 | 兩個 4D 浮點數。 |
| PixelShaderConstant3 | float4x3 | 三個 4D 浮點數。 |
| PixelShaderConstant4 | float4x4 | 四個 4D 浮點數。 |
| PixelShaderConstantB | bool[m[n]] | m x n 個 bools 陣列;m 和 n 是選擇性的。 |
| PixelShaderConstantI | int[m[n]] | ints 的 m x n 陣列。 m 和 n 是選擇性的。 |
| PixelShaderConstantF | float[m[n]] | m x n 個浮點數陣列。 m 和 n 是選擇性的。 |
| 頂點ShaderConstant | float[m[n]] | m x n 個浮點數陣列。 m 和 n 是選擇性的。 |
| 頂點ShaderConstant1 | float4 | 一個 4D 浮點數。 |
| 頂點ShaderConstant2 | float4x2 | 兩個 4D 浮點數。 |
| 頂點ShaderConstant3 | float4x3 | 三個 4D 浮點數。 |
| 頂點ShaderConstant4 | float4x4 | 四個 4D 浮點數。 |
| 頂點ShaderConstantB | bool[m[n]] | m x n 個 bools 陣列。 m 和 n 是選擇性的。 |
| VertexShaderConstantI | int[m[n]] | ints 的 m x n 陣列。 m 和 n 是選擇性的。 |
| 頂點ShaderConstantF | float[m[n]] | m x n 個浮點數陣列。 m 和 n 是選擇性的。 |
紋理狀態
紋理狀態會初始化多重文字混合器所使用的紋理。
| 紋理狀態 | 類型 | 值 |
|---|---|---|
| Texture[8] | 質地 | NULL或紋理參數。 |
紋理階段狀態
紋理階段狀態會設定多文本混合器中的紋理和紋理階段。
| 紋理階段狀態 | 類型 | 值 |
|---|---|---|
| AlphaOp[8] | dword | 與沒有D3DTOP_前置詞的 D3DTEXTUREOP 相同。 請參閱D3DTSS_ALPHAOP。 |
| AlphaArg0[8] | dword | 與沒有D3DTA_前置詞 D3DTA 相同。 請參閱D3DTSS_ALPHAARG0。 |
| AlphaArg1[8] | dword | 與沒有D3DTA_前置詞 D3DTA 相同。 請參閱D3DTSS_ALPHAARG1。 |
| AlphaArg2[8] | dword | 與沒有D3DTA_前置詞 D3DTA 相同。 請參閱D3DTSS_ALPHAARG2。 |
| ColorArg0[8] | dword | 與沒有D3DTA_前置詞 D3DTA 相同。 請參閱D3DTSS_COLORARG0。 |
| ColorArg1[8] | dword | 與沒有D3DTA_前置詞 D3DTA 相同。 請參閱D3DTSS_COLORARG1。 |
| ColorArg2[8] | dword | 與沒有D3DTA_前置詞 D3DTA 相同。 請參閱D3DTSS_COLORARG2。 |
| ColorOp[8] | dword | 與沒有D3DTOP_前置詞的 D3DTEXTUREOP 相同。 請參閱D3DTSS_COLOROP。 |
| BumpEnvLScale[8] | 浮 | 與不含D3DTSS_TCI前置詞的D3DTSS_BUMPENVLSCALE值相同。 |
| BumpEnvLOffset[8] | 浮 | 與不含D3DTSS_TCI前置詞的D3DTSS_BUMPENVLOFFSET值相同。 |
| BumpEnvMat00[8] | 浮 | 與D3DTSS_BUMPENVMAT00相同的值。 |
| BumpEnvMat01[8] | 浮 | 與D3DTSS_BUMPENVMAT01相同的值。 |
| BumpEnvMat10[8] | 浮 | 與D3DTSS_BUMPENVMAT10相同的值。 |
| BumpEnvMat11[8] | 浮 | 與D3DTSS_BUMPENVMAT11相同的值。 |
| ResultArg[8] | dword | 與沒有D3DTA_前置詞 D3DTA 相同。 請參閱D3DTSS_RESULTARG。 |
| TexCoordIndex[8] | dword | 與沒有D3DTSS_TCI前置詞D3DTSS_TEXCOORDINDEX相同的值。 |
| TextureTransformFlags[8] | dword | 與不含D3DTTFF_前置詞的值 D3DTEXTURETRANSFORMFLAGS 值相同。 請參閱D3DTSS_TEXTURETRANSFORMFLAGS。 |
轉換狀態
設定轉換狀態以初始化轉換矩陣。 效果會使用轉置矩陣來提高效率。 您可以提供轉置矩陣給效果,或者效果會在使用矩陣之前自動轉置矩陣。
| 轉換狀態 | 類型 | 值 |
|---|---|---|
| ProjectionTransform | float4x4 | 浮點數的 4x4 矩陣。 與不含D3DTS_前置詞D3DTS_PROJECTION相同的值。 |
| TextureTransform[8] | float4x4 | 浮點數的 4x4 矩陣。 與不含D3DTS_前置詞的 D3DTRANSFORMSTATETYPE 值相同。 |
| ViewTransform | float4x4 | 浮點數的 4x4 矩陣。 與不含D3DTS_前置詞的D3DTS_VIEW值相同。 |
| WorldTransform | float4x4 | 浮點數的 4x4 矩陣。 |