Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /* cairo - a vector graphics library with display and print output
  2.  *
  3.  * Copyright © 2010 Linaro Limited
  4.  *
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it either under the terms of the GNU Lesser General Public
  7.  * License version 2.1 as published by the Free Software Foundation
  8.  * (the "LGPL") or, at your option, under the terms of the Mozilla
  9.  * Public License Version 1.1 (the "MPL"). If you do not alter this
  10.  * notice, a recipient may use your version of this file under either
  11.  * the MPL or the LGPL.
  12.  *
  13.  * You should have received a copy of the LGPL along with this library
  14.  * in the file COPYING-LGPL-2.1; if not, write to the Free Software
  15.  * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
  16.  * You should have received a copy of the MPL along with this library
  17.  * in the file COPYING-MPL-1.1
  18.  *
  19.  * The contents of this file are subject to the Mozilla Public License
  20.  * Version 1.1 (the "License"); you may not use this file except in
  21.  * compliance with the License. You may obtain a copy of the License at
  22.  * http://www.mozilla.org/MPL/
  23.  *
  24.  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
  25.  * OF ANY KIND, either express or implied. See the LGPL or the MPL for
  26.  * the specific language governing rights and limitations.
  27.  *
  28.  * Contributor(s):
  29.  *      Alexandros Frantzis <alexandros.frantzis@linaro.org>
  30.  */
  31.  
  32. #include "cairoint.h"
  33. #include "cairo-gl-private.h"
  34.  
  35. int
  36. _cairo_gl_get_version (void)
  37. {
  38.     int major, minor;
  39.     const char *version = (const char *) glGetString (GL_VERSION);
  40.     const char *dot = version == NULL ? NULL : strchr (version, '.');
  41.     const char *major_start = dot;
  42.  
  43.     /* Sanity check */
  44.     if (dot == NULL || dot == version || *(dot + 1) == '\0') {
  45.         major = 0;
  46.         minor = 0;
  47.     } else {
  48.         /* Find the start of the major version in the string */
  49.         while (major_start > version && *major_start != ' ')
  50.             --major_start;
  51.         major = strtol (major_start, NULL, 10);
  52.         minor = strtol (dot + 1, NULL, 10);
  53.     }
  54.  
  55.     return CAIRO_GL_VERSION_ENCODE (major, minor);
  56. }
  57.  
  58. cairo_gl_flavor_t
  59. _cairo_gl_get_flavor (void)
  60. {
  61.     const char *version = (const char *) glGetString (GL_VERSION);
  62.     cairo_gl_flavor_t flavor;
  63.  
  64.     if (version == NULL)
  65.         flavor = CAIRO_GL_FLAVOR_NONE;
  66.     else if (strstr (version, "OpenGL ES") != NULL)
  67.         flavor = CAIRO_GL_FLAVOR_ES;
  68.     else
  69.         flavor = CAIRO_GL_FLAVOR_DESKTOP;
  70.  
  71.     return flavor;
  72. }
  73.  
  74. cairo_bool_t
  75. _cairo_gl_has_extension (const char *ext)
  76. {
  77.     const char *extensions = (const char *) glGetString (GL_EXTENSIONS);
  78.     size_t len = strlen (ext);
  79.     const char *ext_ptr = extensions;
  80.  
  81.     if (unlikely (ext_ptr == NULL))
  82.         return 0;
  83.  
  84.     while ((ext_ptr = strstr (ext_ptr, ext)) != NULL) {
  85.         if (ext_ptr[len] == ' ' || ext_ptr[len] == '\0')
  86.             break;
  87.         ext_ptr += len;
  88.     }
  89.  
  90.     return (ext_ptr != NULL);
  91. }
  92.