From patchwork Mon Jul 25 14:05:05 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: alexandros.frantzis@linaro.org X-Patchwork-Id: 3097 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id 9375123E54 for ; Mon, 25 Jul 2011 14:05:18 +0000 (UTC) Received: from mail-qw0-f52.google.com (mail-qw0-f52.google.com [209.85.216.52]) by fiordland.canonical.com (Postfix) with ESMTP id 3867FA18492 for ; Mon, 25 Jul 2011 14:05:18 +0000 (UTC) Received: by qwb8 with SMTP id 8so3010075qwb.11 for ; Mon, 25 Jul 2011 07:05:17 -0700 (PDT) Received: by 10.229.68.200 with SMTP id w8mr3739344qci.114.1311602717539; Mon, 25 Jul 2011 07:05:17 -0700 (PDT) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.229.217.78 with SMTP id hl14cs78165qcb; Mon, 25 Jul 2011 07:05:17 -0700 (PDT) Received: by 10.223.47.9 with SMTP id l9mr3724328faf.55.1311602716549; Mon, 25 Jul 2011 07:05:16 -0700 (PDT) Received: from mail-fx0-f44.google.com (mail-fx0-f44.google.com [209.85.161.44]) by mx.google.com with ESMTPS id o15si7048838fal.135.2011.07.25.07.05.16 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 25 Jul 2011 07:05:16 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.161.44 is neither permitted nor denied by best guess record for domain of alexandros.frantzis@linaro.org) client-ip=209.85.161.44; Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.161.44 is neither permitted nor denied by best guess record for domain of alexandros.frantzis@linaro.org) smtp.mail=alexandros.frantzis@linaro.org Received: by fxe6 with SMTP id 6so6811099fxe.17 for ; Mon, 25 Jul 2011 07:05:16 -0700 (PDT) Received: by 10.223.21.141 with SMTP id j13mr6797542fab.79.1311602715798; Mon, 25 Jul 2011 07:05:15 -0700 (PDT) Received: from localhost (77.49.93.204.dsl.dyn.forthnet.gr [77.49.93.204]) by mx.google.com with ESMTPS id 9sm3810552far.13.2011.07.25.07.05.14 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 25 Jul 2011 07:05:15 -0700 (PDT) From: alexandros.frantzis@linaro.org To: patches@linaro.org Subject: =?UTF-8?q?=5BPATCH=201/9=5D=20gl=3A=20Add=20functions=20to=20query=20GL=20version=20and=20extensions?= Date: Mon, 25 Jul 2011 17:05:05 +0300 Message-Id: <1311602713-6182-1-git-send-email-alexandros.frantzis@linaro.org> X-Mailer: git-send-email 1.7.5.4 MIME-Version: 1.0 From: Alexandros Frantzis --- src/Makefile.sources | 1 + src/cairo-gl-info.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++ src/cairo-gl-private.h | 10 +++++++ 3 files changed, 81 insertions(+), 0 deletions(-) create mode 100644 src/cairo-gl-info.c diff --git a/src/Makefile.sources b/src/Makefile.sources index 5ded771..ae19e7f 100644 --- a/src/Makefile.sources +++ b/src/Makefile.sources @@ -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 diff --git a/src/cairo-gl-info.c b/src/cairo-gl-info.c new file mode 100644 index 0000000..95995b4 --- /dev/null +++ b/src/cairo-gl-info.c @@ -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 + */ + +#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); +} diff --git a/src/cairo-gl-private.h b/src/cairo-gl-private.h index 042c6a1..2a818aa 100644 --- a/src/cairo-gl-private.h +++ b/src/cairo-gl-private.h @@ -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);