簡介 一直以來有個疑惑,T-Mobile G1 上的 OpenGL 是軟體實現的還是硬體實現的, 在網上查了好多次,但眾說紛紜,有說是軟體實現,也有說是硬體實現。受 glxinfo 的啟發,本文使用 glGetString 介面做一下檢測,結論是 G1 手機的 OpenGL 是基於硬體實現的。 思路使用 glGetString 介面查看 GL_RENDERER, GL_VERDOR, GL_VERSION, GL_EXTENSIONS 等資訊,尤其是 GL_RENDERER,即可判斷出是硬體實現還是軟體 實現。 核心程式碼片段如下所示: Log.d("GL", "GL_RENDERER = " + gl.glGetString(GL10.GL_RENDERER)); Log.d("GL", "GL_VENDOR = " + gl.glGetString(GL10.GL_VENDOR)); Log.d("GL", "GL_VERSION = " + gl.glGetString(GL10.GL_VERSION)); Log.i("GL", "GL_EXTENSIONS = " + gl.glGetString(GL10.GL_EXTENSIONS)); 使用 LogCat 看 debug 資訊: adb logcat 資料測試程式跑在虛擬機器上的列印資訊: GL_RENDERER = Android PixelFlinger 1.0GL_VENDOR = AndroidGL_VERSION = OpenGL ES-CM 1.0GL_EXTENSIONS = GL_OES_byte_coordinates GL_OES_fixed_point GL_OES_single_precision GL_OES_read_format GL_OES_compressed_paletted_texture GL_OES_draw_texture GL_OES_matrix_get GL_OES_query_matrix GL_ARB_texture_compression GL_ARB_texture_non_power_of_two GL_ANDROID_direct_texture GL_ANDROID_user_clip_plane GL_ANDROID_vertex_buffer_object GL_ANDROID_generate_mipmap 從 GL_RENDERER 資訊可以看出,虛擬機器上的 OpenGL 是 Android PixelFlinger 實現的,即軟體實現。 測試程式跑在 G1 手機上的列印資訊: GL_RENDERER = Q3Dimension MSM7500 01.02.08 0 4.0.0GL_VENDOR = QUALCOMM, Inc.GL_VERSION = OpenGL ES 1.0-CMGL_EXTENSIONS = GL_ARB_texture_env_combine GL_ARB_texture_env_crossbar GL_ARB_texture_env_dot3 GL_ARB_texture_mirrored_repeat GL_ARB_vertex_buffer_object GL_ATI_extended_texture_coordinate_data_formats GL_ATI_imageon_misc GL_ATI_texture_compression_atitc GL_EXT_blend_equation_separate GL_EXT_blend_func_separate GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_stencil_wrap GL_OES_byte_coordinates GL_OES_compressed_paletted_texture GL_OES_draw_texture GL_OES_fixed_point GL_OES_matrix_palette GL_OES_point_size_array GL_OES_point_sprite GL_OES_read_format GL_OES_single_precision GL_OES_vertex_buffer_object GL_QUALCOMM_vertex_buffer_object GL_QUALCOMM_direct_texture 從上面的 GL_RENDERER 資訊可以看出,G1 的 OpenGL 是基於 Q3Dimesion MSM7500 晶片實現的,即是硬體實現,支援硬體加速。 Q3Dimesion MSM7500 的 GLBenchmark 測試細節: |