LibGDX、OpenGL 2.0 和纹理必须是 2 的幂?

LibGDX, OpenGL 2.0 and textures having to be powers of two?

我知道在使用 OpenGL 2.0 和 libGDX 时,我的纹理图像必须是 2 的幂。这在本页 https://github.com/libgdx/libgdx/wiki/Textures,-textureregion-and-spritebatch.

中有说明

我无法理解的一件事是,这并不总是正确的。我正在创建一个具有启动画面的应用程序,我使用的纹理直接加载到 class 声明(屏幕)中,如下所示;

private TextureRegion textureRegion = new TextureRegion(
        new Texture(Gdx.files.internal("images/splashLogo.png"))
);

这张图片的尺寸为 133 x 23,显然不是 2 的幂;但是,一切都很好。

在我的游戏中,我使用 AssetManager 将纹理等加载到我的游戏中,但我发现我使用的纹理必须为 ^2 大小,例如 128x32、512x512 等,否则它们不起作用?

下面是我的资产管理器的一组示例纹理;

shapes = TextureRegion.split(Assets.assetManager.get("images/shapeSprite.png", Texture.class), 64, 64);
    for (TextureRegion[] shapeSet: shapes) {
        for (TextureRegion shape: shapeSet) {
            shape.flip(false, true);
        }
    }

纹理为 512x512,如果不是,则不会显示 textureRegion。

为什么有些纹理的大小必须是 2 的幂,而有些则不是?

严格的二乘方 (POT) 大小要求仅适用于 OpenGL ES 1.x。 libGDX 自 libGDX 版本 1.0.0 起不再支持此版本的 OpenGL ES。所以对纹理不再有严格的 POT 要求。

但是,根据 GPU,非 POT 纹理尺寸可能不支持某些功能(例如纹理环绕)。此外,在实践中,非 POT 大小的纹理可能(将)使用与最近的更大 POT 大小相同的内存量。

由于这些原因,并且无论如何都应该将多个纹理打包到图集上,因此强烈建议始终使用 POT 大小的纹理。

另请参阅:Is there any way to ignore libgdx images Limitation? (images must be power of two)

如果那不能回答您的问题,那么请考虑改写您的问题并解释您用 "they do not work" 表达的意思。