私は FBO+RBO を使用しており、デフォルト フレームバッファでの通常のダブル バッファリングの代わりに、RBO に描画してから、単一のバッファリングされた OpenGL コンテキストでデフォルト FBO (0) の GL_FRONT バッファに直接ブリットしています。
それは問題なく、ちらつきもありませんが、シーンが少し複雑になると、fps が大幅に低下します。同期がスキップされたために 1/60 から 1/30 になったという意味ではなく、突然 90% fps が低下したという意味です。
ブリット後に glFlush() を試しましたが、違いはありませんでした。ブリット後に glFinish() を試したところ、10 倍の fps ブーストが得られました。
そのため、デフォルトのフレームバッファと swapbuffers() で通常のダブル バッファリングを使用すると、glFinish() を使用した場合と同様に、fps も向上しました。
何が起こっているのかわかりません。なぜ glFinish() はそうすべきではないのにそれほど大きな違いを生むのですか? また、ダブル バッファリング コンテキストで swapbuffers 呼び出しを使用する代わりに、フロント バッファで直接 RBO とブリットを使用しても問題ありませんか? 私は vsync が欠落していることを知っていますが、コンポジット マネージャはとにかく同期します (実際にはティアリングは見られません)。モニターが 10 フレーム中 9 フレームを欠落しているかのようです。
好奇心から、ネイティブの swapbuffers() は Windows または Linux で glFinish() を使用しますか?