2015-01-07 40 views
0

我已经在Play商店发布了我的游戏,但我在某些设备上收到了frame buffer couldn't be constructed: unsupported combination of formats错误。下面是与本报告的设备列表:Libgdx:格式不受支持的组合

Galaxy Ace2 (GT-I8160 
Galaxy Note (GT-N7000) 
maxwell_c7016 
hsdroid 
Galaxy S2 (GT-I9100) 

下面是堆栈跟踪:

java.lang.IllegalStateException: frame buffer couldn't be constructed: unsupported combination of formats 
at com.badlogic.gdx.graphics.glutils.FrameBuffer.build(FrameBuffer.java:204) 
at com.badlogic.gdx.graphics.glutils.FrameBuffer.<init>(FrameBuffer.java:116) 
at com.badlogic.gdx.graphics.glutils.FrameBuffer.<init>(FrameBuffer.java:98) 
at com.ons.era.screens.DirectedGame.setScreen(DirectedGame.java:37) 
at com.ons.era.EraGame.create(EraGame.java:21) 
at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:241) 
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1455) 
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1216) 

我试图找到网络上的任何解决方案,但没有运气。

我用GDX纹理帕克这个设置我不知道这是否是原因崩溃

Texture Packer settings

+0

它不带有纹理的,但你所创建的帧缓冲区的问题。请参阅https://github.com/libgdx/libgdx/blob/3f49a73ae24014964db439cd7d98a935dc30f13e/gdx/src/com/badlogic/gdx/graphics/glutils/FrameBuffer.java#L129。你应该检查你在libgdx中请求的功能,然后看看,如果提到的设备不支持它们。 – cfrick

+0

你能给我简单的代码吗?谢谢 – Jovan

+0

我们怎样才能给你你的代码?如果你不关心上面提到的设备的产生,只需提高酒吧,使它们被排除在外。 – cfrick

回答

1

在这种情况下帧缓冲区意味着你的屏幕,而不是纹理。也许你正在创建一个带有不受支持的深度位或颜色分量的帧缓冲区(例如alpha)。可能有一种方法可以查询支持的格式。

+0

谢谢你的回答。你能给我提示如何检测和解决这个不支持的深度位或颜色分量。有没有什么工具可以检查,因为我不知道“不支持”是什么意思。 – Jovan

+0

我还没有使用LibGDX,但根据他们的文档,您可以从Application返回的Graphics对象查询可用格式:http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/Graphics。 HTML – SurvivalMachine

2

查看用于FrameBuffer构造函数的Javadoc。如果你的目标GLES 2.0,那么,你需要选择的所列的格式之一:

format - the format of the color buffer; according to the OpenGL ES 2.0 spec, only RGB565, RGBA4444 and RGB5_A1 are color-renderable

有一些支持比GLES 2.0所需的最低费用多的设备,但据我所知,没有更简单的方法来测试支持,而不是发现这种异常。我所做的就是用我更喜欢的格式构造FrameBuffer,捕捉IllegalStateException,并在必要时使用其中一种有保证的格式。

例如:

FrameBuffer frameBuffer; 
try { 
    frameBuffer = new FrameBuffer(Format.RGBA8888, 1024, 1024, false, false); 
} catch (IllegalStateException e){ 
    frameBuffer = new FrameBuffer(Format.RGB565, 1024, 1024, false, false); 
} 
相关问题