私はデスクトップ GL 開発者で、モバイルの世界を探求し始めています。
誤解を避けるため、または些細な回答を歓迎しますが、私は GL および GL|ES 機構について十分に認識していると謙虚に言えます。
簡単な質問は、共有メモリ アーキテクチャで GL|ES 2.0 を使用している場合、クライアント側の配列に対して VBO を使用することの背後にあるポイントは何ですか?
詳細:
頂点バッファーはメモリの未加工のチャンクです。アクセス パターンは、1) アプリケーションが頂点データ レイアウトを構成する方法、2) 頂点シェーダーがバッファー コンテンツを消費する方法、および 3) 大量に保持できることに依存するため、ドライバーは何も最適化できません。さまざまな方法で動作し、同じバッファーをさまざまな方法でソースする頂点シェーダーの数。
アライメント: 個々の VBO ストレージは、基礎となる GL システムに最適なアドレスで開始できます。これらの境界へのクライアント側配列の割り当てを強制する (たとえば、配置のベスト プラクティスを尊重する) とどうなりますか?
Tile-Based Rendering vs. Immediate Mode アーキテクチャは関係ありません。私の理解では、これは私の質問 (つまり、メモリ アクセス) とは関係ありません。
VBO を使用すると、コードを変更せずに将来のプラットフォーム/ハードウェアでコードをより適切に/より速く実行できることを理解していますが、これはこの質問の焦点ではありません。
同時に、共有メモリ アーキテクチャで VBO を使用すると、メモリ使用量が 2 倍になり (何らかの理由で頂点データを自由に使用できるようにしなければならない場合)、データの memcpy が必要になることも認識しています。
インターリーブされた頂点配列と同様に、VBO の使用法は、開発者のフォーラム/ブログ/official_technotes で大きな「誇大宣伝」を受けていますが、これらのステートメントをサポートするデータ (つまり、ベンチマーク) はありません。
- 共有メモリ アーキテクチャで VBO を使用する価値はありますか?
- クライアント側の配列はうまく機能しますか?
- これについてどう思いますか/知っていますか?