C++ QQuickItem将不会渲染

C++ QQuickItem将不会渲染,c++,windows,qml,qt5,ogre,C++,Windows,Qml,Qt5,Ogre,我对这只虫子束手无策。任何关于如何追踪的建议都将不胜感激 背景: 我一直在尝试在Qt5中将ogre3d视图作为QQuickItem实现。 有一个例子(qmlogre)表明这是可能的。所需的示例代码 对Win32进行了大量的重构,而不仅仅是演示。这个例子只是概念的证明 问题: 当我在Ogre代码(SceneManager::createEntity)中调用特定方法时,Qt项将不再呈现。如果我注释掉对该方法的调用,它将呈现良好效果。如果我注释掉方法中的代码并将其替换为“return 0”,它将不再呈

我对这只虫子束手无策。任何关于如何追踪的建议都将不胜感激

背景:

我一直在尝试在Qt5中将ogre3d视图作为QQuickItem实现。 有一个例子(qmlogre)表明这是可能的。所需的示例代码 对Win32进行了大量的重构,而不仅仅是演示。这个例子只是概念的证明

问题:

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

我所尝试的:

  • 检查显示异常的ogre日志
  • 已将Qt日志重定向到文件以查看警告/异常
  • 选中“this”指针。我在方法项上动态地将“this”强制转换为它所运行的类,并收到一个非空指针。所以rtti认为它是一个有效的类指针
  • 为了确保Qt代码正确,我将qmlogre示例中的自定义渲染代码替换为渲染平面颜色矩形的代码
  • 我似乎没有记错
我能在valgrind下运行这么大和复杂的东西吗?是否有类似的有用工具?(编译器为Mingw,由Qt在Windows 7上的v5.1下载中提供)

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


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

我不知道Ogre的详细信息,但文档中说实体类使用OpenGL缓冲区。那么,访问OpenGL后端的线程之间可能存在冲突


您是否尝试过像GLIntercept或gDEBugger(cf)这样的OpenGL调试器?

您说您是从QML中加载对象。在Qt5中,默认情况下,这意味着您在Qt工作线程中而不是在QML渲染线程中加载对象。这不管用。所有的食人魔调用都需要从创建食人魔的渲染线程中进行,否则会得到未定义的行为


我还建议您在上查看我的QML食人魔分叉示例。这是您提到的示例代码,但已重构到库中。现在离生产准备就绪还为时过早,但您也许可以从中获得一些代码方面的想法。

我尝试了gDEBugger,结果它崩溃了。OpenGL缓冲区可能只是一个问题。谢谢顺便说一句,ogre内部使用了多个渲染引擎,它主要提供D3D openGL和lich,还提供了一些称为NULL-RS的东西,但这完全不同。Qt5使用openGL。使用OpenGL还可以更轻松地将其移植到其他平台。空呈现系统对于调试代码可能很有用。然后我至少可以得到确认,问题出在渲染系统上。你有没有试过在ogre配置中使用不同的渲染系统?就目前而言,您的项目与特殊的RS没有太大关系。Qt使用OpenGL进行渲染。我不确定你将如何在同一个窗口中混合使用OpenGL和DirectX。我的意思是,也许当前的ogre rs配置的兼容性有问题,而这正是你所期望的?