Нарушение доступа. при использовании GLEW и GLFW

Я уверен, что все связано правильно. Сначала я использовал glload и glfw из неофициального GLSDK, но затем решил покончить с glload, что означало, что мне пришлось использовать glew, чтобы получить современные заголовки.

#include <GL/glew.h>
#include <GL/glfw.h>

Я включил glew перед glfw согласно инструкциям.

Во время выполнения открывается окно OpenGL

//(relevant code)
if(!glewInit()) {return -1; }
if(!glfwInit()) {return -1; }
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
// also tried glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);

if(!glfwOpenWindow(1024, 768, 8, 8, 8, 8, 24, 8, GLFW_WINDOW)){
glfwTerminate();
return -1;
}

glfwSetWindowTitle("OpenGL 3.2");

//init method
glGenVertexArrays(1, &vao);  //<<  Access violation here.

Есть идеи, что моя проблема здесь?

Я посмотрел на. «Нарушение доступа с использованием VBO с glew» Но это не помогло.

5

Решение

glewInit должен называться после контекст OpenGL создан и привязан к текущему потоку, т.е. после glfwOpenWindow в твоем случае.

7

Другие решения

Немного опоздал, но решил, что я все равно буду трубить.

Как упомянуто datenwolf, в вашем соответствующем коде размещены glewInit() должен вернуть ошибку из-за его позиционирования.

Другая потенциальная проблема, с которой вы можете столкнуться, описана на http://www.opengl.org/wiki/OpenGL_Loading_Library под GLEW раздел.

скопируйте сверху сверху:

У GLEW есть проблемы с основными контекстами.
Это вызывает glGetString(GL_EXTENSIONS),
что приводит к GL_INVALID_ENUMНа GL 3.2+ основной контекст, как только glewInit()Называется.

Решение для GLEW (также предоставленное выше по ссылке) состоит в том, чтобы включить поддержку «ЭКСПЕРИМЕНТАЛЬНАЯ». Пример:

glewExperimental = GL_TRUE;
GLenum err = glewInit();
if( err != GLEW_OK )
{
printf("GlewInit error");
exit(1);
}
3

Также поздно, но для тех, кто все еще ищет

glewExperimental = GL_TRUE;

Перед инициализацией контекст был избавлен от ошибки нарушения доступа, но вместо этого сделал выход из программы с ошибкой GL_INVALID_ENUM. С GLFW мне пришлось дополнительно закомментировать подсказки окна:

//glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
//glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
//glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
//glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);

Затем программы начали компилироваться!

2
По вопросам рекламы [email protected]