同じウィンドウ(QSplitterアーキテクチャで区切られている)にある多くのQOpenGLWidgetでは、異なる視点のシーンを表示したいと考えています。 重要なことは、シーンデータ(ジオメトリとテクスチャ)をGPUに一度だけ保存したいということです。 しかし、各QOpenGLWidgetには独自のQOpenGLContextがあります。多くのQOpenGLWidgetで表示するためにfboでレンダリングするためのグローバルOpenGLコンテキスト
私の考えは、シーンをFrameBufferObject(QFrameBufferObjectではなく)にレンダリングし、関係するQOpenGLWidgetで結果のテクスチャを使用する独立したコンテキストを作成することでした。
もっと技術的には、私のアプローチは新しいQOpenGLContextとQOffscreenSurfaceを作成することでした。 しかし、私のQOpenGLContunctionによって与えられた結果のQOpenGLFunctionsを使用する場合、作成したQOpenGlContextが有効であることを確認しても、セグメンテーション違反で停止します。
より一般的なやり方では、QOpenGLContext、サーフェス(私の場合はQOffscreenSurface)、およびmakeCurrent関数の役割を理解することは難しいです。
私の要求は、これを行う良い方法と、なぜセグメンテーションフォルトが発生するのかを理解することです。
同じトップレベルウィンドウ内のすべてのQOpenGLWidgetsは、ウィンドウ自体の「合成」を行うためにQtが使用する内部GLコンテキストと共有しているため、すでに互いに共有していることに注意してください(2DテクスチャとしてQOpenGLWidgets、他のウィジェットなど)。したがって、これらのコンテキスト間で物事を共有するために特別なことを行う必要はありません。さらに、これらのコンテキストをアプリケーションのすべてのトップレベルウィンドウで共有するフラグもあります。 – peppe
はい、共有されていても、頂点配列オブジェクトは共有されません!私は本当にこの種の問題に対処することを避けたい。テクスチャへのレンダリングは、私のレンダリングを集中させる良い解決策だとは思いませんか? –
確かに、あなたが望むならそれを行うことができます。ここでも、FBOは共有されませんが、バッキングテクスチャまたはレンダーバッファは共有されます。 – peppe