mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-12-11 05:01:09 +00:00
fc0cf4f998
It's probably still necessary to replace GLEW with another loader library. GLEW is pretty much broken on core OpenGL without some hacky workarounds...
68 lines
1.7 KiB
Text
68 lines
1.7 KiB
Text
|
|
in vec4 aPosition;
|
|
in vec2 aTexCoord;
|
|
in vec4 aColor;
|
|
#ifndef SIMPLE // we do not need these for simple shaders
|
|
in vec4 aVertex2;
|
|
out vec4 pixelpos;
|
|
out vec2 glowdist;
|
|
#endif
|
|
|
|
out vec4 vTexCoord;
|
|
out vec4 vColor;
|
|
|
|
#ifdef UNIFORM_VB
|
|
uniform float fakeVB[100];
|
|
#endif
|
|
|
|
void main()
|
|
{
|
|
vec4 vert;
|
|
vec4 tc;
|
|
|
|
#ifdef UNIFORM_VB
|
|
|
|
if (aTexCoord.x >= 100000.0)
|
|
{
|
|
int fakeVI = int(aTexCoord.y)*5;
|
|
vert = aPosition + vec4(fakeVB[fakeVI], fakeVB[fakeVI+1], fakeVB[fakeVI+2], 0.0);
|
|
tc = vec4(fakeVB[fakeVI+3], fakeVB[fakeVI+4], 0.0, 0.0);
|
|
}
|
|
else
|
|
#endif
|
|
{
|
|
vert = aPosition;
|
|
tc = vec4(aTexCoord, 0.0, 0.0);
|
|
}
|
|
|
|
#ifndef SIMPLE
|
|
vec4 worldcoord = ModelMatrix * mix(vert, aVertex2, uInterpolationFactor);
|
|
#else
|
|
vec4 worldcoord = ModelMatrix * vert;
|
|
#endif
|
|
|
|
vec4 eyeCoordPos = ViewMatrix * worldcoord;
|
|
|
|
vColor = aColor;
|
|
|
|
#ifndef SIMPLE
|
|
pixelpos.xyz = worldcoord.xyz;
|
|
pixelpos.w = -eyeCoordPos.z/eyeCoordPos.w;
|
|
|
|
glowdist.x = -((uGlowTopPlane.w + uGlowTopPlane.x * worldcoord.x + uGlowTopPlane.y * worldcoord.z) * uGlowTopPlane.z) - worldcoord.y;
|
|
glowdist.y = worldcoord.y + ((uGlowBottomPlane.w + uGlowBottomPlane.x * worldcoord.x + uGlowBottomPlane.y * worldcoord.z) * uGlowBottomPlane.z);
|
|
#endif
|
|
|
|
#ifdef SPHEREMAP
|
|
vec3 u = normalize(eyeCoordPos.xyz);
|
|
vec4 n = normalize(TextureMatrix * vec4(tc.x, 0.0, tc.y, 0.0)); // use texture matrix and coordinates for our normal. Since this is only used on walls, the normal's y coordinate is always 0.
|
|
vec3 r = reflect(u, n.xyz);
|
|
float m = 2.0 * sqrt( r.x*r.x + r.y*r.y + (r.z+1.0)*(r.z+1.0) );
|
|
vec2 sst = vec2(r.x/m + 0.5, r.y/m + 0.5);
|
|
vTexCoord.xy = sst;
|
|
#else
|
|
vTexCoord = TextureMatrix * tc;
|
|
#endif
|
|
|
|
gl_Position = ProjectionMatrix * eyeCoordPos;
|
|
}
|