OpenGL GLint,GLsizei限制是什么?

5

OpenGL定义了自己的数据类型,例如GLintGLsizei。而且它们在不同平台上是不同的。那么我在哪里可以找到这些类型的限制呢?

编辑

添加语言标签以澄清领域。我知道GL *类型将被解析为基本的C类型,但在不同的平台上可能不同(实际上这就是它们被定义的原因)。即使是基本的C类型也不能保证在任何平台上都具有固定的大小。这就是为什么存在limit.h,并且我希望GL本身也有类似的东西,用于定义GL *类型的限制,因为它们与C类型在语义上是不同的,这意味着它们需要自己的限制定义。


@Chimera 嗯,我认为OpenGL意味着C API,除非有特别指定的语言绑定 :) - eonil
我认为不应该写出期望这种假设的问题,特别是当问题的答案很可能取决于所使用的编程语言时。 - Chimera
@Chimera 嗯...实际上,这不是假设。严格来说,“OpenGL”或“OpenGL ES”仅官方支持C API,其他语言绑定只是包装库。因此,当我们说“OpenGL”时,默认情况下是C-API。http://www.opengl.org/wiki/Getting_started#Writing_an_OpenGL_Application - eonil
2个回答

3
假设您正在使用C ++,您可以使用 std :: numeric_limits< GLint> :: max()来获取类型的正确最大值或任何其他属性。
规范并不保证 GLint 实际上是任何平台上的 int ,而只是至少为32位宽度的带符号整数类型,因此MAX_INT是在 int 实际上为32位宽度(例如 x86_64 )的平台上的较低大小限制。

如果需要的话,我认为我可以使用C++。我能否假设这是由GL规范保证安全的? - eonil
我将你的答案设为最佳,因为我在其他回答的评论中也找到了你提到的最小位规格。 :) - eonil
为了以后参考,对于OpenGL ES 2.0,规范在这里:http://www.khronos.org/registry/gles/specs/2.0/es_full_spec_2.0.25.pdf第12页,2.4基本操作,表2.2 GL数据类型。看起来没有预定义的C级符号限制。 - eonil

3

编辑:请注意,正如OpenGL规范中pmr指出的那样,不能保证GLintGLsizei始终定义为int。只保证GLintGLsizei至少为32位。

来自GL/gl.h

typedef int GLint;
typedef int GLsizei;

这些类型是int类型,大小根据平台而定。要获取最小和最大值,可以使用INT_MIN和INT_MAX,这些值应该在limits.h中找到(假设使用C语言)。


它们是 int 的 typedef。因此,您可以使用 INT_MIN 和 INT_MAX 获取大小,因为它们始终是 INTS。 - Chimera
实际上,无论平台如何,GLint 都将是一个 int。其大小可能会随着 INT_MIN 和 INT_MAX 的变化而改变。 - Chimera
5
来自OpenGL 4.3核心页面13的原文: "...GLint是超出本文档讨论范围的内容,且未必等同于C类型'int'" GLint的大小为32位,'int'在每个平台上可能不是32位。 - pmr
1
嗯,你知道每天都可以学到新东西。感谢你的澄清。我想我读的内容可能不够清晰或准确。 - Chimera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接