簡體   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