diff options
author | mh0310.choi <mh0310.choi@samsung.com> | 2015-07-28 10:46:57 +0900 |
---|---|---|
committer | mh0310.choi <mh0310.choi@samsung.com> | 2015-07-28 13:08:12 +0900 |
commit | 5e67a6f721eaedda61300baf0799199c7771ebd0 (patch) | |
tree | 6cd50b52498aab50e79b966cdccc2a137db316d9 /src/cairo-gl-info.c | |
parent | d3aeffba37161d2b76b29c4ea13369bd67a47a8e (diff) | |
download | cairo-5e67a6f721eaedda61300baf0799199c7771ebd0.tar.gz cairo-5e67a6f721eaedda61300baf0799199c7771ebd0.tar.bz2 cairo-5e67a6f721eaedda61300baf0799199c7771ebd0.zip |
Cairo version Upgrade for Tizen3.0submit/tizen_tv/20150728.091927submit/tizen_mobile/20150728.091912submit/tizen_common/20150728.091859accepted/tizen/tv/20150729.011254accepted/tizen/mobile/20150729.011230
- from 1.12.14 to 1.14.2
Change-Id: I3b62d212041b337bbb926d579f9ce74f42a45c3b
Diffstat (limited to 'src/cairo-gl-info.c')
-rw-r--r--[-rwxr-xr-x] | src/cairo-gl-info.c | 78 |
1 files changed, 67 insertions, 11 deletions
diff --git a/src/cairo-gl-info.c b/src/cairo-gl-info.c index 33dc0cc56..fffea58b1 100755..100644 --- a/src/cairo-gl-info.c +++ b/src/cairo-gl-info.c @@ -32,6 +32,29 @@ #include "cairoint.h" #include "cairo-gl-private.h" +#include <errno.h> +int _cairo_glsl_get_version (cairo_gl_dispatch_t *dispatch) +{ + int major, minor; + const char *version = (const char *) dispatch->GetString (GL_SHADING_LANGUAGE_VERSION); + const char *dot = version == NULL ? NULL : strchr (version, '.'); + const char *major_start = dot; + + /* Sanity check */ + if (dot == NULL || dot == version || *(dot + 1) == '\0') { + major = 0; + minor = 0; + } else { + /* Find the start of the major version in the string */ + while (major_start > version && *major_start != ' ') + --major_start; + major = strtol (major_start, NULL, 10); + minor = strtol (dot + 1, NULL, 10); + } + + return CAIRO_GL_VERSION_ENCODE (major, minor); +} + int _cairo_gl_get_version (cairo_gl_dispatch_t *dispatch) { int major, minor; @@ -78,21 +101,54 @@ _cairo_gl_get_flavor (cairo_gl_dispatch_t *dispatch) return flavor; } +unsigned long +_cairo_gl_get_vbo_size (void) +{ + unsigned long vbo_size; + + const char *env = getenv ("CAIRO_GL_VBO_SIZE"); + if (env == NULL) { + vbo_size = CAIRO_GL_VBO_SIZE_DEFAULT; + } else { + errno = 0; + vbo_size = strtol (env, NULL, 10); + assert (errno == 0); + assert (vbo_size > 0); + } + + return vbo_size; +} + cairo_bool_t _cairo_gl_has_extension (cairo_gl_dispatch_t *dispatch, const char *ext) { - const char *extensions = (const char *) dispatch->GetString (GL_EXTENSIONS); - size_t len = strlen (ext); - const char *ext_ptr = extensions; + int version = _cairo_gl_get_version (dispatch); + if (version >= CAIRO_GL_VERSION_ENCODE (3, 0)) { + GLuint max_num_extensions; + int i; + dispatch->GetIntegerv (GL_NUM_EXTENSIONS, &max_num_extensions); - if (unlikely (ext_ptr == NULL)) - return 0; + for (i = 0; i < max_num_extensions; i++) { + const char *extension = (const char *) dispatch->GetStringi (GL_EXTENSIONS, i); + if (strstr (extension, ext) == 0) + return TRUE; + } + return FALSE; + } else { + const char *extensions = (const char *) dispatch->GetString (GL_EXTENSIONS); + size_t len = strlen (ext); + const char *ext_ptr = extensions; + - while ((ext_ptr = strstr (ext_ptr, ext)) != NULL) { - if (ext_ptr[len] == ' ' || ext_ptr[len] == '\0') - break; - ext_ptr += len; - } + if (unlikely (ext_ptr == NULL)) + return 0; + + while ((ext_ptr = strstr (ext_ptr, ext)) != NULL) { + if (ext_ptr[len] == ' ' || ext_ptr[len] == '\0') + break; + ext_ptr += len; + } - return (ext_ptr != NULL); + return (ext_ptr != NULL); + } } |