Reprinted please indicate the source for the klayge game engine, this article address for http://www.klayge.org/2011/04/20/opengl-es-emulator%e6%a8%aa%e5%90%91%e6%af%94%e8%be%83/
OpenGL ES is widely used on mobile devices. To develop something on PC, we usually need an OpenGL ES emulator. Currently, common simulators include AMD, arm, Qualcomm, and NVIDIA. What are their capabilities? Let's make a simple horizontal comparison.
Basic Features
Vendor |
AMD |
Arm |
Name |
OpenGL elasticsearch 2.0 emulator (Already sold to Qualcomm) |
OpenGL ES 2.0 emulator v1.2
|
Simulated target |
AMD handheld GPU |
Mali |
Core version |
2.0 |
1.x, 2.0 |
Extension |
Gl_amd_alpha_test Gl_amd_compressed_3dc_texture Gl_amd_compressed_atc_texture Gl_amd_logic_op Gl_amd_program_binary_z400 Gl_amd_writeonly_rendering Gl_ext_texture_filter_anisotropic Gl_ext_texture_type_2_10_10_10_rev Gl_oes_compressed_etc1_rgb8_texture Gl_oes_compressed_paletted_texture Gl_oes_depth_texture Gl_oes_depth24 Gl_oes_element_index_uint Gl_oes_fragment_precision_high Gl_oes_get_program_binary Gl_oes_packed_depth_stencel Gl_oes_rgb8_rgba8 Gl_oes_standard_derivatives Gl_oes_texture_3d Gl_oes_texture_float Gl_oes_texture_float_linear Gl_oes_texture_half_float Gl_oes_texture_half_float_linear Gl_oes_texture_npot Gl_oes_vertex_half_float Gl_oes_vertex_type_10_10_10_2 |
Gl_oes_compressed_etc1_rgb8_texture |
Vendor |
Qualcomm |
NVIDIA |
Name |
Adreno sdks 2.2
|
X86 Windows OpenGL ES 2.0 emulator
|
Simulated target |
Qualcomm Adreno hardware |
Tegra |
Core version |
2.0 |
2.0 |
Extension |
Gl_amd_alpha_test Gl_amd_compressed_3dc_texture Gl_amd_compressed_atc_texture Gl_amd_logic_op Gl_amd_shader_binary_z400 Gl_ext_texture_filter_anisotropic Gl_ext_texture_type_2_10_10_10_rev Gl_oes_compressed_etc1_rgb8_texture Gl_oes_compressed_paletted_texture Gl_oes_depth_texture Gl_oes_depth24 Gl_oes_element_index_uint Gl_oes_fragment_precision_high Gl_oes_packed_depth_stencel Gl_oes_rgb8_rgba8 Gl_oes_standard_derivatives Gl_oes_texture_3d Gl_oes_texture_float Gl_oes_texture_float_linear Gl_oes_texture_half_float Gl_oes_texture_half_float_linear Gl_oes_texture_npot Gl_oes_vertex_half_float Gl_oes_vertex_type_10_10_10_2 |
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 |
Features
AMD: The old simulator has been sold to Qualcomm along with AMD's handheld device business. This simulator is basically quite regular and is used for developing OpenGL ES 2 on the desktop. Its extension can meet common special effects, and its compatibility and speed are also good. The amd OpenGL ES simulator supports the es standard to a better degree than the amd OpenGL driver supports the GL standard.
Arm: Besides elasticsearch 2, elasticsearch supports elasticsearch 1.x. So if you want to develop the Es 1. X program, you can select arm. The problem is that there is only one etc1 in the extended list and it cannot support more powerful features such as floating point textures. Therefore, the use of many special effects may be limited. Note that the second parameter that supports es 1.xand eglchooseconfig must contain egl_opengl_es2_bit to establish the context of ES 2.0.
Qualcomm: Directly inherited from AMD's simulator, the two are almost identical. However, the problem I encountered during usage is that on the Nv video card, this simulator performs very strangely. It will establish a server and a client to connect through a socket, then deadlock... there is no problem with AMD's card. In general, I do not recommend this simulator very much.
NVIDIA: Among these simulators, NVIDIA's latest and simulated target hardware is also the most powerful. However, there are many problems in use:
- Although it seems that the interfaces of OpenGL ES 1.x and openvg are provided, they are just empty links and no code is implemented.
- The content of libglesv2 and libegl is merged into a static library named libgles20, so some modifications need to be made to the link.
- The function in libgles20 is the call method of _ cdecl, rather than the _ stdcall used by other simulators. If a link error occurs, check this location.
- Although glmapbufferoes is provided, the return value is always null.
This is what I have done. I recommend using Qualcomm on the amd card. Otherwise, arm is used. It may take some time for NVIDIA to stabilize it.
Gl_amd_alpha_test
Gl_amd_compressed_3dc_texture
Gl_amd_compressed_atc_texture
Gl_amd_logic_op
Gl_amd_program_binary_z400
Gl_amd_writeonly_rendering
Gl_ext_texture_filter_anisotropic
Gl_ext_texture_type_2_10_10_10_rev
Gl_oes_compressed_etc1_rgb8_texture
Gl_oes_compressed_paletted_texture
Gl_oes_depth_texture
Gl_oes_depth24
Gl_oes_element_index_uint
Gl_oes_fragment_precision_high
Gl_oes_get_program_binary
Gl_oes_packed_depth_stencel
Gl_oes_rgb8_rgba8
Gl_oes_standard_derivatives
Gl_oes_texture_3d
Gl_oes_texture_float
Gl_oes_texture_float_linear
Gl_oes_texture_half_float
Gl_oes_texture_half_float_linear
Gl_oes_texture_npot
Gl_oes_vertex_half_float
Gl_oes_vertex_type_10_10_10_2