这个 OpenGL 数据类型图是否正确?

Is this diagram for OpenGL data types correct?

我正在尝试理解 glVertexAttribPointer,我注意到它接受的类型比 GLSL 中具有等效类型的类型多得多。所以为了写下我到目前为止所知道的一切,我制作了这个匹配所有类型的图表(除了打包的,这无关紧要,GL_FIXED,我不明白。

蓝色节点代表 GLSL 中的类型,而黄色节点代表传递给 glVertexAttribPointer 的符号常量。

红色节点表示类型之间的某种转换。

每个黄色节点只直接连接到一个蓝色节点,这似乎是它在 GLSL 中的主要表示形式,但有些可以转换为其他形式。

所以我想我的问题是:这张图中的关系是否正确,GL_FIXED 如何融入其中?

没有

您不能通过对 glVertexAttribPointer 的调用提供 VS intuintdouble 输入变量(或这些变量的向量)。此函数 提供 float 类型。如果您在此函数中使用非规范化整数,那么它们将被转换为浮点数,就像通过标准转换操作一样(255 变为 255.0f)。 GL_FIXED 只是另一种浮点表示法,其中 32 位整数被视为 16.16 定点值。自然地,这将在馈送到 VS 时转换为浮点数。

要提供 VS 整数,您必须使用 glVertexAttribIPointer。要喂 doubles,你必须使用 glVertexAttribLPointer.

bool 类型不能是任何类型的输入变量。