Я уверен, что все связано правильно. Сначала я использовал 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» Но это не помогло.
glewInit
должен называться после контекст OpenGL создан и привязан к текущему потоку, т.е. после glfwOpenWindow
в твоем случае.
Немного опоздал, но решил, что я все равно буду трубить.
Как упомянуто 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);
}
Также поздно, но для тех, кто все еще ищет
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);
Затем программы начали компилироваться!