Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Libgdx:不支持的格式组合_Java_Opengl Es_Libgdx_Opengl Es 2.0 - Fatal编程技术网

Java Libgdx:不支持的格式组合

Java Libgdx:不支持的格式组合,java,opengl-es,libgdx,opengl-es-2.0,Java,Opengl Es,Libgdx,Opengl Es 2.0,我已在play store上发布了我的游戏,但无法构建帧缓冲区:某些设备上不支持格式组合错误。以下是包含此报告的设备列表: 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 combina

我已在play store上发布了我的游戏,但无法构建帧缓冲区:某些设备上不支持格式组合错误。以下是包含此报告的设备列表:

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)
java.lang.IllegalStateException:无法构造帧缓冲区:不支持的格式组合
位于com.badlogic.gdx.graphics.glutils.FrameBuffer.build(FrameBuffer.java:204)
位于com.badlogic.gdx.graphics.glutils.FrameBuffer.(FrameBuffer.java:116)
位于com.badlogic.gdx.graphics.glutils.FrameBuffer.(FrameBuffer.java:98)
位于com.ons.era.screens.DirectedGame.setScreen(DirectedGame.java:37)
在com.ons.era.EraGame.create上(EraGame.java:21)
位于com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:241)
在android.opengl.GLSurfaceView$GLThread.guarderun(GLSurfaceView.java:1455)
在android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1216)
我试图在网上找到任何解决方案,但运气不佳

我在GDX纹理打包机中使用此设置,我不确定这是否是崩溃的原因


在此上下文中,帧缓冲区表示您的屏幕,而不是纹理。可能您正在使用不支持的深度位或颜色组件(例如alpha)创建帧缓冲区。可能有一种方法可以查询支持的格式。

在此上下文中,帧缓冲区表示您的屏幕,而不是纹理。可能您正在使用不支持的深度位或颜色组件(例如alpha)创建帧缓冲区。可能有一种方法可以查询支持的格式。

查看Javadoc中的帧缓冲区构造函数。如果您的目标是GLES 2.0,则需要选择其中一种格式:

格式-颜色缓冲区的格式;根据OpenGL ES
2.0规范,只有RGB565、RGBA4444和RGB5_A1可进行颜色渲染

有些设备的支持度超过了GLE2.0的最低要求,但据我所知,没有比捕获此异常更简单的测试支持度的方法了。我要做的是用我喜欢的格式构造帧缓冲区,捕获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);
}

查看Javadoc以获取帧缓冲区的构造函数。如果您的目标是GLES 2.0,则需要选择其中一种格式:

格式-颜色缓冲区的格式;根据OpenGL ES
2.0规范,只有RGB565、RGBA4444和RGB5_A1可进行颜色渲染

有些设备的支持度超过了GLE2.0的最低要求,但据我所知,没有比捕获此异常更简单的测试支持度的方法了。我要做的是用我喜欢的格式构造帧缓冲区,捕获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);
}

这不是纹理的问题,而是您正在创建的帧缓冲区的问题。看见您应该在libgdx中检查您正在请求的功能,然后查看所提到的设备是否不支持这些功能。您能给我简单的代码吗?谢谢,我们能给你你的代码吗?另外,如果你不关心上面提到的设备的生成,只要把它抬起,这样它们就被排除在外。也许考虑包括抛出异常的实际代码(Dead TeaM.java:37)。这不是纹理的问题,而是您正在创建的帧缓冲区的问题。看见您应该在libgdx中检查您正在请求的功能,然后查看所提到的设备是否不支持这些功能。您能给我简单的代码吗?谢谢,我们能给你你的代码吗?另外,如果你不关心上面提到的设备的生成,只要把它抬起,这样它们就被排除在外。也许考虑包括抛出异常的实际代码(Dead TeaM.java:37)。谢谢你的回答。你能告诉我如何检测和解决这个不受支持的深度位或颜色分量吗。是否有任何工具可以检查这一点,因为我不知道“不支持”是什么意思。我没有使用LibGDX,但根据他们的文档,您可以从应用程序返回的图形对象中查询可用的格式:谢谢您的回答。你能告诉我如何检测和解决这个不受支持的深度位或颜色分量吗。有没有工具可以检查这一点,因为我不知道“不支持”是什么意思。我没有使用LibGDX,但根据他们的文档,您可以从应用程序返回的图形对象中查询可用的格式: