Direct3D 9 (效果狀態)
效果狀態可用來初始化管線狀態,以準備頂點和圖元處理。
effect state [ [index] ] = expression;
其中:
- 效果狀態 - 類似于傳統的固定函式管線狀態。 以下提供完整的狀態清單。
- [ [index] ] - 選擇性整數索引。 索引會識別效果狀態陣列內的特定狀態。 外部括弧表示索引是選擇性的。 如果使用索引,請務必使用內部括弧。
- 運算式 - 狀態指派運算式。 請參閱 Direct3D 9 (運算式) 。
每個狀態都有原生資料類型。 這是狀態預期值在指派值時會進入的資料類型。 每個狀態預期的資料類型如下所列。
請注意,效果介面會嘗試儘快將值轉換成適當的類型。 常值可以在編譯時期轉換。 非常值 (亦即呼叫適當的 Set 方法時,必須轉換) 一般變數。 例如,效果介面會視需要使用 SetBool、 SetValue和其他類似的函式來轉換值。 為了提升效能,請確定傳遞至效果介面的值已經是正確的類型,而且不需要轉型。 如果執行時間無法轉換值,則會傳回錯誤。
效果狀態可以分成下列類別:
淺色狀態
若要啟用套用效果的最佳效能,應該在效果檔案中指定光線或材質的所有元件。 無法宣告的狀態會設定為某些預設值,因為 Direct3D 無法個別設定光線狀態。
| 淺色狀態 | 類型 | 值 |
|---|---|---|
| LightAmbient[n] | float4 | 請參閱 D3DLIGHT9的環境成員。 |
| LightAttenuation0[n] | FLOAT | 請參閱 D3DLIGHT9的衰減0 成員。 |
| LightAttenuation1[n] | FLOAT | 請參閱 D3DLIGHT9的衰減1 成員。 |
| LightAttenuation2[n] | FLOAT | 請參閱 D3DLIGHT9的衰減2 成員。 |
| LightDiffuse[n] | float4 | 請參閱 D3DLIGHT9的擴散成員。 |
| LightDirection[n] | float3 | 請參閱 D3DLIGHT9的 Direction 成員。 |
| LightEnable[n] | bool | TRUE 或 FALSE。 請參閱 LightEnable 中的 bEnable引數。 |
| LightFalloff[n] | FLOAT | D3DCOLORVALUE。 請參閱 D3DLIGHT9的 Falloff 成員。 |
| LightPhi[n] | FLOAT | 請參閱 D3DLIGHT9的 Phi 成員。 |
| LightPosition[n] | float3 | 請參閱 D3DLIGHT9的 Position 成員。 |
| LightRange[n] | FLOAT | 請參閱 D3DLIGHT9的 Range 成員。 |
| LightSpecular[n] | float4 | 請參閱 D3DLIGHT9的反射成員。 |
| LightTheta[n] | FLOAT | 請參閱 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>;
這會啟用光源,讓點光源成為類型、將光線位置設定為 float310.0f < 、1.0f、23.0f > ,並將環境色彩設定為 float40.7f < 、0.0f、0.0f、1.0f > 。
材料狀態
您無法宣告的狀態會設定為某些預設值,因為 Direct3D 無法個別設定材料狀態。
| 材料狀態 | 類型 | 值 |
|---|---|---|
| MaterialAmbient | float4 | 與Ambient相同的值 |
| MaterialDiffuse | float4 | 與擴散相同的值 |
| MaterialEmissive | float4 | 與Emissive相同的值 |
| MaterialPower | FLOAT | 與Power相同的值 |
| MaterialSpecular | float4 | 與反射相同的值 |
範例:
MaterialDiffuse = float4<0.7f, 0.0f, 0.0f, 1.0f>;
MaterialPower = 3.0f;
這會將擴散色彩設定為 float40.7f < 、0.0f、0.0f、1.0f,並讓材質 3.0f > 的威力。
轉譯狀態
轉譯狀態有兩種類型:
圖元管道轉譯狀態
效果檔案轉譯狀態的名稱類似于固定函式管線狀態,通常會移除前置詞。
| 轉譯狀態 | 類型 | 值 | |||
|---|---|---|---|---|---|
| AlphaBlendEnable | bool | 是非題。 與 D3DRENDERSTATETYPE中的D3DRS_ALPHABLENDENABLE值相同。 | |||
| AlphaFunc | dword | 與不含 D3DCMP_ 前置詞 的 D3DCMPFUNC 值相同。 請參閱D3DRS_ALPHAFUNC。 | |||
| AlphaRef | dword | 與D3DRS_ALPHAREF相同的值。 | |||
| AlphaTestEnable | dword | 是非題。 請參閱D3DRS_ALPHATESTENABLE。 | |||
| BlendOp | dword | 與不含 D3DBLENDOP_ 前置詞的 D3DBLENDOP 值相同。 | |||
| ColorWriteEnable | dword | RED 的位元組合 | 綠色 | 藍色 | 阿 爾 法。 請參閱D3DRS_COLORWRITEENABLE。 |
| DepthBias | FLOAT | 與D3DRS_DEPTHBIAS相同的值。 | |||
| DestBlend | dword | 與不含 D3DBLEND_ 前置詞的 D3DBLEND 值相同。 | |||
| DitherEnable | bool | 是非題。 與D3DRS_DITHERENABLE相同的值。 | |||
| FillMode | dword | 與不含D3DFILL_前置詞的 D3DFILLMODE 值相同。 | |||
| LastPixel | dword | 是非題。 請參閱D3DRS_LASTPIXEL。 | |||
| ShadeMode | dword | 與不含D3DSHADE_前置詞的 D3DSHADEMODE 值相同。 | |||
| SlopeScaleDepthBias | FLOAT | 與D3DRS_SLOPESCALEDEPTHBIAS相同的值。 | |||
| SrcBlend | dword | 與不含 D3DBLEND_ 前置詞的 D3DBLEND 值相同。 | |||
| SRGBWriteEnable | bool | 是非題。 與D3DRS_SRGBWRITEENABLE相同的值。 | |||
| StencilEnable | bool | 是非題。 與D3DRS_STENCILENABLE相同的值。 | |||
| StencilFail | dword | 與不含 D3DSTENCILCAP_ 前置詞的 D3DSTENCILCAPS 相同的值。 請參閱D3DRS_STENCILFAIL。 | |||
| StencilFunc | dword | 與不含 D3DCMP_ 前置詞 的 D3DCMPFUNC 值相同。 請參閱D3DRS_STENCILFUNC。 | |||
| StencilMask | 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 | 與 D3DZBUFFERTYPE 相同的值,不含D3DZB_前置詞。 | |||
| ZFunc | dword | 與 D3DCMPFUNC 相同的值,不含D3DCMP_前置詞。 請參閱D3DRS_ZFUNC。 | |||
| ZWriteEnable | bool | 是非題。 請參閱D3DRS_ZWRITEENABLE。 |
範例:
AlphaBlendEnable = TRUE;
FillMode = WIREFRAME;
這會啟用 Alpha 混合,並讓所有幾何線上框中轉譯。
頂點管道轉譯狀態
效果檔案轉譯狀態的名稱類似于固定函式管線狀態,通常移除前置詞。
| 轉譯狀態 | 類型 | 值 |
|---|---|---|
| 環境 | float4 | 與D3DRS_AMBIENT相同的值。 |
| AmbientMaterialSource | dword | 與不含D3DMCS_前置詞 的 D3DMATERIALCOLORSOURCE 相同的值。 請參閱D3DRS_AMBIENTMATERIALSOURCE。 |
| 裁剪 | bool | 是非題。 與D3DRS_CLIPPING相同的值。 |
| ClipPlaneEnable | dword | D3DCLIPPLANE0 - D3DCLIPPLANE5 宏的位組合。 請參閱 D3DCLIPPLANEn 和D3DRS_CLIPPLANEENABLE。 |
| ColorVertex | bool | 是非題。 與D3DRS_COLORVERTEX相同的值。 |
| CullMode | dword | 與沒有D3DCULL_前置詞 的 D3DCULL 相同的值。 |
| DiffuseMaterialSource | dword | 與不含D3DMCS_前置詞 的 D3DMATERIALCOLORSOURCE 相同的值。 請參閱D3DRS_DIFFUSEMATERIALSOURCE。 |
| EmissiveMaterialSource | dword | 與不含D3DMCS_前置詞 的 D3DMATERIALCOLORSOURCE 相同的值。 請參閱D3DRS_EMISSIVEMATERIALSOURCE。 |
| FogColor | dword | 與 D3DCOLOR相同的值。 請參閱D3DRS_FOGCOLOR。 |
| FogDensity | FLOAT | 與D3DRS_FOGDENSITY相同的值。 |
| FogEnable | bool | 是非題。 與D3DRS_FOGENABLE相同的值。 |
| FogEnd | FLOAT | 與D3DRS_FOGEND相同的值。 |
| FogStart | FLOAT | 與D3DRS_FOGSTART相同的值。 |
| FogTableMode | dword | 與 D3DFOGMODE相同的值。 請參閱 D3DRENDERSTATETYPE中的 D3DRS_FOGTABLEMODE。 |
| FogVertexMode | dword | 與沒有D3DFOG_前置詞 的 D3DFOGMODE 相同的值。 |
| IndexedVertexBlendEnable | bool | 是非題。 與D3DRS_INDEXEDVERTEXBLENDENABLE相同的值。 |
| 光源 | bool | 是非題。 與D3DRS_LIGHTING相同的值。 |
| LocalViewer | bool | 是非題。 與D3DRS_LOCALVIEWER相同的值。 |
| MultiSampleAntialias | bool | 與D3DRS_MULTISAMPLEANTIALIAS相同的值。 |
| MultiSampleMask | dword | 與D3DRS_MULTISAMPLEMASK相同的值。 |
| NormalizeNormals | bool | 是非題。 與D3DRS_NORMALIZENORMALS相同的值。 |
| PatchSegments | FLOAT | 與 SetNPatchMode中的 nSegments 相同的值。 |
| PointScale_A | FLOAT | 與D3DRS_POINTSCALE_A相同的值。 |
| PointScale_B | FLOAT | 與D3DRS_POINTSCALE_B相同的值。 |
| PointScale_C | FLOAT | 與D3DRS_POINTSCALE_C相同的值。 |
| PointScaleEnable | bool | 與D3DRS_POINTSCALEENABLE相同的值。 |
| PointSize | FLOAT | 與D3DRS_POINTSIZE相同的值。 |
| PointSize_Min | FLOAT | 與D3DRS_POINTSIZE_MIN相同的值。 |
| PointSize_Max | FLOAT | 與沒有D3DRS_前置詞的D3DRS_POINTSIZE_MAX值相同。 |
| PointSpriteEnable | bool | 是非題。 與D3DRS_POINTSPRITEENABLE相同的值。 |
| RangeFogEnable | bool | 是非題。 與D3DRS_RANGEFOGENABLE相同的值。 |
| SpecularEnable | bool | 是非題。 與D3DRS_SPECULARENABLE相同的值。 |
| SpecularMaterialSource | dword | 與不含D3DMCS_前置詞的 D3DMATERIALCOLORSOURCE 相同的值。 請參閱D3DRS_SPECULARMATERIALSOURCE。 |
| TweenFactor | FLOAT | 與D3DRS_TWEENFACTOR相同的值。 |
| 頂點Blend | dword | 與不含D3DVBF_前置詞 的 D3DVERTEXBLENDFLAGS 相同的值。 請參閱D3DRS_VERTEXBLEND。 |
範例:
Ambient = float4<0.7f, 0.0f, 0.0f, 1.0f>;
CullMode = CCW;
FogColor = 0xff0000;
這會讓環境色彩 float40.7f < 、0.0f、0.0f、1.0f > 、將後臺擷取模式設定為逆時針模式,並將擴散色彩設定為紅色。
取樣器狀態
取樣器狀態代表取樣器物件。
| 狀態 | 類型 | 值 |
|---|---|---|
| 取樣器 | 採樣 | Null或取樣器狀態欄塊。 |
取樣器階段狀態
取樣器階段狀態是用來取樣紋理。 取樣器狀態會決定篩選類型和紋理定址模式。
| 取樣器狀態 | 類型 | 值 |
|---|---|---|
| AddressU[16] | dword | 與 D3DTEXTUREADDRESS 的值相同,不含D3DTADDRESS_前置詞。 請參閱D3DSAMP_ADDRESSU。 |
| AddressV[16] | dword | 與 D3DTEXTUREADDRESS 的值相同,不含D3DTADDRESS_前置詞。 請參閱D3DSAMP_ADDRESSV。 |
| AddressW[16] | dword | 與 D3DTEXTUREADDRESS 的值相同,不含D3DTADDRESS_前置詞。 請參閱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] | FLOAT | 與沒有D3DSAMP_前置詞D3DSAMP_MIPMAPLODBIAS相同的值。 |
| SRGBTexture | bool | 與沒有D3DSAMP_前置詞D3DSAMP_SRGBTEXTURE相同的值。 |
範例:
AddressU[0] = CLAMP;
AddressV[0] = CLAMP;
AddressW[0] = CLAMP;
這會限制介於 0 到 1 之間的 UVW 值。
著色器狀態
只有兩種效果著色器狀態:一個與頂點著色器物件相關聯,另一個與圖元著色器物件相關聯。
| 著色器狀態 | 類型 | 值 |
|---|---|---|
| PixelShader | pixelhader | Null、元件區塊、編譯目標或圖元著色器參數。 |
| 頂點Shader | 頂點hader | Null、元件區塊、編譯目標或圖元著色器參數。 |
範例:
VertexShader = compile vs_1_1 VSTexture();
PixelShader = NULL;
這會將稍早在 .fx 檔案中定義的頂點著色器編譯為頂點著色器 1.1 版,然後將編譯的著色器設定為頂點著色器。 圖元著色器會指派給 Null。
著色器常數狀態
著色器常數狀態可用來存取著色器常數參數。
| 著色器常數狀態 | 類型 | 值 |
|---|---|---|
| PixelShaderConstant | float[m[n]] | m x n 個浮點數陣列;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]] | m x n ints 陣列。 m 和 n 是選擇性的。 |
| PixelShaderConstantF | float[m[n]] | m x n 個浮點數陣列。 m 和 n 是選擇性的。 |
| VertexShaderConstant | float[m[n]] | m x n 個浮點數陣列。 m 和 n 是選擇性的。 |
| VertexShaderConstant1 | float4 | 一個 4D 浮點數。 |
| VertexShaderConstant2 | float4x2 | 兩個 4D 浮點數。 |
| VertexShaderConstant3 | float4x3 | 三個 4D 浮點數。 |
| VertexShaderConstant4 | float4x4 | 四個 4D 浮點數。 |
| VertexShaderConstantB | bool[m[n]] | m x n 個 bools 陣列。 m 和 n 是選擇性的。 |
| VertexShaderConstantI | int[m[n]] | m x n ints 陣列。 m 和 n 是選擇性的。 |
| VertexShaderConstantF | float[m[n]] | m x n 個浮點數陣列。 m 和 n 是選擇性的。 |
紋理狀態
紋理狀態會初始化多文本混合器所使用的紋理。
| 紋理狀態 | 類型 | 值 |
|---|---|---|
| 紋理[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] | FLOAT | 與沒有D3DTSS_TCI前置詞D3DTSS_BUMPENVLSCALE相同的值。 |
| BumpEnvLOffset[8] | FLOAT | 與沒有D3DTSS_TCI前置詞D3DTSS_BUMPENVLOFFSET相同的值。 |
| BumpEnvMat00[8] | FLOAT | 與D3DTSS_BUMPENVMAT00相同的值。 |
| BumpEnvMat01[8] | FLOAT | 與D3DTSS_BUMPENVMAT01相同的值。 |
| BumpEnvMat10[8] | FLOAT | 與D3DTSS_BUMPENVMAT10相同的值。 |
| BumpEnvMat11[8] | FLOAT | 與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 矩陣。 與 D3DTRANSFORMSTATETYPE 的值相同,不含D3DTS_前置詞。 |
| ViewTransform | float4x4 | 浮點數的 4x4 矩陣。 與沒有D3DTS_前置詞D3DTS_VIEW相同的值。 |
| WorldTransform | float4x4 | 浮點數的 4x4 矩陣。 |