以下是我记录错误的函数:
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
答案 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
。这是一个“昂贵的”调用,因为它会停止管道,因此只应在“设置”代码中或在调试期间使用。