1

我一直在使用QmlOgre Qt 示例以使其与 Qt5 final 一起使用。原始示例本身现在看起来很好并且行为符合预期。我的代码在这里:https ://github.com/advancingu/QmlOgre

但是,我发现当通过从 C++ 发出的更改信号或从示例 QML 场景中的简单计时器修改 QML 文本项时,会出现问题。例如,我添加了一个 10 毫秒 QML 计时器,它只是增加一个计数器并将其分配给一个文本项。对应的代码在这里:https ://github.com/advancingu/QmlOgre/tree/issue

现在发生的情况是,在每一帧上,文本项的大多数字符(除了一个或两个)随机消失。它们中的哪一个消失随着每一帧而变化,所以有很多闪烁。确实显示的字符是正确的并且在正确的位置。

我的观察是这个问题只出现在某些应用程序执行中,所以它看起来很像一个线程问题(QmlEngine 运行一个处理 QML 对象绑定的线程,QML 绘画有它自己的线程,Ogre 生活/必须生活在其中)。

任何人都知道为什么会发生这种情况或如何解决这个问题?

  • 食人魔版本:1.8.1
  • Qt 版本:5.0.1(从今天开始的 5.1-dev 有同样的问题)
  • 操作系统/发行版:Ubuntu 12.04 64bit
  • 图形驱动程序:尝试使用 Mesa 9.0 和 FGLRX(均显示)
4

2 回答 2

1

仍然不确定是什么导致了这个问题,但我找到了一种方法来解决它,方法是创建一个单独的 OpenGL 上下文OgreNode供 Ogre 使用。当然,这可能会导致性能恶化,但这仍然比不可靠工作的情况要好。我的存储库中的代码已使用此修复程序进行更新。

于 2013-04-05T22:48:01.383 回答
0

glPushAttrib(GL_ALL_ATTRIB_BITS)就我而言,我解决了渲染之前和之后的调用glPopAttrib()。您还应该确保所有绘图都发生在beginNativePainting()和之间endNativePainting()(参见http://doc.qt.io/qt-5.8/qpainter.html#beginNativePainting)。

于 2017-04-05T12:41:14.917 回答