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