|
|
固定管道混合可以得到 130fps以上 可是换到 可编程管道 却只有84~95的fps
这是为什么???
//变换矩阵
float4x4 matW: WORLD;
float4x4 matV: VIEW;
float4x4 matP: PROJECTION;
// 纹理
texture tex0 : TEXLAYER0;
texture tex1 : TEXLAYER1;
texture tex2 : TEXLAYER2;
texture tex3 : TEXLAYER3;
texture tex4 : TEXLAYER4;
texture tex5 : TEXLAYER5;
texture tex6 : TEXLAYER6;
texture tex7 : TEXLAYER7;
texture tex8 : TEXLAYER8;
texture tex9 : TEXLAYER9;
// 输入顶点格式
struct VS_INPUT
{
float3 pos : POSITION;
float4 diff : COLOR0;
float2 tex : TEXCOORD0;
};
// 输出顶点格式
struct VS_OUTPUT
{
float4 pos : POSITION;
float4 diff : COLOR0;
float2 tex : TEXCOORD0;
};
// 声明名为VS的顶点着色器
VS_OUTPUT VS( VS_INPUT In )
{
VS_OUTPUT Out = (VS_OUTPUT)0;
float4x4 WorldView = mul(matW, matV); // matW和 matV相乘生成 WorldView矩阵
float3 P = mul(float4(In.pos, 1), (float4x3)WorldView); // 计算view空间的位置
Out.pos = mul(float4(P, 1), matP); // 计算投影空间的位置
Out.diff = In.diff; // 输入颜色转换为输出颜色
Out.tex.x = In.tex.x; // 纹理的X坐标不变......
Out.tex.y = In.tex.y; // 纹理的Y坐标颠倒
return Out;
}
// 纹理采样状态
sampler Sampler = sampler_state
{
Texture = (tex0); AddressU = WRAP; AddressV = WRAP; MinFilter = ANISOTROPIC; MagFilter = ANISOTROPIC; MipFilter = ANISOTROPIC;MipMapLodBias = 0;
};
// 纹理采样状态
sampler Sampler1 = sampler_state
{
Texture = (tex1);AddressU = WRAP; AddressV = WRAP; MinFilter = ANISOTROPIC; MagFilter = ANISOTROPIC; MipFilter = ANISOTROPIC;MipMapLodBias = 0;
};
// 纹理采样状态
sampler Sampler2 = sampler_state
{
Texture = (tex2);AddressU = WRAP; AddressV = WRAP; MinFilter = ANISOTROPIC; MagFilter = ANISOTROPIC; MipFilter = ANISOTROPIC;MipMapLodBias = 0;
};
// 纹理采样状态
sampler Sampler3 = sampler_state
{
Texture = (tex3);AddressU = WRAP; AddressV = WRAP; MinFilter = ANISOTROPIC; MagFilter = ANISOTROPIC; MipFilter = ANISOTROPIC;MipMapLodBias = 0;
};
// 纹理采样状态
sampler Sampler4 = sampler_state
{
Texture = (tex4);AddressU = WRAP; AddressV = WRAP; MinFilter = ANISOTROPIC; MagFilter = ANISOTROPIC; MipFilter = ANISOTROPIC;MipMapLodBias = 0;
};
// 纹理采样状态
sampler Sampler5 = sampler_state
{
Texture = (tex5); AddressU = WRAP; AddressV = WRAP; MinFilter = ANISOTROPIC; MagFilter = ANISOTROPIC; MipFilter = ANISOTROPIC;MipMapLodBias = 0;
};
// 纹理采样状态
sampler Sampler6 = sampler_state
{
Texture = (tex6);AddressU = WRAP; AddressV = WRAP; MinFilter = ANISOTROPIC; MagFilter = ANISOTROPIC; MipFilter = ANISOTROPIC;MipMapLodBias = 0;
};
// 纹理采样状态
sampler Sampler7 = sampler_state
{
Texture = (tex7);AddressU = WRAP; AddressV = WRAP; MinFilter = ANISOTROPIC; MagFilter = ANISOTROPIC; MipFilter = ANISOTROPIC;MipMapLodBias = 0;
};
// 纹理采样状态
sampler Sampler8 = sampler_state
{
Texture = (tex8);AddressU = WRAP; AddressV = WRAP; MinFilter = ANISOTROPIC; MagFilter = ANISOTROPIC; MipFilter = ANISOTROPIC;MipMapLodBias = 0;
};
// 纹理采样状态
sampler Sampler9 = sampler_state
{
Texture = (tex9); AddressU = WRAP; AddressV = WRAP; MinFilter = ANISOTROPIC; MagFilter = ANISOTROPIC; MipFilter = ANISOTROPIC;MipMapLodBias = 0;
};
float4 PS(
float4 Diff : COLOR0,
float2 Tex : TEXCOORD0) : COLOR
{
float3 vColor = tex2D(Sampler, Tex);
float4 vDetail1;
float4 vfade = tex2D(Sampler1, Tex);
float ffade = vfade.a ;
vfade.a = 1.0f - ( vfade.r + vfade.g + vfade.b );
vDetail1 = vfade.r*lerp(tex2D(Sampler6, Tex),tex2D(Sampler2, Tex),ffade)
+vfade.g*lerp(tex2D(Sampler7, Tex),tex2D(Sampler3, Tex),ffade)
+vfade.b*lerp(tex2D(Sampler8, Tex),tex2D(Sampler4, Tex),ffade)
+vfade.a*lerp(tex2D(Sampler9, Tex),tex2D(Sampler5, Tex),ffade);
return float4(lerp(vColor * vDetail1,vColor,Diff),1);
}
// MyShader技巧声明
technique MyShader
{
pass P0 // 最初的0号pass
{
// shaders
VertexShader = compile vs_1_1 VS();
PixelShader = compile ps_2_0 PS();
CullMode = none;
ZEnable = true;
AlphaBlendEnable = false;
AlphaTestEnable = false;
MultiSampleAntialias = false;
FogEnable = false;
}
} |
|