From f7a7f5b32a0e907ed1730ad0b0fa0a5bf602f7ac Mon Sep 17 00:00:00 2001 From: Matthew Allum Date: Mon, 26 Mar 2007 23:18:39 +0000 Subject: [PATCH] 2007-03-27 Matthew Allum * clutter/clutter-feature.c: Rejig ifdef's a little. Make drm vblanking Linux only. * clutter/clutter-stage.c: * clutter/clutter-stage.h: Add a perspective boxed type. * clutter/glx/clutter-stage-glx.c: Add some FIXMEs * clutter/Makefile.am: * clutter/cogl/Makefile.am: * clutter/cogl/cogl.h: * clutter/cogl/gl/Makefile.am: * clutter/cogl/gl/cogl.c: * configure.ac: Very initial work on 'cogl' GL/GLES abstraction/utility code. --- Makefile.am | 3 ++ cogl.h | 59 ++++++++++++++++++++++++++++ gl/Makefile.am | 17 +++++++++ gl/cogl.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 181 insertions(+) create mode 100644 Makefile.am create mode 100644 cogl.h create mode 100644 gl/Makefile.am create mode 100644 gl/cogl.c diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 000000000..938d72ad8 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,3 @@ +SUBDIRS=gl + +EXTRA_DIST=cogl.h \ No newline at end of file diff --git a/cogl.h b/cogl.h new file mode 100644 index 000000000..40ec05126 --- /dev/null +++ b/cogl.h @@ -0,0 +1,59 @@ +/* + * Clutter COGL + * + * A basic GL/GLES Abstraction/Utility Layer + * + * Authored By Matthew Allum + * + * Copyright (C) 2007 OpenedHand + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include + +typedef void (*CoglFuncPtr) (void); + +CoglFuncPtr +cogl_get_proc_address (const gchar* name); + +gboolean +cogl_check_extension (const gchar *name, const gchar *ext); + +void +cogl_paint_init (ClutterColor *color); + +void +cogl_push_matrix (void); + +void +cogl_pop_matrix (void); + +void +cogl_scaled (ClutterFixed x, ClutterFixed z); + +void +cogl_translatex (ClutterFixed x, ClutterFixed y, ClutterFixed z); + +void +cogl_translate (gint x, gint y, gint z); + +void +cogl_rotatex (ClutterFixed angle, gint x, gint y, gint z); + +void +cogl_rotate (gint angle, gint x, gint y, gint z); + diff --git a/gl/Makefile.am b/gl/Makefile.am new file mode 100644 index 000000000..2873fcacb --- /dev/null +++ b/gl/Makefile.am @@ -0,0 +1,17 @@ +libclutterincludedir = $(includedir)/clutter-@CLUTTER_API_VERSION@/clutter +libclutterinclude_HEADERS = $(top_srcdir)/clutter/cogl/cogl.h + +INCLUDES = \ + -I$(top_srcdir) \ + -I$(top_srcdir)/clutter/cogl \ + $(CLUTTER_CFLAGS) \ + $(CLUTTER_DEBUG_CFLAGS) \ + $(GCC_FLAGS) + +LDADD = $(CLUTTER_LIBS) + +noinst_LTLIBRARIES = libclutter-cogl.la + +libclutter_cogl_la_SOURCES = \ + $(top_srcdir)/clutter/cogl/cogl.h \ + cogl.c diff --git a/gl/cogl.c b/gl/cogl.c new file mode 100644 index 000000000..1f23e922d --- /dev/null +++ b/gl/cogl.c @@ -0,0 +1,102 @@ +/* + * Clutter COGL + * + * A basic GL/GLES Abstraction/Utility Layer + * + * Authored By Matthew Allum + * + * Copyright (C) 2007 OpenedHand + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "cogl.h" +#include + +CoglFuncPtr +cogl_get_proc_address (const gchar* name) +{ + return NULL; +} + +gboolean +cogl_check_extension (const gchar *name, const gchar *ext) +{ + return FALSE; +} + +void +cogl_paint_init (ClutterColor *color) +{ + glClearColor (((float) color->red / 0xff * 1.0), + ((float) color->green / 0xff * 1.0), + ((float) color->blue / 0xff * 1.0), + 0.0); + + glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); + glDisable (GL_LIGHTING); + glDisable (GL_DEPTH_TEST); +} + +/* FIXME: inline most of these */ +void +cogl_push_matrix (void) +{ + glPushMatrix(); +} + +void +cogl_pop_matrix (void) +{ + glPopMatrix(); +} + +void +cogl_scaled (ClutterFixed x, ClutterFixed y) +{ + glScaled (CLUTTER_FIXED_TO_DOUBLE (x), + CLUTTER_FIXED_TO_DOUBLE (y), + 1.0); +} + +void +cogl_translatex (ClutterFixed x, ClutterFixed y, ClutterFixed z) +{ + glTranslated (CLUTTER_FIXED_TO_DOUBLE (x), + CLUTTER_FIXED_TO_DOUBLE (y), + CLUTTER_FIXED_TO_DOUBLE (z)); +} + +void +cogl_translate (gint x, gint y, gint z) +{ + glTranslatef ((float)x, (float)y, (float)z); +} + +void +cogl_rotatex (ClutterFixed angle, gint x, gint y, gint z) +{ + glRotated (CLUTTER_FIXED_TO_DOUBLE (angle), + CLUTTER_FIXED_TO_DOUBLE (x), + CLUTTER_FIXED_TO_DOUBLE (y), + CLUTTER_FIXED_TO_DOUBLE (z)); +} + +void +cogl_rotate (gint angle, gint x, gint y, gint z) +{ + glRotatef ((float)angle, (float)x, (float)y, (float)z); +}