Ich habe eine Android-Anwendung, die eine GLSurfaceView
zum Rendern verwendet. Die Anwendung funktioniert auf allen Geräten mit einer Ausnahme: Unser Zenfone Deluxe 2. In unserem GLSurfaceView
Konstruktor ichOpenGL app stürzt ab, wenn setEGLConfigChooser auf Zenfone Deluxe 2 verwendet
setEGLConfigChooser(
8, 8, 8, 8, // rgba
24, // depth
8); // stencil
tun Dies funktioniert immer mit Ausnahme der Zenfone Deluxe 2, wo es stürzt ab, so dass die folgende Stack-Trace:
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)
Also dann habe ich einfach den Aufruf an setEGLConfigChooser
unkommentiert und dann läuft die Anwendung gut. OpenGL gibt mir dann (8, 8, 8, 0)
für RGBA, 24
für den Tiefenpuffer und 8
für den Stencil-Puffer. Ok, also dann setze ich diese Werte stattdessen in die setEGLConfigChooser
, aber dann stürzt die App immer noch mit der gleichen Ausgabe ab.
Ich bin mir nicht sicher, was ich davon machen soll oder wie ich es lösen soll. Die documentation für setEGLConfigChooser
Staaten
Installieren Sie eine Config-Chooser, die eine Konfiguration mit mindestens der angegebenen depthSize und stencilSize, und genau der angegebenen redSize, greenSize, blueSize und alphaSize wählen werden.
Wenn diese Methode aufgerufen wird, muss sie aufgerufen werden, bevor setRenderer (Renderer) aufgerufen wird.
Wenn keine setEGLConfigChooser-Methode aufgerufen wird, wählt die Ansicht standardmäßig eine RGB_888-Oberfläche mit einer Tiefenpuffertiefe von mindestens 16 Bit.
was hilft nicht viel in diesem Problem. Was kann das Problem sein? Ich würde sehr gerne in der Lage sein, setEGLConfigChooser
in einer allgemeineren Weise zu benennen, um alle Geräte anzusprechen.
Weitere Geräteinfo:
Die Zenfone Deluxe 2 ist ein x86-Gerät mit einem PowerVR Rogue G6430 GPU. Ich habe die neuesten Software-Updates heruntergeladen und installiert.
gl10.glGetString(GL10.GL_VENDOR);
gibt"Imagination Technologies"
gl10.glGetString(GL10.GL_RENDERER);
gibt"PowerVR Rogue G6430"
gl10.glGetString(GL10.GL_VERSION);
"OpenGL ES 3.1 build [email protected]"
gl10.glGetString(GL10.GL_EXTENSIONS);
gibtGL_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
Mein Problem ist nicht, über welche Werte zu wählen, es geht um Absturz in 'setEGLConfigChooser' für ein bestimmtes Gerät, während alle anderen meiner Geräte funktioniert, wenn Sie es aufrufen. Es stürzt auch ab, wenn ich genau dieselbe Konfiguration verwende, die das Gerät mir gibt, wenn ich 'setEGLConfigChooser' nicht anrufe. –
EGL_BAD_CONFIG bedeutet definitiv, dass der Absturz verursacht wird, weil die von Ihnen übergebene Konfiguration nicht richtig war. Es bedeutet also, dass Sie vorsichtig sein müssen, welche Werte Sie wählen können. – andras