You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openmw-tes3mp/files/shaders/stereo_geometry.glsl

58 lines
1.5 KiB
GLSL

#version 150 compatibility
#extension GL_ARB_viewport_array : require
//#ifdef GL_ARB_gpu_shader5 // Ref: AnyOldName3: This slightly faster path is broken on Vega 56
#if 0
#extension GL_ARB_gpu_shader5 : enable
#define ENABLE_GL_ARB_gpu_shader5
#endif
#ifdef ENABLE_GL_ARB_gpu_shader5
layout (triangles, invocations = 2) in;
layout (triangle_strip, max_vertices = 3) out;
#else
layout (triangles) in;
layout (triangle_strip, max_vertices = 6) out;
#endif
// Geometry Shader Inputs
@INPUTS
// Geometry Shader Outputs
@OUTPUTS
// Stereo matrices
uniform mat4 stereoViewMatrices[2];
uniform mat4 stereoViewProjections[2];
void perVertex(int vertex, int viewport)
{
gl_ViewportIndex = viewport;
// Re-project
gl_Position = stereoViewProjections[viewport] * vec4(vertex_passViewPos[vertex],1);
vec4 viewPos = stereoViewMatrices[viewport] * vec4(vertex_passViewPos[vertex],1);
gl_ClipVertex = vec4(viewPos.xyz,1);
// Input -> output
@FORWARDING
EmitVertex();
}
void perViewport(int viewport)
{
for(int vertex = 0; vertex < gl_in.length(); vertex++)
{
perVertex(vertex, viewport);
}
EndPrimitive();
}
void main() {
#ifdef ENABLE_GL_ARB_gpu_shader5
int viewport = gl_InvocationID;
#else
for(int viewport = 0; viewport < 2; viewport++)
#endif
perViewport(viewport);
}