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 @   西瓜皮不甜  阅读(155)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!
点击右上角即可分享
微信分享提示