#include "Uniforms.hlsl" #include "Samplers.hlsl" #include "Transform.hlsl" #include "Fog.hlsl" void VS(float4 iPos : POSITION, float2 iTexCoord : TEXCOORD0, #ifdef VERTEXCOLOR float4 iColor : COLOR0, #endif #ifdef SKINNED float4 iBlendWeights : BLENDWEIGHT, int4 iBlendIndices : BLENDINDICES, #endif #ifdef INSTANCED float4x3 iModelInstance : TEXCOORD2, #endif #ifdef BILLBOARD float2 iSize : TEXCOORD1, #endif out float2 oTexCoord : TEXCOORD0, out float4 oWorldPos : TEXCOORD2, #ifdef VERTEXCOLOR out float4 oColor : COLOR0, #endif out float4 oPos : POSITION) { float4x3 modelMatrix = iModelMatrix; float3 worldPos = GetWorldPos(modelMatrix); oPos = GetClipPos(worldPos); oTexCoord = GetTexCoord(iTexCoord); oWorldPos = float4(worldPos, GetDepth(oPos)); #ifdef VERTEXCOLOR oColor = iColor; #endif } void PS(float2 iTexCoord : TEXCOORD0, float4 iWorldPos: TEXCOORD2, #ifdef VERTEXCOLOR float4 iColor : COLOR0, #endif #ifdef PREPASS out float4 oDepth : COLOR1, #endif #ifdef DEFERRED out float4 oAlbedo : COLOR1, out float4 oNormal : COLOR2, out float4 oDepth : COLOR3, #endif out float4 oColor : COLOR0) { // Get material diffuse albedo #ifdef DIFFMAP float4 diffColor = cMatDiffColor * tex2D(sDiffMap, iTexCoord); #ifdef ALPHAMASK if (diffColor.a < 0.5) discard; #endif #else float4 diffColor = cMatDiffColor; #endif #ifdef VERTEXCOLOR diffColor *= iColor; #endif // Get fog factor #ifdef HEIGHTFOG float fogFactor = GetHeightFogFactor(iWorldPos.w, iWorldPos.y); #else float fogFactor = GetFogFactor(iWorldPos.w); #endif #if defined(PREPASS) // Fill light pre-pass G-Buffer oColor = float4(0.5, 0.5, 0.5, 1.0); oDepth = iWorldPos.w; #elif defined(DEFERRED) // Fill deferred G-buffer oColor = float4(GetFog(diffColor.rgb, fogFactor), diffColor.a); oAlbedo = float4(0.0, 0.0, 0.0, 0.0); oNormal = float4(0.5, 0.5, 0.5, 1.0); oDepth = iWorldPos.w; #else oColor = float4(GetFog(diffColor.rgb, fogFactor), diffColor.a); #endif }