繁体   English   中英

QQuickItem将不会呈现

[英]QQuickItem will not render

我对这个错误不知所措。 关于如何追踪它的任何建议将不胜感激。

背景:

我一直在尝试将Ogre3d视图实现为Qt5中的QQuickItem。 有一个示例(qmlogre)显示了它的可能性。 该示例代码需要对Win32进行大量重构,而不仅仅是演示。 该示例仅是概念证明。

问题:

当我在Ogre代码(SceneManager :: createEntity)中调用特定方法时,Qt项目将不再呈现。 如果我注释掉对该方法的调用,它将很好。 如果我注释掉方法中的代码并将其替换为“ return 0”,它将不再呈现。 有问题的代码与图形无关(它将3d实体加载到内存中)。

我试过的

  • 检查了显示异常的食人魔日志。
  • 将Qt日志记录重定向到文件以查看警告/异常。
  • 检查“ this”指针。 我在方法入口处动态地将“ this”强制转换为正在运行的类,并收到一个非null指针。 因此,rtti认为这是有效的类指针。
  • 为了确保Qt代码正确,我将qmlogre示例中的自定义呈现代码替换为呈现纯色矩形的代码。
  • 我似乎没有记忆力不足

我可以在valgrind下运行这么大而复杂的东西吗? 是否有有用的类似工具? (编译器是Mingw,由Windows 7上的vt中Qt提供)

我了解默认情况下Qt5是线程化的。 如何判断是否超出线程堆栈大小?

食人魔不是线程安全的。 Qt代码是否可能同时在不同的线程上运行并导致食人魔崩溃? 我的代码由QML中的事件调用(位于Qt插槽中)。

我不了解Ogre的详细信息,但是文档说Entity类使用OpenGL缓冲区。 然后,可能在访问OpenGL后端的线程之间存在冲突。

您是否尝试过像GLIntercept或gDEBugger(cf https://www.opengl.org/wiki/Debugging_Tools )这样的OpenGL调试器?

您说要从QML内加载对象。 默认情况下,在Qt 5中,这意味着您正在Qt工作线程而不是QML渲染线程中加载对象。 这行不通。 所有Ogre调用都需要在创建Ogre的渲染线程中进行,否则您将获得未定义的行为。

我还建议您在https://github.com/advancingu/QmlOgre上查看QML Ogre示例的分支。 这是您提到的示例代码,但已重构为库。 尚无法将产品投入生产还为时过早,但是您也许可以从中获得一些有关代码的想法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM