1

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

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

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

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

问题归结为:

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

谢谢!

4

1 回答 1

2

ES 3.0 中正式取消了对两个纹理的非幂的限制。ES 2.0 规范中的相应语言在 ES 3.0 规范中找不到。在列出 ES 3.0 与 ES 2.0 相比的新特性的第 E.1 节中,它还明确提到了这一点:

具有完全环绕模式支持和 mipmapping 的非二次幂纹理

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

如果 level_base 数组没有使用 table3.3 中的未指定大小的内部格式或根据表 3.13 既可颜色渲染又可纹理过滤的已调整大小的内部格式,则会生成 INVALID_OPERATION 错误。

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

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

于 2015-02-19T05:38:30.293 回答