GLfixed over GLint 和 GLfloat over float 是否有意义?
Does GLfixed over GLint and GLfloat over float make sense?
我知道 int
的尺寸不同于 CPU 和另一个
- 16 位机器为 2 个字节
- 32 位机器为 4 个字节
由于我们正在与 GPU 而非 CPU 对话,因此我们在以下情况下使用 GLint
传递OpenGL参数,定义为
typedef int GLint
但是有GLfixed
GLfixed
定义为 GLint
typedef GLint GLfixed
我怀疑它是否可以用于特定任务,或者它除了引用 GLint
之外没有任何关系
关于浮点数GL使用
typedef float GLfloat
a float,我读到它的大小是 4 bytes
,所以我 认为 它是一个常量 没关系如果我使用GLfloat
或float
,它们会是相同数量的4 字节或者 GLfloat
有更多工作要做?
So,如果我在 GLfixed 上使用 GLint 是否有意义,正常浮动超过GL浮动?
GL 规范确实定义了它将要使用的类型,以及对表示的要求。
GLint
是int
在您的平台 上的别名这一事实绝不能一概而论。 GLint
将始终满足 GL 的要求,而 int
可能因平台/ABI 而异。
GLfloat
与 float
的情况相同,尽管在现实世界中,几乎每个支持 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
两者都不是。
正如您所指出的,C 或 C++ 标准不固定 C 和 C++ 类型的位数。但是,OpenGL 标准确实修复了 OpenGL-defined 类型。在 int
是 32 位 2 的补码有符号整数的平台上,您会看到 typedef int GLint;
仅 。在 int
较小的平台上,他们在该定义中使用不同的类型。
类型的可见类型名几乎没有用。即使你绝对确定 int
和 GLfixed
是同一类型,看到 GLfixed
带有 语义 的含义超出 int
。 GLfixed
表示将整数解释为 16.16 位 fixed-point 类型。它在技术上是一个 int
,但任何将值解释为 GLfixed
的 OpenGL API 都会将其解释为 16.16 位 fixed-point 类型。
Typedefs 不占用内存。它们是纯粹的语法糖;使用或不使用它们不会使您的程序多占用或少占用一个字节的存储空间。
同样适用于float
和GLfloat
。
So, Does it make sense if I used GLint over GLfixed, a normal float over GLfloat?
与 OpenGL 对话时,您应该使用 OpenGL 的类型。不直接与 OpenGL 对话时,由您决定。
我知道 int
的尺寸不同于 CPU 和另一个
- 16 位机器为 2 个字节
- 32 位机器为 4 个字节
由于我们正在与 GPU 而非 CPU 对话,因此我们在以下情况下使用 GLint
传递OpenGL参数,定义为
typedef int GLint
但是有GLfixed
GLfixed
定义为 GLint
typedef GLint GLfixed
我怀疑它是否可以用于特定任务,或者它除了引用 GLint
关于浮点数GL使用
typedef float GLfloat
a float,我读到它的大小是 4 bytes
,所以我 认为 它是一个常量 没关系如果我使用GLfloat
或float
,它们会是相同数量的4 字节或者 GLfloat
有更多工作要做?
So,如果我在 GLfixed 上使用 GLint 是否有意义,正常浮动超过GL浮动?
GL 规范确实定义了它将要使用的类型,以及对表示的要求。
GLint
是int
在您的平台 上的别名这一事实绝不能一概而论。 GLint
将始终满足 GL 的要求,而 int
可能因平台/ABI 而异。
GLfloat
与 float
的情况相同,尽管在现实世界中,几乎每个支持 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
两者都不是。
正如您所指出的,C 或 C++ 标准不固定 C 和 C++ 类型的位数。但是,OpenGL 标准确实修复了 OpenGL-defined 类型。在
int
是 32 位 2 的补码有符号整数的平台上,您会看到typedef int GLint;
仅 。在int
较小的平台上,他们在该定义中使用不同的类型。类型的可见类型名几乎没有用。即使你绝对确定
int
和GLfixed
是同一类型,看到GLfixed
带有 语义 的含义超出int
。GLfixed
表示将整数解释为 16.16 位 fixed-point 类型。它在技术上是一个int
,但任何将值解释为GLfixed
的 OpenGL API 都会将其解释为 16.16 位 fixed-point 类型。Typedefs 不占用内存。它们是纯粹的语法糖;使用或不使用它们不会使您的程序多占用或少占用一个字节的存储空间。
同样适用于float
和GLfloat
。
So, Does it make sense if I used GLint over GLfixed, a normal float over GLfloat?
与 OpenGL 对话时,您应该使用 OpenGL 的类型。不直接与 OpenGL 对话时,由您决定。