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

Pro*_*log 1 opengl libgdx

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

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

private TextureRegion textureRegion = new TextureRegion(
        new Texture(Gdx.files.internal("images/splashLogo.png"))
);
Run Code Online (Sandbox Code Playgroud)

此图像的尺寸为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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

为什么一些纹理必须是两个大小的权力,而另一些不具有?

Xop*_*ppa 5

严格的2(POT)尺寸要求仅适用于OpenGL ES 1.x. 自libGDX版本1.0.0起,libGDX不再支持此版本的OpenGL ES.因此,对纹理不再有严格的POT要求.

但是,根据GPU,非POT纹理大小可能不支持某些功能(例如纹理包装).此外,实际上,非POT大小的纹理可能(将)使用与最近的较大POT大小相同的内存量.

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

另请参阅:有没有办法忽略libgdx图像限制?(图像必须是2的幂)

如果这不能回答你的问题,那么请考虑改写你的问题并解释你对"他们不工作"的意思.