C++ 清除glvertexattributepointer参数的概念
我已经看到一些OpenGL示例使用:C++ 清除glvertexattributepointer参数的概念,c++,opengl,C++,Opengl,我已经看到一些OpenGL示例使用: glVertexAttribPointer(0, 3, GL_FLOAT, false, Vertex.SIZE * 4, 0); GLint posAttrib = glGetAttribLocation(shaderProgram, "position"); glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0); 将数据传递到顶点着色器时,以及一些使用: glVertexAttri
glVertexAttribPointer(0, 3, GL_FLOAT, false, Vertex.SIZE * 4, 0);
GLint posAttrib = glGetAttribLocation(shaderProgram, "position");
glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0);
将数据传递到顶点着色器时,以及一些使用:
glVertexAttribPointer(0, 3, GL_FLOAT, false, Vertex.SIZE * 4, 0);
GLint posAttrib = glGetAttribLocation(shaderProgram, "position");
glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0);
其中,position
是顶点着色器接收到的第一个属性(我猜是管道本身的第一个属性)
有什么区别
是同一件事吗
如果我在第一个参数中指定0
,就像在第一个示例中一样,这是否意味着它将转到OpenGL管道的第一个属性?(这是顶点着色器中的“位置”),这只是执行第二个示例中代码的较短方法
void glVertexAttribPointer( GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer);
index
参数对应于着色器中的布局(位置=索引)
。在glsl中,可以通过执行以下操作指定输入变量的位置
layout(location = 12) in vec2 position;
那你应该跑了
glVertexAttribPointer(12, 2, GL_FLOAT, GL_FALSE, 0, 0);
如果未在着色器中指定布局(位置)
,则将为输入变量指定默认布局位置。因为在您的例子中,position
是第一个输入变量,所以它获取位置0
glGetAttriblLocation(着色器程序,“位置”)代码>查询输入变量的布局位置位置
更多信息可在此处找到: