GLfixed over GLint 和 GLfloat over float 是否有意义?

Does GLfixed over GLint and GLfloat over float make sense?

我知道 int 的尺寸不同于 CPU 和另一个

由于我们正在与 GPU 而非 CPU 对话,因此我们在以下情况下使用 GLint传递OpenGL参数,定义为

typedef int GLint

但是有GLfixed

GLfixed 定义为 GLint

typedef GLint GLfixed

我怀疑它是否可以用于特定任务,或者它除了引用 GLint

之外没有任何关系

关于浮点数GL使用

typedef float GLfloat

a float,我读到它的大小是 4 bytes,所以我 认为 它是一个常量 没关系如果我使用GLfloatfloat,它们会是相同数量的4 字节或者 GLfloat 有更多工作要做?

So,如果我在 GLfixed 上使用 GLint 是否有意义,正常浮动超过GL浮动?

GL 规范确实定义了它将要使用的类型,以及对表示的要求。

GLintint 在您的平台 上的别名这一事实绝不能一概而论。 GLint 将始终满足 GL 的要求,而 int 可能因平台/ABI 而异。

GLfloatfloat 的情况相同,尽管在现实世界中,几乎每个支持 OpenGL 的平台都会为 float 使用 32 位 IEE754 单精度浮点数。

Does it make sense if I used GLint over GLfixed?

没有。 GLfixed 在语义上是一种表示 不动点 16.16 二进制补码值的类型。

I'm sure it has something to do with its value or it's just useless and a waste of memory to get multiple definitions of the same type

两者都不是。

  1. 正如您所指出的,C 或 C++ 标准不固定 C 和 C++ 类型的位数。但是,OpenGL 标准确实修复了 OpenGL-defined 类型。在 int 是 32 位 2 的补码有符号整数的平台上,您会看到 typedef int GLint; 。在 int 较小的平台上,他们在该定义中使用不同的类型。

  2. 类型的可见类型名几乎没有用。即使你绝对确定 intGLfixed 是同一类型,看到 GLfixed 带有 语义 的含义超出 intGLfixed 表示将整数解释为 16.16 位 fixed-point 类型。它在技术上是一个 int,但任何将值解释为 GLfixed 的 OpenGL API 都会将其解释为 16.16 位 fixed-point 类型。

  3. Typedefs 不占用内存。它们是纯粹的语法糖;使用或不使用它们不会使您的程序多占用或少占用一个字节的存储空间。

同样适用于floatGLfloat

So, Does it make sense if I used GLint over GLfixed, a normal float over GLfloat?

与 OpenGL 对话时,您应该使用 OpenGL 的类型。不直接与 OpenGL 对话时,由您决定。