设置 CheckForGLErrors 状态
Set CheckForGLErrors State
我对 OSG 发出的多个 "Warning: detected OpenGL error 'invalid value' after RenderBin::draw(...)" 错误消息有疑问。我发现 this thread 展示了一种添加额外调试信息的方法。不幸的是我找不到设置状态的方法。
我可以创建一个状态并使用代码设置标志:
osg::ref_ptr<osg::State> debugState = new osg::State();
debugState->setCheckForGLErrors(osg::State::CheckForGLErrors::ONCE_PER_ATTRIBUTE);
但是之后我该怎么办?我找不到将 State 添加到 StateSet 的方法。
您显然可以使用 gDEBugger,正如线程中的一些答案所建议的那样。如果您仍然想通过 osg::State
真正做到这一点,那么您可以向所有可绘制对象添加一个 osg::Drawable::DrawCallback
。然后在 DrawCallback
的 drawImplementation
中你可以做一些像 -
virtual void drawImplementation (osg::RenderInfo & renderinfo, const osg::Drawable * drawable) const
{
State& state = *renderInfo.getState();
state->setCheckForGLErrors(osg::State::CheckForGLErrors::ONCE_PER_ATTRIBUTE);
drawable->drawImplementation();
}
我不太确定这么晚更改状态是否会完美运行,您需要检查一下。如果它不起作用,您还可以在调用 drawable->drawImplementation()
之前和之后执行类似 state.checkGLErrors("start of Geometry::drawImplementation()");
和 state.checkGLErrors("end of Geometry::drawImplementation()");
的操作。
我对 OSG 发出的多个 "Warning: detected OpenGL error 'invalid value' after RenderBin::draw(...)" 错误消息有疑问。我发现 this thread 展示了一种添加额外调试信息的方法。不幸的是我找不到设置状态的方法。
我可以创建一个状态并使用代码设置标志:
osg::ref_ptr<osg::State> debugState = new osg::State();
debugState->setCheckForGLErrors(osg::State::CheckForGLErrors::ONCE_PER_ATTRIBUTE);
但是之后我该怎么办?我找不到将 State 添加到 StateSet 的方法。
您显然可以使用 gDEBugger,正如线程中的一些答案所建议的那样。如果您仍然想通过 osg::State
真正做到这一点,那么您可以向所有可绘制对象添加一个 osg::Drawable::DrawCallback
。然后在 DrawCallback
的 drawImplementation
中你可以做一些像 -
virtual void drawImplementation (osg::RenderInfo & renderinfo, const osg::Drawable * drawable) const
{
State& state = *renderInfo.getState();
state->setCheckForGLErrors(osg::State::CheckForGLErrors::ONCE_PER_ATTRIBUTE);
drawable->drawImplementation();
}
我不太确定这么晚更改状态是否会完美运行,您需要检查一下。如果它不起作用,您还可以在调用 drawable->drawImplementation()
之前和之后执行类似 state.checkGLErrors("start of Geometry::drawImplementation()");
和 state.checkGLErrors("end of Geometry::drawImplementation()");
的操作。