Я пытаюсь создать окно с freeglut, а затем использовать glew для создания контекста 3.2, чтобы использовать современные функции OpenGL (с использованием c ++ и ПК с Windows). Моя проблема в том, что создание контекста (которое я пытался сделать как до, так и после инициализации freeglut), похоже, не работает, и я получаю нарушение прав доступа каждый раз, когда пытаюсь использовать функцию, подобную glCreateShader.
Код, который я использую, выглядит следующим образом (он расположен в начале метода int main (int argc, char ** argv)):
glutInit(&argc, argv);
glutInitWindowPosition(-1, -1);
glutInitWindowSize(640, 480);
glutInitDisplayMode(GLUT_RGBA || GLUT_DOUBLE || GLUT_DEPTH);
glutCreateWindow("some title");glewExperimental = GL_TRUE;
GLenum err = glewInit();
if (GLEW_OK != err)
{
fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
}
fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
if (GLEW_VERSION_3_2)
{
fprintf(stdout, "OpenGL 3.2 ready", glewGetString(GLEW_VERSION));
}
...
vertexShader;
vertexShader = glCreateShader(GL_VERTEX_SHADER); //<-- Access Violation
Кроме того, код инициации glew копируется 1: 1 с их веб-сайта.
Я надеюсь, что моя ошибка не слишком очевидна и что кто-то находит время, чтобы помочь мне.
У вас есть проблема там:
glutInitDisplayMode(GLUT_RGBA || GLUT_DOUBLE || GLUT_DEPTH);
Логическое ИЛИ ||
это нечто иное, чем бит ИЛИ |
, Вы хотите немного ИЛИ битовые маски |
, не логическое или им. Кроме того, таким образом вы получите контекст профиля совместимости OpenGL-3, а не основной контекст.
Других решений пока нет …