2017-10-13 4 views
0

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); gibt

    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 
    

Antwort

0

Der Grund, warum es abstürzt, ist, weil ich setEGLConfigChooser()vorsetEGLContextClientVersion() rief. Das Verschieben des Anrufs nach dem Entfernen des Absturzes funktioniert weiterhin auf anderen Geräten. Weitere Informationen darüber, warum es abstürzt, finden Sie in this Antwort.

0

Wenn y gibt Ou Blick auf die gute alte MultisampleConfigChooser, die Tiefe beträgt nur 16 Bits und die Schablone ist nur 1. Auch nach dem Durchlaufen der EGL 1.4 specification, fand ich keine Aussage über die minimale unterstützte Schablone, Tiefe und Farbe Puffergrößen.

Sie können es mit niedrigeren Zahlen versuchen, aber Sie müssen es möglicherweise komplexer machen, wenn Sie das beste verfügbare auswählen möchten.

+0

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. –

+0

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

Verwandte Themen