私はこのバグで頭がいっぱいです。それを追跡する方法についての提案をいただければ幸いです。
バックグラウンド:
Qt5 で ogre3d ビューを QQuickItem として実装しようとしています。それが可能であることを示す例 (qmlogre) があります。サンプル コードは、Win32 用に大量のリファクタリングを行い、デモ以上のことを行う必要がありました。この例は概念実証にすぎません。
問題:
Ogre コード (SceneManager::createEntity) で特定のメソッドを呼び出すと、Qt アイテムがレンダリングされなくなります。メソッドの呼び出しをコメントアウトすると、正常にレンダリングされます。メソッドのコードをコメントアウトして「return 0」に置き換えると、レンダリングされなくなります。問題のコードはグラフィックス関連ではありません (3D エンティティをメモリにロードします)。
私が試したこと:
- 例外が表示される ogre ログを確認しました。
- 警告/例外を確認するために、Qt ログをファイルにリダイレクトしました。
- 「this」ポインターを確認しました。メソッドへのエントリで「this」を実行中のクラスに動的にキャストし、null 以外のポインターを受け取りました。したがって、rtti はそれが有効なクラス ポインタであると考えます。
- Qt コードが正しいことを確認するために、qmlogre の例のカスタム レンダリング コードを、単色の四角形をレンダリングするコードに置き換えました。
- メモリ不足ではないようです
これほど大規模で複雑なものを valgrind で実行できますか? 便利な同様のツールはありますか? (コンパイラは、Windows 7 の v5.1 ダウンロードで Qt が提供する Mingw です)
Qt5はデフォルトでスレッド化されていることを理解しています。スレッドのスタック サイズを超えたかどうかは、どうすればわかりますか?
Ogre はスレッドセーフではありません。Qt コードが異なるスレッドで同時に実行され、オーガがクラッシュする可能性はありますか? 私のコードは、QML からのイベントによって呼び出されます (Qt スロットにあります)。