OpenGL 仅显示最近的顶点绘制

OpenGL only most recent vertex draw displayed

OpenGL 新手,尝试使用矩形绘制函数分别绘制 2 个矩形。使用 openGL 3、GLFW 和 GLEW。我创建了一个名为 drawBox 的函数来绘制一个矩形。 我的问题是,如果我在主循环中多次调用它,则只会显示最后绘制的矩形。

void drawBox(float x, float y, float w, float h, float r, float g, float b) {
GLfloat colours[15], vertices[10] = {
    x, y,
    x, y + h,
    x + w, y + h,
    x + w, y,
    x, y
};
for(int i = 0; i < 5; ++i) {
    colours[3*i] = (GLfloat)r;
    colours[3*i + 1] = (GLfloat)g;
    colours[3*i + 2] = (GLfloat)b;
}
GLuint buff[2];
glGenBuffers(2, buff);

glBindBuffer(GL_ARRAY_BUFFER, buff[1]); 
glBufferData(GL_ARRAY_BUFFER, 15*sizeof(GLfloat), colours, GL_STREAM_DRAW); 
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
glEnableVertexAttribArray(1);

glBindBuffer(GL_ARRAY_BUFFER, buff[0]); 
glBufferData(GL_ARRAY_BUFFER, 10*sizeof(GLfloat), vertices, GL_STREAM_DRAW); 
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, (void*)0);
glEnableVertexAttribArray(0);

glClear( GL_COLOR_BUFFER_BIT );
glUseProgram(defaultShader);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 5);        
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDeleteBuffers(2, buff);
} 

无论过去的绘制如何,我需要更改什么才能使此函数显示一个矩形。假设所有 z-indices 都是 0 并且永远不会发生重叠。假设我可能必须在两次调用 drawBox 之间进行 drawCircle 调用或 drawTriangle 或其他操作。

你应该只调用 glClear( GL_COLOR_BUFFER_BIT ); 一次,在所有 draw*() 类之前。