OpenGL扩展程序可在不同的Android设备上使用[已关闭]

2022-08-31 22:35:28

我正在为我的下一个Android游戏编写一个OpenGL ES驱动的框架。目前,我支持三种不同的绘制子画面技术:

  • 基本方法:使用顶点数组(慢速)
  • 使用顶点缓冲区对象 (VBO)(更快)
  • 使用draw_texture扩展(最快,但仅适用于基本精灵,即不进行变换)

顶点数组在OpenGL ES 1.0中受支持,因此在每个Android设备中都受支持。我猜大多数(如果不是全部)当前设备也支持VBO和draw_texture。

我不想猜测,而是想知道不同设备支持的扩展。如果大多数设备都支持VBO,我可以简化我的代码,只关注VBO + draw_texture。

了解不同的设备支持会很有帮助,因此,如果您有Android设备,请报告扩展列表。:)

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

我有一个HTC英雄,所以我接下来可以分享这些扩展。


答案 1

HTC G1 (Android 1.6) 上的 OpenGL ES 扩展:

  • 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

HTC G1 (Android 1.6) 上的 OpenGL ES 版本:

  • OpenGL ES 1.0-CM

我包括由以下人员检索到的版本:
gl.glGetString(GL10.GL_VERSION)

这很有趣,因为它不遵循规范。配置文件应该在数字之前。还需要确定能力。例如,Droid 不会在其扩展列表中报告 VBO 支持。但是,它确实报告了1.1的OpenGL ES版本。这意味着它确实支持VBO,因为VBO在1.1版本中是强制性的。


答案 2

这是运行Android 2.1-update1的HTC Evo 4G(感谢Google IO):

GL_VERSION:

  • OpenGL ES-CM 1.1

GL_EXTENSIONS:

  • 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

GL_RENDERER:

  • 肾上腺素

GL_VENDOR:

  • 高通

GL_ALIASED_POINT_SIZE_RANGE:

  • 1, 128

GL_SMOOTH_POINT_SIZE_RANGE:

  • 1, 128

我以为性能会复制Nexus的性能。毕竟,它具有相同的渲染器/处理器。屏幕是TFT而不是OLED,但分辨率相同。然而,我的一款游戏在N1上每帧需要16-18毫秒,这需要33-34毫秒。我还没有研究为什么。这个数字看起来很可疑,如果屏幕只以30Hz而不是60Hz运行。不过,我还没有证实这一点。


推荐