OpenGL または Direct3D の反復ごとに、システムからグラフィックス メモリへのデータの段階的な転送が見られます。最初はテクスチャで、次に頂点で、現在はシェーダーでさえもです。それがパフォーマンスを得るための方法である場合、なぜ彼らは必要なものを VRAM にマッピングしてそれを処理できるようにしなかったのでしょうか? グラフィックス メモリのシェーダーを、たとえばグラフィックス メモリの頂点から分離することは重要ですか?
1 に答える
OpenGL または Direct3D の反復ごとに、システムからグラフィックス メモリへのデータの段階的な転送が見られます。
それは私たちが見ているものではありません。私たちが見ているのは、グラフィックス API の進化であり、抽象的な概念をハードウェアが実際に行うことに近づけています。API にバッファ オブジェクトやシェーダーなどの概念がなければ、API が行うことはすべてスモークとミラーリングになります。たとえば、古くてほこりっぽい即時モードを見てみましょう。最初の GPU は実際にそのように動作しました。しかし、2000 年以降に構築されたすべての GPU は、データのバッチがレンダリングされることを想定しています。即時モード呼び出しを行うには、OpenGL 実装がその場で頂点配列を構築し、glEnd で頂点を単一の描画呼び出しにバッチ処理する必要があります。API の変更は、ハードウェアの変更とその使用方法を反映しています。
今でもシェーダーで
それはどういう意味ですか?分離可能なシェーダー オブジェクトについて言及していますか? それは「彼らを動かす」こととは何の関係もありません。
必要なものは何でも VRAM にマッピングできるようにしなかったのはなぜですか
止まる!OpenGL は VRAM を定義しません。OpenGL は、クライアント メモリとサーバー メモリのみを定義します。そして、メモリが不透明で直接アクセスできないものである、非常に抽象的なオブジェクト モデルです。一体、OpenGL バッファ オブジェクトを使用しても、VRAM に配置されることはまったく保証されません。それは完全に抽象的です!
違いがあるのは、基盤となるアーキテクチャがそのように設計されているためです。グラフィックス API で見られる段階的な変更は、ハードウェア設計の段階的な変更によるものです。
テクスチャをグラフィックス メモリに配置することは常に理にかなっていますが、そこに頂点データを配置することが発明されたのは後になってからです。その後、概念は一般化されたデータ オブジェクトに拡張されました (しばらくの間、「スーパーバッファ」と呼ばれていました)。
グラフィックス メモリのシェーダーを、たとえばグラフィックス メモリの頂点から分離することは重要ですか?
あなたはそこにどのような分離について書いていますか?シェーダーは抽象オブジェクトであり、VBO は抽象ストレージであり、テクスチャも抽象です。