自定义OpenGL项处于活动状态时的QML文本呈现问题

自定义OpenGL项处于活动状态时的QML文本呈现问题,qml,qt5,ogre,Qml,Qt5,Ogre,我一直在使用QmlOgre Qt示例,以使其与Qt5 final一起工作。原来的示例本身现在看起来很好,并且按照预期的方式运行。我的代码在这里: 但是,我发现QML文本项在通过C++中改变的信号或者在QML场景中的一个简单的定时器中被修改时存在一个问题。例如,我添加了一个10ms的QML计时器,它只增加一个计数器并将其分配给一个文本项。相应的代码如下: 现在的情况是,在每一帧上,文本项的大多数字符(一个或两个字符除外)都会随机消失。它们中的哪一个会随着每一帧的变化而消失,因此会有很多闪烁。显示的

我一直在使用QmlOgre Qt示例,以使其与Qt5 final一起工作。原来的示例本身现在看起来很好,并且按照预期的方式运行。我的代码在这里:

<>但是,我发现QML文本项在通过C++中改变的信号或者在QML场景中的一个简单的定时器中被修改时存在一个问题。例如,我添加了一个10ms的QML计时器,它只增加一个计数器并将其分配给一个文本项。相应的代码如下:

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

我的观察结果是,这个问题只出现在一些应用程序执行中,所以它看起来非常像线程问题(QmlEngine运行一个处理QML对象绑定的线程,qmlpainting有自己的线程,其中Ogre存在/必须存在)

有人知道为什么会发生这种情况或者如何解决吗

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

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

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

在我的例子中,我解决了在渲染之前调用glPushAttrib(GL\u ALL\u ATTRIB\u BITS),在渲染之后调用glpopatrib()。您还应该确保所有绘图都发生在
beginativepainting()
endNativePainting()
(请参阅)。

在我的例子中,我解决了在渲染之前调用
glPushAttrib(GL\u all\u ATTRIB\u位)
,在渲染之后调用
glpopatrib()
的问题。您还应确保所有绘图都发生在
开始绘制()
结束绘制()之间(请参阅)