我有一个Android应用程序使用GLSurfaceView
进行渲染。该应用程序适用于我们所有的设备,除了一个:我们Zenfone豪华2.在我们GLSurfaceView
构造我做在Zenfone Deluxe 2上使用setEGLConfigChooser时OpenGL应用程序崩溃
setEGLConfigChooser(
8, 8, 8, 8, // rgba
24, // depth
8); // stencil
这始终工作除了Zenfone豪华2它崩溃,给下面的堆栈跟踪:
10-13 10:37:07.975 10066-10066/com.my.company.demo V/Monotype: SetAppTypeFace- try to flip, app = com.my.company.demo
10-13 10:37:07.975 10066-10066/com.my.company.demo V/Monotype: Typeface getFontPathFlipFont - systemFont = default#default
10-13 10:37:08.045 10066-10066/com.my.company.demo W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
10-13 10:37:08.065 10066-10066/com.my.company.demo V/Monotype: SetAppTypeFace- try to flip, app = com.my.company.demo
10-13 10:37:08.065 10066-10066/com.my.company.demo V/Monotype: Typeface getFontPathFlipFont - systemFont = default#default
10-13 10:37:08.335 10066-10107/com.my.company.demo D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
10-13 10:37:08.405 10066-10107/com.my.company.demo I/OpenGLRenderer: Initialized EGL, version 1.4
10-13 10:37:08.405 10066-10107/com.my.company.demo W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
10-13 10:37:08.415 10066-10105/com.my.company.demo E/AndroidRuntime: FATAL EXCEPTION: GLThread 1298
Process: com.my.company.demo, PID: 10066
java.lang.RuntimeException: createContext failed: EGL_BAD_CONFIG
at android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1196)
at android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1187)
at android.opengl.GLSurfaceView$EglHelper.start(GLSurfaceView.java:1037)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1404)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1243)
因此,我只是取消了对setEGLConfigChooser
的调用,然后应用程序运行良好。 OpenGL然后给我RGBB的(8, 8, 8, 0)
,深度缓冲区的24
以及模板缓冲区的8
。好的,那么我将这些值设置为setEGLConfigChooser
,但是应用仍然会以相同的输出崩溃。
我不知道该怎么做或如何解决它。该documentation为setEGLConfigChooser
状态
安装配置选择器将选择一个配置至少指定depthSize和stencilSize,并具有完全相同的指定redSize,greenSize,blueSize和alphaSize。
如果调用此方法,则必须在调用setRenderer(Renderer)之前调用该方法。
如果未调用setLCLConfigChooser方法,那么默认情况下视图将选择深度缓冲区深度至少为16位的RGB_888表面。
对此问题没有多大帮助。可能是什么问题?我非常希望能够以更通用的方式调用setEGLConfigChooser
来定位所有设备。
更多设备信息:
的Zenfone豪华2是具有的PowerVR盗贼G6430 GPU x86的设备。我已经下载并安装了最新的软件更新。
gl10.glGetString(GL10.GL_VENDOR);
给"Imagination Technologies"
gl10.glGetString(GL10.GL_RENDERER);
给"PowerVR Rogue G6430"
gl10.glGetString(GL10.GL_VERSION);
给"OpenGL ES 3.1 build [email protected]"
gl10.glGetString(GL10.GL_EXTENSIONS);
给GL_EXT_debug_marker GL_EXT_blend_minmax GL_EXT_color_buffer_float GL_EXT_copy_image GL_EXT_discard_framebuffer GL_EXT_draw_buffers GL_EXT_draw_buffers_indexed GL_EXT_geometry_shader GL_EXT_geometry_point_size GL_EXT_gpu_shader5 GL_EXT_multi_draw_arrays GL_EXT_multisampled_render_to_texture GL_EXT_occlusion_query_boolean GL_EXT_primitive_bounding_box GL_EXT_pvrtc_sRGB GL_EXT_read_format_bgra GL_EXT_robustness GL_EXT_separate_shader_objects GL_EXT_shader_framebuffer_fetch GL_EXT_shader_io_blocks GL_EXT_shader_pixel_local_storage GL_EXT_shader_texture_lod GL_EXT_shadow_samplers GL_EXT_tessellation_shader GL_EXT_tessellation_point_size GL_EXT_texture_border_clamp GL_EXT_texture_buffer GL_EXT_texture_cube_map_array GL_EXT_texture_filter_anisotropic GL_EXT_texture_format_BGRA8888 GL_EXT_texture_rg GL_EXT_texture_sRGB_decode GL_IMG_multisampled_render_to_texture GL_IMG_program_binary GL_IMG_read_format GL_IMG_shader_binary GL_IMG_texture_compression_pvrtc GL_IMG_texture_compression_pvrtc2 GL_IMG_texture_format_BGRA8888 GL_IMG_texture_npot GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_KHR_debug GL_OES_compressed_ETC1_RGB8_texture GL_OES_depth24 GL_OES_depth_texture GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_EGL_image_external_essl3 GL_OES_EGL_sync GL_OES_element_index_uint GL_OES_fragment_precision_high GL_OES_draw_buffers_indexed GL_OES_get_program_binary GL_OES_mapbuffer GL_OES_packed_depth_stencil GL_OES_required_internalformat GL_OES_rgb8_rgba8 GL_OES_sample_shading GL_OES_sample_variables GL_OES_shader_image_atomic GL_OES_shader_multisample_interpolation GL_OES_standard_derivatives GL_OES_surfaceless_context GL_OES_texture_float GL_OES_texture_half_float GL_OES_texture_npot GL_OES_texture_stencil8 GL_OES_texture_storage_multisample_2d_array GL_OES_vertex_array_object GL_OES_vertex_half_float
我的问题不是关于选择哪个值,而是关于'setEGLConfigChooser'中的某个特定设备的崩溃,而我的其他设备在调用时会工作。它也会在使用与设备在不调用'setEGLConfigChooser'时完全相同的配置时崩溃。 –
EGL_BAD_CONFIG绝对意味着由于您传入的配置不正确而导致崩溃。所以这意味着你必须小心你可以选择的值。 – andras