Show More
Commit Description:
Various UI improvements.
Commit Description:
Various UI improvements.
References:
File last commit:
Show/Diff file:
Action:
FNA/src/Graphics/Effect/StockEffects/HLSL/BasicEffect.fx
588 lines | 14.9 KiB | text/plain | TextLexer
588 lines | 14.9 KiB | text/plain | TextLexer
r0 | //----------------------------------------------------------------------------- | |||
// BasicEffect.fx | ||||
// | ||||
// Microsoft XNA Community Game Platform | ||||
// Copyright (C) Microsoft Corporation. All rights reserved. | ||||
//----------------------------------------------------------------------------- | ||||
#include "Macros.fxh" | ||||
DECLARE_TEXTURE(Texture, 0); | ||||
BEGIN_CONSTANTS | ||||
float4 DiffuseColor _vs(c0) _ps(c1) _cb(c0); | ||||
float3 EmissiveColor _vs(c1) _ps(c2) _cb(c1); | ||||
float3 SpecularColor _vs(c2) _ps(c3) _cb(c2); | ||||
float SpecularPower _vs(c3) _ps(c4) _cb(c2.w); | ||||
float3 DirLight0Direction _vs(c4) _ps(c5) _cb(c3); | ||||
float3 DirLight0DiffuseColor _vs(c5) _ps(c6) _cb(c4); | ||||
float3 DirLight0SpecularColor _vs(c6) _ps(c7) _cb(c5); | ||||
float3 DirLight1Direction _vs(c7) _ps(c8) _cb(c6); | ||||
float3 DirLight1DiffuseColor _vs(c8) _ps(c9) _cb(c7); | ||||
float3 DirLight1SpecularColor _vs(c9) _ps(c10) _cb(c8); | ||||
float3 DirLight2Direction _vs(c10) _ps(c11) _cb(c9); | ||||
float3 DirLight2DiffuseColor _vs(c11) _ps(c12) _cb(c10); | ||||
float3 DirLight2SpecularColor _vs(c12) _ps(c13) _cb(c11); | ||||
float3 EyePosition _vs(c13) _ps(c14) _cb(c12); | ||||
float3 FogColor _ps(c0) _cb(c13); | ||||
float4 FogVector _vs(c14) _cb(c14); | ||||
float4x4 World _vs(c19) _cb(c15); | ||||
float3x3 WorldInverseTranspose _vs(c23) _cb(c19); | ||||
MATRIX_CONSTANTS | ||||
float4x4 WorldViewProj _vs(c15) _cb(c0); | ||||
END_CONSTANTS | ||||
#include "Structures.fxh" | ||||
#include "Common.fxh" | ||||
#include "Lighting.fxh" | ||||
// Vertex shader: basic. | ||||
VSOutput VSBasic(VSInput vin) | ||||
{ | ||||
VSOutput vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); | ||||
SetCommonVSOutputParams; | ||||
return vout; | ||||
} | ||||
// Vertex shader: no fog. | ||||
VSOutputNoFog VSBasicNoFog(VSInput vin) | ||||
{ | ||||
VSOutputNoFog vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); | ||||
SetCommonVSOutputParamsNoFog; | ||||
return vout; | ||||
} | ||||
// Vertex shader: vertex color. | ||||
VSOutput VSBasicVc(VSInputVc vin) | ||||
{ | ||||
VSOutput vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); | ||||
SetCommonVSOutputParams; | ||||
vout.Diffuse *= vin.Color; | ||||
return vout; | ||||
} | ||||
// Vertex shader: vertex color, no fog. | ||||
VSOutputNoFog VSBasicVcNoFog(VSInputVc vin) | ||||
{ | ||||
VSOutputNoFog vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); | ||||
SetCommonVSOutputParamsNoFog; | ||||
vout.Diffuse *= vin.Color; | ||||
return vout; | ||||
} | ||||
// Vertex shader: texture. | ||||
VSOutputTx VSBasicTx(VSInputTx vin) | ||||
{ | ||||
VSOutputTx vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); | ||||
SetCommonVSOutputParams; | ||||
vout.TexCoord = vin.TexCoord; | ||||
return vout; | ||||
} | ||||
// Vertex shader: texture, no fog. | ||||
VSOutputTxNoFog VSBasicTxNoFog(VSInputTx vin) | ||||
{ | ||||
VSOutputTxNoFog vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); | ||||
SetCommonVSOutputParamsNoFog; | ||||
vout.TexCoord = vin.TexCoord; | ||||
return vout; | ||||
} | ||||
// Vertex shader: texture + vertex color. | ||||
VSOutputTx VSBasicTxVc(VSInputTxVc vin) | ||||
{ | ||||
VSOutputTx vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); | ||||
SetCommonVSOutputParams; | ||||
vout.TexCoord = vin.TexCoord; | ||||
vout.Diffuse *= vin.Color; | ||||
return vout; | ||||
} | ||||
// Vertex shader: texture + vertex color, no fog. | ||||
VSOutputTxNoFog VSBasicTxVcNoFog(VSInputTxVc vin) | ||||
{ | ||||
VSOutputTxNoFog vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); | ||||
SetCommonVSOutputParamsNoFog; | ||||
vout.TexCoord = vin.TexCoord; | ||||
vout.Diffuse *= vin.Color; | ||||
return vout; | ||||
} | ||||
// Vertex shader: vertex lighting. | ||||
VSOutput VSBasicVertexLighting(VSInputNm vin) | ||||
{ | ||||
VSOutput vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 3); | ||||
SetCommonVSOutputParams; | ||||
return vout; | ||||
} | ||||
// Vertex shader: vertex lighting + vertex color. | ||||
VSOutput VSBasicVertexLightingVc(VSInputNmVc vin) | ||||
{ | ||||
VSOutput vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 3); | ||||
SetCommonVSOutputParams; | ||||
vout.Diffuse *= vin.Color; | ||||
return vout; | ||||
} | ||||
// Vertex shader: vertex lighting + texture. | ||||
VSOutputTx VSBasicVertexLightingTx(VSInputNmTx vin) | ||||
{ | ||||
VSOutputTx vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 3); | ||||
SetCommonVSOutputParams; | ||||
vout.TexCoord = vin.TexCoord; | ||||
return vout; | ||||
} | ||||
// Vertex shader: vertex lighting + texture + vertex color. | ||||
VSOutputTx VSBasicVertexLightingTxVc(VSInputNmTxVc vin) | ||||
{ | ||||
VSOutputTx vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 3); | ||||
SetCommonVSOutputParams; | ||||
vout.TexCoord = vin.TexCoord; | ||||
vout.Diffuse *= vin.Color; | ||||
return vout; | ||||
} | ||||
// Vertex shader: one light. | ||||
VSOutput VSBasicOneLight(VSInputNm vin) | ||||
{ | ||||
VSOutput vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 1); | ||||
SetCommonVSOutputParams; | ||||
return vout; | ||||
} | ||||
// Vertex shader: one light + vertex color. | ||||
VSOutput VSBasicOneLightVc(VSInputNmVc vin) | ||||
{ | ||||
VSOutput vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 1); | ||||
SetCommonVSOutputParams; | ||||
vout.Diffuse *= vin.Color; | ||||
return vout; | ||||
} | ||||
// Vertex shader: one light + texture. | ||||
VSOutputTx VSBasicOneLightTx(VSInputNmTx vin) | ||||
{ | ||||
VSOutputTx vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 1); | ||||
SetCommonVSOutputParams; | ||||
vout.TexCoord = vin.TexCoord; | ||||
return vout; | ||||
} | ||||
// Vertex shader: one light + texture + vertex color. | ||||
VSOutputTx VSBasicOneLightTxVc(VSInputNmTxVc vin) | ||||
{ | ||||
VSOutputTx vout; | ||||
CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 1); | ||||
SetCommonVSOutputParams; | ||||
vout.TexCoord = vin.TexCoord; | ||||
vout.Diffuse *= vin.Color; | ||||
return vout; | ||||
} | ||||
// Vertex shader: pixel lighting. | ||||
VSOutputPixelLighting VSBasicPixelLighting(VSInputNm vin) | ||||
{ | ||||
VSOutputPixelLighting vout; | ||||
CommonVSOutputPixelLighting cout = ComputeCommonVSOutputPixelLighting(vin.Position, vin.Normal); | ||||
SetCommonVSOutputParamsPixelLighting; | ||||
vout.Diffuse = float4(1, 1, 1, DiffuseColor.a); | ||||
return vout; | ||||
} | ||||
// Vertex shader: pixel lighting + vertex color. | ||||
VSOutputPixelLighting VSBasicPixelLightingVc(VSInputNmVc vin) | ||||
{ | ||||
VSOutputPixelLighting vout; | ||||
CommonVSOutputPixelLighting cout = ComputeCommonVSOutputPixelLighting(vin.Position, vin.Normal); | ||||
SetCommonVSOutputParamsPixelLighting; | ||||
vout.Diffuse.rgb = vin.Color.rgb; | ||||
vout.Diffuse.a = vin.Color.a * DiffuseColor.a; | ||||
return vout; | ||||
} | ||||
// Vertex shader: pixel lighting + texture. | ||||
VSOutputPixelLightingTx VSBasicPixelLightingTx(VSInputNmTx vin) | ||||
{ | ||||
VSOutputPixelLightingTx vout; | ||||
CommonVSOutputPixelLighting cout = ComputeCommonVSOutputPixelLighting(vin.Position, vin.Normal); | ||||
SetCommonVSOutputParamsPixelLighting; | ||||
vout.Diffuse = float4(1, 1, 1, DiffuseColor.a); | ||||
vout.TexCoord = vin.TexCoord; | ||||
return vout; | ||||
} | ||||
// Vertex shader: pixel lighting + texture + vertex color. | ||||
VSOutputPixelLightingTx VSBasicPixelLightingTxVc(VSInputNmTxVc vin) | ||||
{ | ||||
VSOutputPixelLightingTx vout; | ||||
CommonVSOutputPixelLighting cout = ComputeCommonVSOutputPixelLighting(vin.Position, vin.Normal); | ||||
SetCommonVSOutputParamsPixelLighting; | ||||
vout.Diffuse.rgb = vin.Color.rgb; | ||||
vout.Diffuse.a = vin.Color.a * DiffuseColor.a; | ||||
vout.TexCoord = vin.TexCoord; | ||||
return vout; | ||||
} | ||||
// Pixel shader: basic. | ||||
float4 PSBasic(PSInput pin) : SV_Target0 | ||||
{ | ||||
float4 color = pin.Diffuse; | ||||
ApplyFog(color, pin.Specular.w); | ||||
return color; | ||||
} | ||||
// Pixel shader: no fog. | ||||
float4 PSBasicNoFog(PSInputNoFog pin) : SV_Target0 | ||||
{ | ||||
return pin.Diffuse; | ||||
} | ||||
// Pixel shader: texture. | ||||
float4 PSBasicTx(PSInputTx pin) : SV_Target0 | ||||
{ | ||||
float4 color = SAMPLE_TEXTURE(Texture, pin.TexCoord) * pin.Diffuse; | ||||
ApplyFog(color, pin.Specular.w); | ||||
return color; | ||||
} | ||||
// Pixel shader: texture, no fog. | ||||
float4 PSBasicTxNoFog(PSInputTxNoFog pin) : SV_Target0 | ||||
{ | ||||
return SAMPLE_TEXTURE(Texture, pin.TexCoord) * pin.Diffuse; | ||||
} | ||||
// Pixel shader: vertex lighting. | ||||
float4 PSBasicVertexLighting(PSInput pin) : SV_Target0 | ||||
{ | ||||
float4 color = pin.Diffuse; | ||||
AddSpecular(color, pin.Specular.rgb); | ||||
ApplyFog(color, pin.Specular.w); | ||||
return color; | ||||
} | ||||
// Pixel shader: vertex lighting, no fog. | ||||
float4 PSBasicVertexLightingNoFog(PSInput pin) : SV_Target0 | ||||
{ | ||||
float4 color = pin.Diffuse; | ||||
AddSpecular(color, pin.Specular.rgb); | ||||
return color; | ||||
} | ||||
// Pixel shader: vertex lighting + texture. | ||||
float4 PSBasicVertexLightingTx(PSInputTx pin) : SV_Target0 | ||||
{ | ||||
float4 color = SAMPLE_TEXTURE(Texture, pin.TexCoord) * pin.Diffuse; | ||||
AddSpecular(color, pin.Specular.rgb); | ||||
ApplyFog(color, pin.Specular.w); | ||||
return color; | ||||
} | ||||
// Pixel shader: vertex lighting + texture, no fog. | ||||
float4 PSBasicVertexLightingTxNoFog(PSInputTx pin) : SV_Target0 | ||||
{ | ||||
float4 color = SAMPLE_TEXTURE(Texture, pin.TexCoord) * pin.Diffuse; | ||||
AddSpecular(color, pin.Specular.rgb); | ||||
return color; | ||||
} | ||||
// Pixel shader: pixel lighting. | ||||
float4 PSBasicPixelLighting(PSInputPixelLighting pin) : SV_Target0 | ||||
{ | ||||
float4 color = pin.Diffuse; | ||||
float3 eyeVector = normalize(EyePosition - pin.PositionWS.xyz); | ||||
float3 worldNormal = normalize(pin.NormalWS); | ||||
ColorPair lightResult = ComputeLights(eyeVector, worldNormal, 3); | ||||
color.rgb *= lightResult.Diffuse; | ||||
AddSpecular(color, lightResult.Specular); | ||||
ApplyFog(color, pin.PositionWS.w); | ||||
return color; | ||||
} | ||||
// Pixel shader: pixel lighting + texture. | ||||
float4 PSBasicPixelLightingTx(PSInputPixelLightingTx pin) : SV_Target0 | ||||
{ | ||||
float4 color = SAMPLE_TEXTURE(Texture, pin.TexCoord) * pin.Diffuse; | ||||
float3 eyeVector = normalize(EyePosition - pin.PositionWS.xyz); | ||||
float3 worldNormal = normalize(pin.NormalWS); | ||||
ColorPair lightResult = ComputeLights(eyeVector, worldNormal, 3); | ||||
color.rgb *= lightResult.Diffuse; | ||||
AddSpecular(color, lightResult.Specular); | ||||
ApplyFog(color, pin.PositionWS.w); | ||||
return color; | ||||
} | ||||
VertexShader VSArray[20] = | ||||
{ | ||||
compile vs_2_0 VSBasic(), | ||||
compile vs_2_0 VSBasicNoFog(), | ||||
compile vs_2_0 VSBasicVc(), | ||||
compile vs_2_0 VSBasicVcNoFog(), | ||||
compile vs_2_0 VSBasicTx(), | ||||
compile vs_2_0 VSBasicTxNoFog(), | ||||
compile vs_2_0 VSBasicTxVc(), | ||||
compile vs_2_0 VSBasicTxVcNoFog(), | ||||
compile vs_2_0 VSBasicVertexLighting(), | ||||
compile vs_2_0 VSBasicVertexLightingVc(), | ||||
compile vs_2_0 VSBasicVertexLightingTx(), | ||||
compile vs_2_0 VSBasicVertexLightingTxVc(), | ||||
compile vs_2_0 VSBasicOneLight(), | ||||
compile vs_2_0 VSBasicOneLightVc(), | ||||
compile vs_2_0 VSBasicOneLightTx(), | ||||
compile vs_2_0 VSBasicOneLightTxVc(), | ||||
compile vs_2_0 VSBasicPixelLighting(), | ||||
compile vs_2_0 VSBasicPixelLightingVc(), | ||||
compile vs_2_0 VSBasicPixelLightingTx(), | ||||
compile vs_2_0 VSBasicPixelLightingTxVc(), | ||||
}; | ||||
int VSIndices[32] = | ||||
{ | ||||
0, // basic | ||||
1, // no fog | ||||
2, // vertex color | ||||
3, // vertex color, no fog | ||||
4, // texture | ||||
5, // texture, no fog | ||||
6, // texture + vertex color | ||||
7, // texture + vertex color, no fog | ||||
8, // vertex lighting | ||||
8, // vertex lighting, no fog | ||||
9, // vertex lighting + vertex color | ||||
9, // vertex lighting + vertex color, no fog | ||||
10, // vertex lighting + texture | ||||
10, // vertex lighting + texture, no fog | ||||
11, // vertex lighting + texture + vertex color | ||||
11, // vertex lighting + texture + vertex color, no fog | ||||
12, // one light | ||||
12, // one light, no fog | ||||
13, // one light + vertex color | ||||
13, // one light + vertex color, no fog | ||||
14, // one light + texture | ||||
14, // one light + texture, no fog | ||||
15, // one light + texture + vertex color | ||||
15, // one light + texture + vertex color, no fog | ||||
16, // pixel lighting | ||||
16, // pixel lighting, no fog | ||||
17, // pixel lighting + vertex color | ||||
17, // pixel lighting + vertex color, no fog | ||||
18, // pixel lighting + texture | ||||
18, // pixel lighting + texture, no fog | ||||
19, // pixel lighting + texture + vertex color | ||||
19, // pixel lighting + texture + vertex color, no fog | ||||
}; | ||||
PixelShader PSArray[10] = | ||||
{ | ||||
compile ps_2_0 PSBasic(), | ||||
compile ps_2_0 PSBasicNoFog(), | ||||
compile ps_2_0 PSBasicTx(), | ||||
compile ps_2_0 PSBasicTxNoFog(), | ||||
compile ps_2_0 PSBasicVertexLighting(), | ||||
compile ps_2_0 PSBasicVertexLightingNoFog(), | ||||
compile ps_2_0 PSBasicVertexLightingTx(), | ||||
compile ps_2_0 PSBasicVertexLightingTxNoFog(), | ||||
compile ps_2_0 PSBasicPixelLighting(), | ||||
compile ps_2_0 PSBasicPixelLightingTx(), | ||||
}; | ||||
int PSIndices[32] = | ||||
{ | ||||
0, // basic | ||||
1, // no fog | ||||
0, // vertex color | ||||
1, // vertex color, no fog | ||||
2, // texture | ||||
3, // texture, no fog | ||||
2, // texture + vertex color | ||||
3, // texture + vertex color, no fog | ||||
4, // vertex lighting | ||||
5, // vertex lighting, no fog | ||||
4, // vertex lighting + vertex color | ||||
5, // vertex lighting + vertex color, no fog | ||||
6, // vertex lighting + texture | ||||
7, // vertex lighting + texture, no fog | ||||
6, // vertex lighting + texture + vertex color | ||||
7, // vertex lighting + texture + vertex color, no fog | ||||
4, // one light | ||||
5, // one light, no fog | ||||
4, // one light + vertex color | ||||
5, // one light + vertex color, no fog | ||||
6, // one light + texture | ||||
7, // one light + texture, no fog | ||||
6, // one light + texture + vertex color | ||||
7, // one light + texture + vertex color, no fog | ||||
8, // pixel lighting | ||||
8, // pixel lighting, no fog | ||||
8, // pixel lighting + vertex color | ||||
8, // pixel lighting + vertex color, no fog | ||||
9, // pixel lighting + texture | ||||
9, // pixel lighting + texture, no fog | ||||
9, // pixel lighting + texture + vertex color | ||||
9, // pixel lighting + texture + vertex color, no fog | ||||
}; | ||||
int ShaderIndex = 0; | ||||
Technique BasicEffect | ||||
{ | ||||
Pass | ||||
{ | ||||
VertexShader = (VSArray[VSIndices[ShaderIndex]]); | ||||
PixelShader = (PSArray[PSIndices[ShaderIndex]]); | ||||
} | ||||
} | ||||