Files
REM-Mod/FLARDATA/Shader/fixedFunction.vs
2024-10-18 22:02:26 +02:00

109 lines
2.7 KiB
GLSL

//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen
//If you use the supplied shader files you may not modify them unless you state in them what you changed
//and also mention the source or who the author is.
//Fixed function shader for FLAR by Schmackbolzen
#version 330
out vec2 texCoords[2];
out vec3 N;
out vec3 v;
out float RHWdepth;
out vec4 vertexColor;
out vec4 vertexColorSecondary;
out float fogEnd;
out float fogScale;
struct glFogParameters
{
vec3 color;
float density;
float start;
float end;
};
uniform glFogParameters glFog;
uniform bool enableRHWCoordinates;
uniform mat4 modelViewMat;
uniform mat4 projectionMat;
uniform mat3 normalMat;
uniform vec2 projCorrection;
uniform mat4 textureMatrix[2];
uniform bool isInstanced;
uniform bool isInstancedTransparent;
uniform bool isInstancedFog;
uniform bool enableTextureTransform0;
uniform bool enableTextureTransform1;
uniform int texture1Index;
layout (location = 0) in vec4 inPosition;
layout (location = 1) in vec3 inNormal;
layout (location = 2) in vec4 inColor;
layout (location = 3) in vec4 inSecondColor;
layout (location = 4) in vec4 inTexCoord0;
layout (location = 6) in mat4 inModelViewMatInstanced;
layout (location = 10) in float inAlphaValue;
layout (location = 11) in vec2 inFogStartEndInstanced;
void main()
{
mat4 mv;
if(!isInstanced)
mv=modelViewMat;
else
mv=inModelViewMatInstanced;
vertexColor.rgba = (inColor).bgra;
vertexColorSecondary.rgba=inSecondColor.bgra;
if(isInstancedTransparent)
{
vertexColor.a = inAlphaValue;
}
if(!isInstancedFog)
{
fogEnd = glFog.end;
fogScale = 1.0f / (glFog.end - glFog.start);
}
else
{
fogEnd = inFogStartEndInstanced.y;
fogScale = 1.0f / (inFogStartEndInstanced.y - inFogStartEndInstanced.x);
}
v = vec3(mv * inPosition);
N = normalize(mat3(mv) * inNormal);
if (!enableRHWCoordinates)
gl_Position = projectionMat * mv * inPosition;
else
{
gl_Position = vec4((inPosition.x+63.0f / 128.0f)*projCorrection[0]-1,-(inPosition.y+63.0f / 128.0f)*projCorrection[1]+1,inPosition.z*2-1,1);
RHWdepth = inPosition.z/inPosition.w;
}
if(enableTextureTransform0)
{
vec4 texCoords0=vec4(inTexCoord0.xy,0,1);
texCoords[0] = (textureMatrix[0]*texCoords0).xy;
}
else
texCoords[0] = inTexCoord0.xy;
if (texture1Index == 0)
if(enableTextureTransform1)
{
vec4 texCoords0=vec4(inTexCoord0.xy,0,1);
texCoords[1] = (textureMatrix[1]*texCoords0).xy;
}
else
texCoords[1] = inTexCoord0.xy;
else if (texture1Index == 1)
if(enableTextureTransform1)
{
vec4 texCoords1=vec4(inTexCoord0.zw,0,1);
texCoords[1] = (textureMatrix[1]*texCoords1).xy;
}
else
texCoords[1] = inTexCoord0.zw;
}