在尝试运行我的游戏时,我正在处理我的 Xperia Play 手机上的一些兼容性问题,因此我必须找到对我的应用程序中使用的 OpenGL ES 扩展的所有引用。这引出了我的问题:除了通过 eglGetProcAddress() 函数之外,还有其他方法可以使用扩展吗?
最好的问候,布尤克。
在尝试运行我的游戏时,我正在处理我的 Xperia Play 手机上的一些兼容性问题,因此我必须找到对我的应用程序中使用的 OpenGL ES 扩展的所有引用。这引出了我的问题:除了通过 eglGetProcAddress() 函数之外,还有其他方法可以使用扩展吗?
最好的问候,布尤克。
不,不是所有的扩展都定义了新的 api 调用,所以 eglGetProcAddress 并不是所有的都使用。一个很好的例子是http://www.khronos.org/registry/gles/extensions/OES/OES_texture_float.txt - 看到这里有新的令牌(枚举),但没有新的功能。
但是,在没有 *gl*ext.h 头文件的情况下进行编译,在 ESSL 中追踪 eglGetProcAddress 和“#extension”字符串将为您提供至少一些关于使用的非核心功能的信息。
答案是肯定的。使用扩展的正常方法是直接按名称调用它们,名称将包含以下字符串之一:
OES, ARB, IMG, PVR, EXT, AMD, VIV or NV
这些名称在这些头文件中定义:
#include <EGL/eglext.h>
#include <GLES2/gl2ext.h>
从查询返回的名称是不同的。它们通常看起来像这样:
GL_AMD_compressed_3DC_texture GL_AMD_compressed_ATC_texture GL_AMD_performance_monitor GL_AMD_program_binary_Z400 GL_AMD_tiled_rendering GL_EXT_texture_filter_anisotropic GL_EXT_texture_type_2_10_10_10_REV GL_EXT_bgra GL_OES_compressed_ETC1_RGB8_texture GL_OES_compressed_paletted_texture GL_OES_depth_texture GL_OES_depth24 GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_fragment_precision_high GL_OES_get_program_binary GL_OES_packed_depth_stencil GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_texture_3D GL_OES_texture_float 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_NV_fence