OpenGL的:glGetError()调用glewInit后返回无效枚举()(OpenGL: gl

2019-06-25 02:16发布

我使用GLEW和freeglut。 出于某种原因,于glewInit(),glGetError()调用之后返回错误代码1280,即使采用glewExperimental = GL_FALSE。

我不能编译着色器,glGetProgramInfoLog()返回“顶点着色器(一个或多个)未glLinkProgram之前成功编译()被调用,连接失败。” 我能之前编译着色器。

重新安装驱动程序并没有帮助。

这里是我的代码:

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

我做错了吗?

Answer 1:

你看到这个wiki页面的意见?

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

它提到会出现这种情况,和它说:“在某些情况下,你还可以根据您的GLEW版本指定glewExperimental后得到GL_INVALID_ENUM”。

这听起来像它可能是安全的,因为你没有看到任何其他的问题,忽略长。



Answer 2:

这似乎只是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

这似乎让环氧标志在别人面前是很重要的。



文章来源: OpenGL: glGetError() returns invalid enum after call to glewInit()