自定义OpenGL项激活的QML文本呈现问题

时间:2013-04-05 04:56:37

标签: qml qt5 ogre

我一直在使用 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有同样的问题)
  • OS / Distro:Ubuntu 12.04 64bit
  • 图形驱动程序:尝试使用Mesa 9.0和FGLRX(均显示)

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

在我的情况下,我解决了渲染前glPushAttrib(GL_ALL_ATTRIB_BITS)glPopAttrib()之后的问题。您还应确保所有绘图都在beginNativePainting()endNativePainting()之间进行(请参阅http://doc.qt.io/qt-5.8/qpainter.html#beginNativePainting)。