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

时间:2015-01-16 10:37:59

标签: 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"))
);

此图像的尺寸为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,如果不是则纹理区域不显示。

为什么某些纹理的大小必须是2的幂而另一些不是?

1 个答案:

答案 0 :(得分:5)

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

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

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

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

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

相关问题