12

glm :: *タイプ(vec4、mat4など)を安全に使用して、頂点バッファーオブジェクトを埋めることはできますか?

std::vector<glm::vec3> vertices;    
glBufferData(GL_ARRAY_BUFFER,  sizeof(glm::vec3) * vertices.size(), &vertices[0], GL_STATIC_DRAW);

私がテストしたすべてのコンパイラは期待されるサイズを返しますが、構造体のパディング(メンバーの配置)が私の意見で問題を引き起こす可能性があるため、それについてはよくわかりません。

私はC++11コンパイラ用に開発しています(おそらくこれが違いを生むでしょう)。

4

2 に答える 2

9

「安全」を定義します。

C ++は、適切と思われる構造をパッドするための広い範囲を実装に提供します。ISO C ++に関する限り、これが「機能する」かどうかは実装に依存する動作です。

これは、デスクトッププラットフォーム用の多くのコンパイラで一般的に機能します。ARM CPUについて話すことはできませんが、通常、glm::vec3サイズは3フロートになります。ただし、確認したい場合は、いつでも簡単に実行できますstatic_assert

static_assert(sizeof(glm::vec3) == sizeof(GLfloat) * 3, "Platform doesn't support this directly.");
于 2012-11-26T20:01:32.650 に答える
0

はい、glmはこの目的のために特別に設計および構築されています。

于 2012-11-26T19:45:45.887 に答える