最近このリストを読みましたが、OpenGL Red Book から学んだほとんどすべてが非推奨と見なされていることに気付きました。ピクセル転送操作、ピクセル描画、アキュムレーション バッファ、Begin/End 関数 (!?)、自動ミップマップ生成、および現在のラスター位置について話しています。
なぜ彼らはこれらの機能を非推奨としてフラグを立てたのですか? それらを使い続けても大丈夫でしょうか?回避策は何ですか?
最近このリストを読みましたが、OpenGL Red Book から学んだほとんどすべてが非推奨と見なされていることに気付きました。ピクセル転送操作、ピクセル描画、アキュムレーション バッファ、Begin/End 関数 (!?)、自動ミップマップ生成、および現在のラスター位置について話しています。
なぜ彼らはこれらの機能を非推奨としてフラグを立てたのですか? それらを使い続けても大丈夫でしょうか?回避策は何ですか?
私の意見では、それはより良いことです。しかし、これImmediate Mode
は、主にパフォーマンスが最適ではないため、OpenGL3.0では実際に非推奨になっています。
イミディエイトモードでは、glBegin
やのような呼び出しを使用しますglEnd
。したがって、プリミティブのレンダリングはプログラムのコマンドに依存します。OpenGLは、CPUから適切なコマンドを取得するまで続行できません。代わりに、バッファオブジェクトを使用して、すべての頂点とデータを保存できます。次に、OpenGLに、このバッファを使用してプリミティブをレンダリングするように指示glDrawArrays
しglDrawElements
ますglDrawElementsInstanced
。GPUがこれらのコマンドの実行とターゲットFrameBuffer
(基本的にはレンダリングターゲット)へのバッファーの描画でビジー状態になっている間。プログラムは停止し、他のいくつかのコマンドを発行できます。このようにして、CPUとGPUの両方が同時にビジー状態になり、時間を無駄にすることはありません。
これまでで最高の説明ではありませんが、私のアドバイスです。代わりに、この新しいレンダリングパイプラインを学習してみてください。即時モードよりもはるかに優れています。次のようなチュートリアルをお勧めします。
http://www.arcsynthesis.org/gltut/index.html
http://www.opengl-tutorial.org/
文字通り、これまでに知っていることを忘れてみてください。即時モードは長い間非推奨であり、もう使用すべきではありません。代わりに、新しいテクノロジーに焦点を合わせてください;)
編集 「即時」の代わりに「中間」を使用した場合はすみません。実際には「即時」と呼ばれていると思います。それらを混同する傾向があります。
なぜ彼らはこれらの機能を非推奨としてフラグを立てたのですか?
まず、いくつかの用語: それらは非推奨ではありません。OpenGL 3.0 では、それらは非推奨です (「後のバージョンで削除される可能性がある」という意味です)。3.1 以降では、それらのほとんどが削除されています。互換性プロファイルは、削除された機能を元に戻します。また、Windows と Linux で広く実装されていますが、Apple の 3.2 実装はコア プロファイルのみを実装しています。
削除の理由については、どの機能について話しているかによって異なります。ARB が特定の機能を備えている理由については、推測することしかできません。
ピクセル転送操作
ピクセル転送操作は削除されていません。について話している場合glDrawPixels
、それはピクセル転送操作ですが、1ピクセル転送です。それらのすべてではありません。
それについて言えば:
ピクセル図面
そもそも恐ろしい考えだったからです。glDrawPixels
パフォーマンス トラップです。きれいに聞こえますが、パフォーマンスはひどく、シンプルであるため、人々はそれを使用しようとします.
簡単に実行できるがパフォーマンスがひどいものがあると、人々はひどい OpenGL アプリケーションを作成するようになります。
蓄積バッファ
シェーダーはこれをうまく行うことができます。実際にはもっと良いです。蓄積バッファーがカバーするよりも多くのオプションがあります。
Begin/End 関数 (!?)、
これは別のパフォーマンス トラップです。即時モードのレンダリングは非常に遅いです。
自動ミップマップ生成
そもそもひどい考えだったからです。テクスチャのミップマップを生成するような重い操作をいつ実行するかを OpenGL に決定させるのは良い考えではありません。ARB が持っていたはるかに優れたアイデアは、「OK、OpenGL、このテクスチャのミップマップを今すぐ生成してください」と言わせることでした。
現在のラスター位置。
別のパフォーマンス トラップ/悪い考え。
それらを使い続けても大丈夫でしょうか?
それはあなた次第です。NVIDIA は、互換性プロファイルを永続的にサポートすることを効果的に約束しています。これは、AMD と Intel も同様に対応しなければならないことを意味します。これで、Windows と Linux がカバーされます。
MacOSX では、Apple は GL の実装をより厳格に管理しており、互換性プロファイルをサポートしないことを約束しているようです。しかし、3.2 で停止したため、OpenGL の進歩にはほとんど関心がないようです。Mountain Lion でさえ、OpenGL のバージョンを更新しませんでした。
回避策は何ですか?
パフォーマンス トラップの使用を停止します。他の人と同じように、頂点データにはバッファ オブジェクトを使用します。シェーダーを使用します。を使用しglGenerateMipmap
ます。