1

頂点データを 32 バイトに揃えると、一部のグラフィックス カードにメリットがあると読みました。

これには通常、パディングの追加が含まれます。

typedef struct {
  float x, y, z;
  int padding[5];
} Vertex;

しかし、私は疑問に思っていましたが、これは、データを 32 バイトにアラインする (malloc は 1 バイトにアラインする) ように割り当てる必要があるということでもありますか? データへのポインターが 32 に均等に分割されることを意味しますか? それは問題ですか?

(このデータを VBO にアップロードしています)

ありがとう

4

1 に答える 1

8

通常、ソースメモリが整列されている場合(通常、宛先は整列されます)、クライアントメモリからVBOへのコピー操作はより高速になります。VBOへのアップロード方法によって多少異なります。

とは言うものの、アラインメントによって後押しされるのはアップロードだけです。メモリがVBOに配置されると、重要なのはVBOサーバーメモリ(制御しない)の調整です(GL実装はこれを認識しており、VBOメモリを調整します)。

ああ、20バイトのパディングを使用した32バイトは、4バイトのパディングを使用した16バイトよりも速くなることはありません。重要なのは、2の累乗のサイズであるため、単一の完全な頂点フェッチがキャッシュラインにまたがらないことです。

最後に、mallocは1バイトに整列しません。少なくとも基本タイプの最小アライメント要件(ほとんどのプラットフォームでは8)にアライメントされます。

于 2011-02-02T21:07:18.810 に答える