C++ glGetError无限返回1282

C++ glGetError无限返回1282,c++,opengl,C++,Opengl,以下是我记录错误的函数: void check_error(const char* st) { GLenum err(glGetError()); while (err != GL_NO_ERROR) { cerr << "OpenGL error: " << err << " "<<st<<endl; err = glGetError(); } cerr <

以下是我记录错误的函数:

void check_error(const char* st)
{
    GLenum err(glGetError());

    while (err != GL_NO_ERROR)
    {
        cerr << "OpenGL error: " << err << " "<<st<<endl;
        err = glGetError();
    }
    cerr << "?\n";
}
其他地方都不叫它

它产生:
OpenGL错误1282在无限循环中启动

以下是我的简历:

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <gl/glew.h>
#include <gl/glut.h>
#include <GL/glfw3.h>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括

Visual studio 2013

这不是一个直接的答案;但我的GL库中有一个函数代替您的注释:

GLenum
G0::glFlushError () // noexcept
{
    GLenum ret = glGetError();

    if (ret != GL_NO_ERROR)
    {
        GLuint finite = 255; // (watchdog count)
        GLenum gl_err = ret;

        while (gl_err != GL_NO_ERROR && finite--)
            gl_err = glGetError();

        if (gl_err != GL_NO_ERROR)
            G0::terminate("glGetError: reset failed\n");
    }

    return ret;
}

其中
G0
是我的库的名称空间。当您想要测试最新的总账错误并清除它时,需要在一个函数中调用
glGetError
。这是一个“昂贵”的调用,因为它会暂停管道,因此只能在“设置”代码中使用,或在调试过程中使用。

如果没有有效的GL上下文(例如GL窗口),GL可能只返回
GL\u INVALID\u OPERATION
(0x502=1282)。这就是问题所在。非常感谢。出于显而易见的原因,我将库名称空间移动到:
GL0
-
G0
与Rust尚未征服的语言过于接近……您可以拥有与其他事物名称相似的事物。你不必给你的孩子起奇怪的名字everything@user253751-考虑到它的用途,我觉得没那么奇怪。但你需要你的伴侣。
GLenum
G0::glFlushError () // noexcept
{
    GLenum ret = glGetError();

    if (ret != GL_NO_ERROR)
    {
        GLuint finite = 255; // (watchdog count)
        GLenum gl_err = ret;

        while (gl_err != GL_NO_ERROR && finite--)
            gl_err = glGetError();

        if (gl_err != GL_NO_ERROR)
            G0::terminate("glGetError: reset failed\n");
    }

    return ret;
}