Android OpenGL ES 3:glGenerateMipmap几何约束

Android OpenGL ES 3:glGenerateMipmap几何约束,android,opengl-es,opengl-es-3.0,Android,Opengl Es,Opengl Es 3.0,我正在为android开发一个移动OpenGL应用程序,使用OpenGL ES3.x进行图形处理 我想使用glGenerateMipmap函数,但我觉得很不自在,因为我记得,至少在以前的OpenGL版本中,存在一些纹理大小的几何约束(如果我记得正确的话,方形、n-pot纹理) 参考页面不再报告任何类似的信息,在几个设备上进行粗略的测试似乎可以确认这些信息 尽管如此,考虑到OpenGL ES3的最新发展(并考虑到一些移动OpenGL实现的质量…),如果有第一手经验的人能够确认在现实世界中使用它也是

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

我想使用
glGenerateMipmap
函数,但我觉得很不自在,因为我记得,至少在以前的OpenGL版本中,存在一些纹理大小的几何约束(如果我记得正确的话,方形、n-pot纹理)

参考页面不再报告任何类似的信息,在几个设备上进行粗略的测试似乎可以确认这些信息

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

问题归结为:

  • OpenGL ES 3上的
    glGenerateMipmap
    没有对纹理的几何体设置限制,这是真的吗
  • 如果是这样的话,在野外的非正方形、非n-pot纹理上使用它安全吗

  • 谢谢大家!

    在ES 3.0中正式取消了对两种纹理的非幂次限制。在ES 3.0规范中找不到ES 2.0规范中的相应语言。在设置E.1中,列出了ES 3.0与ES 2.0相比的新功能,其中还明确提到:

    支持完全包裹模式和mipmapping的两种纹理的非增强功能

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

    如果level_基本数组未指定表3.3中未指定大小的内部格式或表3.13中既可渲染颜色又可过滤纹理的大小的内部格式,则会生成无效的_操作错误

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


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

    感谢您给出了非常清晰和准确的答案(PS:昨天我有点头晕,可能是我编造了一个“正方形”的东西……)