当前位置: 首页 > 知识库问答 >
问题:

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

单修德
2023-03-14

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

我无法编译着色器,glGetProgram InfoLog()返回“在调用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);
}

我做错了什么?

共有2个答案

谢宸
2023-03-14

对我来说,最简单的解决方案是使用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

在别人面前保持领先似乎很重要。

孙承
2023-03-14

你看到这个维基页面上的评论了吗?

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

它提到了为什么会出现这种情况,并说“在某些情况下,根据您的glew版本指定glew实验后,您可能仍然会GL_INVALID_ENUM”。

听起来,只要你没有看到任何其他问题,就可以安全地忽略。

 类似资料:
  • 我正在Linux上运行一些OpenGL程序。无法理解初始化glew时收到错误的原因。(错误1.5.2) 由以下人员管理:

  • 我在网上搜索了很长时间。但没用。请帮助或尝试给出一些想法如何实现这一点。 提前谢了。 我有以下代码: 使用winhttp API访问服务,获取springboot错误信息 我试了很多办法,还是没用。 例如,将springboot端口和winhttp API请求端口修改为8089。

  • 问题内容: 我遇到一个问题: org.hibernate.MappingException:JDBC类型的No Dialect映射:1111 尝试使用JPA创建本机查询时调用postgres函数。 我在启动单例中创建了一个EJB计时器,以每6小时运行一次Postgres函数。该函数返回void并检查过期的记录,将其删除并更新某些状态。它不接受任何参数,并且返回void。 如果我使用PgAdmin查

  • 如果我在Wildfly中使用默认的安全域设置,我可以成功调用远程EJB。我访问此安全域根本没有检查任何用户凭据。在实现或使用检查数据库中用户名和密码的安全域后,我遇到了下面的异常。 我不知道我错过了什么。我希望这里有人能给我指出一个正确的方向。 例外情况: jboss-ejb3。xml: 独立。xml TestRemote。Java语言 谢谢,贝尔

  • 我在Jaspersoft Studio 6.4.0中编译时遇到异常。我该如何解决这个问题? 我创建了一个包含子报表的报表,我想从中返回值。为此,我有: 在子报告中创建了一个变量,名为“log总”,设置为另一个变量的值,这是报告中计算的求和。没有重置类型,没有计算功能。 在主报表中创建了一个名称和类型相同的变量。没有重置类型,没有计算函数。 在主报表中,在计算类型为“System”的两个变量之间创建