glVertexAttribPointerの OpenGL リファレンス マニュアルを読んでみると、かなり奇妙なtype
値 (実際には 2 つ) を受け入れることがわかりました。
さらに (...)、GL_INT_2_10_10_10_REV、およびGL_UNSIGNED_INT_2_10_10_10_REVが受け入れられます
glVertexAttribPointer
_REV
ここでサフィックスとはどういう意味ですか?
glVertexAttribPointerの OpenGL リファレンス マニュアルを読んでみると、かなり奇妙なtype
値 (実際には 2 つ) を受け入れることがわかりました。
さらに (...)、GL_INT_2_10_10_10_REV、およびGL_UNSIGNED_INT_2_10_10_10_REVが受け入れられます
glVertexAttribPointer
_REV
ここでサフィックスとはどういう意味ですか?
説明の一部: http://www.informit.com/articles/article.aspx?p=2033340&seqNum=3 セクション パック データ
頂点属性のパックされたデータ形式
glVertexAttribPointer() コマンドに戻ると、サイズ パラメータに使用できる値が 1、2、3、4、および特別なトークン GL_BGRA であることがわかります。また、type パラメータは特別な値 GL_INT_2_10_10_10_REV または GL_UNSIGNED_INT_2_10_10_10_REV のいずれかを取ることができ、どちらも Gluint データ型に対応します。これらの特別なトークンは、OpenGL で使用できるパックされたデータを表すために使用されます。GL_INT_2_10_10_10_REV トークンと GL_UNSIGNED_INT_2_10_10_10_REV トークンは、最初の 3 つのコンポーネントのそれぞれに 10 ビット、最後のコンポーネントに 2 つを逆順にパックして単一の 32 ビット量 (GLuint) として表す 4 つのコンポーネント データを表します。GL_BGRA は、簡単に GL_ZYXW.5 と呼ばれる可能性があります。32 ビット ワード内のデータ レイアウトを見ると、図 3.3 に示すようにビットが分割されていることがわかります。
図 3.3:
図 3.3 では、頂点の要素が 1 つの 32 ビット整数に w、x、y、z の順序でパックされています。色の規則を使用します。図 3.4 では、座標は w、z、y、x の順序でパックされており、これを逆にして、r、g、b、a の色表記で記述しています。
図 3.4
図 3.4。RGBA でパックされた頂点属性での要素のパッキング
頂点データは、GL_INT_2_10_10_10_REV または GL_UNSIGNED_INT_2_10_10_10_REV トークンを使用して、これら 2 つの形式の最初の形式でのみ指定できます。これらのトークンの 1 つが glVertexAttribPointer() の型パラメーターとして使用されると、各頂点は頂点配列内の 1 つの 32 ビット ワードを消費します。ワードはそのコンポーネントにアンパックされ、オプションで正規化されます (適切な頂点属性にロードされる前に、正規化パラメーターの値に応じて)。このデータ配置は、追加の精度の恩恵を受けることができる法線またはその他のタイプの属性に特に適しています。これは 10 ビット コンポーネントによって提供されますが、半浮動小数点データ (コンポーネントごとに 16 ビットかかる) によって提供される完全な精度はおそらく必要ありません. これにより、メモリ空間と帯域幅を節約でき、パフォーマンスの向上に役立ちます.
それが役立つことを願っています。