私は現在、フルフルスクリーンの後処理(3つのパス、シャドー、ライトなどをぼかすための)を備えたOpenGL 3.3でエンジンを書いています。高速フルスクリーンレンダリング(OpenGL/glsl)?
パスごとに、画面全体をカバーする全く同じ2つの三角形をレンダリングする必要があります。そして、正確に同じフラグメントが1つずつ生成されなければならず、これはまさにウィンドウのすべてのピクセルです。
エンジンは現在、GeForce 570で200FPSで動作しますが、インテルの統合グラフィックスでは約15FPSで苦労しています。
ウィンドウの解像度を半分にしてそれに応じてテクスチャを調整すると、約3倍速くなります。だから間違いなくGPUに縛られ、後処理の量によって制限されます。
私は毎秒600回正確に同じフラグメントを生成し続けることは無駄です。ですから、私の質問は次のようなものです。OpenGL 3/4には、フルスクリーンのレンダリングを簡略化するための機能があります。たとえば、OpenGLに生成しようとしているフラグメントは画面の矩形だけであり、推測はありません。行う?
ウィンドウのサイズを変更すると高速化が行われる場合は、フラグメントシェーダーにバインドされていることを意味します。フレームバッファ全体にレンダリングするようにOpenGLに明示的に指示すると、フルスクリーンクワッドの場合には些細な頂点処理が省略されます。フラグメントシェーダは、まだフレームバッファ内のすべてのフラグメントに対して実行する必要があります。提案された拡張機能はあなたを助けません。 –
フラグメントシェーダーの内容はできるだけ最適化されているので、私は間違いなくどこか別のものを見つけようとしています。 OpenGLは私がフルスクリーンレンダリングをしていると推測して、それを伝えるための機能を特に使用せずにそれを加速させることはできないようです。 1.0を0に変更するとどうなりますか?999とそれはピクセルの行を残す必要がありますか?それは何らかの仮定をすることはできませんが、私はそれを望みます。 – demanze
OpenGLドライバがあなたに役立つと思われるものは表示されません。前にも述べたように、フルスクリーンの四角形を変形して塗りつぶすことは、GPUにとっては簡単です。ボトルネックではありません。最適化すれば、パフォーマンス上のメリットが顕著にはなりません。 –