OpenGL: glGetError () возвращает неверное перечисление после вызова glewInit ()

Я использую GLEW и Freeglut. По какой-то причине после вызова glewInit () glGetError () возвращает код ошибки 1280, даже если glewExperimental = GL_FALSE.

Я не могу скомпилировать шейдеры, glGetProgramInfoLog () возвращает & quot; Вершинные шейдеры не были успешно скомпилированы до вызова glLinkProgram (). Ссылка не удалась. & Quot; Я был в состоянии собрать шейдеры раньше.

Переустановка драйверов не помогла.

Вот мой код:

int main(int argc, char* argv[])
{
    GLenum GlewInitResult, res;

    InitWindow(argc, argv);

    res = glGetError(); // res = 0

    glewExperimental = GL_TRUE;
    GlewInitResult = glewInit();    

    fprintf(stdout, "ERROR: %s\n", glewGetErrorString(GlewInitResult)); // "No error"
    res = glGetError(); // res = 1280

    glutMainLoop();

    exit(EXIT_SUCCESS);
}

void InitWindow(int argc, char* argv[])
{
    glutInit(&argc, argv);

    glutInitContextVersion(4, 0);
    glutInitContextFlags(GLUT_FORWARD_COMPATIBLE);
    glutInitContextProfile(GLUT_CORE_PROFILE);

    glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,
    GLUT_ACTION_GLUTMAINLOOP_RETURNS);

    glutInitWindowPosition(0, 0);
    glutInitWindowSize(CurrentWidth, CurrentHeight);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);

    WindowHandle = glutCreateWindow(WINDOW_TITLE);

    GLenum errorCheckValue = glGetError();

    if (WindowHandle < 1)
    {
        fprintf(stderr, "ERROR: Could not create new rendering window.\n");
        exit(EXIT_FAILURE);
    }

    glutReshapeFunc(ResizeFunction);
    glutDisplayFunc(RenderFunction);
    glutIdleFunc(IdleFunction);
    glutTimerFunc(0, TimerFunction, 0);
    glutCloseFunc(Cleanup);
    glutKeyboardFunc(KeyboardFunction);
}

Что я делаю не так?

Ответы на вопрос(2)

http: //www.opengl.org/wiki/OpenGL_Loading_Librar

Он упоминает, почему это происходит, и говорит: «в некоторых случаях вы все равно можете получить GL_INVALID_ENUM после указания glewExperimental в зависимости от вашей версии glew».

Похоже, что можно игнорировать, если вы не видите никаких других проблем.

glew просто не работает правильно ... Самым простым решением для меня было использование libepoxy. Это не требует никакой инициализации. Просто замените свой

#include <GL/glew.h>

#include <epoxy/gl.h>
#include <epoxy/glx.h>

и удали весь код glew. Если вы используете gcc, вам также придется заменить «-lGLEW» на «-lepoxy». Вот и все. Например, у меня есть что-то вроде:

g++ main.cpp -lepoxy -lSDL2 -lSDL2_image -lSDL2_mixer -lglut -lGLU -o main

важным сохранить флаг эпоксидной смолы перед другими.

ВАШ ОТВЕТ НА ВОПРОС