2016-10-25 6 views
1

私は現在、フルフルスクリーンの後処理(3つのパス、シャドー、ライトなどをぼかすための)を備えたOpenGL 3.3でエンジンを書いています。高速フルスクリーンレンダリング(OpenGL/glsl)?

パスごとに、画面全体をカバーする全く同じ2つの三角形をレンダリングする必要があります。そして、正確に同じフラグメントが1つずつ生成されなければならず、これはまさにウィンドウのすべてのピクセルです。

エンジンは現在、GeForce 570で200FPSで動作しますが、インテルの統合グラフィックスでは約15FPSで苦労しています。

ウィンドウの解像度を半分にしてそれに応じてテクスチャを調整すると、約3倍速くなります。だから間違いなくGPUに縛られ、後処理の量によって制限されます。

私は毎秒600回正確に同じフラグメントを生成し続けることは無駄です。ですから、私の質問は次のようなものです。OpenGL 3/4には、フルスクリーンのレンダリングを簡略化するための機能があります。たとえば、OpenGLに生成しようとしているフラグメントは画面の矩形だけであり、推測はありません。行う?

+6

ウィンドウのサイズを変更すると高速化が行われる場合は、フラグメントシェーダーにバインドされていることを意味します。フレームバッファ全体にレンダリングするようにOpenGLに明示的に指示すると、フルスクリーンクワッドの場合には些細な頂点処理が省略されます。フラグメントシェーダは、まだフレームバッファ内のすべてのフラグメントに対して実行する必要があります。提案された拡張機能はあなたを助けません。 –

+0

フラグメントシェーダーの内容はできるだけ最適化されているので、私は間違いなくどこか別のものを見つけようとしています。 OpenGLは私がフルスクリーンレンダリングをしていると推測して、それを伝えるための機能を特に使用せずにそれを加速させることはできないようです。 1.0を0に変更するとどうなりますか?999とそれはピクセルの行を残す必要がありますか?それは何らかの仮定をすることはできませんが、私はそれを望みます。 – demanze

+0

OpenGLドライバがあなたに役立つと思われるものは表示されません。前にも述べたように、フルスクリーンの四角形を変形して塗りつぶすことは、GPUにとっては簡単です。ボトルネックではありません。最適化すれば、パフォーマンス上のメリットが顕著にはなりません。 –

答えて

0

彼は生成しようとしているフラグメントは、画面のちょうど長方形であり、行うには当て推量はありませんOpenGLの特にOpenGLを伝えることで、たとえば、フルスクリーンレンダリングを簡略化するために設計された3/4のいずれかの機能があります?

いいえ、ありません。しかし、それがあったとしても、それは問題ではないでしょう。

多段階化学合成では、「律速段階」という概念があります。つまり、AがBを生成し、BがCを生成する別の反応がある場合、これらの反応の1つは他の反応よりも遅くなります(多くの場合、多くは)。その1つはレート決定のステップです:合計プロセスは決してが最も遅いステップより速くなるでしょう。

A-> Bが0.01秒、B-> Cが1秒かかる場合、全体のプロセスは1秒かかるでしょう。 0.99秒の間に、Cに変わるのを待っている間に、たくさんのBが座るでしょう。したがって、A→Bに0.001秒かかる方法を見つけたら、本当に問題になりません。あなたがCを望むなら、まだそれを得るのに1秒かかるでしょう。

こちらも同じです。あなたはシーンの後処理パスをしたいと思っています。まあ、それは帯域幅とFS計算リソースの多くを必要とします。 CPUコマンドを処理して三角形を生成するのに費やされる時間は、で、の帯域幅とFS時間の次にあります。

このプロセスの早い部分をやや速くすることができたとしても、全体的なパフォーマンスには何の意味もありません。コマンドは、帯域幅とFSリソースが利用可能になるのを待って、そこに座っているだけです。