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

时间:2018-03-13 22:48:38

标签: opengl typedef

我知道int的大小因CPU而异;

  • 16位计算机的2个字节
  • 32位计算机的4个字节

由于我们正在讨论 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

2 个答案:

答案 0 :(得分:2)

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

GLint是您平台上int 的别名的事实绝不能一概而论。 GLint始终符合GL的要求,而int可能因平台/ ABI而异。

GLfloatfloat的情况也是如此,但在现实世界中,几乎所有能够使用OpenGL的平台都会使用32位IEE754单精度浮点数float

  

如果我使用GLint而不是GLfixed,那会有意义吗?

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

答案 1 :(得分:0)

  

我确定它与它的价值有关,或者它只是无用浪费内存来获得相同的多个定义类型

它既不是。

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

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

  3. Typedefs 不占用内存。它们是纯粹的语法糖;它们的使用或缺乏不会使你的程序占用更多或更少的存储空间。

  4. 同样适用于floatGLfloat

      

    那么,如果我使用 GLint 而不是 GLfixed ,正常的浮动超过 GLfloat

    在与OpenGL交谈时,您应该使用OpenGL的类型。如果不直接与OpenGL交谈,那取决于你。