如何在OpenGL 4中的着色器中设置gl_Vertex?

时间:2014-05-04 14:39:08

标签: opengl glsl shader fragment-shader vertex-shader

与OpenGL 1相比,我阅读了很多关于OpenGL 4中的新概念。我的问题是,在旧的GLSL中,我可以使用预定义的gl_Vertex在我的顶点着色器中进行计算。但是在当前版本4.1中已经删除了。

关于这一点有很多问题,但没有人举例说明如何在着色器中实现旧的gl_Vertex。我找到了一些可能性,例如layout (location = 0) in vec3 vertexpos;glBindAttribLocation(shader, 0, "vertexpos");。但无处可解释我在哪里获得了存储当前顶点位置的索引的知识。实际上我找到了this site with indexes,但这似乎与上面提到的代码片段无关。

也许有人可以在黑暗中带来光明并展示一个很小的例子。

1 个答案:

答案 0 :(得分:3)

gl_Vertex不再可用的原因是因为删除了预定义的属性。什么是glVertexPointer - 现在必须使用glVertexAttribPointer手动设置为用户定义的命名属性。着色器无法知道哪些数据属于哪个属性 - 因为它只是数字;但是,如何处理这些数字取决于程序员。

因此,您必须定义至少一个属性(例如vertexpos,如您的示例中所示 - 但名称几乎可以是任何内容),获取属性位置(glGetAttribLocation或使用{{1} }说明符指定默认位置)将符号名称转换为属性槽号,然后使用location指定属性数组。