1

私はこのバグで頭がいっぱいです。それを追跡する方法についての提案をいただければ幸いです。

バックグラウンド:

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 スロットにあります)。

4

2 に答える 2