Ich habe kürzlich ein Spiel ( LD21 ) erstellt, das einen Geometrie-Shader verwendet, um Punkte in strukturierte Dreiecke / Keulen umzuwandeln. Da ich den Eindruck hatte, dass die Unterstützung für # 330 weit verbreitet war, habe ich nur # 330-Shader geschrieben, aber es scheint, dass viele nicht so alte Hardware nur # 130 unterstützen (laut GLView)
Da ich nur mit der Kernfunktionalität von # 330 vertraut bin, habe ich Probleme, meine Shader auf # 130 umzuschreiben. Das Umschreiben des Fragment-Shaders war ziemlich trivial, aber ich habe es nur geschafft, meinen Scheitelpunkt- und Geometrie-Shader auf # 150 zu bringen.
Ist es also möglich, die Shader neu zu schreiben, oder wären viele Änderungen an meiner Rendering-Engine erforderlich?
Geometrie-Shader
#version 150
layout(points) in;
layout(triangle_strip, max_vertices = 4) out;
uniform mat4 oMatrix;
in VertexData
{
vec4 position;
vec4 texcoord;
vec4 size;
} vert;
out vec2 gTexCoord;
void main()
{
if(vert.position.x>-4f && vert.position.x<4f && vert.position.y>-2f && vert.position.y<2f)
{
gTexCoord=vec2(vert.texcoord.z,vert.texcoord.y);
gl_Position = vert.position + vec4(vert.size.x,vert.size.y,0,0);
EmitVertex();
gTexCoord=vec2(vert.texcoord.x,vert.texcoord.y);
gl_Position = vert.position + vec4(0.0,vert.size.y,0,0);
EmitVertex();
gTexCoord=vec2(vert.texcoord.z,vert.texcoord.w);
gl_Position = vert.position + vec4(vert.size.x,0.0,0,0);
EmitVertex();
gTexCoord=vec2(vert.texcoord.x,vert.texcoord.w);
gl_Position = vert.position;
EmitVertex();
EndPrimitive();
}
}
Vertex-Shader
#version 150
#extension GL_ARB_explicit_attrib_location : enable
layout (location = 0) in vec2 position;
layout (location = 1) in vec4 textureCoord;
layout (location = 2) in vec2 size;
uniform mat4 oMatrix;
uniform vec2 offset;
out VertexData
{
vec4 position;
vec4 texcoord;
vec4 size;
} outData;
void main()
{
outData.position = oMatrix * vec4(position.x+offset.x,position.y+offset.y,0,1);
outData.texcoord = textureCoord;
outData.size = oMatrix * vec4(size.x,size.y,0,0);
}