2015-01-16 26 views
1

我明白,当使用OpenGL 2.0和libGDX时,我的纹理图像必须是2的幂。这在此页上陈述https://github.com/libgdx/libgdx/wiki/Textures,-textureregion-and-spritebatchLibGDX,OpenGL 2.0和纹理必须是2的幂?

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

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

此图片的尺寸为133 x 23,显然不是两个幂;但是,一切都很好。

在我的游戏中,我使用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); 
     } 
    } 

质地512×512,并且如果它不是,则textureRegion不显示。

为什么在一些纹理上有差异,必须是两个大小的权力,而其他一些则不然?

回答

4

两个(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)

如果不回答你的问题,那么请考虑换一种方式表述你的问题,并解释你的意思“他们不工作”是什么。

+0

你好Xoppa先生,我冒昧地从LibGDX维基页面更新了页面'Textures,textureregion和spritebatch',用你的答案带来了intel,因为那里的信息已经过时了。 –