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);
}

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

 Martin01 июн. 2012 г., 23:13
Я ничего не делаю с GlewInitResult. glewGetErrorString возвращает «Нет ошибки».
 Tim01 июн. 2012 г., 23:10
Ты что-нибудь делаешь с GlewInitResult? Возможно, вам следует вызывать glewGetErrorString вместо glGetError (для выявления проблем с glew)

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

Решение Вопроса

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

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

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

 Tim01 июн. 2012 г., 23:26
Вам следует проверить шейдеры, прежде чем пытаться связать программу: glGetShaderiv (GL_COMPILE_STATUS) и glGetShaderInfoLog (). Это скажет вам, почему они не компилируются. @ Malymato
 Martin01 июн. 2012 г., 23:48
К сожалению, у меня была синтаксическая ошибка в моем шейдере. Благодарность
 Martin01 июн. 2012 г., 23:24
Я пытался закомментировать строку, но я по-прежнему получаю недопустимое перечисление. Я не могу скомпилировать шейдеры, glGetProgramInfoLog () возвращает «Вершинные шейдеры не были успешно скомпилированы до вызова glLinkProgram (). Ссылка не удалась.»

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

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

Ваш ответ на вопрос