我对这只虫子已经束手无策了。任何关于如何追踪它的建议将不胜感激。
背景:
我一直在尝试将ogre3d视图实现为Qt5中的一个QQuickItem。有一个例子(qmlogre)表明这是可能的。示例代码需要对Win32进行大量重构,并且所做的不仅仅是演示。这个例子只是概念的证明。
问题:
当我在Ogre代码(SceneManager::createEntity)中调用特定方法时,Qt项将不再呈现。如果我注释掉对该方法的调用,它就会呈现良好。如果我注释掉该方法中的代码并将其替换为‘返回0’,它将不再呈现。所讨论的代码与图形无关(它将三维实体加载到内存中)。
我尝试过的:
我能管理这么大这么复杂的东西吗?是否有类似的有用工具?(在Windows 7上,Qt在v5.1下载中提供的编译器是明威)
我知道默认情况下Qt5是线程化的。如何判断是否已超出线程堆栈大小?
食人魔不安全。Qt代码是否可能同时在不同的线程上运行,并使食人魔崩溃?我的代码是由来自QML的事件调用的(它位于Qt槽中)。
发布于 2013-09-25 17:47:30
我不知道Ogre的细节,但是文档中说实体类使用OpenGL缓冲区。那么,您可能会在访问OpenGL后端的线程之间发生冲突。
您是否尝试过OpenGL调试器(如GLIntercept或gDEBugger (cf Tools) )?
发布于 2013-10-02 15:17:49
您说您正在从QML中加载对象。默认情况下,在Qt 5中,这意味着在Qt工作线程而不是QML呈现线程中加载对象。这不管用。所有Ogre调用都需要从创建Ogre的呈现线程中进行,否则您将得到未定义的行为。
我还建议在https://github.com/advancingu/QmlOgre上查看QML示例的分支。这是您提到的示例代码,但将其重构到库中。现在要接近生产还为时尚早,但是您也许可以从它中获得一些代码的想法。
https://stackoverflow.com/questions/19005854
复制相似问题