Gần đây tôi đã tạo ra một trò chơi ( LD21 ) sử dụng trình tạo bóng hình học để chuyển đổi các điểm thành các hình tam giác / kết cấu. Vì tôi có ấn tượng rằng sự hỗ trợ cho # 330 là phổ biến, tôi chỉ viết các shader # 330, nhưng có vẻ như rất nhiều phần cứng không quá cũ chỉ hỗ trợ # 130 (theo GLView)
Bây giờ, vì tôi chỉ quen với chức năng lõi # 330, tôi gặp khó khăn khi viết lại các shader của mình thành # 130. Trình tạo bóng mảnh vỡ khá đơn giản để viết lại, nhưng tôi chỉ xoay sở để đưa đỉnh của nó và trình đổ bóng hình học xuống # 150.
Vì vậy, nó có thể viết lại các shader hay nó sẽ đòi hỏi nhiều thay đổi trong công cụ kết xuất của tôi?
Shader hình học
#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);
}