OSG的控制台报错处理

OSG报错或者出现警告怎么办,最快解决方法是查资料问人,但是都不凑效的情况下,只能分析源码了。

报错信息如下:
这里写图片描述

报错调用方定位
触发位置:[State.cpp] bool State::checkGLErrors(StateAttribute::GLMode mode);

*调用堆栈
这里写图片描述

然后发现是这个变量有问题才触发checkGLErrors
这里写图片描述

于是下面这句代码处下断点
[文件名State] void setCheckForGLErrors(CheckForGLErrors check) { _checkGLErrors = check; }

调用堆栈变成了这样:

这里写图片描述

//SceneView.cpp

 if (state->getCheckForGLErrors()!=osg::State::NEVER_CHECK_GL_ERRORS)
    {
        if (state->checkGLErrors("end of SceneView::draw()"))
        {
            // go into debug mode of OGL error in a fine grained way to help
            // track down OpenGL errors.
            //SceneView::draw()的调用处
            state->setCheckForGLErrors(osg::State::ONCE_PER_ATTRIBUTE);
        }
    }

/*是state->checkGLErrors("end of SceneView::draw()")这句代码返回真
导致error被触发*/

OpenGL所有的错误标记

/* ErrorCode */
#define GL_NO_ERROR                       0
#define GL_INVALID_ENUM                   0x0500
#define GL_INVALID_VALUE                  0x0501
#define GL_INVALID_OPERATION              0x0502
#define GL_STACK_OVERFLOW                 0x0503
#define GL_STACK_UNDERFLOW                0x0504
#define GL_OUT_OF_MEMORY                  0x0505

我的报错属于GL_INVALID_ENUM,所以就去百度,googl找解决办法了。

基本知道问题所在了,由于OpenGL3.3(核心版)及以上版本裁剪了很多老GL的东西,所以OSG一直报错误的枚举变量,就是说以前的变量找不到了。启用3.3会迫使你使用OGL3.3以上的东西。此办法不合适需要向下兼容的开发者,适合刚开始开发用。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值