2013-09-25 142 views
1

我在我的智慧結束這個錯誤。任何有關如何追蹤它的建議,將不勝感激。QQuickItem不會渲染

背景:

我一直在試圖實施OGRE3D視圖中QT5一個QQuickItem。 有一個例子(qmlogre)顯示它是可能的。示例代碼需要 對Win32進行大量的重構,而不僅僅是演示。這個例子只是一個概念證明。

問題:

當我打電話的食人魔代碼(場景管理:: createEntity)的具體方法Qt的項目將不再呈現。如果我將該方法的調用註釋掉,它會呈現正常。如果我註釋掉方法中的代碼並將它替換爲'return 0',它不再呈現。有問題的代碼不是圖形相關的(它將一個3d實體加載到內存中)。

我已經試過:

  • 經過食人魔日誌例外情形所示。
  • 重定向Qt日誌記錄到文件以查看警告/異常。
  • 檢查'this'指針。我動態地將'this'轉換爲它所運行的類的入口,並接收到一個非空指針。所以rtti認爲這是一個有效的類指針。
  • 爲了確保Qt代碼是正確的,我將qmlogre示例中的自定義渲染代碼替換爲渲染平面彩色矩形的代碼。
  • 我不會出現內存不足

我可以運行的東西這個龐大而複雜的valgrind下?是否有類似的工具有用? (編譯器是Mingw,由Qt在Windows 7下載v5.1提供)

我知道Qt5默認是線程化的。你怎麼知道你是否超出你的線程堆棧大小?

食人魔不是線程安全的。 Qt代碼可能同時在不同的線程上運行並崩潰食人魔嗎?我的代碼由來自QML的事件調用(它位於Qt插槽中)。

+0

您是否嘗試過在食人魔配置中使用不同的渲染系統?目前爲止,您的項目與特殊的RS沒有多大關係。 – dhein

+0

Qt使用OpenGL進行渲染。我不確定如何在同一個窗口中混合使用OpenGL和DirectX。 – Jay

+0

我的意思是,也許當前食人魔配置的可執行性有問題,而且你期待什麼? – dhein

回答

0

我不知道Ogre的細節,但文檔說實體類使用OpenGL緩衝區。那麼也許你在用於訪問OpenGL後端的線程之間有衝突。

你有沒有嘗試像GLIntercept或gDEBugger(cf https://www.opengl.org/wiki/Debugging_Tools)的OpenGL調試器?

+0

我試過gDEBugger並將其撞毀。 OpenGL緩衝區可能只是一個問題。謝謝! – Jay

+0

只是順便說一句,食人魔在內部使用了多個渲染引擎,主要提供D3D openGL和lich,還有一些叫做NULL-RS的東西,但那是安靜的。 – dhein

+0

Qt5使用OpenGL。使用OpenGL也使它更容易移植到其他平臺。 null渲染系統可能對調試代碼很有用。然後,我至少可以確認它是渲染系統,這就是問題所在。 – Jay

0

你說你從QML中加載對象。在Qt 5中默認情況下,這意味着當你在Qt工作線程中而不是在QML渲染線程中時,你正在加載對象。這不起作用。所有的Ogre調用都需要從創建Ogre的渲染線程開始,否則你會得到未定義的行爲。

我還建議查看我的QML Ogre示例的分支https://github.com/advancingu/QmlOgre。這是你提到的示例代碼,但是被重構爲一個庫。現在接近生產就緒還爲時過早,但你也許可以從中得到一些關於你的代碼的想法。