【发布时间】:2013-11-11 15:00:51
【问题描述】:
我正在尝试使用 VBO,here is the full code 绘制一个四边形,但我将逐步发布代码:这是我初始化缓冲区的方式:
data= vector<GLfloat> { // Global variable vector<GLfloat> data;
// Viewport: glViewport(0,0,width,height);
width/2+20,height/2+20,0.0,
width/2+20,height/2-20,0.0,
width/2-20, height/2-20,0.0,
width/2-20, height/2+20,0.0
};
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, 12*sizeof(GLfloat), data.data(), GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
然后在显示函数中我尝试绘制四边形(我使用双缓冲):
glClearColor(1.0, 1.0, 1.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, data.data());
glDrawArrays(GL_QUADS, 0, 4); // Here I get segmentation fault
glDisableClientState(GL_VERTEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glutSwapBuffers();
我在调用glDrawArrays 的行出现分段错误,我还尝试使用glGetError() 获取OpenGL 错误,但没有错误(它返回零)。
【问题讨论】:
-
你使用的opengl版本是什么?你可以通过调用
glGetIntegerv(GL_MAJOR_VERSION, *);和glGetIntegerv(GL_MINOR_VERSION, *);来检查它 -
无法识别宏 GL_MINOR_VERSION 和 GL_MAJOR_VERSION,我必须使用 glGetString(GL_VERSION);