【问题标题】:QML text rendering issue with custom OpenGL item activeQML 文本渲染问题,自定义 OpenGL 项目处于活动状态
【发布时间】:2013-04-05 04:56:36
【问题描述】:

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

但是我发现,当通过 C++ 发出的 changed 信号或示例 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 64 位
  • 图形驱动程序:使用 Mesa 9.0 和 FGLRX 进行了尝试(均显示)

【问题讨论】:

    标签: qml qt5 ogre


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-16
        • 1970-01-01
        • 2015-07-10
        相关资源
        最近更新 更多