forked from enlightenment/efl
gl_common: Replace strstr() for extension checks with a helper function
The helper incorporates NULL checks, and we love those, so it's better.
This commit is contained in:
parent
c7b44dfa2c
commit
464d0ca9bb
|
@ -563,6 +563,7 @@ EAPI void evas_gl_preload_render_lock(evas_gl_make_current_cb make_curre
|
|||
EAPI void evas_gl_preload_render_unlock(evas_gl_make_current_cb make_current, void *engine_data);
|
||||
EAPI void evas_gl_preload_render_relax(evas_gl_make_current_cb make_current, void *engine_data);
|
||||
EAPI void evas_gl_symbols(void *(*GetProcAddress)(const char *name), const char *extsn);
|
||||
EAPI Eina_Bool evas_gl_extension_string_check(const char *ext, const char *exts);
|
||||
|
||||
EAPI void evas_gl_common_error_set(int error_enum);
|
||||
EAPI int evas_gl_common_error_get(void);
|
||||
|
@ -577,6 +578,7 @@ typedef Evas_Engine_GL_Context *(*Evas_GL_Common_Context_New)(void);
|
|||
typedef void (*Evas_GL_Common_Context_Resize_Call)(Evas_Engine_GL_Context *gc, int w, int h, int rot);
|
||||
typedef int (*Evas_GL_Common_Buffer_Dump_Call)(Evas_Engine_GL_Context *gc,const char* dname, const char* fname, int frame, const char* suffix);
|
||||
typedef void (*Evas_Gl_Symbols)(void *(*GetProcAddress)(const char *sym), const char *extsn);
|
||||
typedef Eina_Bool (*Evas_Gl_Extension_String_Check)(const char *exts, const char *ext);
|
||||
|
||||
EAPI void __evas_gl_err(int err, const char *file, const char *func, int line, const char *op);
|
||||
|
||||
|
|
|
@ -84,6 +84,18 @@ sym_missing(void)
|
|||
ERR("GL symbols missing!");
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
evas_gl_extension_string_check(const char *exts, const char *ext)
|
||||
{
|
||||
if (!exts || !ext) return EINA_FALSE;
|
||||
return strstr(exts, ext) != NULL;
|
||||
}
|
||||
|
||||
/* Totally gross, but I didn't want to reindent all the
|
||||
* strstr() callers :(
|
||||
*/
|
||||
static Evas_Gl_Extension_String_Check _ckext = evas_gl_extension_string_check;
|
||||
|
||||
static int
|
||||
_has_ext(const char *ext, const char **pexts, int *pnum)
|
||||
{
|
||||
|
@ -114,17 +126,11 @@ _has_ext(const char *ext, const char **pexts, int *pnum)
|
|||
if (!exts) return EINA_FALSE;
|
||||
*pexts = exts;
|
||||
}
|
||||
return strstr(exts, ext) != NULL;
|
||||
return _ckext(exts, ext);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef GL_GLES
|
||||
static int
|
||||
_has_extn(const char *ext, const char *exts)
|
||||
{
|
||||
if (!exts || !ext) return EINA_FALSE;
|
||||
return strstr(exts, ext) != NULL;
|
||||
}
|
||||
|
||||
EAPI void *
|
||||
evas_gl_common_eglCreateImage(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list)
|
||||
|
@ -312,7 +318,7 @@ evas_gl_symbols(void *(*GetProcAddress)(const char *name), const char *extsn)
|
|||
#ifdef GL_GLES
|
||||
#define FINDSYMN(dst, sym, ext, typ) do { \
|
||||
if (!dst) { \
|
||||
if (_has_extn(ext, extsn) && GetProcAddress) \
|
||||
if (_ckext(extsn, ext) && GetProcAddress) \
|
||||
dst = (typ) GetProcAddress(sym); \
|
||||
if (!dst) \
|
||||
dst = (typ) dlsym(RTLD_DEFAULT, sym); \
|
||||
|
@ -887,41 +893,41 @@ evas_gl_common_context_new(void)
|
|||
{
|
||||
if (getenv("EVAS_GL_INFO"))
|
||||
fprintf(stderr, "EXT:\n%s\n", ext);
|
||||
if ((strstr(ext, "GL_ARB_texture_non_power_of_two")) ||
|
||||
(strstr(ext, "OES_texture_npot")) ||
|
||||
(strstr(ext, "GL_IMG_texture_npot")))
|
||||
if ((_ckext(ext, "GL_ARB_texture_non_power_of_two")) ||
|
||||
(_ckext(ext, "OES_texture_npot")) ||
|
||||
(_ckext(ext, "GL_IMG_texture_npot")))
|
||||
shared->info.tex_npo2 = 1;
|
||||
if ((strstr(ext, "GL_NV_texture_rectangle")) ||
|
||||
(strstr(ext, "GL_EXT_texture_rectangle")) ||
|
||||
(strstr(ext, "GL_ARB_texture_rectangle")))
|
||||
if ((_ckext(ext, "GL_NV_texture_rectangle")) ||
|
||||
(_ckext(ext, "GL_EXT_texture_rectangle")) ||
|
||||
(_ckext(ext, "GL_ARB_texture_rectangle")))
|
||||
shared->info.tex_rect = 1;
|
||||
if ((strstr(ext, "GL_ARB_get_program_binary")) ||
|
||||
(strstr(ext, "GL_OES_get_program_binary")))
|
||||
if ((_ckext(ext, "GL_ARB_get_program_binary")) ||
|
||||
(_ckext(ext, "GL_OES_get_program_binary")))
|
||||
shared->info.bin_program = 1;
|
||||
else
|
||||
glsym_glGetProgramBinary = NULL;
|
||||
#ifdef GL_UNPACK_ROW_LENGTH
|
||||
shared->info.unpack_row_length = 1;
|
||||
# ifdef GL_GLES
|
||||
if (!strstr(ext, "_unpack_subimage"))
|
||||
if (!_ckext(ext, "_unpack_subimage"))
|
||||
shared->info.unpack_row_length = 0;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef GL_TEXTURE_MAX_ANISOTROPY_EXT
|
||||
if ((strstr(ext, "GL_EXT_texture_filter_anisotropic")))
|
||||
if ((_ckext(ext, "GL_EXT_texture_filter_anisotropic")))
|
||||
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT,
|
||||
&(shared->info.anisotropic));
|
||||
#endif
|
||||
#ifdef GL_BGRA
|
||||
if ((strstr(ext, "GL_EXT_bgra")) ||
|
||||
(strstr(ext, "GL_EXT_texture_format_BGRA8888")))
|
||||
if ((_ckext(ext, "GL_EXT_bgra")) ||
|
||||
(_ckext(ext, "GL_EXT_texture_format_BGRA8888")))
|
||||
shared->info.bgra = 1;
|
||||
#endif
|
||||
if (strstr(ext, "OES_compressed_ETC1_RGB8_texture"))
|
||||
if (_ckext(ext, "OES_compressed_ETC1_RGB8_texture"))
|
||||
shared->info.etc1 = 1;
|
||||
if (strstr(ext, "GL_EXT_texture_compression_s3tc") ||
|
||||
strstr(ext, "GL_S3_s3tc"))
|
||||
if (_ckext(ext, "GL_EXT_texture_compression_s3tc") ||
|
||||
_ckext(ext, "GL_S3_s3tc"))
|
||||
shared->info.s3tc = 1;
|
||||
#ifdef GL_GLES
|
||||
// FIXME: there should be an extension name/string to check for
|
||||
|
@ -949,7 +955,7 @@ evas_gl_common_context_new(void)
|
|||
(secsym_tbm_surface_get_info))
|
||||
shared->info.sec_tbm_surface = 1;
|
||||
#endif
|
||||
if (!strstr(ext, "GL_QCOM_tiled_rendering"))
|
||||
if (!_ckext(ext, "GL_QCOM_tiled_rendering"))
|
||||
{
|
||||
glsym_glStartTiling = NULL;
|
||||
glsym_glEndTiling = NULL;
|
||||
|
@ -1046,7 +1052,7 @@ evas_gl_common_context_new(void)
|
|||
// Note: If we support ETC2 we'll try to always use ETC2 even when the
|
||||
// image has colorspace ETC1 (backwards compatibility).
|
||||
|
||||
if (ext && strstr(ext, "GL_EXT_compressed_ETC1_RGB8_sub_texture"))
|
||||
if (_ckext(ext, "GL_EXT_compressed_ETC1_RGB8_sub_texture"))
|
||||
shared->info.etc1_subimage = 1;
|
||||
else
|
||||
shared->info.etc1_subimage = shared->info.etc2;
|
||||
|
|
Loading…
Reference in New Issue