OpenGL中_REV后缀是什么意思?

Bar*_*icz 4 opengl

阅读glVertexAttribPointer的 OpenGL 参考手册,我发现它接受一个非常奇怪的type值(实际上是其中两个):

另外(...),GL_INT_2_10_10_10_REVGL_UNSIGNED_INT_2_10_10_10_REV被接受glVertexAttribPointer

_REV这里的后缀是什么意思?

小智 5

部分解释位于:http://www.informit.com/articles/article.aspx ?p=2033340&seqNum=3 ?p=2033340&seqNum=3 \nSection Packed Data

\n\n
\n

顶点属性的打包数据格式

\n\n

回到 glVertexAttribPointer() 命令,您会注意到大小参数的允许值为 1、2、3、4 和特殊标记 GL_BGRA。此外,类型参数可以采用特殊值 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 令牌表示四分量数据,前三个分量分别表示为 10 位,最后一个分量表示为 2 位,以相反的顺序打包到单个 32 位数量(GLuint)中。GL_BGRA 可以很容易地被称为 GL_ZYXW.5 查看 32 位字内的数据布局,您会看到如图 3.3 所示的位划分。

\n\n

图3.3:

\n\n

在此输入图像描述

\n\n

在图 3.3 中,顶点的元素按照 w、x、y、z\xe2\x80\x94 的顺序打包成单个 32 位整数,反转后为 z、y、x、w 或 b、g, r, a 当使用颜色约定时。在图 3.4 中,坐标按 w、z、y、x 的顺序排列,颠倒过来,用颜色约定写成 r、g、b、a。

\n\n

图3.4\n 在此输入图像描述

\n\n

图 3.4。RGBA 打包顶点属性中的元素打包

\n\n

顶点数据只能通过使用 GL_INT_2_10_10_10_REV 或 GL_UNSIGNED_INT_2_10_10_10_REV 标记以这两种格式中的第一种指定。当这些标记之一用作 glVertexAttribPointer() 的类型参数时,每个顶点都会消耗顶点数组中的一个 32 位字。该单词被解包到其组件中,然后可选地进行标准化(取决于加载到适当的顶点属性之前标准化参数的值)。这种数据排列特别适合法线或其他类型的属性,这些属性可以从额外的精度中受益由 10 位组件提供,但也许不需要半浮点数据提供的完整精度(每个组件需要 16 位)。这可以节省内存空间和带宽,从而有助于改进表现。

\n
\n\n

希望有帮助。

\n

  • 仅该图像就令人困惑,因为它仅在使用“GL_BGRA”作为组件数量时适用,而不适用于通常的顺序,不幸的是它也不是来自您,但仍然以某种方式破坏了答案的价值。 (3认同)