【问题标题】:OpenGL GLint, GLsizei limit?OpenGL GLint,GLsizei 限制?
【发布时间】:2012-08-14 06:32:45
【问题描述】:

OpenGL 定义自己的数据类型。如GLintGLsizei。而且它们在不同平台上是不同的。在哪里可以找到类型的限制?

编辑

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

【问题讨论】:

  • @Chimera 嗯,我认为 OpenGL 表示 C API,除非明确指定任何语言绑定 :)
  • 我认为不应该写出期望这种假设的问题。 特别是当问题的答案很可能取决于所使用的语言时。
  • @Chimera 嗯...实际上,这不是假设。严格来说,OpenGLOpenGL ES只是官方的C API,其他语言绑定只是封装库而已。所以当我们说OpenGL时,默认是C-API。 opengl.org/wiki/Getting_started#Writing_an_OpenGL_Application

标签: c opengl types limit


【解决方案1】:

编辑:请注意,正如 pmr 从 OpenGL 规范中指出的那样,不能保证 GLintGLsizei 将始终定义为 intGLintGLsizei 仅保证至少 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。
  • 实际上GLint 将是int,无论平台如何。大小可能会改变,反映在 INT_MIN 和 INT_MAX。
  • 来自 OpenGL 4.3 Core 第 13 页:“...GLint 在本文档之外,不一定等同于 C 类型 int” GLint 的大小是 32 位,int 可能不是每个平台都有 32 位。
  • 好吧,看看你每天都能学到新东西。谢谢你的澄清。我猜我读到的内容并不清晰或不准确。
【解决方案2】:

假设您使用的是 C++,您可以使用 std::numeric_limits<GLint>::max() 来获取类型或该类型的任何其他属性的正确最大值。

规范不保证GLint 在任何平台上实际上是int,但只保证它是至少 32 位宽的有符号整数类型,因此 MAX_INT 是int 所在平台上的下限实际上是 32 位宽(例如x86_64)。

【讨论】:

  • 如果需要,我想我可以使用 C++。我可以假设 GL 规范保证这是安全的吗?
  • 我将你的设置为答案,因为我可以在规范中找到最小位规范,正如你在其他答案的评论中提到的那样:)
  • 对于以后的参考,对于 OpenGL ES 2.0,规范在这里:khronos.org/registry/gles/specs/2.0/es_full_spec_2.0.25.pdf p.12,2.4 基本操作,表 2.2 GL 数据类型。看起来没有预定义的 C 级限制符号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多