需要澄清 opengl 纹理大小要求

Clarification needed for opengl texture size requirements

我正在开发一款游戏(使用 libGDX,适用于 Windows、Linux 和 Android,基于 OpenGL 2)。我知道在 OpenGL 中涉及纹理大小时有一些技术 restrictions/requirements。但我听说过关于这些的相互矛盾的说法,所以我需要澄清一下:

Maximum texture size: I guess it's device dependent and somewhat about 2048x2048 should be save on halfway modern devices. Correct? Does this apply to the texture atlas or the whole texture object?"

GLES2 规范规定最大纹理大小必须为 64x64 或更好。绝大多数 Android 和所有 iOS GLES2 设备都是 2048x2048 或更好的。如果您能够降低到 1024x1024,那么您在几乎所有 Android 设备上都是安全的。对于桌面目标,我认为 2048x2048 就可以了。

Power-of-two: OpenGL 2 supports textures with a edge length that is not a power of two. But I've heard that it might be safer to use such old-fashinod sized textures. Correct?

对于非二次方纹理,需要注意的是 mipmapping 和纹理环绕可能会受到限制。出于这个原因,我几乎一直使用二次方纹理。使用纹理图集是提高性能和减少纹理浪费的好方法,因为许多形状笨拙的纹理可以组合成一个大的二次方纹理。

Bitmap size: Does the size of the bitmap (e.g. player_sprite.png) that is loaded into the game have anything to do with this maximum texture size or this power-of-two thing?

不确定我是否理解问题。如果您要渲染纹理,则 png 可能会由引擎加载并放入 OpenGL 纹理中,此时它要遵守与 OpenGL 最大纹理大小和二次幂相关的规则。