我知道int
的大小因CPU而异;
由于我们正在讨论 GPU 而不是 CPU ,因此我们在传递 OpenGL 参数时使用GLint
定义为
typedef int GLint
但是GLfixed
GLfixed
被定义为GLint
typedef GLint GLfixed
我怀疑它可以用于特定任务,或者它无关,而不是对GLint
的引用
关于浮动数字 GL 使用
typedef float GLfloat
浮动,因为我看到它的大小为4 bytes
,所以我认为这是一个常数无关紧要如果我使用GLfloat
或 float
,那么 4 字节的数量相同或者GLfloat
可能更多要做什么?
那么,如果我使用 GLint 而不是 GLfixed ,正常的浮动超过 GLfloat
答案 0 :(得分:2)
GL规范确定了它将要使用的类型以及对表示的要求。
GLint
是您平台上int
的别名的事实绝不能一概而论。 GLint
始终符合GL的要求,而int
可能因平台/ ABI而异。
GLfloat
与float
的情况也是如此,但在现实世界中,几乎所有能够使用OpenGL的平台都会使用32位IEE754单精度浮点数float
。
如果我使用GLint而不是GLfixed,那会有意义吗?
没有。 GLfixed
在语义上是一种用于表示不动点 16.16二进制补码值的类型。
答案 1 :(得分:0)
我确定它与它的价值有关,或者它只是无用和浪费内存来获得相同的多个定义类型
它既不是。
正如您所指出的,C和C ++类型的比特尺不是由C或C ++标准修复的。但是, OpenGL 标准确实修复了OpenGL定义的类型。您在typedef int GLint;
是32位,2的补码有符号整数的平台上看到int
仅。在int
较小的平台上,它们在该定义中使用不同的类型。
类型的可见类型名称几乎没用。即使您绝对确定int
和GLfixed
属于同一类型,但看到GLfixed
带有语义意义超出int
。 GLfixed
表示将整数解释为16.16位定点类型。它在技术上是int
,但任何将值解释为GLfixed
的OpenGL API都会将其解释为16.16位定点类型。
Typedefs 不占用内存。它们是纯粹的语法糖;它们的使用或缺乏不会使你的程序占用更多或更少的存储空间。
同样适用于float
和GLfloat
。
那么,如果我使用 GLint 而不是 GLfixed ,正常的浮动超过 GLfloat 强>
在与OpenGL交谈时,您应该使用OpenGL的类型。如果不直接与OpenGL交谈,那取决于你。