mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-01-21 14:10:30 +01:00
gl: Add functions to query GL version and extensions
This commit is contained in:
parent
07abd21a03
commit
cd7c0df2bb
3 changed files with 81 additions and 0 deletions
|
|
@ -321,6 +321,7 @@ cairo_gl_sources = cairo-gl-composite.c \
|
|||
cairo-gl-device.c \
|
||||
cairo-gl-glyphs.c \
|
||||
cairo-gl-gradient.c \
|
||||
cairo-gl-info.c \
|
||||
cairo-gl-shaders.c \
|
||||
cairo-gl-surface.c
|
||||
if BUILD_PRIVATE_GLEW
|
||||
|
|
|
|||
70
src/cairo-gl-info.c
Normal file
70
src/cairo-gl-info.c
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
/* cairo - a vector graphics library with display and print output
|
||||
*
|
||||
* Copyright © 2010 Linaro Limited
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it either under the terms of the GNU Lesser General Public
|
||||
* License version 2.1 as published by the Free Software Foundation
|
||||
* (the "LGPL") or, at your option, under the terms of the Mozilla
|
||||
* Public License Version 1.1 (the "MPL"). If you do not alter this
|
||||
* notice, a recipient may use your version of this file under either
|
||||
* the MPL or the LGPL.
|
||||
*
|
||||
* You should have received a copy of the LGPL along with this library
|
||||
* in the file COPYING-LGPL-2.1; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
|
||||
* You should have received a copy of the MPL along with this library
|
||||
* in the file COPYING-MPL-1.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License
|
||||
* Version 1.1 (the "License"); you may not use this file except in
|
||||
* compliance with the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
|
||||
* OF ANY KIND, either express or implied. See the LGPL or the MPL for
|
||||
* the specific language governing rights and limitations.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Alexandros Frantzis <alexandros.frantzis@linaro.org>
|
||||
*/
|
||||
|
||||
#include "cairo-gl-private.h"
|
||||
|
||||
int
|
||||
_cairo_gl_get_version (void)
|
||||
{
|
||||
int major, minor;
|
||||
const char *version = (const char *) glGetString (GL_VERSION);
|
||||
const char *dot = version == NULL ? NULL : strchr (version, '.');
|
||||
|
||||
/* Sanity check */
|
||||
if (dot == NULL || dot == version || *(dot + 1) == '\0') {
|
||||
major = 0;
|
||||
minor = 0;
|
||||
} else {
|
||||
major = strtol (version, NULL, 10);
|
||||
minor = strtol (dot + 1, NULL, 10);
|
||||
}
|
||||
|
||||
return CAIRO_GL_VERSION_ENCODE (major, minor);
|
||||
}
|
||||
|
||||
cairo_bool_t
|
||||
_cairo_gl_has_extension (const char *ext)
|
||||
{
|
||||
const char *extensions = (const char *) glGetString (GL_EXTENSIONS);
|
||||
size_t len = strlen (ext);
|
||||
const char *ext_ptr = extensions;
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
@ -73,6 +73,10 @@
|
|||
#define UNSUPPORTED(reason) CAIRO_INT_STATUS_UNSUPPORTED
|
||||
#endif
|
||||
|
||||
#define CAIRO_GL_VERSION_ENCODE(major, minor) ( \
|
||||
((major) * 256) \
|
||||
+ ((minor) * 1))
|
||||
|
||||
/* maximal number of shaders we keep in the cache.
|
||||
* Random number that is hopefully big enough to not cause many cache evictions. */
|
||||
#define CAIRO_GL_MAX_SHADERS_PER_CONTEXT 64
|
||||
|
|
@ -479,6 +483,12 @@ _cairo_gl_set_shader (cairo_gl_context_t *ctx,
|
|||
cairo_private void
|
||||
_cairo_gl_shader_fini (cairo_gl_context_t *ctx, cairo_gl_shader_t *shader);
|
||||
|
||||
cairo_private int
|
||||
_cairo_gl_get_version (void);
|
||||
|
||||
cairo_private cairo_bool_t
|
||||
_cairo_gl_has_extension (const char *ext);
|
||||
|
||||
slim_hidden_proto (cairo_gl_surface_create);
|
||||
slim_hidden_proto (cairo_gl_surface_create_for_texture);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue