OpenGL ES 3:glGenerateMipmap 几何约束

OpenGL ES 3: glGenerateMipmap geometric constraints

我正在为 android 开发移动 OpenGL 应用程序,使用 OpenGL ES3.x 处理图形。

我想使用 glGenerateMipmap 函数,但我感到不自在,因为我记得,至少在以前的 OpenGL 版本中,纹理的大小有一些几何限制(正方形, n-pot textures 如果我没记错的话)。

参考页面 glGenerateMipmap for OpenGL ES3 不再报告类似的内容,在几个设备上进行的粗略测试似乎证实了该信息。

尽管如此,考虑到 OpenGL ES3 是多么新(并考虑到一些移动 OpenGL 实现的质量......),如果有第一手经验的人确认使用它也可以,我会感到更加放心在现实世界中.

问题归结为:

  1. OpenGL ES 3 上的 glGenerateMipmap 对纹理的几何形状没有限制是真的吗?
  2. 如果是这样,在野外的非方形、非 n-pot 纹理上使用它是否安全?

谢谢!

ES 3.0 正式取消了对两个纹理的非幂的限制。 ES 2.0 规范中的相应语言在 ES 3.0 规范中无处可寻。 E.1部分列出了ES 3.0相对于ES 2.0的新特性,也明确提到了这一点:

non-power-of-two textures with full wrap mode support and mipmapping

所以是的,您可以安全地在 NPOT 纹理上使用 glGenerateMipmap()。有一个微妙但重要的限制:

If the level_base array was not specified with an unsized internal format from table3.3 or a sized internal format that is both color-renderable and texture-filterable according to table 3.13, an INVALID_OPERATION error is generated.

这意味着例如 glGenerateMipmap() 不支持任何整数格式(因为它们不可纹理过滤),也不支持任何浮点格式(因为它们不可渲染颜色)。

我认为正方形从来都不是对 OpenGL 纹理的真正限制。它肯定不在 ES 2.0 中,也不在 ES 3.0 中。