一直以来有个疑惑,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.0 GL_VENDOR = Android GL_VERSION = OpenGL ES-CM 1.0 GL_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.0 GL_VENDOR = QUALCOMM, Inc. GL_VERSION = OpenGL ES 1.0-CM GL_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 测试细节:
http://www.glbenchmark.com/resultdetails.jsp?benchmark=glpro&resultid=6392206&D=LG%20KS20