OpenGL学习记录三(错误排查)

1、glGetError ---三种不同类型的错误标志,最兼容
(手动调用需要每次先清除>>调用函数>>glGetError()获取错误信息)

2、opengl 4.3中 添加了,glDebugMessageCall
1需要不停主动调用,2发生错误时被动通知

//断言
#define ASSERT(x) if(!(x)) __debugbreak();
//添加函数,文件,和错误行信息
#define GLCall(x) GLClearError();\
    x;\
    ASSERT(GLLogCall2(#x, __FILE__, __LINE__))

/* 清除错误 */
static void GLClearError()
{
    while (glGetError() != GL_NO_ERROR);
}
/* 检查错误  错误码需要转换成十六进制 */
static void GLCheckError()
{
    while(GLenum error = glGetError())
    {
        std::cout << "[OpenGL error ] (" << error << " )" << std::endl;
    }
}

static bool GLLogCall2(const char* function, const char* file, int line)
{
    while (GLenum error = glGetError())
    {
        std::cout << "[OpenGL error ] (" << error << " )" << function <<
            " " << file << ":" << line << std::endl;
        return false;
    }
    return true;
}
static bool GLLogCall()
{
    while (GLenum error = glGetError())
    {
        std::cout << "[OpenGL error ] (" << error << " )" << std::endl;
        return false;
    }
    return true;
}

使用

GLCall(glDrawElements(GL_TRIANGLES, sizeof(indices), GL_INT, nullptr));

 

posted @ 2023-03-09 11:12  西瓜皮不甜  阅读(98)  评论(0编辑  收藏  举报