去年4月份我写过《OpenGL ES Emulator横向比较》,比较了4种常见的OpenGL ES模拟器。过了将近一年,让我们再次横向比较一下现在的模拟器。

基本特性

厂商 NVIDIA ARM
名称 x86 Windows OpenGL ES 2.0 Emulator OpenGL ES 2.0 Emulator v1.3
模拟目标 Tegra Mali
版本 OpenGL ES 1.1, 2.0; EGL 1.3 OpenGL ES 1.1,2.0; EGL 1.3
扩展 GL_EXT_texture_compression_dxt1
GL_EXT_texture_compression_s3tc
GL_NV_log_textures
GL_OES_compressed_paletted_texture
GL_OES_element_index_uint
GL_OES_framebuffer_object
GL_OES_mapbuffer
GL_OES_rgb8_rgba8
GL_OES_shader_source
GL_OES_stencil8
GL_OES_texture_half_float
GLES_OES_compressed_ETC1_RGB8_texture
GLES_EXT_texture_format_BGRA8888
GLES_OES_texture_npot
支持的例子 所有 DetailedSurface
DistanceMapping
EmptyApp
Fractal
ProceduralTex
Text
VertexDisplacement
VideoTexture
厂商 PowerVR
名称 PowerVR SDK
模拟目标 SGX
核心版本 OpenGL ES 2.0; EGL 1.4
扩展 GL_OES_byte_coordinates
GL_OES_fixed_point
GL_OES_query_matrix
GL_OES_single_precision
GL_OES_matrix_get
GL_OES_read_format
GL_IMG_read_format
GL_OES_point_sprite
GL_OES_query_matrix
GL_OES_texture_env_crossbar
GL_OES_texture_mirrored_repeat
GL_OES_blend_subtract
GL_OES_blend_func_separate
GL_OES_blend_equation_separate
GL_OES_stencil_wrap
GL_OES_extended_matrix_palette
GL_IMG_multisampled_render_to_texture
GL_OES_vertex_half_float
GL_OES_compressed_ETC1_RGB8_texture
GL_OES_compressed_paletted_texture
GL_OES_depth24
GL_OES_depth_texture
GL_OES_required_internalformat
GL_OES_vertex_array_object
GL_OES_packed_depth_stencil
GL_EXT_discard_framebuffer
GL_OES_texture_float
GL_OES_texture_half_float
GL_OES_texture_cube_map
GL_OES_rgb8_rgba8
GL_OES_stencil8
GL_OES_fragment_precision_high
GL_OES_element_index_uint
GL_IMG_texture_compression_pvrtc
GL_OES_mapbuffer
GL_OES_texture_npot
GL_EXT_multi_draw_arrays
支持的例子 DepthPeeling
DistanceMapping
EmptyApp
Fractal
Refract
Subsurface
Text
VertexDisplacement
VideoTexture

特点

NVIDIA:和我上一次的横向比较是同一个模拟器。dll的名字和函数的调用方式和别的模拟器有些区别。在做函数动态载入的时候需要注意。

ARM:版本升级到了1.3,增加了2个扩展,其他没啥区别。这个模拟器不支持half float和float的texture,所以hdr相关的都无法使用。

PowerVR:这次新加入比较的模拟器。本身功能很齐备,除了模拟OpenGL ES之外,还带有一系列的纹理压缩工具、shader编译工具等。在编译shader的时候还会打出每一行的开销(其实我希望把它关掉的)。但不知道为什么,比较复杂的shader给glCompileShader之后,就会卡死,过很长时间也没编译出来。所以KlayGE的一些例子因此无法运行。