OpenGL extensions available on different Android devices

Viewed 26785

I'm in the process of writing an OpenGL ES powered framework for my next Android game(s). Currently I'm supporting three different techniques of drawing sprites:

  • the basic way: using vertex arrays (slow)
  • using vertex-buffer-objects (VBOs) (faster)
  • using the draw_texture extension (fastest, but only for basic sprites, i.e. no transforming)

Vertex arrays are supported in OpenGL ES 1.0 and thus in every Android-device. I'm guessing most (if not all) of the current devices also support VBOs and draw_texture.

Instead of guessing, I'd like to know the extensions supported by different devices. If majority of devices support VBOs, I could simplify my code and focus only on VBOs + draw_texture.

It'd be helpful to know what different devices support, so if you have an Android-device, do report the extensions list please. :)

String extensions = gl.glGetString(GL10.GL_EXTENSIONS);

I've got a HTC Hero, so I can share those extensions next.

23 Answers

OpenGL ES extensions on HTC G1 (Android 1.6):

  • 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

OpenGL ES version on HTC G1 (Android 1.6):

  • OpenGL ES 1.0-CM

I'm including the version as retrieved by:
gl.glGetString(GL10.GL_VERSION)

It's pretty interesting in that it doesn't follow the specification. The profile is supposed to be before the number. It is also needed to determine capabilities. For example, the Droid doesn't report VBO support in its extension list. It does report an OpenGL ES version of 1.1, however. That means it does support VBOs, because VBOs were made mandatory in the 1.1 version.

OpenGL ES extensions on Nexus One (Android 2.1):

  • GL_AMD_compressed_3DC_texture
  • GL_AMD_compressed_ATC_texture
  • GL_ARB_texture_env_combine
  • GL_ARB_texture_env_dot3
  • GL_ARB_texture_mirrored_repeat
  • GL_ARB_vertex_buffer_object
  • GL_ATI_compressed_texture_atitc
  • 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_EGL_image
  • GL_OES_blend_equation_separate
  • GL_OES_blend_func_separate
  • GL_OES_blend_subtract
  • GL_OES_compressed_ETC1_RGB8_texture
  • GL_OES_compressed_paletted_texture
  • GL_OES_draw_texture
  • GL_OES_extended_matrix_palette
  • GL_OES_framebuffer_object
  • GL_OES_matrix_palette
  • GL_OES_point_size_array
  • GL_OES_point_sprite
  • GL_OES_read_format
  • GL_OES_stencil_wrap
  • GL_OES_texture_cube_map
  • GL_OES_texture_env_crossbar
  • GL_OES_texture_mirrored_repeat

Just got a Droid running Android 2.0.1.

GL_EXTENSIONS:

  • GL_OES_byte_coordinates
  • GL_OES_fixed_point
  • GL_OES_single_precision
  • GL_OES_matrix_get
  • GL_OES_read_format
  • GL_OES_compressed_paletted_texture
  • GL_OES_point_sprite
  • GL_OES_point_size_array
  • GL_OES_matrix_palette
  • GL_OES_draw_texture
  • GL_OES_query_matrix
  • GL_OES_texture_env_crossbar
  • GL_OES_texture_mirrored_repeat
  • GL_OES_texture_cube_map
  • GL_OES_blend_subtract
  • GL_OES_blend_func_separate
  • GL_OES_blend_equation_separate
  • GL_OES_stencil_wrap
  • GL_OES_extended_matrix_palette
  • GL_OES_framebuffer_object
  • GL_OES_rgb8_rgba8
  • GL_OES_depth24
  • GL_OES_stencil8
  • GL_OES_compressed_ETC1_RGB8_texture
  • GL_OES_mapbuffer
  • GL_OES_EGL_image
  • GL_EXT_multi_draw_arrays
  • GL_OES_required_internalformat
  • GL_IMG_read_format
  • GL_IMG_texture_compression_pvrtc
  • GL_IMG_texture_format_BGRA8888
  • GL_EXT_texture_format_BGRA8888
  • GL_IMG_texture_stream
  • GL_IMG_vertex_program

GL_VERSION:

  • OpenGL ES-CM 1.1

GL_RENDERER:

  • PowerVR SGX 530

GL_VENDOR:

  • Imagination Technologies

GL_ALIASED_POINT_SIZE_RANGE:

  • 1, 32

GL_SMOOTH_POINT_SIZE_RANGE:

  • 1, 1

OpenGL ES extensions on HTC Hero (Android 1.5):

  • 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

Archos 5 internet tablet running Android 1.6:

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:

  • Android PixelFlinger 1.0

GL_VENDOR:

  • Android

GL_ALIASED_POINT_SIZE_RANGE:

  • 0, 134217727

GL_SMOOTH_POINT_SIZE_RANGE:

  • 0, 2048

Guess that means there is no OpenGL hardware acceleration.

Here's the Motorola Cliq, running a 1.1 hack found here:

Android Device
   motorola / morr / MB200
   2.1-update1 / armeabi
OpenGL Version
   OpenGL ES 1.1-CM
OpenGL Vendor
   QUALCOMM, Inc.
OpenGL Renderer
   Q3Dimension MSM7230 01.02.08 0 4.0.0
OpenGL Extensions
   ARB_texture_env_combine
   ARB_texture_env_crossbar
   ARB_texture_env_dot3
   ARB_texture_mirrored_repeat
   ARB_vertex_buffer_object
   ATI_extended_texture_coordinate_data_formats
   ATI_imageon_misc
   ATI_texture_compression_atitc
   EXT_blend_equation_separate
   EXT_blend_func_separate
   EXT_blend_minmax
   EXT_blend_subtract
   EXT_stencil_wrap
   OES_byte_coordinates
   OES_compressed_paletted_texture
   OES_draw_texture
   OES_fixed_point
   OES_matrix_palette
   OES_point_size_array
   OES_point_sprite
   OES_read_format
   OES_single_precision
   OES_vertex_buffer_object
   QUALCOMM_direct_texture
   QUALCOMM_vertex_buffer_object
Limits OpenGL 1.0
   ALIASED_LINE_WIDTH_RANGE = 1,1
   ALIASED_POINT_SIZE_RANGE = 1,32
   MAX_ELEMENTS_INDICES = 65536
   MAX_ELEMENTS_VERTICES = 65536
   MAX_LIGHTS = 8
   MAX_MODELVIEW_STACK_DEPTH = 16
   MAX_PROJECTION_STACK_DEPTH = 2
   MAX_TEXTURE_SIZE = 1024
   MAX_TEXTURE_STACK_DEPTH = 2
   MAX_TEXTURE_UNITS = 2
   MAX_VIEWPORT_DIMS = 320,455
   SMOOTH_LINE_WIDTH_RANGE = 1,1
   SMOOTH_POINT_SIZE_RANGE = 1,32
   SUBPIXEL_BITS = 2
Limits OpenGL 1.1
   MAX_CLIP_PLANES = 0
Limits OpenGL 1.1 Ext
   MAX_COLOR_ATTACHMENTS_OES = 0
   MAX_CUBE_MAP_TEXTURE_SIZE = 0
   MAX_PALETTE_MATRICES_OES = 48
   MAX_RENDERBUFFER_SIZE_OES = 0
   MAX_VERTEX_UNITS_OES = 4
Display Resolution
   Pixels = 320 x 480
   DPIs = 159.37254 x 160.42105
Display Configurations
   Standard
      00: R5G6B5
      05: R5G5B5A1
      14: R5G6B5 S4
      06: R5G5B5A1 S4
      15: R5G6B5 D16
      07: R5G5B5A1 D16
      04: R5G6B5 D16 S4
      08: R5G5B5A1 D16 S4
   Non Conformant
      09: R4G4B4A4
      10: R4G4B4A4 S4
      11: R4G4B4A4 D16
      12: R4G4B4A4 D16 S4
      13: R8G8B8A8
      01: R8G8B8A8 S4
      02: R8G8B8A8 D16
      03: R8G8B8A8 D16 S4
   Slow
      16: R5G6B5 Native
      17: R5G6B5 D16 Native
      18: R8G8B8 Native
      19: R8G8B8 D16 Native
      20: R8G8B8A8 Native
      21: R8G8B8A8 D16 Native
      22: A8 Native
      23: A8 D16 Native
Compressed Texture Formats
   Reported
      8b90: PALETTE4_RGB8_OES
      8b91: PALETTE4_RGBA8_OES
      8b92: PALETTE4_R5_G6_B5_OES
      8b93: PALETTE4_RGBA4_OES
      8b94: PALETTE4_RGB5_A1_OES
      8b95: PALETTE8_RGB8_OES
      8b96: PALETTE8_RGBA8_OES
      8b97: PALETTE8_R5_G6_B5_OES
      8b98: PALETTE8_RGBA4_OES
      8b99: PALETTE8_RGB5_A1_OES
EGL Vendor & Version
   Android
   1.4 Android META-EGL
EGL Extensions
   ANDROID_get_render_buffer
   ANDROID_image_native_buffer
   ANDROID_swap_rectangle
   KHR_image
   KHR_image_base
   KHR_image_pixmap

Here's the output of glInfo for my HTC Desire (T-mobile branded)

Android Device
   HTC / bravo / HTC Desire
   2.2 / armeabi-v7a
OpenGL Version
   OpenGL ES-CM 1.1
OpenGL Vendor
   Qualcomm
OpenGL Renderer
   Adreno
OpenGL Extensions
   AMD_compressed_3DC_texture
   AMD_compressed_ATC_texture
   ARB_texture_env_combine
   ARB_texture_env_dot3
   ARB_texture_mirrored_repeat
   ARB_vertex_buffer_object
   ATI_compressed_texture_atitc
   ATI_texture_compression_atitc
   EXT_blend_equation_separate
   EXT_blend_func_separate
   EXT_blend_minmax
   EXT_blend_subtract
   EXT_stencil_wrap
   OES_EGL_image
   OES_blend_equation_separate
   OES_blend_func_separate
   OES_blend_subtract
   OES_compressed_ETC1_RGB8_texture
   OES_compressed_paletted_texture
   OES_draw_texture
   OES_extended_matrix_palette
   OES_framebuffer_object
   OES_matrix_palette
   OES_point_size_array
   OES_point_sprite
   OES_read_format
   OES_stencil_wrap
   OES_texture_cube_map
   OES_texture_env_crossbar
   OES_texture_mirrored_repeat
Limits OpenGL 1.0
   ALIASED_LINE_WIDTH_RANGE = 1,8
   ALIASED_POINT_SIZE_RANGE = 1,128
   MAX_ELEMENTS_INDICES = 0
   MAX_ELEMENTS_VERTICES = 0
   MAX_LIGHTS = 8
   MAX_MODELVIEW_STACK_DEPTH = 16
   MAX_PROJECTION_STACK_DEPTH = 4
   MAX_TEXTURE_SIZE = 2048
   MAX_TEXTURE_STACK_DEPTH = 2
   MAX_TEXTURE_UNITS = 2
   MAX_VIEWPORT_DIMS = 2048,2048
   SMOOTH_LINE_WIDTH_RANGE = 1,1
   SMOOTH_POINT_SIZE_RANGE = 1,128
   SUBPIXEL_BITS = 2
Limits OpenGL 1.1
   MAX_CLIP_PLANES = 1
Limits OpenGL 1.1 Ext
   MAX_COLOR_ATTACHMENTS_OES = 0
   MAX_CUBE_MAP_TEXTURE_SIZE = 2048
   MAX_PALETTE_MATRICES_OES = 20
   MAX_RENDERBUFFER_SIZE_OES = 2048
   MAX_VERTEX_UNITS_OES = 4
Display Resolution
   Pixels = 480 x 800
   DPIs = 254.0 x 254.0
Display Configurations
   Standard
      06: R5G6B5
      07: R5G6B5 D16
      08: R5G6B5 D24 S8
      09: R8G8B8A8
      10: R8G8B8A8 D16
      11: R8G8B8A8 D24 S8
      12: R8G8B8
      13: R8G8B8 D16
      14: R8G8B8 D24 S8
      36: R5G6B5 MSAAx4
      37: R5G6B5 D16 MSAAx4
      38: R5G6B5 D24 S8 MSAAx4
      39: R8G8B8A8 MSAAx4
      40: R8G8B8A8 D16 MSAAx4
      41: R8G8B8A8 D24 S8 MSAAx4
      42: R8G8B8 MSAAx4
      43: R8G8B8 D16 MSAAx4
      44: R8G8B8 D24 S8 MSAAx4
   Non Conformant
      21: R5G6B5 MSAAx2
      22: R5G6B5 D16 MSAAx2
      23: R5G6B5 D24 S8 MSAAx2
      24: R8G8B8A8 MSAAx2
      25: R8G8B8A8 D16 MSAAx2
      26: R8G8B8A8 D24 S8 MSAAx2
      27: R8G8B8 MSAAx2
      28: R8G8B8 D16 MSAAx2
      29: R8G8B8 D24 S8 MSAAx2
   Slow
      45: R5G6B5 Native
      46: R5G6B5 D16 Native
      47: R8G8B8 Native
      48: R8G8B8 D16 Native
      49: R8G8B8A8 Native
      50: R8G8B8A8 D16 Native
      51: A8 Native
      52: A8 D16 Native
Compressed Texture Formats
   Reported
      8b90: PALETTE4_RGB8_OES
      8b91: PALETTE4_RGBA8_OES
      8b92: PALETTE4_R5_G6_B5_OES
      8b93: PALETTE4_RGBA4_OES
      8b94: PALETTE4_RGB5_A1_OES
      8b95: PALETTE8_RGB8_OES
      8b96: PALETTE8_RGBA8_OES
      8b97: PALETTE8_R5_G6_B5_OES
      8b98: PALETTE8_RGBA4_OES
      8b99: PALETTE8_RGB5_A1_OES
   Implicit
      87f9: 3DC_X_AMD
      87fa: 3DC_XY_AMD
      8c92: ATC_RGB_AMD
      8c93: ATC_RGBA_EXPLICIT_ALPHA_AMD
      87ee: ATC_RGBA_INTERPOLATED_ALPHA_AMD
      8d64: ETC1_RGB8_OES
EGL Vendor & Version
   Android
   1.4 Android META-EGL
EGL Extensions
   ANDROID_get_render_buffer
   ANDROID_image_native_buffer
   ANDROID_swap_rectangle
   KHR_image
   KHR_image_base
   KHR_image_pixmap
Related