学习OpenGL的时候碰到一个奇怪的问题。刚学到了OpenGL可以使用glDrawElements或者glDrawArrays两种方式来绘制图元。我就想练习一下这两种不同的绘图方式。然后**在同一个渲染循环中**分别使用 glDrawElements绘制第一个模型,**glDrawArrays绘制第二个模型**,奇怪的问题出现了,只有glDrawArrays这个绘图有效,但是我把绘制第二个模型的代码段注释起来后,第一个也是可以正常绘制的,也就是说**在同一个渲染循环中不能同时使用glDrawElements和glDrawArrays这两个函数**?我猜测OpenGL应该不会犯这么傻的错误,但是我实在不知道我代码哪里出了问题,请大佬们帮忙看看到底是哪里出了问题。
下面贴上我的代码片段:
//准备第一个模型vbo,vao,ebo
GLuint vbo, ebo, vao;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertex), vertex, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glGenBuffers(1, &ebo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(index), index, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glGenVertexArrays(1, &vao);
//准备第二个模型vbo,vao
GLuint sanvbo, sanvao;
glGenBuffers(1, &sanvbo);
glBindBuffer(GL_ARRAY_BUFFER, sanvbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(san), san, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glGenVertexArrays(1, &sanvao);
//渲染过程
//第一个模型:使用glDrawElements渲染
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
glBindVertexArray(vao);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 3 * sizeof(GLfloat), nullptr);
glEnableVertexAttribArray(0);
glDrawElements(GL_LINES, sizeof(index) / sizeof(GLuint), GL_UNSIGNED_INT, 0);
//第二个模型,使用glDrawArrays渲染
glBindBuffer(GL_ARRAY_BUFFER, sanvbo);
glBindVertexArray(sanvao);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 3 * sizeof(GLfloat), nullptr);
glEnableVertexAttribArray(0);
glDrawArrays(GL_TRIANGLES, 0, sizeof(san) / sizeof(float));
如上面代码段所示,如果我只单独的绘制一个模型,两个都可以正常绘制。但是一次绘制两个的时候就只有第二个被绘制出来了,第一个始终没有,不知道到底是哪里出了问题。