如果你真的只是想画上有一个质感的正方形,你应该考虑做一个新的空VAO,并调用glDrawArrays(GL_TRIANGLE_STRIP, 0,3);
顶点着色器那么看起来是这样的:
out vec2 mapping;
void main()
{
float size = 1.0f;
vec2 offset;
switch(gl_VertexID)
{
case 0:
//Bottom-left
mapping = vec2(0.0f, 0.0f);
offset = vec2(-size, -size);
break;
case 1:
//Top-left
mapping = vec2(0.0f, 1.0f);
offset = vec2(-size, size);
break;
case 2:
//Bottom-right
mapping = vec2(1.0, 0.0);
offset = vec2(size, -size);
break;
case 3:
//Top-right
mapping = vec2(1.0, 1.0);
offset = vec2(size, size);
break;
}
gl_Position = vec4(offset, 0.0f, 1.0f);
}
映射变量告诉fragmentshader什么纹理坐标。
你没有指定你的目标GL版本。使用可编程管道,你可以做这个_attribute-less_,所以VBO和EBO都可以完全跳过。尽管如此,您仍然需要获取顶点数据着色(除非它是常量),但现在还有其他可能性。 – derhass