Нарушение доступа с использованием VBO с glew - PullRequest
3 голосов
/ 22 октября 2011

Я пытаюсь использовать VBO в своем проекте OpenGL.Я использую библиотеку glew для расширений и glfw для обработки окон.Когда я пытаюсь создать сбой приложения VBO и получаю

Необработанное исключение 0x00000000 в symulator3C.exe: 0xC0000005: нарушение прав доступа

в функции glGenBuffersARB.Вот мой код:

GLuint vboId1=0; //this is global variable

void createVBO(){
normalsVBO = (float *) malloc(sizeof(float)*3*(SIZE_X-1)*SIZE_Y*2);
verticesVBO = (float *) malloc(sizeof(float)*3*(SIZE_X-1)*SIZE_Y*2);
if(normalsVBO==NULL) exit(-1);
if(verticesVBO==NULL) exit(-1);

glGenBuffersARB(1, &vboId1); //HERE IT CRASHES!

// bind VBO in order to use
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboId1);

...
glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(float)*3*(SIZE_X-1)*SIZE_Y*2, verticesVBO, GL_DYNAMIC_DRAW);
glEnableClientState(GL_VERTEX_ARRAY);             // activate vertex coords array
glVertexPointer(3, GL_FLOAT, 0, 0);

}

Я не знаю, что не так.Конечно, перед вызовом этой функции я вызываю glewInit (), и результат - успех.РЕДАКТИРОВАТЬ: я использую Visual Studio 2010

1 Ответ

2 голосов
/ 23 октября 2011

Поскольку ваша программа дает сбой при первом использовании функции, связанной с VBO, похоже, что вы либо неправильно инициализировали GLEW (вызывая glewInit после того, как контекст GL создан и активен), либо ваше оборудование просто не делает этого.поддержка VBO.

Просто проверьте, поддерживает ли ваше оборудование GL_ARB_vertex_buffer_object или версия OpenGL не менее 1,5, и в этом случае вы можете использовать основные версии функций VBO (без суффикса ARB, но вам все равно нуженконечно, правильно инициализировал GLEW для них:

printf("%s\n", glGetString(GL_VERSION));
if(!strstr(glGetString(GL_EXTENSIONS), "GL_ARB_vertex_buffer_object"))
    //no VBO extension

И убедитесь, что вы работаете с последним графическим драйвером.Если вы работаете с драйвером по умолчанию для Windows, он может поддерживать только OpenGL 1.1.

...