web-dev-qa-db-ja.com

GL_QUADSの何がそんなに悪いのですか?

GL_QUADSは、OpenGLバージョン3.0以降で削除される予定です。なぜですか?その場合、古いプログラムは将来機能しなくなりますか?ベンチマークを行ったところ、GL_TRIANGLESまたはGL_QUADSレンダリング速度に違いはありません(おそらくGL_QUADSが高速です。それで、ポイントは何ですか?

63
Rookie

要点は、GPUが四角形ではなく三角形をレンダリングすることです。また、2つの三角形から長方形を作成するのは非常に簡単なので、APIにクワッドをネイティブにレンダリングする機能を実際に負担する必要はありません。 OpenGLは主要なトリミングプロセスを経て、15年前に意味のある多くの機能をカットしましたが、GPUの動作やGPUの動作とは一致しなくなりましたgoing work。固定機能パイプラインは最新バージョンからも廃止されました。これもまた不要になり、GPUの動作と一致しなくなったためです(プログラマブルシェーダー)。

重要なのは、OpenGL APIをより小さく、より厳密に作成できれば、ベンダーが堅牢で高性能なドライバーを簡単に記述できるようになり、APIを正しくかつ効率的に使用することを学習しやすくなるということです。

数年前、OpenGLのほとんどすべてを3〜5通りの方法で実行できました。最適なパフォーマンスが必要な場合、どの実装が正しいものであるかを判断するために開発者に大きな負担がかかります。

そのため、彼らはAPIの合理化を試みています。

83
jalf

あなたの質問については、すでに人々は非常によく答えています。彼らの答えに加えて、GL_QUADS推奨されないのは、クワッドの未定義の性質のためです。

たとえば、ポイント(0,0,0), (1,0,0), (1,1,1), (0,1,0)。これは、1つの角が上にドラッグされた平らな四角形です。このような方法で通常の平らな正方形を描くことは不可能です。ドライバーに応じて、いずれかの方法で2つの三角形に分割されます。これは制御できません。このようなモデルは、2つの三角形でモデル化する必要があります。 -三角形の3つのポイントはすべて、常に同じ平面上にあります。

9
yaMum

それは何かに「行く」ことではありません。他の多くの機能と同様に、GL_QUADSはバージョン3.0で非推奨になり、バージョン3.1では削除になりました。互換性コンテキストを作成する場合、これは明らかに無関係です。

それらを非推奨にする理由のためにだれでも与えるかもしれない答えは全くの推測です。

8
Nicol Bolas