私のアプリケーションでは、次の 2 つの目的で QGLWidget のコンテンツのスナップショットを作成します。
- 代わりにキャッシュされたピックスマップを使用して、オーバーレイのみが変更されたときに常にシーンを再描画するのではなく
- Lat ユーザーが特定のプロット (3D シーン) のスクリーンショットを撮る
最初に試したのはgrabFrameBuffer()
. この関数を最初のアプリケーションとして使用するのは当然です。現在ウィジェットに表示されているものは、まさに私がキャッシュしたいものです。
問題:一部のハードウェア (Intel integrade グラフィックス、GeForce グラフィックスを搭載した Mac OS X など) では、取得した画像に現在の画面コンテンツが含まれず、その前のコンテンツが含まれます。したがって、シーンが 2 回描画される場合、画面には 2 番目の描画が表示され、画像には最初の描画が表示されます (これはバックバッファーのコンテンツである必要があります)。
2番目に試したのはrenderToPixmap()
. これは を使用してレンダリングしますpaintGL()
が、 を使用しませんpaint()
。Qt の描画機能を使用し、ネイティブ GL ( 、 )paint()
を使用するのはコードのごく一部のみであるため、すべてのものは にあります。beginNativePainting()
endNativePainting()
通常の QWidget のスナップショット機能 (QPixmap::fromWidget()、またはそれと呼ばれるもの) も試しましたが、GL フレームバッファは黒です。
問題を解決し、現在描かれているシーンの信頼できる描写を得る方法についてのアイデアはありますか?