glGetError无限返回1282

时间:2015-07-16 19:21:11

标签: 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 << "?\n";
}

这样叫:

int _tmain(int argc, char* argv[])
{
    check_error("start");
    ...
}

在其他任何地方都没有打电话。

它产生: OpenGL error 1282 start处于无限循环中。

以下是我的包含:

#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

1 个答案:

答案 0 :(得分:3)

这不是一个直接的答案;但是代替你的评论,我在我的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是我的图书馆名称空间。如果您想测试最新的GL错误 - 并清除它 - 需要在loop中调用glGetError。这是一个“昂贵的”调用,因为它会停止管道,因此只应在“设置”代码中或在调试期间使用。