我一直在尝试在我的计算机上实现 VBO,但遇到了段错误:
Unhandled exception at 0x00000000 in attocube.exe: 0xC0000005: Access violation
错误出现在我在 void init()
中调用 glBindBuffer(GL_ARRAY_BUFFER, ID);
的行。
我使用了以下问题的代码:How to get VBO working
#include <windows.h>
#include <iostream>
#include <GL/glew.h>
#include <GL/freeglut.h>
#pragma comment(lib,"glew32.lib")
GLuint ID;
void init(){
glewInit();
glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
glShadeModel(GL_FLAT);
glEnableClientState(GL_VERTEX_ARRAY);
float data[][2] = {{50,50},{100,50},{75,100}};
glGenBuffers(1,&ID);
glBindBuffer(GL_ARRAY_BUFFER, ID);
glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW);
}
void reshape(int w, int h){
glViewport(0,0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0f, (GLdouble) w, 0.0f, (GLdouble) h);
}
void display(){
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0f,0.0f,0.0f);
glBindBuffer(GL_ARRAY_BUFFER, ID);
glVertexPointer(2, GL_FLOAT, 2*sizeof(float), 0);
glDrawArrays(GL_TRIANGLES,0,3);
glFlush();
}
int main(int argc, char **argv){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(300,300);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
我的配置如下: Windows 7/Geforce GTX 570/glew 1.9.0
最佳答案
您的代码缺少对所需 OpenGL 版本可用性的任何检查(或者在您使用扩展的情况下,如果存在扩展)。您始终必须检查请求的功能是否确实存在。
参见 http://glew.sourceforge.net/basic.html 的第 2 段
现在顶点缓冲对象是一个非常普遍的特性,它们不太可能不可用。但崩溃表明这正是问题所在。因此,请确保正确安装了正确的驱动程序。
关于c++ - glBindBuffer 崩溃 - 使用 glew 的 VBO 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12736691/