我的问题是我可以在不使用着色器的情况下使用glDrawElements吗?
我按以下方式生成我的vbo:
glGenBuffers(1, &vertexId_);
glBindBuffer(GL_ARRAY_BUFFER, vertexId_);
glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex)*((tess.x + 1) * (tess.y + 1)), &pVertex[0].p.x, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid *) vOffset_);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid *) nOffset_);
glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid *) tOffset_);
glGenBuffers(1, &indexId_);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexId_);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned short)*idxCount_, &pIndices[0], GL_STATIC_DRAW);
glBindVertexArray(0);
所以问题是我可以使用glDrawElements而不绑定任何着色器来绘制吗?我正在使用GL 4.0
答案 0 :(得分:5)
OpenGL 4.0中没有固定的管道,你需要着色器来告诉你如何处理你发送给GPU的数据(顶点)。
有许多关于如何开始使用着色器的资源,例如:http://nehe.gamedev.net/article/glsl_an_introduction/25007/
编辑:正如其他人所指出的那样,这并不完全正确。如果支持,您可以使用兼容性配置文件并使用固定管道。 http://www.opengl.org/registry/doc/glspec40.compatibility.20100311.pdf