summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@linux.intel.com>2009-05-20 16:49:22 +0100
committerEmmanuele Bassi <ebassi@linux.intel.com>2009-05-20 16:49:22 +0100
commitb9cde2c6f41cfe456b7cfb0e4d798e71667dd3a5 (patch)
tree21e70a88cbb93557699b4d71b0830dd10ee89f6b
parent8eb66da6b0fbb022028d012a428a399892a0c0f3 (diff)
parent320bcd9230992567c3e5c569277099d9c10e6594 (diff)
downloadcogl-b9cde2c6f41cfe456b7cfb0e4d798e71667dd3a5.tar.gz
Merge commit 'origin/master' into 1.0-integration
Conflicts: clutter/clutter-texture.c clutter/cogl/gl/cogl-fbo.c
-rw-r--r--Makefile.am50
-rw-r--r--cogl-bitmap.h78
-rw-r--r--cogl-color.h12
-rw-r--r--cogl-debug.h26
-rw-r--r--cogl-deprecated.h23
-rw-r--r--cogl-fixed.h14
-rw-r--r--cogl-material.h27
-rw-r--r--cogl-matrix.h26
-rw-r--r--cogl-offscreen.h97
-rw-r--r--cogl-path.h12
-rw-r--r--cogl-shader.h95
-rw-r--r--cogl-texture.h115
-rw-r--r--cogl-types.h32
-rw-r--r--cogl-vertex-buffer.h17
-rw-r--r--cogl.h.in81
-rw-r--r--common/Makefile.am14
-rw-r--r--common/cogl-bitmap-fallback.c54
-rw-r--r--common/cogl-bitmap-pixbuf.c40
-rw-r--r--common/cogl-bitmap-private.h (renamed from common/cogl-bitmap.h)7
-rw-r--r--common/cogl-bitmap.c65
-rw-r--r--common/cogl-clip-stack.c173
-rw-r--r--common/cogl-clip-stack.h8
-rw-r--r--common/cogl-color.c23
-rw-r--r--common/cogl-current-matrix.c11
-rw-r--r--common/cogl-current-matrix.h11
-rw-r--r--common/cogl-debug.c26
-rw-r--r--common/cogl-fixed.c23
-rw-r--r--common/cogl-handle.h158
-rw-r--r--common/cogl-internal.h51
-rw-r--r--common/cogl-material-private.h26
-rw-r--r--common/cogl-material.c40
-rw-r--r--common/cogl-matrix-stack.c11
-rw-r--r--common/cogl-matrix-stack.h11
-rw-r--r--common/cogl-matrix.c26
-rw-r--r--common/cogl-primitives.c152
-rw-r--r--common/cogl-primitives.h8
-rw-r--r--common/cogl-util.c17
-rw-r--r--common/cogl-util.h10
-rw-r--r--common/cogl-vertex-buffer-private.h15
-rw-r--r--common/cogl-vertex-buffer.c20
-rw-r--r--common/cogl.c124
-rw-r--r--doc/reference/cogl/cogl-sections.txt20
-rw-r--r--gl/Makefile.am104
-rw-r--r--gl/cogl-context.c15
-rw-r--r--gl/cogl-context.h16
-rw-r--r--gl/cogl-defines.h.in36
-rw-r--r--gl/cogl-fbo.c220
-rw-r--r--gl/cogl-fbo.h8
-rw-r--r--gl/cogl-internal.h68
-rw-r--r--gl/cogl-primitives.c8
-rw-r--r--gl/cogl-program.c30
-rw-r--r--gl/cogl-program.h8
-rw-r--r--gl/cogl-shader-private.h8
-rw-r--r--gl/cogl-shader.c83
-rw-r--r--gl/cogl-texture-private.h14
-rw-r--r--gl/cogl-texture.c68
-rw-r--r--gl/cogl.c4
-rw-r--r--gles/Makefile.am16
-rw-r--r--gles/cogl-context.c15
-rw-r--r--gles/cogl-context.h16
-rw-r--r--gles/cogl-defines.h.in17
-rw-r--r--gles/cogl-fbo.c164
-rw-r--r--gles/cogl-fbo.h8
-rw-r--r--gles/cogl-gles2-wrapper.c10
-rw-r--r--gles/cogl-gles2-wrapper.h8
-rw-r--r--gles/cogl-internal.h95
-rw-r--r--gles/cogl-primitives.c8
-rw-r--r--gles/cogl-program.c38
-rw-r--r--gles/cogl-program.h8
-rw-r--r--gles/cogl-shader-private.h8
-rw-r--r--gles/cogl-shader.c100
-rw-r--r--gles/cogl-texture-private.h14
-rw-r--r--gles/cogl-texture.c44
-rw-r--r--gles/cogl-util.c10
-rw-r--r--gles/cogl-util.h10
-rw-r--r--gles/cogl.c4
-rw-r--r--gles/stringify.sh30
77 files changed, 1802 insertions, 1360 deletions
diff --git a/Makefile.am b/Makefile.am
index da2a0440..225b6610 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -20,3 +20,53 @@ pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = $(pc_files)
CLEANFILES = $(pc_files)
+
+AM_CPPFLAGS = $(CLUTTER_CFLAGS) $(CLUTTER_DEBUG_CFLAGS) $(MAINTAINER_CFLAGS)
+
+cogl_headers = \
+ $(top_srcdir)/clutter/cogl/cogl-bitmap.h \
+ $(top_srcdir)/clutter/cogl/cogl-color.h \
+ $(top_srcdir)/clutter/cogl/cogl-debug.h \
+ $(top_srcdir)/clutter/cogl/cogl-fixed.h \
+ $(top_srcdir)/clutter/cogl/cogl-material.h \
+ $(top_srcdir)/clutter/cogl/cogl-matrix.h \
+ $(top_srcdir)/clutter/cogl/cogl-offscreen.h \
+ $(top_srcdir)/clutter/cogl/cogl-path.h \
+ $(top_srcdir)/clutter/cogl/cogl-shader.h \
+ $(top_srcdir)/clutter/cogl/cogl-texture.h \
+ $(top_srcdir)/clutter/cogl/cogl-types.h \
+ $(top_srcdir)/clutter/cogl/cogl-vertex-buffer.h
+
+# HACK - gobject-introspection can't scan a library in another directory
+# so we create a libclutter-cogl.la that's just identical to the one
+# in the subdir
+noinst_LTLIBRARIES = libclutter-cogl.la
+libclutter_cogl_la_LIBADD = $(CLUTTER_COGL)/libclutter-cogl.la
+libclutter_cogl_la_SOURCES = $(cogl_headers)
+
+if HAVE_INTROSPECTION
+Cogl-@CLUTTER_API_VERSION@.gir: $(INTROSPECTION_SCANNER) $(CLUTTER_COGL)/libclutter-cogl.la
+ $(QUIET_GEN)$(INTROSPECTION_SCANNER) -v \
+ --namespace Cogl --nsversion=@CLUTTER_API_VERSION@ \
+ -I$(top_srcdir)/clutter/cogl \
+ -I$(top_srcdir)/clutter/cogl/common \
+ -I$(top_srcdir)/clutter/cogl/@CLUTTER_COGL@ \
+ -I$(top_builddir)/clutter \
+ -DCLUTTER_COMPILATION \
+ --include=GL-1.0 \
+ --include=GObject-2.0 \
+ --library=clutter-cogl \
+ --libtool="$(top_builddir)/doltlibtool" \
+ --pkg gobject-2.0 \
+ --output $@ \
+ $(top_builddir)/clutter/cogl/cogl-defines-@CLUTTER_COGL@.h \
+ $(top_builddir)/clutter/cogl/cogl.h \
+ $(cogl_headers)
+
+BUILT_GIRSOURCES = Cogl-@CLUTTER_API_VERSION@.gir
+
+girdir = $(datadir)/gir-1.0
+gir_DATA = $(BUILT_GIRSOURCES)
+
+CLEANFILES += $(BUILT_GIRSOURCES)
+endif
diff --git a/cogl-bitmap.h b/cogl-bitmap.h
new file mode 100644
index 00000000..e018452a
--- /dev/null
+++ b/cogl-bitmap.h
@@ -0,0 +1,78 @@
+/*
+ * Cogl
+ *
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
+ *
+ * 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.
+ */
+
+#if !defined(__COGL_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
+#error "Only <cogl/cogl.h> can be included directly."
+#endif
+
+#ifndef __COGL_BITMAP_H__
+#define __COGL_BITMAP_H__
+
+#include <cogl/cogl-types.h>
+
+G_BEGIN_DECLS
+
+/**
+ * SECTION:cogl-bitmap
+ * @short_description: Fuctions for loading images but not directly
+ * into textures
+ *
+ * Cogl allows loading image data into memory as CoglBitmaps without
+ * loading them immediately into GPU textures.
+ */
+
+
+/**
+ * cogl_bitmap_new_from_file:
+ * @filename: the file to load.
+ * @error: a #GError or %NULL.
+ *
+ * Load an image file from disk. This function can be safely called from
+ * within a thread.
+ *
+ * Returns: A CoglBitmap to the new loaded image data, or %NULL if loading
+ * the image failed.
+ *
+ * Since: 1.0
+ */
+CoglHandle cogl_bitmap_new_from_file (const gchar *filename,
+ GError **error);
+
+/**
+ * cogl_bitmap_get_size_from_file:
+ * @filename: the file to check
+ * @width: return location for the bitmap width
+ * @height: return location for the bitmap height
+ *
+ * Parses an image file enough to extract the width and height
+ * of the bitmap.
+ *
+ * Since: 1.0
+ */
+gboolean cogl_bitmap_get_size_from_file (const gchar *filename,
+ gint *width,
+ gint *height);
+
+G_END_DECLS
+
+#endif /* __COGL_BITMAP_H__ */
diff --git a/cogl-color.h b/cogl-color.h
index 76be2053..0cbc479a 100644
--- a/cogl-color.h
+++ b/cogl-color.h
@@ -1,7 +1,9 @@
-/* cogl-color.h: Color type for COGL
- * This file is part of Clutter
+/*
+ * Cogl
*
- * Copyright (C) 2008 Intel Corporation.
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -14,7 +16,9 @@
* 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, see <http://www.gnu.org/licenses/>.
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
*/
#if !defined(__COGL_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
diff --git a/cogl-debug.h b/cogl-debug.h
index 7440831b..b31a36c5 100644
--- a/cogl-debug.h
+++ b/cogl-debug.h
@@ -1,3 +1,26 @@
+/*
+ * Cogl
+ *
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
+ *
+ * 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.
+ */
+
#ifndef __COGL_DEBUG_H__
#define __COGL_DEBUG_H__
@@ -13,7 +36,8 @@ typedef enum {
COGL_DEBUG_OFFSCREEN = 1 << 4,
COGL_DEBUG_DRAW = 1 << 5,
COGL_DEBUG_PANGO = 1 << 6,
- COGL_DEBUG_RECTANGLES = 1 << 7
+ COGL_DEBUG_RECTANGLES = 1 << 7,
+ COGL_DEBUG_HANDLE = 1 << 8
} CoglDebugFlags;
#ifdef COGL_ENABLE_DEBUG
diff --git a/cogl-deprecated.h b/cogl-deprecated.h
index 17d1fe4d..2111e48b 100644
--- a/cogl-deprecated.h
+++ b/cogl-deprecated.h
@@ -1,3 +1,26 @@
+/*
+ * Cogl
+ *
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2008,2009 Intel Corporation.
+ *
+ * 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.
+ */
+
#ifndef COGL_DEPRECATED_H
#define cogl_color cogl_color_REPLACED_BY_cogl_set_source_color
diff --git a/cogl-fixed.h b/cogl-fixed.h
index 0e51c358..904913ea 100644
--- a/cogl-fixed.h
+++ b/cogl-fixed.h
@@ -1,7 +1,9 @@
-/* cogl-fixed.h: Fixed point API
- * This file is part of Clutter
+/*
+ * Cogl
+ *
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Copyright (C) 2008 Intel Corporation.
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -14,7 +16,9 @@
* 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, see <http://www.gnu.org/licenses/>.
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
*/
#if !defined(__COGL_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
@@ -725,7 +729,7 @@ CoglFixed cogl_angle_cos (CoglAngle angle);
/*< private >*/
#if defined (G_CAN_INLINE)
-G_INLINE_FUNC CoglFixed
+G_INLINE_FUNC CoglFixed
cogl_fixed_mul (CoglFixed a,
CoglFixed b)
{
diff --git a/cogl-material.h b/cogl-material.h
index 949daed2..95a47483 100644
--- a/cogl-material.h
+++ b/cogl-material.h
@@ -1,3 +1,26 @@
+/*
+ * Cogl
+ *
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
+ *
+ * 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.
+ */
+
#if !defined(__COGL_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
#error "Only <cogl/cogl.h> can be included directly."
#endif
@@ -86,7 +109,7 @@ void cogl_material_set_color (CoglHandle material, const CoglColor *color);
*
* This is the basic color of the material, used when no lighting is enabled.
*
- * The default value is (1.0, 1.0, 1.0, 1.0)
+ * The default value is (0xff, 0xff, 0xff, 0xff)
*
* Since 1.0
*/
@@ -111,7 +134,7 @@ void cogl_material_set_color4ub (CoglHandle material,
* Since 1.0
*/
void cogl_material_set_color4f (CoglHandle material,
- float red,
+ float red,
float green,
float blue,
float alpha);
diff --git a/cogl-matrix.h b/cogl-matrix.h
index 9bf0e802..ca643f14 100644
--- a/cogl-matrix.h
+++ b/cogl-matrix.h
@@ -1,3 +1,29 @@
+/*
+ * Cogl
+ *
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2008,2009 Intel Corporation.
+ *
+ * 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.
+ *
+ * Authors:
+ * Robert Bragg <robert@linux.intel.com>
+ */
+
#ifndef __COGL_MATRIX_H
#define __COGL_MATRIX_H
diff --git a/cogl-offscreen.h b/cogl-offscreen.h
index a494052a..ca4edb49 100644
--- a/cogl-offscreen.h
+++ b/cogl-offscreen.h
@@ -1,7 +1,9 @@
-/* cogl-offscreen.h: Offscreen objects
- * This file is part of Clutter
+/*
+ * Cogl
*
- * Copyright (C) 2008 Intel Corporation.
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -14,7 +16,9 @@
* 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, see <http://www.gnu.org/licenses/>.
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
*/
#if !defined(__COGL_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
@@ -31,43 +35,47 @@ G_BEGIN_DECLS
/**
* SECTION:cogl-offscreen
* @short_description: Fuctions for creating and manipulating offscreen
- * frame buffer objects
+ * frame buffer objects
*
- * COGL allows creating and operating on FBOs (Framebuffer Objects).
+ * Cogl allows creating and operating on offscreen render targets.
*/
/* Offscreen api */
/**
* cogl_offscreen_new_to_texture:
- * @texhandle:
+ * @handle: A CoglHandle for a Cogl texture
*
- * Returns:
- */
-CoglHandle cogl_offscreen_new_to_texture (CoglHandle texhandle);
-
-/**
- * cogl_offscreen_new_multisample:
- *
+ * This creates an offscreen buffer object using the given texture as the
+ * primary color buffer. It doesn't just initialize the contents of the
+ * offscreen buffer with the texture; they are tightly bound so that
+ * drawing to the offscreen buffer effectivly updates the contents of the
+ * given texture. You don't need to destroy the offscreen buffer before
+ * you can use the texture again.
*
- * Returns:
+ * Note: This does not work with sliced Cogl textures.
+ *
+ * Returns: a CoglHandle for the new offscreen buffer or COGL_INVALID_HANDLE
+ * if it wasn't possible to create the buffer.
*/
-CoglHandle cogl_offscreen_new_multisample (void);
+CoglHandle cogl_offscreen_new_to_texture (CoglHandle texhandle);
/**
* cogl_offscreen_ref:
- * @handle:
+ * @handle: A CoglHandle for an offscreen buffer
+ *
+ * Increments the reference count on the offscreen buffer.
*
- * Returns:
+ * Returns: For convenience it returns the given CoglHandle
*/
CoglHandle cogl_offscreen_ref (CoglHandle handle);
/**
* cogl_is_offscreen:
- * @handle: A CoglHandle
+ * @handle: A CoglHandle for an offscreen buffer
*
- * Gets whether the given handle references an existing offscreen
- * buffer object.
+ * Gets whether the given handle references an existing offscreen buffer
+ * object.
*
* Returns: %TRUE if the handle references an offscreen buffer,
* %FALSE otherwise
@@ -76,54 +84,13 @@ gboolean cogl_is_offscreen (CoglHandle handle);
/**
* cogl_offscreen_unref:
- * @handle:
+ * @handle: A CoglHandle for an offscreen buffer
*
+ * Decreases the reference count for the offscreen buffer and frees it when
+ * the count reaches 0.
*/
void cogl_offscreen_unref (CoglHandle handle);
-/**
- * cogl_offscreen_blit:
- * @src_buffer:
- * @dst_buffer:
- *
- */
-void cogl_offscreen_blit (CoglHandle src_buffer,
- CoglHandle dst_buffer);
-
-/**
- * cogl_offscreen_blit_region:
- * @src_buffer:
- * @dst_buffer:
- * @src_x:
- * @src_y:
- * @src_w:
- * @src_h:
- * @dst_x:
- * @dst_y:
- * @dst_w:
- * @dst_h:
- *
- */
-void cogl_offscreen_blit_region (CoglHandle src_buffer,
- CoglHandle dst_buffer,
- gint src_x,
- gint src_y,
- gint src_w,
- gint src_h,
- gint dst_x,
- gint dst_y,
- gint dst_w,
- gint dst_h);
-
-/**
- * cogl_draw_buffer:
- * @target:
- * @offscreen:
- *
- */
-void cogl_draw_buffer (CoglBufferTarget target,
- CoglHandle offscreen);
-
G_END_DECLS
#endif /* __COGL_OFFSCREEN_H__ */
diff --git a/cogl-path.h b/cogl-path.h
index 47c46d0a..be5a979e 100644
--- a/cogl-path.h
+++ b/cogl-path.h
@@ -1,7 +1,9 @@
-/* cogl-path.h: Path primitives
- * This file is part of Clutter
+/*
+ * Cogl
*
- * Copyright (C) 2008 Intel Corporation.
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -14,7 +16,9 @@
* 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, see <http://www.gnu.org/licenses/>.
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
*/
#if !defined(__COGL_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
diff --git a/cogl-shader.h b/cogl-shader.h
index 7678a6e2..59c75ede 100644
--- a/cogl-shader.h
+++ b/cogl-shader.h
@@ -1,7 +1,9 @@
-/* cogl-shader.h: Shaders and programmable pipeline
- * This file is part of Clutter
+/*
+ * Cogl
*
- * Copyright (C) 2008 Intel Corporation.
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -14,7 +16,9 @@
* 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, see <http://www.gnu.org/licenses/>.
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
*/
#if !defined(__COGL_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
@@ -24,7 +28,7 @@
#ifndef __COGL_SHADER_H__
#define __COGL_SHADER_H__
-#include <glib.h>
+#include <cogl/cogl-types.h>
G_BEGIN_DECLS
@@ -39,6 +43,17 @@ G_BEGIN_DECLS
*/
/**
+ * CoglShaderType:
+ * @COGL_SHADER_TYPE_VERTEX: A program for proccessing vertices
+ * @COGL_SHADER_TYPE_FRAGMENT: A program for processing fragments
+ */
+typedef enum _CoglShaderType
+{
+ COGL_SHADER_TYPE_VERTEX,
+ COGL_SHADER_TYPE_FRAGMENT
+} CoglShaderType;
+
+/**
* cogl_create_shader:
* @shader_type: CGL_VERTEX_SHADER or CGL_FRAGMENT_SHADER.
*
@@ -47,7 +62,7 @@ G_BEGIN_DECLS
*
* Returns: a new shader handle.
*/
-CoglHandle cogl_create_shader (COGLenum shader_type);
+CoglHandle cogl_create_shader (CoglShaderType shader_type);
/**
* cogl_shader_ref:
@@ -87,8 +102,8 @@ gboolean cogl_is_shader (CoglHandle handle);
* Replaces the current GLSL source associated with a shader with a new
* one.
*/
-void cogl_shader_source (CoglHandle shader,
- const gchar *source);
+void cogl_shader_source (CoglHandle shader,
+ const char *source);
/**
* cogl_shader_compile:
* @handle: #CoglHandle for a shader.
@@ -109,22 +124,26 @@ void cogl_shader_compile (CoglHandle handle);
* messages that caused a shader to not compile correctly, mainly useful for
* debugging purposes.
*/
-void cogl_shader_get_info_log (CoglHandle handle,
- guint size,
- gchar *buffer);
+void cogl_shader_get_info_log (CoglHandle handle,
+ size_t size,
+ char *buffer);
+
+/**
+ * cogl_shader_get_type:
+ * @handle: #CoglHandle for a shader.
+ *
+ * Returns: COGL_SHADER_TYPE_VERTEX if the shader is a vertex processor
+ * or COGL_SHADER_TYPE_FRAGMENT if the shader is a frament processor
+ */
+CoglShaderType cogl_shader_get_type (CoglHandle handle);
/**
- * cogl_shader_get_parameteriv:
+ * cogl_shader_is_compiled:
* @handle: #CoglHandle for a shader.
- * @pname: the named COGL parameter to retrieve.
- * @dest: storage location for COGLint return value.
*
- * Retrieve a named parameter from a shader can be used to query to compile
- * satus of a shader by passing in CGL_OBJECT_COMPILE_STATUS for @pname.
+ * Returns: TRUE if the shader object has sucessfully be compiled else FALSE
*/
-void cogl_shader_get_parameteriv (CoglHandle handle,
- COGLenum pname,
- COGLint *dest);
+gboolean cogl_shader_is_compiled (CoglHandle handle);
/**
* cogl_create_program:
@@ -209,9 +228,9 @@ void cogl_program_use (CoglHandle handle);
* This uniform can be set using cogl_program_uniform_1f() when the
* program is in use.
*/
-COGLint cogl_program_get_uniform_location
- (CoglHandle handle,
- const gchar *uniform_name);
+int cogl_program_get_uniform_location
+ (CoglHandle handle,
+ const char *uniform_name);
/**
* cogl_program_uniform_1f:
@@ -221,8 +240,8 @@ COGLint cogl_program_get_uniform_location
* Changes the value of a floating point uniform in the currently
* used (see cogl_program_use()) shader program.
*/
-void cogl_program_uniform_1f (COGLint uniform_no,
- gfloat value);
+void cogl_program_uniform_1f (int uniform_no,
+ float value);
/**
* cogl_program_uniform_1i:
@@ -232,8 +251,8 @@ void cogl_program_uniform_1f (COGLint uniform_no,
* Changes the value of an integer uniform in the currently
* used (see cogl_program_use()) shader program.
*/
-void cogl_program_uniform_1i (COGLint uniform_no,
- gint value);
+void cogl_program_uniform_1i (int uniform_no,
+ int value);
/**
* cogl_program_uniform_float:
@@ -245,9 +264,9 @@ void cogl_program_uniform_1i (COGLint uniform_no,
* Changes the value of a float vector uniform, or uniform array in the
* currently used (see #cogl_program_use) shader program.
*/
-void cogl_program_uniform_float (COGLint uniform_no,
- gint size,
- gint count,
+void cogl_program_uniform_float (int uniform_no,
+ int size,
+ int count,
const GLfloat *value);
/**
@@ -260,10 +279,10 @@ void cogl_program_uniform_float (COGLint uniform_no,
* Changes the value of a int vector uniform, or uniform array in the
* currently used (see cogl_program_use()) shader program.
*/
-void cogl_program_uniform_int (COGLint uniform_no,
- gint size,
- gint count,
- const COGLint *value);
+void cogl_program_uniform_int (int uniform_no,
+ int size,
+ int count,
+ const int *value);
/**
* cogl_program_uniform_matrix:
@@ -277,11 +296,11 @@ void cogl_program_uniform_int (COGLint uniform_no,
* currently used (see cogl_program_use()) shader program. The @size
* parameter is used to determine the square size of the matrix.
*/
-void cogl_program_uniform_matrix (COGLint uniform_no,
- gint size,
- gint count,
- gboolean transpose,
- const GLfloat *value);
+void cogl_program_uniform_matrix (int uniform_no,
+ int size,
+ int count,
+ gboolean transpose,
+ const float *value);
G_END_DECLS
diff --git a/cogl-texture.h b/cogl-texture.h
index 4befd811..6a8b00a0 100644
--- a/cogl-texture.h
+++ b/cogl-texture.h
@@ -1,7 +1,9 @@
-/* cogl-texture.h: Texture objects
- * This file is part of Clutter
+/*
+ * Cogl
*
- * Copyright (C) 2008 Intel Corporation.
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -14,7 +16,9 @@
* 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, see <http://www.gnu.org/licenses/>.
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
*/
#if !defined(__COGL_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
@@ -24,10 +28,10 @@
#ifndef __COGL_TEXTURE_H__
#define __COGL_TEXTURE_H__
-G_BEGIN_DECLS
-
#include <cogl/cogl-types.h>
+G_BEGIN_DECLS
+
/**
* SECTION:cogl-texture
* @short_description: Fuctions for creating and manipulating textures
@@ -142,21 +146,21 @@ CoglHandle cogl_texture_new_from_foreign (GLuint gl_handle,
/**
* cogl_texture_new_from_bitmap:
- * @bitmap: a #CoglBitmap
+ * @bmp_handle: A CoglBitmap handle
* @max_waste: maximum extra horizontal and|or vertical margin pixels
* to make the texture fit GPU limitations
* @flags: Optional flags for the texture, or %COGL_TEXTURE_NONE
* @internal_format: the #CoglPixelFormat to use for the GPU storage of the
* texture
*
- * Creates a COGL texture from a #CoglBitmap.
+ * Creates a COGL texture from a CoglBitmap.
*
* Return value: a #CoglHandle to the newly created texture or
* %COGL_INVALID_HANDLE on failure
*
* Since: 1.0
*/
-CoglHandle cogl_texture_new_from_bitmap (CoglBitmap *bitmap,
+CoglHandle cogl_texture_new_from_bitmap (CoglHandle bmp_handle,
gint max_waste,
CoglTextureFlags flags,
CoglPixelFormat internal_format);
@@ -225,6 +229,52 @@ guint cogl_texture_get_rowstride (CoglHandle handle);
gint cogl_texture_get_max_waste (CoglHandle handle);
/**
+ * CoglTextureFilter:
+ * @COGL_TEXTURE_FILTER_NEAREST: Measuring in manhatten distance from the,
+ * current pixel center, use the nearest texture
+ * texel.
+ * @COGL_TEXTURE_FILTER_LINEAR: Use the weighted average of the 4 texels
+ * nearest the current pixel center.
+ * @COGL_TEXTURE_FILTER_NEAREST_MIPMAP_NEAREST: Select the mimap level whose
+ * texel size most closely matches
+ * the current pixel, and use the
+ * COGL_TEXTURE_FILTER_NEAREST
+ * criterion.
+ * @COGL_TEXTURE_FILTER_LINEAR_MIPMAP_NEAREST: Select the mimap level whose
+ * texel size most closely matches
+ * the current pixel, and use the
+ * COGL_TEXTURE_FILTER_LINEAR
+ * criterion.
+ * @COGL_TEXTURE_FILTER_NEAREST_MIPMAP_LINEAR: Select the two mimap levels
+ * whose texel size most closely
+ * matches the current pixel, use
+ * the COGL_TEXTURE_FILTER_NEAREST
+ * criterion on each one and take
+ * their weighted average.
+ * @COGL_TEXTURE_FILTER_LINEAR_MIPMAP_LINEAR: Select the two mimap levels
+ * whose texel size most closely
+ * matches the current pixel, use
+ * the COGL_TEXTURE_FILTER_LINEAR
+ * criterion on each one and take
+ * their weighted average.
+ *
+ * Texture filtering is used whenever the current pixel maps either to more
+ * than one texture element (texel) or less than one. These filter enums
+ * correspond to different strategies used to come up with a pixel color, by
+ * possibly referring to multiple neighbouring texels and taking a weighted
+ * average or simply using the nearest texel.
+ */
+typedef enum _CoglTextureFilter
+{
+ COGL_TEXTURE_FILTER_NEAREST = GL_NEAREST,
+ COGL_TEXTURE_FILTER_LINEAR = GL_LINEAR,
+ COGL_TEXTURE_FILTER_NEAREST_MIPMAP_NEAREST = GL_NEAREST_MIPMAP_NEAREST,
+ COGL_TEXTURE_FILTER_LINEAR_MIPMAP_NEAREST = GL_LINEAR_MIPMAP_NEAREST,
+ COGL_TEXTURE_FILTER_NEAREST_MIPMAP_LINEAR = GL_NEAREST_MIPMAP_LINEAR,
+ COGL_TEXTURE_FILTER_LINEAR_MIPMAP_LINEAR = GL_LINEAR_MIPMAP_LINEAR
+} CoglTextureFilter;
+
+/**
* cogl_texture_get_min_filter:
* @handle: a #CoglHandle for a texture.
*
@@ -232,7 +282,7 @@ gint cogl_texture_get_max_waste (CoglHandle handle);
*
* Returns: the current downscaling filter for a cogl texture.
*/
-COGLenum cogl_texture_get_min_filter (CoglHandle handle);
+CoglTextureFilter cogl_texture_get_min_filter (CoglHandle handle);
/**
* cogl_texture_get_mag_filter:
@@ -242,7 +292,7 @@ COGLenum cogl_texture_get_min_filter (CoglHandle handle);
*
* Returns: the current downscaling filter for a cogl texture.
*/
-COGLenum cogl_texture_get_mag_filter (CoglHandle handle);
+CoglTextureFilter cogl_texture_get_mag_filter (CoglHandle handle);
/**
* cogl_texture_is_sliced:
@@ -303,8 +353,8 @@ gint cogl_texture_get_data (CoglHandle handle,
* drawn at other scales than 100%.
*/
void cogl_texture_set_filters (CoglHandle handle,
- COGLenum min_filter,
- COGLenum mag_filter);
+ CoglTextureFilter min_filter,
+ CoglTextureFilter mag_filter);
/**
@@ -360,45 +410,6 @@ CoglHandle cogl_texture_ref (CoglHandle handle);
void cogl_texture_unref (CoglHandle handle);
/**
- * cogl_bitmap_new_from_file:
- * @filename: the file to load.
- * @error: a #GError or %NULL.
- *
- * Load an image file from disk. This function can be safely called from
- * within a thread.
- *
- * Returns: A #CoglBitmap to the new loaded image data, or %NULL if loading
- * the image failed.
- *
- * Since: 1.0
- */
-CoglBitmap * cogl_bitmap_new_from_file (const gchar *filename,
- GError **error);
-
-/**
- * cogl_bitmap_get_size_from_file:
- * @filename: the file to check
- * @width: return location for the bitmap width
- * @height: return location for the bitmap height
- *
- * Parses an image file enough to extract the width and height
- * of the bitmap.
- *
- * Since: 1.0
- */
-gboolean cogl_bitmap_get_size_from_file (const gchar *filename,
- gint *width,
- gint *height);
-
-/**
- * cogl_bitmap_free:
- * @bmp: a #CoglBitmap.
- *
- * Frees a #CoglBitmap.
- */
-void cogl_bitmap_free (CoglBitmap *bmp);
-
-/**
* cogl_rectangle_with_texture_coords:
* @x1: x coordinate upper left on screen.
* @y1: y coordinate upper left on screen.
diff --git a/cogl-types.h b/cogl-types.h
index 2773882f..a4ecd419 100644
--- a/cogl-types.h
+++ b/cogl-types.h
@@ -1,13 +1,14 @@
-/* cogl-types.h: Shared COGL types
+/*
+ * Cogl
*
- * This file is part of Clutter
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Copyright (C) 2008 Intel Corporation.
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* 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.1 of the License, or (at your option) any later version.
+ * 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
@@ -15,7 +16,9 @@
* 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, see <http://www.gnu.org/licenses/>.
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
*/
#if !defined(__COGL_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
@@ -30,13 +33,6 @@
G_BEGIN_DECLS
/**
- * CoglBitmap:
- *
- * Type used for storing image data.
- */
-typedef struct _CoglBitmap CoglBitmap;
-
-/**
* CoglHandle:
*
* Type used for storing references to cogl objects, the CoglHandle is
@@ -137,7 +133,7 @@ typedef enum
COGL_PIXEL_FORMAT_RGBA_5551 = 6 | COGL_A_BIT,
COGL_PIXEL_FORMAT_YUV = 7,
COGL_PIXEL_FORMAT_G_8 = 8,
-
+
COGL_PIXEL_FORMAT_RGB_888 = COGL_PIXEL_FORMAT_24,
COGL_PIXEL_FORMAT_BGR_888 = (COGL_PIXEL_FORMAT_24 |
@@ -178,7 +174,7 @@ typedef enum
COGL_PREMULT_BIT |
COGL_BGR_BIT |
COGL_AFIRST_BIT),
-
+
COGL_PIXEL_FORMAT_RGBA_4444_PRE = (COGL_PIXEL_FORMAT_RGBA_4444 |
COGL_A_BIT |
COGL_PREMULT_BIT),
@@ -186,8 +182,8 @@ typedef enum
COGL_PIXEL_FORMAT_RGBA_5551_PRE = (COGL_PIXEL_FORMAT_RGBA_5551 |
COGL_A_BIT |
COGL_PREMULT_BIT),
-
-
+
+
} CoglPixelFormat;
#define COGL_TYPE_PIXEL_FORMAT (cogl_pixel_format_get_type ())
@@ -232,7 +228,6 @@ GType cogl_feature_flags_get_type (void) G_GNUC_CONST;
/**
* CoglBufferTarget:
* @COGL_WINDOW_BUFFER: FIXME
- * @COGL_MASK_BUFFER: FIXME
* @COGL_OFFSCREEN_BUFFER: FIXME
*
* Target flags for FBOs.
@@ -242,8 +237,7 @@ GType cogl_feature_flags_get_type (void) G_GNUC_CONST;
typedef enum
{
COGL_WINDOW_BUFFER = (1 << 1),
- COGL_MASK_BUFFER = (1 << 2),
- COGL_OFFSCREEN_BUFFER = (1 << 3)
+ COGL_OFFSCREEN_BUFFER = (1 << 2)
} CoglBufferTarget;
#define COGL_TYPE_BUFFER_TARGET (cogl_buffer_target_get_type ())
diff --git a/cogl-vertex-buffer.h b/cogl-vertex-buffer.h
index 35016daf..717281db 100644
--- a/cogl-vertex-buffer.h
+++ b/cogl-vertex-buffer.h
@@ -1,13 +1,9 @@
/*
- * Cogl.
+ * Cogl
*
- * An OpenGL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Vertex Buffer API: Handle extensible arrays of vertex attributes
- *
- * Copyright (C) 2008 Intel Corporation.
- *
- * Authored by: Robert Bragg <robert@linux.intel.com>
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -20,7 +16,12 @@
* 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, see <http://www.gnu.org/licenses/>.
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors:
+ * Robert Bragg <robert@linux.intel.com>
*/
#if !defined(__COGL_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
diff --git a/cogl.h.in b/cogl.h.in
index 5b5347c1..b3b0584b 100644
--- a/cogl.h.in
+++ b/cogl.h.in
@@ -1,13 +1,12 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* 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.
@@ -41,6 +40,7 @@
#include <cogl/cogl-material.h>
#include <cogl/cogl-path.h>
#include <cogl/cogl-shader.h>
+#include <cogl/cogl-bitmap.h>
#include <cogl/cogl-texture.h>
#include <cogl/cogl-types.h>
#include <cogl/cogl-debug.h>
@@ -364,13 +364,28 @@ void cogl_set_fog (const CoglColor *fog_color,
void cogl_disable_fog (void);
/**
+ * CoglBufferBit:
+ * @COGL_BUFFER_BIT_COLOR: Selects the primary color buffer
+ * @COGL_BUFFER_BIT_DEPTH: Selects the depth buffer
+ * @COGL_BUFFER_BIT_STENCIL: Selects the stencil buffer
+ */
+typedef enum _CoglBufferBit
+{
+ COGL_BUFFER_BIT_COLOR = 1L<<0,
+ COGL_BUFFER_BIT_DEPTH = 1L<<1,
+ COGL_BUFFER_BIT_STENCIL = 1L<<2
+} CoglBufferBit;
+
+/**
* cogl_clear:
* @color: Background color to clear to
+ * @buffers: A mask of @CoglBufferBit<!-- -->'s identifying which auxiliary
+ * buffers to clear
*
- * Clears the color buffer to @color. The depth buffer and stencil
- * buffers are also cleared.
+ * Clears all the auxiliary buffers identified in the @buffers mask, and if
+ * that includes the color buffer then the specified @color is used.
*/
-void cogl_clear (const CoglColor *color);
+void cogl_clear (const CoglColor *color, gulong buffers);
/**
* cogl_set_source:
@@ -476,6 +491,27 @@ void cogl_set_source_texture (CoglHandle texture_handle);
*/
/**
+ * cogl_clip_push_window_rect:
+ * @x_offset: left edge of the clip rectangle in window coordinates
+ * @y_offset: top edge of the clip rectangle in window coordinates
+ * @width: width of the clip rectangle
+ * @height: height of the clip rectangle
+ *
+ * Specifies a rectangular clipping area for all subsequent drawing
+ * operations. Any drawing commands that extend outside the rectangle
+ * will be clipped so that only the portion inside the rectangle will
+ * be displayed. The rectangle dimensions are not transformed by the
+ * current model-view matrix.
+ *
+ * The rectangle is intersected with the current clip region. To undo
+ * the effect of this function, call cogl_clip_pop().
+ */
+void cogl_clip_push_window_rect (float x_offset,
+ float y_offset,
+ float width,
+ float height);
+
+/**
* cogl_clip_push:
* @x_offset: left edge of the clip rectangle
* @y_offset: top edge of the clip rectangle
@@ -564,6 +600,35 @@ void cogl_clip_stack_save (void);
void cogl_clip_stack_restore (void);
/**
+ * cogl_set_draw_buffer:
+ * @target: A #CoglBufferTarget that specifies what kind of draw buffer you
+ * are setting as the render target.
+ * @offscreen: If you are setting a draw buffer of type COGL_OFFSCREEN_BUFFER
+ * then this is a CoglHandle for the offscreen buffer.
+ *
+ * This redirects all subsequent drawing to the specified draw buffer. This
+ * can either be an offscreen buffer created with
+ * cogl_offscreen_new_to_texture () or you can revert to your original
+ * on screen window buffer.
+ */
+void cogl_set_draw_buffer (CoglBufferTarget target,
+ CoglHandle offscreen);
+
+/**
+ * cogl_push_draw_buffer:
+ *
+ * Save cogl_set_draw_buffer() state.
+ */
+void cogl_push_draw_buffer (void);
+
+/**
+ * cogl_pop_draw_buffer:
+ *
+ * Restore cogl_set_draw_buffer() state.
+ */
+void cogl_pop_draw_buffer (void);
+
+/**
* cogl_flush_gl_state:
* @flags: flags controlling what is flushed; currently unused, pass in 0
*
diff --git a/common/Makefile.am b/common/Makefile.am
index c2c8310d..138893a1 100644
--- a/common/Makefile.am
+++ b/common/Makefile.am
@@ -2,27 +2,25 @@ INCLUDES = \
-I$(top_srcdir) \
-I$(top_srcdir)/clutter \
-I$(top_srcdir)/clutter/cogl \
+ -I$(top_srcdir)/clutter/cogl/common \
-I$(top_srcdir)/clutter/cogl/$(CLUTTER_COGL) \
-I$(top_builddir)/clutter \
-I$(top_builddir)/clutter/cogl \
-DG_LOG_DOMAIN=\"Cogl-Common\" \
- -DCLUTTER_COMPILATION \
- $(CLUTTER_CFLAGS) \
- $(CLUTTER_DEBUG_CFLAGS) \
- $(MAINTAINER_CFLAGS) \
- $(GCC_FLAGS)
-
-LDADD = $(CLUTTER_LIBS)
+ -DCLUTTER_COMPILATION
noinst_LTLIBRARIES = libclutter-cogl-common.la
EXTRA_DIST = stb_image.c
+libclutter_cogl_common_la_CPPFLAGS = $(CLUTTER_CFLAGS) $(COGL_DEBUG_CFLAGS) $(CLUTTER_DEBUG_CFLAGS) $(MAINTAINER_CFLAGS)
+libclutter_cogl_common_la_LIBADD = -lm $(CLUTTER_LIBS)
libclutter_cogl_common_la_SOURCES = \
cogl-handle.h \
+ cogl-internal.h \
cogl.c \
cogl-util.h \
cogl-util.c \
- cogl-bitmap.h \
+ cogl-bitmap-private.h \
cogl-bitmap.c \
cogl-bitmap-fallback.c \
cogl-current-matrix.c \
diff --git a/common/cogl-bitmap-fallback.c b/common/cogl-bitmap-fallback.c
index cb9b9040..e118459e 100644
--- a/common/cogl-bitmap-fallback.c
+++ b/common/cogl-bitmap-fallback.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -29,7 +27,7 @@
#include "cogl.h"
#include "cogl-internal.h"
-#include "cogl-bitmap.h"
+#include "cogl-bitmap-private.h"
#include <string.h>
@@ -164,7 +162,7 @@ inline static void
_cogl_unpremult_alpha_last (const guchar *src, guchar *dst)
{
guchar alpha = src[3];
-
+
dst[0] = ((((gulong) src[0] >> 16) & 0xff) * 255 ) / alpha;
dst[1] = ((((gulong) src[1] >> 8) & 0xff) * 255 ) / alpha;
dst[2] = ((((gulong) src[2] >> 0) & 0xff) * 255 ) / alpha;
@@ -175,7 +173,7 @@ inline static void
_cogl_unpremult_alpha_first (const guchar *src, guchar *dst)
{
guchar alpha = src[0];
-
+
dst[0] = alpha;
dst[1] = ((((gulong) src[1] >> 16) & 0xff) * 255 ) / alpha;
dst[2] = ((((gulong) src[2] >> 8) & 0xff) * 255 ) / alpha;
@@ -187,23 +185,23 @@ _cogl_bitmap_fallback_can_convert (CoglPixelFormat src, CoglPixelFormat dst)
{
if (src == dst)
return FALSE;
-
+
switch (src & COGL_UNORDERED_MASK)
{
case COGL_PIXEL_FORMAT_G_8:
case COGL_PIXEL_FORMAT_24:
case COGL_PIXEL_FORMAT_32:
-
+
if ((dst & COGL_UNORDERED_MASK) != COGL_PIXEL_FORMAT_24 &&
(dst & COGL_UNORDERED_MASK) != COGL_PIXEL_FORMAT_32 &&
(dst & COGL_UNORDERED_MASK) != COGL_PIXEL_FORMAT_G_8)
return FALSE;
break;
-
+
default:
return FALSE;
}
-
+
return TRUE;
}
@@ -224,11 +222,11 @@ _cogl_bitmap_fallback_convert (const CoglBitmap *bmp,
gint dst_bpp;
gint x,y;
guchar temp_rgba[4] = {0,0,0,0};
-
+
/* Make sure conversion supported */
if (!_cogl_bitmap_fallback_can_convert (bmp->format, dst_format))
return FALSE;
-
+
src_bpp = _cogl_get_format_bpp (bmp->format);
dst_bpp = _cogl_get_format_bpp (dst_format);
@@ -237,18 +235,18 @@ _cogl_bitmap_fallback_convert (const CoglBitmap *bmp,
dst_bmp->rowstride = sizeof(guchar) * dst_bpp * dst_bmp->width;
dst_bmp->format = ((bmp->format & COGL_PREMULT_BIT) |
(dst_format & COGL_UNPREMULT_MASK));
-
+
/* Allocate a new buffer to hold converted data */
dst_bmp->data = g_malloc (sizeof(guchar)
* dst_bmp->height
* dst_bmp->rowstride);
-
+
/* FIXME: Optimize */
for (y = 0; y < bmp->height; y++)
{
src = (guchar*)bmp->data + y * bmp->rowstride;
dst = (guchar*)dst_bmp->data + y * dst_bmp->rowstride;
-
+
for (x = 0; x < bmp->width; x++)
{
/* FIXME: Would be nice to at least remove this inner
@@ -273,7 +271,7 @@ _cogl_bitmap_fallback_convert (const CoglBitmap *bmp,
default:
break;
}
-
+
switch (dst_format & COGL_UNPREMULT_MASK)
{
case COGL_PIXEL_FORMAT_G_8:
@@ -293,12 +291,12 @@ _cogl_bitmap_fallback_convert (const CoglBitmap *bmp,
default:
break;
}
-
+
src += src_bpp;
dst += dst_bpp;
}
}
-
+
return TRUE;
}
@@ -310,28 +308,28 @@ _cogl_bitmap_fallback_unpremult (const CoglBitmap *bmp,
guchar *dst;
gint bpp;
gint x,y;
-
+
/* Make sure format supported for un-premultiplication */
if (!_cogl_bitmap_fallback_can_unpremult (bmp->format))
return FALSE;
-
+
bpp = _cogl_get_format_bpp (bmp->format);
-
+
/* Initialize destination bitmap */
*dst_bmp = *bmp;
dst_bmp->format = (bmp->format & COGL_UNPREMULT_MASK);
-
+
/* Allocate a new buffer to hold converted data */
dst_bmp->data = g_malloc (sizeof(guchar)
* dst_bmp->height
* dst_bmp->rowstride);
-
+
/* FIXME: Optimize */
for (y = 0; y < bmp->height; y++)
{
src = (guchar*)bmp->data + y * bmp->rowstride;
dst = (guchar*)dst_bmp->data + y * dst_bmp->rowstride;
-
+
for (x = 0; x < bmp->width; x++)
{
/* FIXME: Would be nice to at least remove this inner
@@ -351,12 +349,12 @@ _cogl_bitmap_fallback_unpremult (const CoglBitmap *bmp,
else
_cogl_unpremult_alpha_last (src, dst);
}
-
+
src += bpp;
dst += bpp;
}
}
-
+
return TRUE;
}
diff --git a/common/cogl-bitmap-pixbuf.c b/common/cogl-bitmap-pixbuf.c
index 8d86d94e..f1e50053 100644
--- a/common/cogl-bitmap-pixbuf.c
+++ b/common/cogl-bitmap-pixbuf.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -29,7 +27,7 @@
#include "cogl.h"
#include "cogl-internal.h"
-#include "cogl-bitmap.h"
+#include "cogl-bitmap-private.h"
#include <string.h>
@@ -222,7 +220,7 @@ _cogl_bitmap_from_file (CoglBitmap *bmp,
guchar *out_data;
guchar *out;
gint r;
-
+
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
if (bmp == NULL)
@@ -232,7 +230,7 @@ _cogl_bitmap_from_file (CoglBitmap *bmp,
pixbuf = gdk_pixbuf_new_from_file (filename, error);
if (pixbuf == NULL)
return FALSE;
-
+
/* Get pixbuf properties */
has_alpha = gdk_pixbuf_get_has_alpha (pixbuf);
color_space = gdk_pixbuf_get_colorspace (pixbuf);
@@ -241,10 +239,10 @@ _cogl_bitmap_from_file (CoglBitmap *bmp,
rowstride = gdk_pixbuf_get_rowstride (pixbuf);
bits_per_sample = gdk_pixbuf_get_bits_per_sample (pixbuf);
n_channels = gdk_pixbuf_get_n_channels (pixbuf);
-
+
/* The docs say this is the right way */
last_row_size = width * ((n_channels * bits_per_sample + 7) / 8);
-
+
/* According to current docs this should be true and so
* the translation to cogl pixel format below valid */
g_assert (bits_per_sample == 8);
@@ -253,7 +251,7 @@ _cogl_bitmap_from_file (CoglBitmap *bmp,
g_assert (n_channels == 4);
else
g_assert (n_channels == 3);
-
+
/* Translate to cogl pixel format */
switch (color_space)
{
@@ -263,19 +261,19 @@ _cogl_bitmap_from_file (CoglBitmap *bmp,
COGL_PIXEL_FORMAT_RGBA_8888 :
COGL_PIXEL_FORMAT_RGB_888;
break;
-
+
default:
/* Ouch, spec changed! */
g_object_unref (pixbuf);
return FALSE;
}
-
+
/* FIXME: Any way to destroy pixbuf but retain pixel data? */
-
+
pixels = gdk_pixbuf_get_pixels (pixbuf);
out_data = (guchar*) g_malloc (height * rowstride);
out = out_data;
-
+
/* Copy up to last row */
for (r = 0; r < height-1; ++r)
{
@@ -283,13 +281,13 @@ _cogl_bitmap_from_file (CoglBitmap *bmp,
pixels += rowstride;
out += rowstride;
}
-
+
/* Copy last row */
memcpy (out, pixels, last_row_size);
-
+
/* Destroy GdkPixbuf object */
g_object_unref (pixbuf);
-
+
/* Store bitmap info */
bmp->data = out_data; /* The stored data the same alignment constraints as a
* gdkpixbuf but stores a full rowstride in the last
@@ -299,7 +297,7 @@ _cogl_bitmap_from_file (CoglBitmap *bmp,
bmp->width = width;
bmp->height = height;
bmp->rowstride = rowstride;
-
+
return TRUE;
}
@@ -335,14 +333,14 @@ _cogl_bitmap_from_file (CoglBitmap *bmp,
if (bmp == NULL)
return FALSE;
-
+
/* Load from file using stb */
pixels = stbi_load (filename,
&width, &height, &stb_pixel_format,
STBI_rgb_alpha);
if (pixels == NULL)
return FALSE;
-
+
/* Store bitmap info */
bmp->data = g_memdup (pixels, height * width * 4);
bmp->format = COGL_PIXEL_FORMAT_RGBA_8888;
diff --git a/common/cogl-bitmap.h b/common/cogl-bitmap-private.h
index 953ac5a3..f54961bd 100644
--- a/common/cogl-bitmap.h
+++ b/common/cogl-bitmap-private.h
@@ -28,14 +28,17 @@
#include <glib.h>
-struct _CoglBitmap
+#include "cogl-handle.h"
+
+typedef struct _CoglBitmap
{
+ CoglHandleObject _parent;
guchar *data;
CoglPixelFormat format;
gint width;
gint height;
gint rowstride;
-};
+} CoglBitmap;
gboolean
_cogl_bitmap_can_convert (CoglPixelFormat src, CoglPixelFormat dst);
diff --git a/common/cogl-bitmap.c b/common/cogl-bitmap.c
index b0a3b713..f4c322ab 100644
--- a/common/cogl-bitmap.c
+++ b/common/cogl-bitmap.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -29,10 +27,21 @@
#include "cogl.h"
#include "cogl-internal.h"
-#include "cogl-bitmap.h"
+#include "cogl-bitmap-private.h"
#include <string.h>
+static void _cogl_bitmap_free (CoglBitmap *bmp);
+
+COGL_HANDLE_DEFINE (Bitmap, bitmap);
+
+static void
+_cogl_bitmap_free (CoglBitmap *bmp)
+{
+ g_free (bmp->data);
+ g_free (bmp);
+}
+
gint
_cogl_get_format_bpp (CoglPixelFormat format)
{
@@ -47,7 +56,7 @@ _cogl_get_format_bpp (CoglPixelFormat format)
2, /* YUV */
1 /* G_8 */
};
-
+
return bpp_lut [format & COGL_UNORDERED_MASK];
}
@@ -59,7 +68,7 @@ _cogl_bitmap_convert_and_premult (const CoglBitmap *bmp,
CoglBitmap tmp_bmp = *bmp;
CoglBitmap new_bmp = *bmp;
gboolean new_bmp_owner = FALSE;
-
+
/* Is base format different (not considering premult status)? */
if ((bmp->format & COGL_UNPREMULT_MASK) !=
(dst_format & COGL_UNPREMULT_MASK))
@@ -71,12 +80,12 @@ _cogl_bitmap_convert_and_premult (const CoglBitmap *bmp,
if (!_cogl_bitmap_fallback_convert (&new_bmp, &tmp_bmp, dst_format))
return FALSE;
}
-
+
/* Update bitmap with new data */
new_bmp = tmp_bmp;
new_bmp_owner = TRUE;
}
-
+
/* Do we need to unpremultiply */
if ((bmp->format & COGL_PREMULT_BIT) == 0 &&
(dst_format & COGL_PREMULT_BIT) > 0)
@@ -89,19 +98,19 @@ _cogl_bitmap_convert_and_premult (const CoglBitmap *bmp,
{
if (new_bmp_owner)
g_free (new_bmp.data);
-
+
return FALSE;
}
}
-
+
/* Update bitmap with new data */
if (new_bmp_owner)
g_free (new_bmp.data);
-
+
new_bmp = tmp_bmp;
new_bmp_owner = TRUE;
}
-
+
/* Do we need to premultiply */
if ((bmp->format & COGL_PREMULT_BIT) > 0 &&
(dst_format & COGL_PREMULT_BIT) == 0)
@@ -109,13 +118,13 @@ _cogl_bitmap_convert_and_premult (const CoglBitmap *bmp,
/* FIXME: implement premultiplication */
if (new_bmp_owner)
g_free (new_bmp.data);
-
+
return FALSE;
}
-
+
/* Output new bitmap info */
*dst_bmp = new_bmp;
-
+
return TRUE;
}
@@ -133,14 +142,14 @@ _cogl_bitmap_copy_subregion (CoglBitmap *src,
guchar *dstdata;
gint bpp;
gint line;
-
+
/* Intended only for fast copies when format is equal! */
g_assert (src->format == dst->format);
bpp = _cogl_get_format_bpp (src->format);
-
+
srcdata = src->data + src_y * src->rowstride + src_x * bpp;
dstdata = dst->data + dst_y * dst->rowstride + dst_x * bpp;
-
+
for (line=0; line<height; ++line)
{
memcpy (dstdata, srcdata, width * bpp);
@@ -157,12 +166,13 @@ cogl_bitmap_get_size_from_file (const gchar *filename,
return _cogl_bitmap_get_size_from_file (filename, width, height);
}
-CoglBitmap *
+CoglHandle
cogl_bitmap_new_from_file (const gchar *filename,
GError **error)
{
CoglBitmap bmp;
-
+ CoglBitmap *ret;
+
g_return_val_if_fail (error == NULL || *error == NULL, COGL_INVALID_HANDLE);
/* Try loading with imaging backend */
@@ -177,13 +187,8 @@ cogl_bitmap_new_from_file (const gchar *filename,
*error = NULL;
}
}
-
- return (CoglBitmap *) g_memdup (&bmp, sizeof (CoglBitmap));
-}
-void
-cogl_bitmap_free (CoglBitmap *bmp)
-{
- g_free (bmp->data);
- g_free (bmp);
+ ret = g_memdup (&bmp, sizeof (CoglBitmap));
+ return _cogl_bitmap_handle_new (ret);
}
+
diff --git a/common/cogl-clip-stack.c b/common/cogl-clip-stack.c
index b80da0ed..896fe9ba 100644
--- a/common/cogl-clip-stack.c
+++ b/common/cogl-clip-stack.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2008 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -28,10 +26,14 @@
#endif
#include <string.h>
+
+#include <glib.h>
+
#include "cogl.h"
#include "cogl-clip-stack.h"
#include "cogl-primitives.h"
#include "cogl-context.h"
+#include "cogl-internal.h"
/* These are defined in the particular backend (float in GL vs fixed
in GL ES) */
@@ -57,11 +59,13 @@ void _cogl_set_matrix (const CoglMatrix *matrix);
typedef struct _CoglClipStack CoglClipStack;
typedef struct _CoglClipStackEntryRect CoglClipStackEntryRect;
+typedef struct _CoglClipStackEntryWindowRect CoglClipStackEntryWindowRect;
typedef struct _CoglClipStackEntryPath CoglClipStackEntryPath;
typedef enum
{
COGL_CLIP_STACK_RECT,
+ COGL_CLIP_STACK_WINDOW_RECT,
COGL_CLIP_STACK_PATH
} CoglClipStackEntryType;
@@ -72,7 +76,7 @@ struct _CoglClipStack
struct _CoglClipStackEntryRect
{
- CoglClipStackEntryType type;
+ CoglClipStackEntryType type;
/* The rectangle for this clip */
float x_offset;
@@ -84,21 +88,127 @@ struct _CoglClipStackEntryRect
CoglMatrix matrix;
};
+struct _CoglClipStackEntryWindowRect
+{
+ CoglClipStackEntryType type;
+
+ /* The window space rectangle for this clip */
+ float x0;
+ float y0;
+ float x1;
+ float y1;
+};
+
struct _CoglClipStackEntryPath
{
- CoglClipStackEntryType type;
+ CoglClipStackEntryType type;
/* The matrix that was current when the clip was set */
- CoglMatrix matrix;
+ CoglMatrix matrix;
floatVec2 path_nodes_min;
floatVec2 path_nodes_max;
- guint path_size;
- CoglPathNode path[1];
+ guint path_size;
+ CoglPathNode path[1];
};
void
+cogl_clip_push_window_rect (float x_offset,
+ float y_offset,
+ float width,
+ float height)
+{
+ CoglClipStackEntryWindowRect *entry;
+ CoglClipStack *stack;
+ float v[4];
+
+ _COGL_GET_CONTEXT (ctx, NO_RETVAL);
+
+ stack = (CoglClipStack *) ctx->clip.stacks->data;
+
+ cogl_get_viewport (v);
+
+ entry = g_slice_new (CoglClipStackEntryWindowRect);
+
+ /* We convert from coords with (0,0) at top left to coords
+ * with (0,0) at bottom left. */
+ entry->type = COGL_CLIP_STACK_WINDOW_RECT;
+ entry->x0 = x_offset;
+ entry->y0 = v[3] - y_offset - height;
+ entry->x1 = x_offset + width;
+ entry->y1 = v[3] - y_offset;
+
+ /* Store it in the stack */
+ stack->stack_top = g_list_prepend (stack->stack_top, entry);
+
+ ctx->clip.stack_dirty = TRUE;
+}
+
+/* Scale from OpenGL <-1,1> coordinates system to window coordinates
+ * <0,window-size> with (0,0) being top left. */
+#define VIEWPORT_SCALE_X(x, w, width, origin) \
+ ((((((x) / (w)) + 1.0) / 2) * (width)) + (origin))
+#define VIEWPORT_SCALE_Y(y, w, height, origin) \
+ ((height) - (((((y) / (w)) + 1.0) / 2) * (height)) + (origin))
+
+static void
+transform_point (CoglMatrix *matrix_mv,
+ CoglMatrix *matrix_p,
+ float *viewport,
+ float *x,
+ float *y)
+{
+ float z = 0;
+ float w = 1;
+
+ /* Apply the model view matrix */
+ cogl_matrix_transform_point (matrix_mv, x, y, &z, &w);
+
+ /* Apply the projection matrix */
+ cogl_matrix_transform_point (matrix_p, x, y, &z, &w);
+ /* Apply viewport transform */
+ *x = VIEWPORT_SCALE_X (*x, w, viewport[2], viewport[0]);
+ *y = VIEWPORT_SCALE_Y (*y, w, viewport[3], viewport[1]);
+}
+
+#undef VIEWPORT_SCALE_X
+#undef VIEWPORT_SCALE_Y
+
+/* Try to push a rectangle given in object coordinates as a rectangle in window
+ * coordinates instead of object coordinates */
+gboolean
+try_pushing_rect_as_window_rect (float x_offset,
+ float y_offset,
+ float width,
+ float height)
+{
+ CoglMatrix matrix;
+ CoglMatrix matrix_p;
+ float v[4];
+ float _x0 = x_offset;
+ float _y0 = y_offset;
+ float _x1 = x_offset + width;
+ float _y1 = y_offset + height;
+
+ cogl_get_modelview_matrix (&matrix);
+
+ if (matrix.xy != 0 || matrix.xz != 0 ||
+ matrix.yx != 0 || matrix.yz != 0 ||
+ matrix.zx != 0 || matrix.zy != 0)
+ return FALSE;
+
+ cogl_get_projection_matrix (&matrix_p);
+ cogl_get_viewport (v);
+
+ transform_point (&matrix, &matrix_p, v, &_x0, &_y0);
+ transform_point (&matrix, &matrix_p, v, &_x1, &_y1);
+
+ cogl_clip_push_window_rect (_x0, _y0, _x1 - _x0, _y1 - _y0);
+ return TRUE;
+}
+
+void
cogl_clip_push (float x_offset,
float y_offset,
float width,
@@ -109,6 +219,11 @@ cogl_clip_push (float x_offset,
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
+ /* Try and catch window space rectangles so we can redirect to
+ * cogl_clip_push_window_rect which will use scissoring. */
+ if (try_pushing_rect_as_window_rect (x_offset, y_offset, width, height))
+ return;
+
stack = (CoglClipStack *) ctx->clip.stacks->data;
entry = g_slice_new (CoglClipStackEntryRect);
@@ -169,6 +284,7 @@ cogl_clip_pop (void)
{
gpointer entry;
CoglClipStack *stack;
+ CoglClipStackEntryType type;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
@@ -177,10 +293,13 @@ cogl_clip_pop (void)
g_return_if_fail (stack->stack_top != NULL);
entry = stack->stack_top->data;
+ type = *(CoglClipStackEntryType *) entry;
/* Remove the top entry from the stack */
- if (*(CoglClipStackEntryType *) entry == COGL_CLIP_STACK_RECT)
+ if (type == COGL_CLIP_STACK_RECT)
g_slice_free (CoglClipStackEntryRect, entry);
+ else if (type == COGL_CLIP_STACK_WINDOW_RECT)
+ g_slice_free (CoglClipStackEntryWindowRect, entry);
else
g_free (entry);
@@ -198,6 +317,10 @@ _cogl_clip_stack_rebuild (void)
gboolean using_stencil_buffer = FALSE;
GList *node;
CoglClipStack *stack;
+ guint scissor_x0 = 0;
+ guint scissor_y0 = 0;
+ guint scissor_x1 = G_MAXUINT;
+ guint scissor_y1 = G_MAXUINT;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
@@ -208,6 +331,7 @@ _cogl_clip_stack_rebuild (void)
_cogl_disable_clip_planes ();
_cogl_disable_stencil_buffer ();
+ GE (glDisable (GL_SCISSOR_TEST));
/* If the stack is empty then there's nothing else to do */
if (stack->stack_top == NULL)
@@ -220,8 +344,9 @@ _cogl_clip_stack_rebuild (void)
for (; node; node = node->prev)
{
gpointer entry = node->data;
+ CoglClipStackEntryType type = *(CoglClipStackEntryType *) entry;
- if (*(CoglClipStackEntryType *) entry == COGL_CLIP_STACK_PATH)
+ if (type == COGL_CLIP_STACK_PATH)
{
CoglClipStackEntryPath *path = (CoglClipStackEntryPath *) entry;
@@ -241,7 +366,7 @@ _cogl_clip_stack_rebuild (void)
/* We can't use clip planes any more */
has_clip_planes = FALSE;
}
- else
+ else if (type == COGL_CLIP_STACK_RECT)
{
CoglClipStackEntryRect *rect = (CoglClipStackEntryRect *) entry;
@@ -272,6 +397,16 @@ _cogl_clip_stack_rebuild (void)
cogl_pop_matrix ();
}
+ else
+ {
+ /* Get the intersection of all window space rectangles in the clip
+ * stack */
+ CoglClipStackEntryWindowRect *window_rect = entry;
+ scissor_x0 = MAX (scissor_x0, window_rect->x0);
+ scissor_y0 = MAX (scissor_y0, window_rect->y0);
+ scissor_x1 = MIN (scissor_x1, window_rect->x1);
+ scissor_y1 = MIN (scissor_y1, window_rect->y1);
+ }
}
/* Enabling clip planes is delayed to now so that they won't affect
@@ -279,6 +414,18 @@ _cogl_clip_stack_rebuild (void)
if (using_clip_planes)
_cogl_enable_clip_planes ();
+ if (scissor_x0 >= scissor_x1 || scissor_y0 >= scissor_y1)
+ scissor_x0 = scissor_y0 = scissor_x1 = scissor_y1 = 0;
+
+ if (!(scissor_x0 == 0 && scissor_y0 == 0 &&
+ scissor_x1 == G_MAXUINT && scissor_y1 == G_MAXUINT))
+ {
+ GE (glEnable (GL_SCISSOR_TEST));
+ GE (glScissor (scissor_x0, scissor_y0,
+ scissor_x1 - scissor_x0,
+ scissor_y1 - scissor_y0));
+ }
+
ctx->clip.stencil_used = using_stencil_buffer;
}
diff --git a/common/cogl-clip-stack.h b/common/cogl-clip-stack.h
index cbabc738..324097b1 100644
--- a/common/cogl-clip-stack.h
+++ b/common/cogl-clip-stack.h
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2008 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/common/cogl-color.c b/common/cogl-color.c
index 1a9e24e9..306005f2 100644
--- a/common/cogl-color.c
+++ b/common/cogl-color.c
@@ -1,3 +1,26 @@
+/*
+ * Cogl
+ *
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2008,2009 Intel Corporation.
+ *
+ * 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.
+ */
+
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
diff --git a/common/cogl-current-matrix.c b/common/cogl-current-matrix.c
index 1ccb4c6d..0080af0d 100644
--- a/common/cogl-current-matrix.c
+++ b/common/cogl-current-matrix.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Havoc Pennington <hp@pobox.com> for litl
- *
- * Copyright (C) 2009 OpenedHand
+ * Copyright (C) 2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -21,6 +19,9 @@
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
+ *
+ * Authors:
+ * Havoc Pennington <hp@pobox.com> for litl
*/
#ifdef HAVE_CONFIG_H
diff --git a/common/cogl-current-matrix.h b/common/cogl-current-matrix.h
index 3e271c97..d1b1bdec 100644
--- a/common/cogl-current-matrix.h
+++ b/common/cogl-current-matrix.h
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Havoc Pennington <hp@pobox.com> for litl
- *
- * Copyright (C) 2009 OpenedHand
+ * Copyright (C) 2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -21,6 +19,9 @@
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
+ *
+ * Authors:
+ * Havoc Pennington <hp@pobox.com> for litl
*/
#ifndef __COGL_CURRENT_MATRIX_H
diff --git a/common/cogl-debug.c b/common/cogl-debug.c
index 2200b1f1..85721fc2 100644
--- a/common/cogl-debug.c
+++ b/common/cogl-debug.c
@@ -1,3 +1,26 @@
+/*
+ * Cogl
+ *
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2009 Intel Corporation.
+ *
+ * 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.
+ */
+
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -15,7 +38,8 @@ static const GDebugKey cogl_debug_keys[] = {
{ "offscreen", COGL_DEBUG_OFFSCREEN },
{ "draw", COGL_DEBUG_DRAW },
{ "pango", COGL_DEBUG_PANGO },
- { "rectangles", COGL_DEBUG_RECTANGLES }
+ { "rectangles", COGL_DEBUG_RECTANGLES },
+ { "handle", COGL_DEBUG_HANDLE }
};
static const gint n_cogl_debug_keys = G_N_ELEMENTS (cogl_debug_keys);
diff --git a/common/cogl-fixed.c b/common/cogl-fixed.c
index 846ede80..13a96765 100644
--- a/common/cogl-fixed.c
+++ b/common/cogl-fixed.c
@@ -1,3 +1,26 @@
+/*
+ * Cogl
+ *
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
+ *
+ * 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.
+ */
+
#define G_IMPLEMENT_INLINES
#ifdef HAVE_CONFIG_H
diff --git a/common/cogl-handle.h b/common/cogl-handle.h
index 95e85e34..7851932d 100644
--- a/common/cogl-handle.h
+++ b/common/cogl-handle.h
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2008 OpenedHand
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -48,65 +46,60 @@ typedef struct _CoglHandleObject
/* Helper macro to encapsulate the common code for COGL reference
counted handles */
-#if COGL_DEBUG
+#ifdef COGL_HANDLE_DEBUG
-#define _COGL_HANDLE_DEBUG_NEW(type_name, obj) \
- printf ("COGL " G_STRINGIFY (type_name) " NEW %p %i\n", \
- (obj), (obj)->ref_count)
+#define _COGL_HANDLE_DEBUG_NEW(type_name, obj) \
+ COGL_NOTE (HANDLE, "COGL " G_STRINGIFY (type_name) " NEW %p %i\n", \
+ (obj), (obj)->ref_count)
-#define _COGL_HANDLE_DEBUG_REF(type_name, handle) \
- do { \
- CoglHandleObject *obj = (CoglHandleObject *)handle; \
- printf ("COGL %s REF %p %i\n", \
- g_quark_to_string ((obj)->klass->type), \
- (obj), (obj)->ref_count); \
- } while (0)
+#define _COGL_HANDLE_DEBUG_REF(type_name, handle) G_STMT_START { \
+ CoglHandleObject *__obj = (CoglHandleObject *)handle; \
+ COGL_NOTE (HANDLE, "COGL %s REF %p %i\n", \
+ g_quark_to_string ((__obj)->klass->type), \
+ (__obj), (__obj)->ref_count); } G_STMT_END
-#define _COGL_HANDLE_DEBUG_UNREF(type_name, handle) \
- do { \
- CoglHandleObject *obj = (CoglHandleObject *)handle; \
- printf ("COGL %s UNREF %p %i\n", \
- g_quark_to_string ((obj)->klass->type), \
- (obj), (obj)->ref_count - 1); \
- } while (0)
+#define _COGL_HANDLE_DEBUG_UNREF(type_name, handle) G_STMT_START { \
+ CoglHandleObject *__obj = (CoglHandleObject *)handle; \
+ COGL_NOTE (HANDLE, "COGL %s UNREF %p %i\n", \
+ g_quark_to_string ((__obj)->klass->type), \
+ (__obj), (__obj)->ref_count - 1); } G_STMT_END
-#define COGL_HANDLE_DEBUG_FREE(obj) \
- printf ("COGL %s FREE %p\n", \
- g_quark_to_string ((obj)->klass->type), (obj)) \
+#define COGL_HANDLE_DEBUG_FREE(obj) \
+ COGL_NOTE (HANDLE, "COGL %s FREE %p\n", \
+ g_quark_to_string ((obj)->klass->type), (obj))
-#else /* COGL_DEBUG */
+#else /* !COGL_HANDLE_DEBUG */
#define _COGL_HANDLE_DEBUG_NEW(type_name, obj)
#define _COGL_HANDLE_DEBUG_REF(type_name, obj)
#define _COGL_HANDLE_DEBUG_UNREF(type_name, obj)
#define COGL_HANDLE_DEBUG_FREE(obj)
-#endif /* COGL_DEBUG */
+#endif /* COGL_HANDLE_DEBUG */
#define COGL_HANDLE_DEFINE(TypeName, type_name) \
\
- static CoglHandleClass _cogl_##type_name##_class; \
+static CoglHandleClass _cogl_##type_name##_class; \
\
- static GQuark \
- _cogl_##type_name##_get_type (void) \
- { \
- static GQuark type = 0; \
- if (!type) \
- type = g_quark_from_static_string ("Cogl"#TypeName); \
- return type; \
- } \
+static GQuark \
+_cogl_##type_name##_get_type (void) \
+{ \
+ static GQuark type = 0; \
+ if (!type) \
+ type = g_quark_from_static_string ("Cogl"#TypeName); \
+ return type; \
+} \
\
- static CoglHandle \
- _cogl_##type_name##_handle_new (Cogl##TypeName *new_obj) \
- { \
- CoglHandleObject *obj = &new_obj->_parent; \
- obj->ref_count = 1; \
+static CoglHandle \
+_cogl_##type_name##_handle_new (Cogl##TypeName *new_obj) \
+{ \
+ CoglHandleObject *obj = &new_obj->_parent; \
+ obj->ref_count = 1; \
\
- obj->klass = &_cogl_##type_name##_class; \
- if (!obj->klass->type) \
- { \
- obj->klass->type = \
- _cogl_##type_name##_get_type (); \
+ obj->klass = &_cogl_##type_name##_class; \
+ if (!obj->klass->type) \
+ { \
+ obj->klass->type = _cogl_##type_name##_get_type (); \
obj->klass->virt_free = _cogl_##type_name##_free; \
} \
\
@@ -114,51 +107,50 @@ typedef struct _CoglHandleObject
return (CoglHandle) new_obj; \
} \
\
- Cogl##TypeName * \
- _cogl_##type_name##_pointer_from_handle (CoglHandle handle) \
- { \
- return (Cogl##TypeName *) handle; \
- } \
+Cogl##TypeName * \
+_cogl_##type_name##_pointer_from_handle (CoglHandle handle) \
+{ \
+ return (Cogl##TypeName *) handle; \
+} \
\
- gboolean \
- cogl_is_##type_name (CoglHandle handle) \
- { \
- CoglHandleObject *obj = (CoglHandleObject *)handle; \
+gboolean \
+cogl_is_##type_name (CoglHandle handle) \
+{ \
+ CoglHandleObject *obj = (CoglHandleObject *)handle; \
\
- if (handle == COGL_INVALID_HANDLE) \
- return FALSE; \
+ if (handle == COGL_INVALID_HANDLE) \
+ return FALSE; \
\
- return (obj->klass->type == \
- _cogl_##type_name##_get_type ()); \
- } \
+ return (obj->klass->type == _cogl_##type_name##_get_type ()); \
+} \
\
- CoglHandle G_GNUC_DEPRECATED \
- cogl_##type_name##_ref (CoglHandle handle) \
- { \
- if (!cogl_is_##type_name (handle)) \
- return COGL_INVALID_HANDLE; \
+CoglHandle G_GNUC_DEPRECATED \
+cogl_##type_name##_ref (CoglHandle handle) \
+{ \
+ if (!cogl_is_##type_name (handle)) \
+ return COGL_INVALID_HANDLE; \
\
- _COGL_HANDLE_DEBUG_REF (TypeName, handle); \
+ _COGL_HANDLE_DEBUG_REF (TypeName, handle); \
\
- cogl_handle_ref (handle); \
+ cogl_handle_ref (handle); \
\
- return handle; \
- } \
+ return handle; \
+} \
\
- void G_GNUC_DEPRECATED \
- cogl_##type_name##_unref (CoglHandle handle) \
- { \
- if (!cogl_is_##type_name (handle)) \
- { \
- g_warning (G_STRINGIFY (cogl_##type_name##_unref) \
- ": Ignoring unref of Cogl handle " \
- "due to type missmatch"); \
- return; \
- } \
+void G_GNUC_DEPRECATED \
+cogl_##type_name##_unref (CoglHandle handle) \
+{ \
+ if (!cogl_is_##type_name (handle)) \
+ { \
+ g_warning (G_STRINGIFY (cogl_##type_name##_unref) \
+ ": Ignoring unref of Cogl handle " \
+ "due to type mismatch"); \
+ return; \
+ } \
\
- _COGL_HANDLE_DEBUG_UNREF (TypeName, handle); \
+ _COGL_HANDLE_DEBUG_UNREF (TypeName, handle); \
\
- cogl_handle_unref (handle); \
- }
+ cogl_handle_unref (handle); \
+}
#endif /* __COGL_HANDLE_H */
diff --git a/common/cogl-internal.h b/common/cogl-internal.h
index 559e1faa..f148c35b 100644
--- a/common/cogl-internal.h
+++ b/common/cogl-internal.h
@@ -1,10 +1,9 @@
/*
* Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Copyright (C) 2007, 2008 OpenedHand
- * Copyright (C) 2009 Intel Corp.
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -25,6 +24,8 @@
#ifndef __COGL_INTERNAL_H
#define __COGL_INTERNAL_H
+#include "cogl-debug.h"
+
#ifdef HAVE_COGL_GLES2
typedef enum {
COGL_BOXED_NONE,
@@ -50,29 +51,25 @@ typedef struct _CoglBoxedValue
} CoglBoxedValue;
#endif
-#define COGL_DEBUG 0
-
-#if COGL_DEBUG
-
-#include <stdio.h>
+#ifdef COGL_GL_DEBUG
-const char *_cogl_error_string(GLenum errorCode);
+const gchar *cogl_gl_error_to_string (GLenum error_code);
-#define GE(x...) G_STMT_START { \
- GLenum err; \
- (x); \
- while ((err = glGetError()) != GL_NO_ERROR) { \
- fprintf(stderr, "glError: %s caught at %s:%u\n", \
- (char *)_cogl_error_string(err), \
- __FILE__, __LINE__); \
- } \
-} G_STMT_END
+#define GE(x...) G_STMT_START { \
+ GLenum __err; \
+ (x); \
+ while ((__err = glGetError ()) != GL_NO_ERROR) \
+ { \
+ g_warning ("%s: GL error (%d): %s\n", \
+ G_STRLOC, \
+ cogl_gl_error_to_string (__err)); \
+ } } G_STMT_END
-#else /* COGL_DEBUG */
+#else /* !COGL_GL_DEBUG */
#define GE(x) (x)
-#endif /* COGL_DEBUG */
+#endif /* COGL_GL_DEBUG */
#define COGL_ENABLE_BLEND (1<<1)
#define COGL_ENABLE_ALPHA_TEST (1<<2)
@@ -80,16 +77,10 @@ const char *_cogl_error_string(GLenum errorCode);
#define COGL_ENABLE_COLOR_ARRAY (1<<4)
#define COGL_ENABLE_BACKFACE_CULLING (1<<5)
-void
-_cogl_features_init (void);
-
-gint
-_cogl_get_format_bpp (CoglPixelFormat format);
-
-void
-cogl_enable (gulong flags);
+void _cogl_features_init (void);
+gint _cogl_get_format_bpp (CoglPixelFormat format);
-gulong
-cogl_get_enable ();
+void cogl_enable (gulong flags);
+gulong cogl_get_enable (void);
#endif /* __COGL_INTERNAL_H */
diff --git a/common/cogl-material-private.h b/common/cogl-material-private.h
index 4044894d..05d4242d 100644
--- a/common/cogl-material-private.h
+++ b/common/cogl-material-private.h
@@ -1,3 +1,29 @@
+/*
+ * Cogl
+ *
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2008,2009 Intel Corporation.
+ *
+ * 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.
+ *
+ * Authors:
+ * Robert Bragg <robert@linux.intel.com>
+ */
+
#ifndef __COGL_MATERIAL_PRIVATE_H
#define __COGL_MATERIAL_PRIVATE_H
diff --git a/common/cogl-material.c b/common/cogl-material.c
index 498c8597..c456cac6 100644
--- a/common/cogl-material.c
+++ b/common/cogl-material.c
@@ -1,3 +1,28 @@
+/*
+ * Cogl
+ *
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2008,2009 Intel Corporation.
+ *
+ * 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.
+ *
+ * Authors:
+ * Robert Bragg <robert@linux.intel.com>
+ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -169,6 +194,18 @@ cogl_material_set_color4ub (CoglHandle handle,
}
void
+cogl_material_set_color4f (CoglHandle handle,
+ float red,
+ float green,
+ float blue,
+ float alpha)
+{
+ CoglColor color;
+ cogl_color_set_from_4f (&color, red, green, blue, alpha);
+ cogl_material_set_color (handle, &color);
+}
+
+void
cogl_material_get_ambient (CoglHandle handle,
CoglColor *ambient)
{
@@ -619,7 +656,8 @@ cogl_material_set_layer_matrix (CoglHandle material_handle,
static void
_cogl_material_layer_free (CoglMaterialLayer *layer)
{
- cogl_handle_unref (layer->texture);
+ if (layer->texture != COGL_INVALID_HANDLE)
+ cogl_handle_unref (layer->texture);
g_free (layer);
}
diff --git a/common/cogl-matrix-stack.c b/common/cogl-matrix-stack.c
index 38429fc6..a72af000 100644
--- a/common/cogl-matrix-stack.c
+++ b/common/cogl-matrix-stack.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Havoc Pennington <hp@pobox.com> for litl
- *
- * Copyright (C) 2009 OpenedHand
+ * Copyright (C) 2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -21,6 +19,9 @@
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
+ *
+ * Authors:
+ * Havoc Pennington <hp@pobox.com> for litl
*/
#ifdef HAVE_CONFIG_H
diff --git a/common/cogl-matrix-stack.h b/common/cogl-matrix-stack.h
index 9f800169..00db5168 100644
--- a/common/cogl-matrix-stack.h
+++ b/common/cogl-matrix-stack.h
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Havoc Pennington <hp@pobox.com> for litl
- *
- * Copyright (C) 2009 OpenedHand
+ * Copyright (C) 2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -21,6 +19,9 @@
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
+ *
+ * Authors:
+ * Havoc Pennington <hp@pobox.com> for litl
*/
#ifndef __COGL_MATRIX_STACK_H
diff --git a/common/cogl-matrix.c b/common/cogl-matrix.c
index 0a041e7e..6b6f20fa 100644
--- a/common/cogl-matrix.c
+++ b/common/cogl-matrix.c
@@ -1,3 +1,29 @@
+/*
+ * Cogl
+ *
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2008,2009 Intel Corporation.
+ *
+ * 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.
+ *
+ * Authors:
+ * Robert Bragg <robert@linux.intel.com>
+ */
+
#include <cogl-matrix.h>
#include <glib.h>
diff --git a/common/cogl-primitives.c b/common/cogl-primitives.c
index a1b0e2bc..224769ca 100644
--- a/common/cogl-primitives.c
+++ b/common/cogl-primitives.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -374,9 +372,7 @@ _cogl_texture_sliced_quad (CoglTexture *tex,
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
-#if COGL_DEBUG
- printf("=== Drawing Tex Quad (Sliced Mode) ===\n");
-#endif
+ COGL_NOTE (DRAW, "Drawing Tex Quad (Sliced Mode)");
/* We can't use hardware repeat so we need to set clamp to edge
otherwise it might pull in edge pixels from the other side */
@@ -487,17 +483,21 @@ _cogl_texture_sliced_quad (CoglTexture *tex,
slice_tx2 /= iter_x.span->size;
}
-#if COGL_DEBUG
- printf("~~~~~ slice (%d,%d)\n", iter_x.index, iter_y.index);
- printf("qx1: %f\n", (slice_qx1));
- printf("qy1: %f\n", (slice_qy1));
- printf("qx2: %f\n", (slice_qx2));
- printf("qy2: %f\n", (slice_qy2));
- printf("tx1: %f\n", (slice_tx1));
- printf("ty1: %f\n", (slice_ty1));
- printf("tx2: %f\n", (slice_tx2));
- printf("ty2: %f\n", (slice_ty2));
-#endif
+ COGL_NOTE (DRAW,
+ "~~~~~ slice (%d, %d)\n"
+ "qx1: %f\t"
+ "qy1: %f\n"
+ "qx2: %f\t"
+ "qy2: %f\n"
+ "tx1: %f\t"
+ "ty1: %f\n"
+ "tx2: %f\t"
+ "ty2: %f\n",
+ iter_x.index, iter_y.index,
+ slice_qx1, slice_qy1,
+ slice_qx2, slice_qy2,
+ slice_tx1, slice_ty1,
+ slice_tx2, slice_ty2);
/* Pick and bind opengl texture object */
gl_handle = g_array_index (tex->slice_gl_handles, GLuint,
@@ -1322,9 +1322,9 @@ cogl_path_fill_preserve (void)
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
cogl_clip_ensure ();
-
+
if (ctx->path_nodes->len == 0)
- return;
+ return;
_cogl_path_fill_nodes ();
}
@@ -1341,12 +1341,12 @@ void
cogl_path_stroke_preserve (void)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
+
cogl_clip_ensure ();
if (ctx->path_nodes->len == 0)
return;
-
+
_cogl_path_stroke_nodes();
}
@@ -1355,14 +1355,14 @@ cogl_path_move_to (float x,
float y)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
+
/* FIXME: handle multiple contours maybe? */
-
+
_cogl_path_add_node (TRUE, x, y);
-
+
ctx->path_start.x = x;
ctx->path_start.y = y;
-
+
ctx->path_pen = ctx->path_start;
}
@@ -1371,7 +1371,7 @@ cogl_path_rel_move_to (float x,
float y)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
+
cogl_path_move_to (ctx->path_pen.x + x,
ctx->path_pen.y + y);
}
@@ -1381,9 +1381,9 @@ cogl_path_line_to (float x,
float y)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
+
_cogl_path_add_node (FALSE, x, y);
-
+
ctx->path_pen.x = x;
ctx->path_pen.y = y;
}
@@ -1393,7 +1393,7 @@ cogl_path_rel_line_to (float x,
float y)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
+
cogl_path_line_to (ctx->path_pen.x + x,
ctx->path_pen.y + y);
}
@@ -1402,7 +1402,7 @@ void
cogl_path_close (void)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
+
_cogl_path_add_node (FALSE, ctx->path_start.x, ctx->path_start.y);
ctx->path_pen = ctx->path_start;
}
@@ -1430,9 +1430,9 @@ cogl_path_polyline (float *coords,
gint num_points)
{
gint c = 0;
-
+
cogl_path_move_to (coords[0], coords[1]);
-
+
for (c = 1; c < num_points; ++c)
cogl_path_line_to (coords[2*c], coords[2*c+1]);
}
@@ -1473,17 +1473,17 @@ _cogl_path_arc (float center_x,
float sina = 0x0;
float px = 0x0;
float py = 0x0;
-
+
/* Fix invalid angles */
-
+
if (angle_1 == angle_2 || angle_step == 0x0)
return;
-
+
if (angle_step < 0x0)
angle_step = -angle_step;
-
+
/* Walk the arc by given step */
-
+
a = angle_1;
while (a != angle_2)
{
@@ -1492,12 +1492,12 @@ _cogl_path_arc (float center_x,
px = center_x + (cosa * radius_x);
py = center_y + (sina * radius_y);
-
+
if (a == angle_1 && move_first)
cogl_path_move_to (px, py);
else
cogl_path_line_to (px, py);
-
+
if (G_LIKELY (angle_2 > angle_1))
{
a += angle_step;
@@ -1513,7 +1513,7 @@ _cogl_path_arc (float center_x,
}
/* Make sure the final point is drawn */
-
+
cosa = cosf (angle_2 * (G_PI/180.0));
sina = sinf (angle_2 * (G_PI/180.0));
@@ -1530,7 +1530,7 @@ cogl_path_arc (float center_x,
float radius_y,
float angle_1,
float angle_2)
-{
+{
float angle_step = 10;
/* it is documented that a move to is needed to create a freestanding
* arc
@@ -1552,7 +1552,7 @@ cogl_path_arc_rel (float center_x,
float angle_step)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
+
_cogl_path_arc (ctx->path_pen.x + center_x,
ctx->path_pen.y + center_y,
radius_x, radius_y,
@@ -1567,15 +1567,15 @@ cogl_path_ellipse (float center_x,
float radius_y)
{
float angle_step = 10;
-
+
/* FIXME: if shows to be slow might be optimized
* by mirroring just a quarter of it */
-
+
_cogl_path_arc (center_x, center_y,
radius_x, radius_y,
0, 360,
angle_step, 1 /* move first */);
-
+
cogl_path_close();
}
@@ -1589,7 +1589,7 @@ cogl_path_round_rectangle (float x_1,
{
float inner_width = x_2 - x_1 - radius * 2;
float inner_height = y_2 - y_1 - radius * 2;
-
+
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
cogl_path_move_to (x_1, y_1 + radius);
@@ -1598,7 +1598,7 @@ cogl_path_round_rectangle (float x_1,
180,
270,
arc_step);
-
+
cogl_path_line_to (ctx->path_pen.x + inner_width,
ctx->path_pen.y);
cogl_path_arc_rel (0, radius,
@@ -1606,7 +1606,7 @@ cogl_path_round_rectangle (float x_1,
-90,
0,
arc_step);
-
+
cogl_path_line_to (ctx->path_pen.x,
ctx->path_pen.y + inner_height);
@@ -1615,7 +1615,7 @@ cogl_path_round_rectangle (float x_1,
0,
90,
arc_step);
-
+
cogl_path_line_to (ctx->path_pen.x - inner_width,
ctx->path_pen.y);
cogl_path_arc_rel (0, -radius,
@@ -1623,7 +1623,7 @@ cogl_path_round_rectangle (float x_1,
90,
180,
arc_step);
-
+
cogl_path_close ();
}
@@ -1644,16 +1644,16 @@ _cogl_path_bezier3_sub (CoglBezCubic *cubic)
floatVec2 c4;
floatVec2 c5;
gint cindex;
-
+
/* Put first curve on stack */
cubics[0] = *cubic;
cindex = 0;
-
+
while (cindex >= 0)
{
c = &cubics[cindex];
-
-
+
+
/* Calculate distance of control points from their
* counterparts on the line between end points */
dif1.x = (c->p2.x * 3) - (c->p1.x * 2) - c->p4.x;
@@ -1669,12 +1669,12 @@ _cogl_path_bezier3_sub (CoglBezCubic *cubic)
dif2.x = -dif2.x;
if (dif2.y < 0)
dif2.y = -dif2.y;
-
-
+
+
/* Pick the greatest of two distances */
if (dif1.x < dif2.x) dif1.x = dif2.x;
if (dif1.y < dif2.y) dif1.y = dif2.y;
-
+
/* Cancel if the curve is flat enough */
if (dif1.x + dif1.y <= 1.0 ||
cindex == _COGL_MAX_BEZ_RECURSE_DEPTH-1)
@@ -1689,10 +1689,10 @@ _cogl_path_bezier3_sub (CoglBezCubic *cubic)
continue;
}
-
+
/* Left recursion goes on top of stack! */
cright = c; cleft = &cubics[++cindex];
-
+
/* Subdivide into 2 sub-curves */
c1.x = ((c->p1.x + c->p2.x) / 2);
c1.y = ((c->p1.y + c->p2.y) / 2);
@@ -1700,21 +1700,21 @@ _cogl_path_bezier3_sub (CoglBezCubic *cubic)
mm.y = ((c->p2.y + c->p3.y) / 2);
c5.x = ((c->p3.x + c->p4.x) / 2);
c5.y = ((c->p3.y + c->p4.y) / 2);
-
+
c2.x = ((c1.x + mm.x) / 2);
c2.y = ((c1.y + mm.y) / 2);
c4.x = ((mm.x + c5.x) / 2);
c4.y = ((mm.y + c5.y) / 2);
-
+
c3.x = ((c2.x + c4.x) / 2);
c3.y = ((c2.y + c4.y) / 2);
-
+
/* Add left recursion to stack */
cleft->p1 = c->p1;
cleft->p2 = c1;
cleft->p3 = c2;
cleft->p4 = c3;
-
+
/* Add right recursion to stack */
cright->p1 = c3;
cright->p2 = c4;
@@ -1761,7 +1761,7 @@ cogl_path_rel_curve_to (float x_1,
float y_3)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
+
cogl_path_curve_to (ctx->path_pen.x + x_1,
ctx->path_pen.y + y_1,
ctx->path_pen.x + x_2,
@@ -1789,17 +1789,17 @@ _cogl_path_bezier2_sub (CoglBezQuad *quad)
floatVec2 c2;
floatVec2 c3;
gint qindex;
-
+
/* Put first curve on stack */
quads[0] = *quad;
qindex = 0;
-
+
/* While stack is not empty */
while (qindex >= 0)
{
-
+
q = &quads[qindex];
-
+
/* Calculate distance of control point from its
* counterpart on the line between end points */
mid.x = ((q->p1.x + q->p3.x) / 2);
@@ -1808,7 +1808,7 @@ _cogl_path_bezier2_sub (CoglBezQuad *quad)
dif.y = (q->p2.y - mid.y);
if (dif.x < 0) dif.x = -dif.x;
if (dif.y < 0) dif.y = -dif.y;
-
+
/* Cancel if the curve is flat enough */
if (dif.x + dif.y <= 1.0 ||
qindex == _COGL_MAX_BEZ_RECURSE_DEPTH - 1)
@@ -1818,10 +1818,10 @@ _cogl_path_bezier2_sub (CoglBezQuad *quad)
_cogl_path_add_node (FALSE, q->p3.x, q->p3.y);
--qindex; continue;
}
-
+
/* Left recursion goes on top of stack! */
qright = q; qleft = &quads[++qindex];
-
+
/* Subdivide into 2 sub-curves */
c1.x = ((q->p1.x + q->p2.x) / 2);
c1.y = ((q->p1.y + q->p2.y) / 2);
@@ -1829,12 +1829,12 @@ _cogl_path_bezier2_sub (CoglBezQuad *quad)
c3.y = ((q->p2.y + q->p3.y) / 2);
c2.x = ((c1.x + c3.x) / 2);
c2.y = ((c1.y + c3.y) / 2);
-
+
/* Add left recursion onto stack */
qleft->p1 = q->p1;
qleft->p2 = c1;
qleft->p3 = c2;
-
+
/* Add right recursion onto stack */
qright->p1 = c2;
qright->p2 = c3;
@@ -1861,7 +1861,7 @@ cogl_path_curve2_to (float x_1,
/* Run subdivision */
_cogl_path_bezier2_sub (&quad);
-
+
/* Add last point */
_cogl_path_add_node (FALSE, quad.p3.x, quad.p3.y);
ctx->path_pen = quad.p3;
diff --git a/common/cogl-primitives.h b/common/cogl-primitives.h
index e792432b..268fba3c 100644
--- a/common/cogl-primitives.h
+++ b/common/cogl-primitives.h
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/common/cogl-util.c b/common/cogl-util.c
index 61b08e22..d71b9ffd 100644
--- a/common/cogl-util.c
+++ b/common/cogl-util.c
@@ -1,18 +1,14 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By: Matthew Allum <mallum@openedhand.com>
- * Emmanuele Bassi <ebassi@linux.intel.com>
- *
- * Copyright (C) 2007, 2008 OpenedHand
- * Copyright (C) 2009 Intel Corp.
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* 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.1 of the License, or (at your option) any later version.
+ * 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
@@ -20,7 +16,9 @@
* 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, see <http://www.gnu.org/licenses/>.
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
*/
#ifdef HAVE_CONFIG_H
@@ -181,7 +179,6 @@ cogl_buffer_target_get_type (void)
{
static const GFlagsValue values[] = {
{ COGL_WINDOW_BUFFER, "COGL_WINDOW_BUFFER", "window-buffer" },
- { COGL_MASK_BUFFER, "COGL_MASK_BUFFER", "mask-buffer" },
{ COGL_OFFSCREEN_BUFFER, "COGL_OFFSCREEN_BUFFER", "offscreen-buffer" },
{ 0, NULL, NULL }
};
diff --git a/common/cogl-util.h b/common/cogl-util.h
index 759da8cc..589ddd35 100644
--- a/common/cogl-util.h
+++ b/common/cogl-util.h
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -26,7 +24,7 @@
#ifndef __COGL_UTIL_H
#define __COGL_UTIL_H
-int
+int
cogl_util_next_p2 (int a);
#endif /* __COGL_UTIL_H */
diff --git a/common/cogl-vertex-buffer-private.h b/common/cogl-vertex-buffer-private.h
index 79117dd4..68a709b5 100644
--- a/common/cogl-vertex-buffer-private.h
+++ b/common/cogl-vertex-buffer-private.h
@@ -1,11 +1,9 @@
/*
- * Cogl.
+ * Cogl
*
- * An OpenGL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Copyright (C) 2008 Intel Corporation.
- *
- * Authored By: Robert Bragg <robert@linux.intel.com>
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -18,7 +16,12 @@
* 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, see <http://www.gnu.org/licenses/>.
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors:
+ * Robert Bragg <robert@linux.intel.com>
*/
#ifndef __COGL_VERTEX_BUFFER_H
diff --git a/common/cogl-vertex-buffer.c b/common/cogl-vertex-buffer.c
index 7f6ed0f5..b7e004a4 100644
--- a/common/cogl-vertex-buffer.c
+++ b/common/cogl-vertex-buffer.c
@@ -1,13 +1,9 @@
/*
- * Cogl.
+ * Cogl
*
- * An OpenGL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Vertex Buffer API: Handle extensible arrays of vertex attributes
- *
- * Copyright (C) 2008, 2009 Intel Corporation.
- *
- * Authored by: Robert Bragg <robert@linux.intel.com>
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -20,7 +16,12 @@
* 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, see <http://www.gnu.org/licenses/>.
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors:
+ * Robert Bragg <robert@linux.intel.com>
*/
/* XXX: For an overview of the functionality implemented here, please
@@ -126,7 +127,7 @@
#include <stdio.h>
#include <string.h>
-#include <glib/gprintf.h>
+#include <glib.h>
#include "cogl.h"
#include "cogl-internal.h"
@@ -1775,4 +1776,3 @@ _cogl_vertex_buffer_free (CoglVertexBuffer *buffer)
g_slice_free (CoglVertexBuffer, buffer);
}
-
diff --git a/common/cogl.c b/common/cogl.c
index c077983e..2495d817 100644
--- a/common/cogl.c
+++ b/common/cogl.c
@@ -1,10 +1,9 @@
/*
* Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Copyright (C) 2007, 2008 OpenedHand
- * Copyright (C) 2009 Intel Corp.
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -39,6 +38,7 @@
typedef CoglFuncPtr (*GLXGetProcAddressProc) (const guint8 *procName);
#endif
+#include "cogl-debug.h"
#include "cogl-internal.h"
#include "cogl-util.h"
#include "cogl-context.h"
@@ -47,67 +47,82 @@ typedef CoglFuncPtr (*GLXGetProcAddressProc) (const guint8 *procName);
#include "cogl-gles2-wrapper.h"
#endif
+#ifdef COGL_GL_DEBUG
/* GL error to string conversion */
-#if COGL_DEBUG
-struct token_string
-{
- GLuint Token;
- const char *String;
-};
+static const struct {
+ GLuint error_code;
+ const gchar *error_string;
+} gl_errors[] = {
+ { GL_NO_ERROR, "No error" },
+ { GL_INVALID_ENUM, "Invalid enumeration value" },
+ { GL_INVALID_VALUE, "Invalid value" },
+ { GL_INVALID_OPERATION, "Invalid operation" },
+ { GL_STACK_OVERFLOW, "Stack overflow" },
+ { GL_STACK_UNDERFLOW, "Stack underflow" },
+ { GL_OUT_OF_MEMORY, "Out of memory" },
-static const struct token_string Errors[] = {
- { GL_NO_ERROR, "no error" },
- { GL_INVALID_ENUM, "invalid enumerant" },
- { GL_INVALID_VALUE, "invalid value" },
- { GL_INVALID_OPERATION, "invalid operation" },
- { GL_STACK_OVERFLOW, "stack overflow" },
- { GL_STACK_UNDERFLOW, "stack underflow" },
- { GL_OUT_OF_MEMORY, "out of memory" },
#ifdef GL_INVALID_FRAMEBUFFER_OPERATION_EXT
- { GL_INVALID_FRAMEBUFFER_OPERATION_EXT, "invalid framebuffer operation" },
+ { GL_INVALID_FRAMEBUFFER_OPERATION_EXT, "Invalid framebuffer operation" }
#endif
- { ~0, NULL }
};
-const char*
-_cogl_error_string(GLenum errorCode)
+static const guint n_gl_errors = G_N_ELEMENTS (gl_errors);
+
+const gchar *
+cogl_gl_error_to_string (GLenum error_code)
{
- int i;
- for (i = 0; Errors[i].String; i++) {
- if (Errors[i].Token == errorCode)
- return Errors[i].String;
- }
- return "unknown";
+ gint i;
+
+ for (i = 0; i < n_gl_errors; i++)
+ {
+ if (gl_errors[i].error_code == error_code)
+ return gl_errors[i].error_string;
+ }
+
+ return "Unknown GL error";
}
-#endif
+#endif /* COGL_GL_DEBUG */
void
-cogl_clear (const CoglColor *color)
+cogl_clear (const CoglColor *color, gulong buffers)
{
-#if COGL_DEBUG
- fprintf(stderr, "\n ============== Paint Start ================ \n");
-#endif
+ GLbitfield gl_buffers = 0;
- GE( glClearColor (cogl_color_get_red_float (color),
- cogl_color_get_green_float (color),
- cogl_color_get_blue_float (color),
- 0.0) );
+ COGL_NOTE (DRAW, "Clear begin");
- glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
+ cogl_clip_ensure ();
- /*
- * Disable the depth test for now as has some strange side effects,
- * mainly on x/y axis rotation with multiple layers at same depth
- * (eg rotating text on a bg has very strange effect). Seems no clean
- * 100% effective way to fix without other odd issues.. So for now
- * move to application to handle and add cogl_enable_depth_test()
- * as for custom actors (i.e groups) to enable if need be.
- *
- * glEnable (GL_DEPTH_TEST);
- * glEnable (GL_ALPHA_TEST)
- * glDepthFunc (GL_LEQUAL);
- * glAlphaFunc (GL_GREATER, 0.1);
- */
+ if (buffers & COGL_BUFFER_BIT_COLOR)
+ {
+ GE( glClearColor (cogl_color_get_red_float (color),
+ cogl_color_get_green_float (color),
+ cogl_color_get_blue_float (color),
+ 0.0) );
+ gl_buffers |= GL_COLOR_BUFFER_BIT;
+ }
+
+ if (buffers & COGL_BUFFER_BIT_DEPTH)
+ gl_buffers |= GL_DEPTH_BUFFER_BIT;
+
+ if (buffers & COGL_BUFFER_BIT_STENCIL)
+ gl_buffers |= GL_STENCIL_BUFFER_BIT;
+
+ if (!gl_buffers)
+ {
+ static gboolean shown = FALSE;
+
+ if (!shown)
+ {
+ g_warning ("You should specify at least one auxiliary buffer "
+ "when calling cogl_clear");
+ }
+
+ return;
+ }
+
+ glClear (gl_buffers);
+
+ COGL_NOTE (DRAW, "Clear end");
}
static inline gboolean
@@ -556,24 +571,31 @@ cogl_get_viewport (float v[4])
}
void
-cogl_get_bitmasks (gint *red, gint *green, gint *blue, gint *alpha)
+cogl_get_bitmasks (gint *red,
+ gint *green,
+ gint *blue,
+ gint *alpha)
{
GLint value;
+
if (red)
{
GE( glGetIntegerv(GL_RED_BITS, &value) );
*red = value;
}
+
if (green)
{
GE( glGetIntegerv(GL_GREEN_BITS, &value) );
*green = value;
}
+
if (blue)
{
GE( glGetIntegerv(GL_BLUE_BITS, &value) );
*blue = value;
}
+
if (alpha)
{
GE( glGetIntegerv(GL_ALPHA_BITS, &value ) );
diff --git a/doc/reference/cogl/cogl-sections.txt b/doc/reference/cogl/cogl-sections.txt
index f99461c4..3032a686 100644
--- a/doc/reference/cogl/cogl-sections.txt
+++ b/doc/reference/cogl/cogl-sections.txt
@@ -104,6 +104,13 @@ cogl_color
</SECTION>
<SECTION>
+<FILE>cogl-bitmap</FILE>
+<TITLE>Bitmaps</TITLE>
+cogl_bitmap_new_from_file
+cogl_bitmap_get_size_from_file
+</SECTION>
+
+<SECTION>
<FILE>cogl-texture</FILE>
<TITLE>Textures</TITLE>
CoglTextureVertex
@@ -130,12 +137,6 @@ cogl_texture_get_gl_texture
cogl_texture_get_data
cogl_texture_set_filters
cogl_texture_set_region
-
-<SUBSECTION>
-CoglBitmap
-cogl_bitmap_new_from_file
-cogl_bitmap_free
-cogl_bitmap_get_size_from_file
</SECTION>
<SECTION>
@@ -148,7 +149,8 @@ cogl_is_shader
cogl_shader_source
cogl_shader_compile
cogl_shader_get_info_log
-cogl_shader_get_parameteriv
+cogl_shader_get_type
+cogl_shader_is_compiled
<SUBSECTION>
cogl_create_program
cogl_program_ref
@@ -172,9 +174,7 @@ cogl_offscreen_new_to_texture
cogl_offscreen_ref
cogl_offscreen_unref
cogl_is_offscreen
-cogl_offscreen_blit
-cogl_offscreen_blit_region
-cogl_draw_buffer
+cogl_set_draw_buffer
<SUBSECTION Private>
cogl_offscreen_new_multisample
</SECTION>
diff --git a/gl/Makefile.am b/gl/Makefile.am
index 12e2ee92..367f674f 100644
--- a/gl/Makefile.am
+++ b/gl/Makefile.am
@@ -1,65 +1,65 @@
-libclutterincludedir = $(includedir)/clutter-@CLUTTER_API_VERSION@/cogl
-libclutterinclude_HEADERS = \
- $(top_builddir)/clutter/cogl/cogl.h \
- $(top_builddir)/clutter/cogl/cogl-defines-gl.h \
- $(top_builddir)/clutter/cogl/cogl-color.h \
- $(top_builddir)/clutter/cogl/cogl-deprecated.h \
- $(top_builddir)/clutter/cogl/cogl-fixed.h \
- $(top_builddir)/clutter/cogl/cogl-offscreen.h \
- $(top_builddir)/clutter/cogl/cogl-path.h \
- $(top_builddir)/clutter/cogl/cogl-shader.h \
- $(top_builddir)/clutter/cogl/cogl-texture.h \
- $(top_builddir)/clutter/cogl/cogl-types.h \
- $(top_builddir)/clutter/cogl/cogl-vertex-buffer.h \
- $(top_builddir)/clutter/cogl/cogl-material.h \
- $(top_builddir)/clutter/cogl/cogl-matrix.h \
- $(top_builddir)/clutter/cogl/cogl-debug.h
+NULL =
+
+cogl_headers = \
+ $(top_builddir)/clutter/cogl/cogl-defines-gl.h \
+ $(top_srcdir)/clutter/cogl/cogl-color.h \
+ $(top_srcdir)/clutter/cogl/cogl-deprecated.h \
+ $(top_srcdir)/clutter/cogl/cogl-fixed.h \
+ $(top_srcdir)/clutter/cogl/cogl-offscreen.h \
+ $(top_srcdir)/clutter/cogl/cogl-path.h \
+ $(top_srcdir)/clutter/cogl/cogl-shader.h \
+ $(top_srcdir)/clutter/cogl/cogl-bitmap.h \
+ $(top_srcdir)/clutter/cogl/cogl-texture.h \
+ $(top_srcdir)/clutter/cogl/cogl-types.h \
+ $(top_srcdir)/clutter/cogl/cogl-vertex-buffer.h \
+ $(top_srcdir)/clutter/cogl/cogl-material.h \
+ $(top_srcdir)/clutter/cogl/cogl-matrix.h \
+ $(top_srcdir)/clutter/cogl/cogl-debug.h \
+ $(NULL)
+
+cogl_priv_headers = \
+ cogl-texture-private.h \
+ cogl-fbo.h \
+ cogl-shader-private.h \
+ cogl-program.h \
+ cogl-context.h \
+ $(NULL)
+
+cogl_sources = \
+ cogl.c \
+ cogl-primitives.c \
+ cogl-texture.c \
+ cogl-fbo.c \
+ cogl-shader.c \
+ cogl-program.c \
+ cogl-context.c \
+ $(NULL)
+
+coglincludedir = $(includedir)/clutter-@CLUTTER_API_VERSION@/cogl
+coglinclude_HEADERS = \
+ $(cogl_headers) \
+ $(top_builddir)/clutter/cogl/cogl.h
INCLUDES = \
- -I$(top_srcdir) \
- -I$(top_srcdir)/clutter \
-I$(top_srcdir)/clutter/cogl \
-I$(top_srcdir)/clutter/cogl/common \
-I$(top_srcdir)/clutter/cogl/$(CLUTTER_COGL) \
+ -I$(top_srcdir)/clutter \
-I$(top_builddir)/clutter \
-I$(top_builddir)/clutter/cogl \
- -DG_LOG_DOMAIN=\"Cogl-GL\" \
- -DCLUTTER_COMPILATION \
- $(CLUTTER_CFLAGS) \
- $(CLUTTER_DEBUG_CFLAGS) \
- $(MAINTAINER_CFLAGS) \
- $(GCC_FLAGS)
-
-LDADD = $(CLUTTER_LIBS)
+ -DG_LOG_DOMAIN=\"Cogl-GL\" \
+ -DCLUTTER_COMPILATION
noinst_LTLIBRARIES = libclutter-cogl.la
+libclutter_cogl_la_CPPFLAGS = $(CLUTTER_CFLAGS) $(COGL_DEBUG_CFLAGS) $(CLUTTER_DEBUG_CFLAGS) $(MAINTAINER_CFLAGS)
+libclutter_cogl_la_LIBADD = -lm $(CLUTTER_LIBS) $(top_builddir)/clutter/cogl/common/libclutter-cogl-common.la
+libclutter_cogl_la_DEPENDENCIES = $(top_builddir)/clutter/cogl/common/libclutter-cogl-common.la
libclutter_cogl_la_SOURCES = \
- $(top_builddir)/clutter/cogl/cogl.h \
- $(top_builddir)/clutter/cogl/cogl-defines-gl.h \
- $(top_builddir)/clutter/cogl/cogl-color.h \
- $(top_builddir)/clutter/cogl/cogl-deprecated.h \
- $(top_builddir)/clutter/cogl/cogl-fixed.h \
- $(top_builddir)/clutter/cogl/cogl-offscreen.h \
- $(top_builddir)/clutter/cogl/cogl-path.h \
- $(top_builddir)/clutter/cogl/cogl-shader.h \
- $(top_builddir)/clutter/cogl/cogl-texture.h \
- $(top_builddir)/clutter/cogl/cogl-types.h \
- $(top_builddir)/clutter/cogl/cogl-debug.h \
- cogl-internal.h \
- cogl-texture-private.h \
- cogl-fbo.h \
- cogl-shader-private.h \
- cogl-program.h \
- cogl-context.h \
- cogl.c \
- cogl-primitives.c \
- cogl-texture.c \
- cogl-fbo.c \
- cogl-shader.c \
- cogl-program.c \
- cogl-context.c
+ $(top_builddir)/clutter/cogl/cogl.h \
+ $(cogl_headers) \
+ $(cogl_priv_headers) \
+ $(cogl_sources) \
+ $(NULL)
EXTRA_DIST = cogl-defines.h.in
-
-libclutter_cogl_la_LIBADD = $(top_builddir)/clutter/cogl/common/libclutter-cogl-common.la
diff --git a/gl/cogl-context.c b/gl/cogl-context.c
index 5663e81a..986da8aa 100644
--- a/gl/cogl-context.c
+++ b/gl/cogl-context.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -44,6 +42,7 @@ cogl_create_context ()
{
GLubyte default_texture_data[] = { 0xff, 0xff, 0xff, 0x0 };
gulong enable_flags = 0;
+ CoglDrawBufferState *draw_buffer;
if (_context != NULL)
return FALSE;
@@ -80,7 +79,11 @@ cogl_create_context ()
sizeof (CoglLayerInfo));
_context->n_texcoord_arrays_enabled = 0;
- _context->draw_buffer = COGL_WINDOW_BUFFER;
+ draw_buffer = g_slice_new0 (CoglDrawBufferState);
+ draw_buffer->target = COGL_WINDOW_BUFFER;
+ draw_buffer->offscreen = COGL_INVALID_HANDLE;
+ _context->draw_buffer_stack =
+ g_slist_prepend (NULL, draw_buffer);
_context->path_nodes = g_array_new (FALSE, FALSE, sizeof (CoglPathNode));
_context->last_path = 0;
diff --git a/gl/cogl-context.h b/gl/cogl-context.h
index 7d025fc9..2660ed81 100644
--- a/gl/cogl-context.h
+++ b/gl/cogl-context.h
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -40,6 +38,12 @@ typedef struct
typedef struct
{
+ CoglBufferTarget target;
+ CoglHandle offscreen;
+} CoglDrawBufferState;
+
+typedef struct
+{
/* Features cache */
CoglFeatureFlags feature_flags;
gboolean features_cached;
@@ -84,7 +88,7 @@ typedef struct
guint n_texcoord_arrays_enabled;
/* Framebuffer objects */
- CoglBufferTarget draw_buffer;
+ GSList *draw_buffer_stack;
/* Clip stack */
CoglClipStackState clip;
diff --git a/gl/cogl-defines.h.in b/gl/cogl-defines.h.in
index f9a3bced..8e2df9ec 100644
--- a/gl/cogl-defines.h.in
+++ b/gl/cogl-defines.h.in
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -26,14 +24,11 @@
#ifndef __COGL_DEFINES_H__
#define __COGL_DEFINES_H__
+#include <glib.h>
#include <@CLUTTER_GL_HEADER@>
G_BEGIN_DECLS
-typedef GLenum COGLenum;
-typedef GLint COGLint;
-typedef GLuint COGLuint;
-
/* FIXME + DOCUMENT */
#define COPENSTEP OPENSTEP
@@ -227,7 +222,6 @@ typedef GLuint COGLuint;
#define CGL_FOG_INDEX GL_FOG_INDEX
#define CGL_FOG_START GL_FOG_START
#define CGL_FOG_END GL_FOG_END
-#define CGL_LINEAR GL_LINEAR
#define CGL_EXP GL_EXP
#define CGL_LOGIC_OP GL_LOGIC_OP
#define CGL_INDEX_LOGIC_OP GL_INDEX_LOGIC_OP
@@ -420,10 +414,6 @@ typedef GLuint COGLuint;
#define CGL_TEXTURE_ALPHA_SIZE GL_TEXTURE_ALPHA_SIZE
#define CGL_TEXTURE_LUMINANCE_SIZE GL_TEXTURE_LUMINANCE_SIZE
#define CGL_TEXTURE_INTENSITY_SIZE GL_TEXTURE_INTENSITY_SIZE
-#define CGL_NEAREST_MIPMAP_NEAREST GL_NEAREST_MIPMAP_NEAREST
-#define CGL_NEAREST_MIPMAP_LINEAR GL_NEAREST_MIPMAP_LINEAR
-#define CGL_LINEAR_MIPMAP_NEAREST GL_LINEAR_MIPMAP_NEAREST
-#define CGL_LINEAR_MIPMAP_LINEAR GL_LINEAR_MIPMAP_LINEAR
#define CGL_OBJECT_LINEAR GL_OBJECT_LINEAR
#define CGL_OBJECT_PLANE GL_OBJECT_PLANE
#define CGL_EYE_LINEAR GL_EYE_LINEAR
@@ -431,7 +421,6 @@ typedef GLuint COGLuint;
#define CGL_SPHERE_MAP GL_SPHERE_MAP
#define CGL_DECAL GL_DECAL
#define CGL_MODULATE GL_MODULATE
-#define CGL_NEAREST GL_NEAREST
#define CGL_REPEAT GL_REPEAT
#define CGL_CLAMP GL_CLAMP
#define CGL_S GL_S
@@ -693,9 +682,6 @@ typedef GLuint COGLuint;
#define CGL_UNSIGNED_SHORT_8_8_MESA 0
#endif
-#define CGL_FRAGMENT_SHADER GL_FRAGMENT_SHADER_ARB
-#define CGL_VERTEX_SHADER GL_VERTEX_SHADER_ARB
-
#define CGL_OBJECT_COMPILE_STATUS GL_OBJECT_COMPILE_STATUS_ARB
#define CLUTTER_COGL_HAS_GL 1
@@ -865,26 +851,26 @@ typedef void
typedef void
(APIENTRYP COGL_PFNGLBINDBUFFERARBPROC)
- (GLenum target,
+ (GLenum target,
GLuint buffer);
typedef void
(APIENTRYP COGL_PFNGLBUFFERDATAARBPROC)
- (GLenum target,
- GLsizeiptr size,
- const GLvoid *data,
+ (GLenum target,
+ GLsizeiptr size,
+ const GLvoid *data,
GLenum usage);
typedef void
(APIENTRYP COGL_PFNGLBUFFERSUBDATAARBPROC)
- (GLenum target,
- GLintptr offset,
+ (GLenum target,
+ GLintptr offset,
GLsizeiptr size,
const GLvoid *data);
typedef void *
(APIENTRYP COGL_PFNGLMAPBUFFERARBPROC)
- (GLenum target,
+ (GLenum target,
GLenum access);
typedef GLboolean
diff --git a/gl/cogl-fbo.c b/gl/cogl-fbo.c
index 50187197..db99e6ac 100644
--- a/gl/cogl-fbo.c
+++ b/gl/cogl-fbo.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -71,25 +69,25 @@ cogl_offscreen_new_to_texture (CoglHandle texhandle)
GLuint fbo_gl_handle;
GLuint gl_stencil_handle;
GLenum status;
-
+
_COGL_GET_CONTEXT (ctx, COGL_INVALID_HANDLE);
-
+
if (!cogl_features_available (COGL_FEATURE_OFFSCREEN))
return COGL_INVALID_HANDLE;
-
+
/* Make texhandle is a valid texture object */
if (!cogl_is_texture (texhandle))
return COGL_INVALID_HANDLE;
-
+
tex = _cogl_texture_pointer_from_handle (texhandle);
-
+
/* The texture must not be sliced */
if (tex->slice_gl_handles == NULL)
return COGL_INVALID_HANDLE;
-
+
if (tex->slice_gl_handles->len != 1)
return COGL_INVALID_HANDLE;
-
+
/* Pick the single texture slice width, height and GL id */
x_span = &g_array_index (tex->slice_x_spans, CoglTexSliceSpan, 0);
y_span = &g_array_index (tex->slice_y_spans, CoglTexSliceSpan, 0);
@@ -111,10 +109,10 @@ cogl_offscreen_new_to_texture (CoglHandle texhandle)
GE( glFramebufferRenderbufferEXT (GL_FRAMEBUFFER_EXT,
GL_STENCIL_ATTACHMENT_EXT,
GL_RENDERBUFFER_EXT, gl_stencil_handle) );
-
+
/* Make sure it's complete */
status = glCheckFramebufferStatusEXT (GL_FRAMEBUFFER_EXT);
-
+
if (status != GL_FRAMEBUFFER_COMPLETE_EXT)
{
/* Stencil renderbuffers aren't always supported. Try again
@@ -125,9 +123,9 @@ cogl_offscreen_new_to_texture (CoglHandle texhandle)
0) );
GE( glDeleteRenderbuffersEXT (1, &gl_stencil_handle) );
gl_stencil_handle = 0;
-
+
status = glCheckFramebufferStatusEXT (GL_FRAMEBUFFER_EXT);
-
+
if (status != GL_FRAMEBUFFER_COMPLETE_EXT)
{
/* Still failing, so give up */
@@ -136,9 +134,9 @@ cogl_offscreen_new_to_texture (CoglHandle texhandle)
return COGL_INVALID_HANDLE;
}
}
-
+
GE( glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, 0) );
-
+
/* Allocate and init a CoglFbo object (store non-wasted size
for subsequent blits and viewport setup) */
fbo = (CoglFbo*) g_malloc (sizeof (CoglFbo));
@@ -150,15 +148,6 @@ cogl_offscreen_new_to_texture (CoglHandle texhandle)
return _cogl_offscreen_handle_new (fbo);
}
-CoglHandle
-cogl_offscreen_new_multisample ()
-{
- if (!cogl_features_available (COGL_FEATURE_OFFSCREEN_MULTISAMPLE))
- return COGL_INVALID_HANDLE;
-
- return COGL_INVALID_HANDLE;
-}
-
static void
_cogl_offscreen_free (CoglFbo *fbo)
{
@@ -173,90 +162,26 @@ _cogl_offscreen_free (CoglFbo *fbo)
}
void
-cogl_offscreen_blit_region (CoglHandle src_buffer,
- CoglHandle dst_buffer,
- int src_x,
- int src_y,
- int src_w,
- int src_h,
- int dst_x,
- int dst_y,
- int dst_w,
- int dst_h)
+cogl_set_draw_buffer (CoglBufferTarget target, CoglHandle offscreen)
{
- CoglFbo *src_fbo;
- CoglFbo *dst_fbo;
-
- _COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
- if (!cogl_features_available (COGL_FEATURE_OFFSCREEN_BLIT))
- return;
-
- /* Make sure these are valid fbo handles */
- if (!cogl_is_offscreen (src_buffer))
- return;
-
- if (!cogl_is_offscreen (dst_buffer))
- return;
-
- src_fbo = _cogl_offscreen_pointer_from_handle (src_buffer);
- dst_fbo = _cogl_offscreen_pointer_from_handle (dst_buffer);
-
- /* Copy (and scale) a region from one to another framebuffer */
- GE( glBindFramebufferEXT (GL_READ_FRAMEBUFFER_EXT, src_fbo->gl_handle) );
- GE( glBindFramebufferEXT (GL_DRAW_FRAMEBUFFER_EXT, dst_fbo->gl_handle) );
- GE( glBlitFramebufferEXT (src_x, src_y, src_x + src_w, src_y + src_h,
- dst_x, dst_y, dst_x + dst_w, dst_y + dst_h,
- GL_COLOR_BUFFER_BIT, GL_LINEAR) );
-}
+ CoglFbo *fbo = NULL;
+ CoglDrawBufferState *draw_buffer;
-void
-cogl_offscreen_blit (CoglHandle src_buffer,
- CoglHandle dst_buffer)
-{
- CoglFbo *src_fbo;
- CoglFbo *dst_fbo;
-
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
- if (!cogl_features_available (COGL_FEATURE_OFFSCREEN_BLIT))
- return;
-
- /* Make sure these are valid fbo handles */
- if (!cogl_is_offscreen (src_buffer))
- return;
-
- if (!cogl_is_offscreen (dst_buffer))
- return;
-
- src_fbo = _cogl_offscreen_pointer_from_handle (src_buffer);
- dst_fbo = _cogl_offscreen_pointer_from_handle (dst_buffer);
-
- /* Copy (and scale) whole image from one to another framebuffer */
- GE( glBindFramebufferEXT (GL_READ_FRAMEBUFFER_EXT, src_fbo->gl_handle) );
- GE( glBindFramebufferEXT (GL_DRAW_FRAMEBUFFER_EXT, dst_fbo->gl_handle) );
- GE( glBlitFramebufferEXT (0, 0, src_fbo->width, src_fbo->height,
- 0, 0, dst_fbo->width, dst_fbo->height,
- GL_COLOR_BUFFER_BIT, GL_LINEAR) );
-}
-void
-cogl_draw_buffer (CoglBufferTarget target, CoglHandle offscreen)
-{
- CoglFbo *fbo = NULL;
-
- _COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
+ g_assert (ctx->draw_buffer_stack != NULL);
+ draw_buffer = ctx->draw_buffer_stack->data;
+
if (target == COGL_OFFSCREEN_BUFFER)
{
/* Make sure it is a valid fbo handle */
if (!cogl_is_offscreen (offscreen))
return;
-
+
fbo = _cogl_offscreen_pointer_from_handle (offscreen);
-
+
/* Check current draw buffer target */
- if (ctx->draw_buffer != COGL_OFFSCREEN_BUFFER)
+ if (draw_buffer->target != COGL_OFFSCREEN_BUFFER)
{
/* Push the viewport and matrix setup if redirecting
from a non-screen buffer */
@@ -280,16 +205,16 @@ cogl_draw_buffer (CoglBufferTarget target, CoglHandle offscreen)
_cogl_set_current_matrix (COGL_MATRIX_MODELVIEW);
_cogl_current_matrix_identity ();
}
-
+
/* Setup new viewport and matrices */
GE( glViewport (0, 0, fbo->width, fbo->height) );
_cogl_current_matrix_translate (-1.0f, -1.0f, 0.0f);
_cogl_current_matrix_scale (2.0f / fbo->width, 2.0f / fbo->height, 1.0f);
-
+
/* Bind offscreen framebuffer object */
GE( glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, fbo->gl_handle) );
GE( glColorMask (GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE) );
-
+
/* Some implementation require a clear before drawing
to an fbo. Luckily it is affected by scissor test. */
/* FIXME: test where exactly this is needed end whether
@@ -299,13 +224,11 @@ cogl_draw_buffer (CoglBufferTarget target, CoglHandle offscreen)
GE( glEnable (GL_SCISSOR_TEST) );
GE( glClear (GL_COLOR_BUFFER_BIT) );
GE( glPopAttrib () );
-
}
- else if ((target & COGL_WINDOW_BUFFER) ||
- (target & COGL_MASK_BUFFER))
+ else if (target & COGL_WINDOW_BUFFER)
{
/* Check current draw buffer target */
- if (ctx->draw_buffer == COGL_OFFSCREEN_BUFFER)
+ if (draw_buffer->target == COGL_OFFSCREEN_BUFFER)
{
/* Pop viewport and matrices if redirecting back
from an offscreen buffer */
@@ -317,22 +240,77 @@ cogl_draw_buffer (CoglBufferTarget target, CoglHandle offscreen)
_cogl_set_current_matrix (COGL_MATRIX_MODELVIEW);
_cogl_current_matrix_pop ();
}
-
+
/* Bind window framebuffer object */
GE( glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, 0) );
-
- if (target == COGL_MASK_BUFFER)
- {
- /* Draw only to ALPHA channel */
- GE( glColorMask (GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE) );
- }
- else
- {
- /* Draw to all channels */
- GE( glColorMask (GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE) );
- }
}
-
+
/* Store new target */
- ctx->draw_buffer = target;
+ draw_buffer->target = target;
+ if (draw_buffer->offscreen != offscreen)
+ {
+ if (draw_buffer->offscreen != COGL_INVALID_HANDLE)
+ cogl_handle_unref (draw_buffer->offscreen);
+ if (offscreen != COGL_INVALID_HANDLE)
+ cogl_handle_ref (offscreen);
+ draw_buffer->offscreen = offscreen;
+ }
+}
+
+void
+cogl_push_draw_buffer(void)
+{
+ CoglDrawBufferState *old;
+ CoglDrawBufferState *draw_buffer;
+
+ _COGL_GET_CONTEXT (ctx, NO_RETVAL);
+
+ g_assert (ctx->draw_buffer_stack != NULL);
+ old = ctx->draw_buffer_stack->data;
+
+ draw_buffer = g_slice_new0 (CoglDrawBufferState);
+ *draw_buffer = *old;
+
+ ctx->draw_buffer_stack =
+ g_slist_prepend (ctx->draw_buffer_stack, draw_buffer);
}
+
+void
+cogl_pop_draw_buffer(void)
+{
+ CoglDrawBufferState *to_pop;
+ CoglDrawBufferState *to_restore;
+
+ _COGL_GET_CONTEXT (ctx, NO_RETVAL);
+
+ g_assert (ctx->draw_buffer_stack != NULL);
+ if (ctx->draw_buffer_stack->next == NULL)
+ {
+ g_warning ("1 more cogl_pop_draw_buffer() than cogl_push_draw_buffer()");
+ return;
+ }
+
+ to_pop = ctx->draw_buffer_stack->data;
+ to_restore = ctx->draw_buffer_stack->next->data;
+
+ /* the logic in cogl_set_draw_buffer() only works if
+ * to_pop is still on top of the stack, because
+ * cogl_set_draw_buffer() needs to know the previous
+ * state.
+ */
+ cogl_set_draw_buffer (to_restore->target, to_restore->offscreen);
+
+ /* cogl_set_draw_buffer() should have set top of stack
+ * to to_restore
+ */
+ g_assert (to_restore->target == to_pop->target);
+ g_assert (to_restore->offscreen == to_pop->offscreen);
+
+ g_assert (ctx->draw_buffer_stack->data == to_pop);
+ ctx->draw_buffer_stack =
+ g_slist_remove_link (ctx->draw_buffer_stack,
+ ctx->draw_buffer_stack);
+
+ g_slice_free (CoglDrawBufferState, to_pop);
+}
+
diff --git a/gl/cogl-fbo.h b/gl/cogl-fbo.h
index 308c1d95..8499f8fb 100644
--- a/gl/cogl-fbo.h
+++ b/gl/cogl-fbo.h
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/gl/cogl-internal.h b/gl/cogl-internal.h
deleted file mode 100644
index b4ef91a0..00000000
--- a/gl/cogl-internal.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Clutter COGL
- *
- * A basic GL/GLES Abstraction/Utility Layer
- *
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * 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.
- */
-
-#ifndef __COGL_INTERNAL_H
-#define __COGL_INTERNAL_H
-
-#define COGL_DEBUG 0
-
-#if COGL_DEBUG
-
-#include <stdio.h>
-
-const char *_cogl_error_string(GLenum errorCode);
-
-#define GE(x...) G_STMT_START { \
- GLenum err; \
- (x); \
- while ((err = glGetError()) != GL_NO_ERROR) { \
- fprintf(stderr, "glError: %s caught at %s:%u\n", \
- (char *)_cogl_error_string(err), \
- __FILE__, __LINE__); \
- } \
-} G_STMT_END
-
-#else /* COGL_DEBUG */
-
-#define GE(x) (x)
-
-#endif /* COGL_DEBUG */
-
-#define COGL_ENABLE_BLEND (1<<1)
-#define COGL_ENABLE_ALPHA_TEST (1<<2)
-#define COGL_ENABLE_VERTEX_ARRAY (1<<3)
-#define COGL_ENABLE_COLOR_ARRAY (1<<4)
-#define COGL_ENABLE_BACKFACE_CULLING (1<<5)
-
-gint
-_cogl_get_format_bpp (CoglPixelFormat format);
-
-void
-cogl_enable (gulong flags);
-
-gulong
-cogl_get_enable ();
-
-#endif /* __COGL_INTERNAL_H */
diff --git a/gl/cogl-primitives.c b/gl/cogl-primitives.c
index 8195a3d6..f3c11c13 100644
--- a/gl/cogl-primitives.c
+++ b/gl/cogl-primitives.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/gl/cogl-program.c b/gl/cogl-program.c
index 6ee3775e..0a10cd4c 100644
--- a/gl/cogl-program.c
+++ b/gl/cogl-program.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2008 OpenedHand
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -96,7 +94,7 @@ cogl_program_attach_shader (CoglHandle program_handle,
CoglShader *shader;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
+
if (!cogl_is_program (program_handle) || !cogl_is_shader (shader_handle))
return;
@@ -111,7 +109,7 @@ cogl_program_link (CoglHandle handle)
{
CoglProgram *program;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
+
if (!cogl_is_program (handle))
return;
@@ -126,7 +124,7 @@ cogl_program_use (CoglHandle handle)
CoglProgram *program;
GLhandleARB gl_handle;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
+
if (handle != COGL_INVALID_HANDLE && !cogl_is_program (handle))
return;
@@ -141,13 +139,13 @@ cogl_program_use (CoglHandle handle)
glUseProgramObjectARB (gl_handle);
}
-COGLint
+int
cogl_program_get_uniform_location (CoglHandle handle,
const gchar *uniform_name)
{
CoglProgram *program;
_COGL_GET_CONTEXT (ctx, 0);
-
+
if (!cogl_is_program (handle))
return 0;
@@ -157,7 +155,7 @@ cogl_program_get_uniform_location (CoglHandle handle,
}
void
-cogl_program_uniform_1f (COGLint uniform_no,
+cogl_program_uniform_1f (int uniform_no,
gfloat value)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
@@ -165,7 +163,7 @@ cogl_program_uniform_1f (COGLint uniform_no,
}
void
-cogl_program_uniform_1i (COGLint uniform_no,
+cogl_program_uniform_1i (int uniform_no,
gint value)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
@@ -173,7 +171,7 @@ cogl_program_uniform_1i (COGLint uniform_no,
}
void
-cogl_program_uniform_float (COGLint uniform_no,
+cogl_program_uniform_float (int uniform_no,
gint size,
gint count,
const GLfloat *value)
@@ -200,10 +198,10 @@ cogl_program_uniform_float (COGLint uniform_no,
}
void
-cogl_program_uniform_int (COGLint uniform_no,
+cogl_program_uniform_int (int uniform_no,
gint size,
gint count,
- const COGLint *value)
+ const int *value)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
@@ -227,7 +225,7 @@ cogl_program_uniform_int (COGLint uniform_no,
}
void
-cogl_program_uniform_matrix (COGLint uniform_no,
+cogl_program_uniform_matrix (int uniform_no,
gint size,
gint count,
gboolean transpose,
diff --git a/gl/cogl-program.h b/gl/cogl-program.h
index fa75f63b..3a6bdf5b 100644
--- a/gl/cogl-program.h
+++ b/gl/cogl-program.h
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2008 OpenedHand
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/gl/cogl-shader-private.h b/gl/cogl-shader-private.h
index 4c8fbbb4..f698c6c6 100644
--- a/gl/cogl-shader-private.h
+++ b/gl/cogl-shader-private.h
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2008 OpenedHand
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/gl/cogl-shader.c b/gl/cogl-shader.c
index 309db01c..944e6736 100644
--- a/gl/cogl-shader.c
+++ b/gl/cogl-shader.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2008 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -57,25 +55,37 @@ _cogl_shader_free (CoglShader *shader)
}
CoglHandle
-cogl_create_shader (COGLenum shaderType)
+cogl_create_shader (CoglShaderType type)
{
CoglShader *shader;
+ GLenum gl_type;
+
+ _COGL_GET_CONTEXT (ctx, COGL_INVALID_HANDLE);
- _COGL_GET_CONTEXT (ctx, 0);
+ if (type == COGL_SHADER_TYPE_VERTEX)
+ gl_type = GL_VERTEX_SHADER;
+ else if (type == COGL_SHADER_TYPE_FRAGMENT)
+ gl_type = GL_FRAGMENT_SHADER;
+ else
+ {
+ g_warning ("Unexpected shader type (0x%08lX) given to "
+ "cogl_create_shader", (unsigned long) type);
+ return COGL_INVALID_HANDLE;
+ }
shader = g_slice_new (CoglShader);
- shader->gl_handle = glCreateShaderObjectARB (shaderType);
+ shader->gl_handle = glCreateShaderObjectARB (gl_type);
return _cogl_shader_handle_new (shader);
}
void
cogl_shader_source (CoglHandle handle,
- const gchar *source)
+ const char *source)
{
CoglShader *shader;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
+
if (!cogl_is_shader (handle))
return;
@@ -100,11 +110,11 @@ cogl_shader_compile (CoglHandle handle)
void
cogl_shader_get_info_log (CoglHandle handle,
- guint size,
- gchar *buffer)
+ size_t size,
+ char *buffer)
{
CoglShader *shader;
- COGLint len;
+ int len;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
if (!cogl_is_shader (handle))
@@ -116,18 +126,51 @@ cogl_shader_get_info_log (CoglHandle handle,
buffer[len]='\0';
}
-void
-cogl_shader_get_parameteriv (CoglHandle handle,
- COGLenum pname,
- COGLint *dest)
+CoglShaderType
+cogl_shader_get_type (CoglHandle handle)
{
+ GLint type;
CoglShader *shader;
- _COGL_GET_CONTEXT (ctx, NO_RETVAL);
+
+ _COGL_GET_CONTEXT (ctx, COGL_SHADER_TYPE_VERTEX);
if (!cogl_is_shader (handle))
- return;
+ {
+ g_warning ("Non shader handle type passed to cogl_shader_get_type");
+ return COGL_SHADER_TYPE_VERTEX;
+ }
+
+ shader = _cogl_shader_pointer_from_handle (handle);
+
+ GE (glGetObjectParameterivARB (shader->gl_handle, GL_SHADER_TYPE, &type));
+ if (type == GL_VERTEX_SHADER)
+ return COGL_SHADER_TYPE_VERTEX;
+ else if (type == GL_FRAGMENT_SHADER)
+ return COGL_SHADER_TYPE_VERTEX;
+ else
+ {
+ g_warning ("Unexpected shader type 0x%08lX", (unsigned long)type);
+ return COGL_SHADER_TYPE_VERTEX;
+ }
+}
+
+gboolean
+cogl_shader_is_compiled (CoglHandle handle)
+{
+ GLint status;
+ CoglShader *shader;
+
+ _COGL_GET_CONTEXT (ctx, FALSE);
+
+ if (!cogl_is_shader (handle))
+ return FALSE;
shader = _cogl_shader_pointer_from_handle (handle);
- glGetObjectParameterivARB (shader->gl_handle, pname, dest);
+ GE (glGetObjectParameterivARB (shader->gl_handle, GL_COMPILE_STATUS, &status));
+ if (status == GL_TRUE)
+ return TRUE;
+ else
+ return FALSE;
}
+
diff --git a/gl/cogl-texture-private.h b/gl/cogl-texture-private.h
index 2a3a4a5a..7cf6fe95 100644
--- a/gl/cogl-texture-private.h
+++ b/gl/cogl-texture-private.h
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -26,7 +24,7 @@
#ifndef __COGL_TEXTURE_H
#define __COGL_TEXTURE_H
-#include "cogl-bitmap.h"
+#include "cogl-bitmap-private.h"
#include "cogl-handle.h"
typedef struct _CoglTexture CoglTexture;
@@ -70,8 +68,8 @@ struct _CoglTexture
GArray *slice_y_spans;
GArray *slice_gl_handles;
gint max_waste;
- COGLenum min_filter;
- COGLenum mag_filter;
+ CoglTextureFilter min_filter;
+ CoglTextureFilter mag_filter;
gboolean is_foreign;
GLint wrap_mode;
gboolean auto_mipmap;
diff --git a/gl/cogl-texture.c b/gl/cogl-texture.c
index 1c7b747b..ce2ee11e 100644
--- a/gl/cogl-texture.c
+++ b/gl/cogl-texture.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -21,6 +19,11 @@
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
+ *
+ * Authors:
+ * Matthew Allum <mallum@openedhand.com>
+ * Neil Roberts <neil@linux.intel.com>
+ * Robert Bragg <robert@linux.intel.com>
*/
#ifdef HAVE_CONFIG_H
@@ -31,6 +34,7 @@
#include "cogl-internal.h"
#include "cogl-util.h"
#include "cogl-bitmap.h"
+#include "cogl-bitmap-private.h"
#include "cogl-texture-private.h"
#include "cogl-material.h"
#include "cogl-context.h"
@@ -40,17 +44,6 @@
#include <stdlib.h>
#include <math.h>
-/*
-#define COGL_DEBUG 1
-
-#define GE(x) \
-{ \
- glGetError(); x; \
- GLuint err = glGetError(); \
- if (err != 0) \
- printf("err: 0x%x\n", err); \
-} */
-
#ifdef HAVE_COGL_GL
#define glDrawRangeElements ctx->pf_glDrawRangeElements
@@ -939,12 +932,11 @@ _cogl_texture_slices_create (CoglTexture *tex)
{
x_span = &g_array_index (tex->slice_x_spans, CoglTexSliceSpan, x);
-#if COGL_DEBUG
- printf ("CREATE SLICE (%d,%d)\n", x,y);
- printf ("size: (%d x %d)\n",
- x_span->size - x_span->waste,
- y_span->size - y_span->waste);
-#endif
+ COGL_NOTE (TEXTURE, "CREATE SLICE (%d,%d)\tsize (%d,%d)",
+ x, y,
+ x_span->size - x_span->waste,
+ y_span->size - y_span->waste);
+
/* Setup texture parameters */
GE( glBindTexture (tex->gl_target,
gl_handles[y * n_x_slices + x]) );
@@ -1243,8 +1235,8 @@ cogl_texture_new_with_size (guint width,
tex->slice_gl_handles = NULL;
tex->max_waste = max_waste;
- tex->min_filter = CGL_NEAREST;
- tex->mag_filter = CGL_NEAREST;
+ tex->min_filter = COGL_TEXTURE_FILTER_NEAREST;
+ tex->mag_filter = COGL_TEXTURE_FILTER_NEAREST;
/* Find closest GL format match */
tex->bitmap.format =
@@ -1304,8 +1296,8 @@ cogl_texture_new_from_data (guint width,
tex->slice_gl_handles = NULL;
tex->max_waste = max_waste;
- tex->min_filter = CGL_NEAREST;
- tex->mag_filter = CGL_NEAREST;
+ tex->min_filter = COGL_TEXTURE_FILTER_NEAREST;
+ tex->mag_filter = COGL_TEXTURE_FILTER_NEAREST;
/* FIXME: If upload fails we should set some kind of
* error flag but still return texture handle (this
@@ -1336,12 +1328,15 @@ cogl_texture_new_from_data (guint width,
}
CoglHandle
-cogl_texture_new_from_bitmap (CoglBitmap *bmp,
+cogl_texture_new_from_bitmap (CoglHandle bmp_handle,
gint max_waste,
CoglTextureFlags flags,
CoglPixelFormat internal_format)
{
CoglTexture *tex;
+ CoglBitmap *bmp = (CoglBitmap *)bmp_handle;
+
+ g_return_val_if_fail (bmp_handle != COGL_INVALID_HANDLE, COGL_INVALID_HANDLE);
/* Create new texture and fill with loaded data */
tex = (CoglTexture*) g_malloc ( sizeof (CoglTexture));
@@ -1358,8 +1353,8 @@ cogl_texture_new_from_bitmap (CoglBitmap *bmp,
tex->slice_gl_handles = NULL;
tex->max_waste = max_waste;
- tex->min_filter = CGL_NEAREST;
- tex->mag_filter = CGL_NEAREST;
+ tex->min_filter = COGL_TEXTURE_FILTER_NEAREST;
+ tex->mag_filter = COGL_TEXTURE_FILTER_NEAREST;
/* FIXME: If upload fails we should set some kind of
* error flag but still return texture handle if the
@@ -1399,19 +1394,20 @@ cogl_texture_new_from_file (const gchar *filename,
CoglPixelFormat internal_format,
GError **error)
{
- CoglBitmap *bmp;
+ CoglHandle bmp;
CoglHandle handle;
g_return_val_if_fail (error == NULL || *error == NULL, COGL_INVALID_HANDLE);
- if (!(bmp = cogl_bitmap_new_from_file (filename, error)))
+ bmp = cogl_bitmap_new_from_file (filename, error);
+ if (bmp == COGL_INVALID_HANDLE)
return COGL_INVALID_HANDLE;
handle = cogl_texture_new_from_bitmap (bmp,
max_waste,
flags,
internal_format);
- cogl_bitmap_free (bmp);
+ cogl_handle_unref (bmp);
return handle;
}
@@ -1685,7 +1681,7 @@ cogl_texture_get_gl_texture (CoglHandle handle,
return TRUE;
}
-COGLenum
+CoglTextureFilter
cogl_texture_get_min_filter (CoglHandle handle)
{
CoglTexture *tex;
@@ -1698,7 +1694,7 @@ cogl_texture_get_min_filter (CoglHandle handle)
return tex->min_filter;
}
-COGLenum
+CoglTextureFilter
cogl_texture_get_mag_filter (CoglHandle handle)
{
CoglTexture *tex;
@@ -1713,8 +1709,8 @@ cogl_texture_get_mag_filter (CoglHandle handle)
void
cogl_texture_set_filters (CoglHandle handle,
- COGLenum min_filter,
- COGLenum mag_filter)
+ CoglTextureFilter min_filter,
+ CoglTextureFilter mag_filter)
{
CoglTexture *tex;
GLuint gl_handle;
diff --git a/gl/cogl.c b/gl/cogl.c
index 47fe9d75..b2c5417e 100644
--- a/gl/cogl.c
+++ b/gl/cogl.c
@@ -1,9 +1,9 @@
/*
* Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Copyright (C) 2007,2008,2009 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/gles/Makefile.am b/gles/Makefile.am
index 1ec4ae78..3f84b4b2 100644
--- a/gles/Makefile.am
+++ b/gles/Makefile.am
@@ -8,6 +8,7 @@ libclutterinclude_HEADERS = \
$(top_builddir)/clutter/cogl/cogl-offscreen.h \
$(top_builddir)/clutter/cogl/cogl-path.h \
$(top_builddir)/clutter/cogl/cogl-shader.h \
+ $(top_builddir)/clutter/cogl/cogl-bitmap.h \
$(top_builddir)/clutter/cogl/cogl-texture.h \
$(top_builddir)/clutter/cogl/cogl-types.h \
$(top_builddir)/clutter/cogl/cogl-vertex-buffer.h \
@@ -24,16 +25,13 @@ INCLUDES = \
-I$(top_builddir)/clutter \
-I$(top_builddir)/clutter/cogl \
-DG_LOG_DOMAIN=\"Cogl-GLES\" \
- -DCLUTTER_COMPILATION \
- $(CLUTTER_CFLAGS) \
- $(CLUTTER_DEBUG_CFLAGS) \
- $(MAINTAINER_CFLAGS) \
- $(GCC_FLAGS)
-
-LDADD = $(CLUTTER_LIBS)
+ -DCLUTTER_COMPILATION
noinst_LTLIBRARIES = libclutter-cogl.la
+libclutter_cogl_la_CPPFLAGS = $(CLUTTER_CFLAGS) $(COGL_DEBUG_CFLAGS) $(CLUTTER_DEBUG_CFLAGS) $(MAINTAINER_CFLAGS)
+libclutter_cogl_la_LIBADD = -lm $(CLUTTER_LIBS) $(top_builddir)/clutter/cogl/common/libclutter-cogl-common.la
+libclutter_cogl_la_DEPENDENCIES = $(top_builddir)/clutter/cogl/common/libclutter-cogl-common.la
libclutter_cogl_la_SOURCES = \
$(top_builddir)/clutter/cogl/cogl.h \
$(top_builddir)/clutter/cogl/cogl-defines-gles.h \
@@ -43,10 +41,10 @@ libclutter_cogl_la_SOURCES = \
$(top_builddir)/clutter/cogl/cogl-offscreen.h \
$(top_builddir)/clutter/cogl/cogl-path.h \
$(top_builddir)/clutter/cogl/cogl-shader.h \
+ $(top_builddir)/clutter/cogl/cogl-bitmap.h \
$(top_builddir)/clutter/cogl/cogl-texture.h \
$(top_builddir)/clutter/cogl/cogl-types.h \
$(top_builddir)/clutter/cogl/cogl-debug.h \
- cogl-internal.h \
cogl-texture-private.h \
cogl-fbo.h \
cogl-context.h \
@@ -75,8 +73,6 @@ EXTRA_DIST = cogl-defines.h.in \
cogl-fixed-vertex-shader.glsl \
cogl-fixed-fragment-shader.glsl
-libclutter_cogl_la_LIBADD = $(top_builddir)/clutter/cogl/common/libclutter-cogl-common.la
-
.glsl.h :
/bin/sh $(top_srcdir)/clutter/cogl/gles/stringify.sh -h $<
diff --git a/gles/cogl-context.c b/gles/cogl-context.c
index 5630506e..d70d59d3 100644
--- a/gles/cogl-context.c
+++ b/gles/cogl-context.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -46,6 +44,7 @@ cogl_create_context ()
{
GLubyte default_texture_data[] = { 0xff, 0xff, 0xff, 0x0 };
gulong enable_flags = 0;
+ CoglDrawBufferState *draw_buffer;
if (_context != NULL)
return FALSE;
@@ -83,7 +82,11 @@ cogl_create_context ()
sizeof (CoglLayerInfo));
_context->n_texcoord_arrays_enabled = 0;
- _context->draw_buffer = COGL_WINDOW_BUFFER;
+ draw_buffer = g_slice_new0 (CoglDrawBufferState);
+ draw_buffer->target = COGL_WINDOW_BUFFER;
+ draw_buffer->offscreen = COGL_INVALID_HANDLE;
+ _context->draw_buffer_stack =
+ g_slist_prepend (NULL, draw_buffer);
_context->path_nodes = g_array_new (FALSE, FALSE, sizeof (CoglPathNode));
_context->last_path = 0;
diff --git a/gles/cogl-context.h b/gles/cogl-context.h
index 2a358de9..3542e038 100644
--- a/gles/cogl-context.h
+++ b/gles/cogl-context.h
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -42,6 +40,12 @@ typedef struct
typedef struct
{
+ CoglBufferTarget target;
+ CoglHandle offscreen;
+} CoglDrawBufferState;
+
+typedef struct
+{
/* Features cache */
CoglFeatureFlags feature_flags;
gboolean features_cached;
@@ -86,7 +90,7 @@ typedef struct
guint n_texcoord_arrays_enabled;
/* Framebuffer objects */
- CoglBufferTarget draw_buffer;
+ GSList *draw_buffer_stack;
/* Clip stack */
CoglClipStackState clip;
diff --git a/gles/cogl-defines.h.in b/gles/cogl-defines.h.in
index a40d5d61..2a356e87 100644
--- a/gles/cogl-defines.h.in
+++ b/gles/cogl-defines.h.in
@@ -26,6 +26,7 @@
#ifndef __COGL_DEFINES_H__
#define __COGL_DEFINES_H__
+#include <glib.h>
#include <@CLUTTER_GL_HEADER@>
G_BEGIN_DECLS
@@ -429,10 +430,6 @@ G_BEGIN_DECLS
#define CGL_WEIGHT_ARRAY_BUFFER_BINDING_OES GL_WEIGHT_ARRAY_BUFFER_BINDING_OES
#define CGL_TEXTURE_CROP_RECT_OES GL_TEXTURE_CROP_RECT_OES
-typedef GLenum COGLenum;
-typedef GLint COGLint;
-typedef GLuint COGLuint;
-
/* extras */
/* YUV textures also unsupported */
@@ -440,18 +437,6 @@ typedef GLuint COGLuint;
#define CGL_UNSIGNED_SHORT_8_8_REV_MESA 0
#define CGL_UNSIGNED_SHORT_8_8_MESA 0
-#ifdef GL_FRAGMENT_SHADER
-#define CGL_FRAGMENT_SHADER GL_FRAGMENT_SHADER
-#else
-#define CGL_FRAGMENT_SHADER 0
-#endif
-
-#ifdef GL_VERTEX_SHADER
-#define CGL_VERTEX_SHADER GL_VERTEX_SHADER
-#else
-#define CGL_VERTEX_SHADER 0
-#endif
-
#if defined(GL_OBJECT_COMPILE_STATUS)
#define CGL_OBJECT_COMPILE_STATUS GL_OBJECT_COMPILE_STATUS
#elif defined(GL_COMPILE_STATUS)
diff --git a/gles/cogl-fbo.c b/gles/cogl-fbo.c
index c3a2cfd9..08b6cff1 100644
--- a/gles/cogl-fbo.c
+++ b/gles/cogl-fbo.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2008 OpenedHand
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -132,15 +130,6 @@ cogl_offscreen_new_to_texture (CoglHandle texhandle)
return _cogl_offscreen_handle_new (fbo);
}
-CoglHandle
-cogl_offscreen_new_multisample ()
-{
- if (!cogl_features_available (COGL_FEATURE_OFFSCREEN_MULTISAMPLE))
- return COGL_INVALID_HANDLE;
-
- return COGL_INVALID_HANDLE;
-}
-
static void
_cogl_offscreen_free (CoglFbo *fbo)
{
@@ -155,36 +144,16 @@ _cogl_offscreen_free (CoglFbo *fbo)
}
void
-cogl_offscreen_blit_region (CoglHandle src_buffer,
- CoglHandle dst_buffer,
- int src_x,
- int src_y,
- int src_w,
- int src_h,
- int dst_x,
- int dst_y,
- int dst_w,
- int dst_h)
-{
- /* Not supported on GLES */
- return;
-}
-
-void
-cogl_offscreen_blit (CoglHandle src_buffer,
- CoglHandle dst_buffer)
-{
- /* Not supported on GLES */
- return;
-}
-
-void
-cogl_draw_buffer (CoglBufferTarget target, CoglHandle offscreen)
+cogl_set_draw_buffer (CoglBufferTarget target, CoglHandle offscreen)
{
CoglFbo *fbo = NULL;
+ CoglDrawBufferState *draw_buffer;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
+ g_assert (ctx->draw_buffer_stack != NULL);
+ draw_buffer = ctx->draw_buffer_stack->data;
+
if (target == COGL_OFFSCREEN_BUFFER)
{
GLboolean scissor_enabled;
@@ -197,7 +166,7 @@ cogl_draw_buffer (CoglBufferTarget target, CoglHandle offscreen)
fbo = _cogl_offscreen_pointer_from_handle (offscreen);
/* Check current draw buffer target */
- if (ctx->draw_buffer != COGL_OFFSCREEN_BUFFER)
+ if (draw_buffer->target != COGL_OFFSCREEN_BUFFER)
{
/* Push the viewport and matrix setup if redirecting
from a non-screen buffer */
@@ -247,11 +216,10 @@ cogl_draw_buffer (CoglBufferTarget target, CoglHandle offscreen)
scissor_box[2], scissor_box[3]);
}
- else if ((target & COGL_WINDOW_BUFFER) ||
- (target & COGL_MASK_BUFFER))
+ else if (target & COGL_WINDOW_BUFFER)
{
/* Check current draw buffer target */
- if (ctx->draw_buffer == COGL_OFFSCREEN_BUFFER)
+ if (draw_buffer->target == COGL_OFFSCREEN_BUFFER)
{
/* Pop viewport and matrices if redirecting back
from an offscreen buffer */
@@ -267,27 +235,75 @@ cogl_draw_buffer (CoglBufferTarget target, CoglHandle offscreen)
/* Bind window framebuffer object */
GE( glBindFramebuffer (GL_FRAMEBUFFER, 0) );
+ }
+ /* Store new target */
+ draw_buffer->target = target;
+ if (draw_buffer->offscreen != offscreen)
+ {
+ if (draw_buffer->offscreen != COGL_INVALID_HANDLE)
+ cogl_handle_unref (draw_buffer->offscreen);
+ if (offscreen != COGL_INVALID_HANDLE)
+ cogl_handle_ref (offscreen);
+ draw_buffer->offscreen = offscreen;
+ }
+}
- if (target == COGL_WINDOW_BUFFER)
- {
- /* Draw to RGB channels */
- GE( glColorMask (GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE) );
- }
- else if (target == COGL_MASK_BUFFER)
- {
- /* Draw only to ALPHA channel */
- GE( glColorMask (GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE) );
- }
- else
- {
- /* Draw to all channels */
- GE( glColorMask (GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE) );
- }
+void
+cogl_push_draw_buffer(void)
+{
+ CoglDrawBufferState *old;
+ CoglDrawBufferState *draw_buffer;
+
+ _COGL_GET_CONTEXT (ctx, NO_RETVAL);
+
+ g_assert (ctx->draw_buffer_stack != NULL);
+ old = ctx->draw_buffer_stack->data;
+
+ draw_buffer = g_slice_new0 (CoglDrawBufferState);
+ *draw_buffer = *old;
+
+ ctx->draw_buffer_stack =
+ g_slist_prepend (ctx->draw_buffer_stack, draw_buffer);
+}
+
+void
+cogl_pop_draw_buffer(void)
+{
+ CoglDrawBufferState *to_pop;
+ CoglDrawBufferState *to_restore;
+
+ _COGL_GET_CONTEXT (ctx, NO_RETVAL);
+
+ g_assert (ctx->draw_buffer_stack != NULL);
+ if (ctx->draw_buffer_stack->next == NULL)
+ {
+ g_warning ("1 more cogl_pop_draw_buffer() than cogl_push_draw_buffer()");
+ return;
}
- /* Store new target */
- ctx->draw_buffer = target;
+ to_pop = ctx->draw_buffer_stack->data;
+ to_restore = ctx->draw_buffer_stack->next->data;
+
+ /* the logic in cogl_set_draw_buffer() only works if
+ * to_pop is still on top of the stack, because
+ * cogl_set_draw_buffer() needs to know the previous
+ * state.
+ */
+ cogl_set_draw_buffer (to_restore->target, to_restore->offscreen);
+
+ /* cogl_set_draw_buffer() should have set top of stack
+ * to to_restore
+ */
+ g_assert (to_restore->target == to_pop->target);
+ g_assert (to_restore->offscreen == to_pop->offscreen);
+
+ g_assert (ctx->draw_buffer_stack->data == to_pop);
+ ctx->draw_buffer_stack =
+ g_slist_remove_link (ctx->draw_buffer_stack,
+ ctx->draw_buffer_stack);
+
+ g_slice_free (CoglDrawBufferState, to_pop);
}
#else /* HAVE_COGL_GLES2 */
@@ -307,12 +323,6 @@ cogl_offscreen_new_to_texture (CoglHandle texhandle)
}
CoglHandle
-cogl_offscreen_new_multisample ()
-{
- return COGL_INVALID_HANDLE;
-}
-
-CoglHandle
cogl_offscreen_ref (CoglHandle handle)
{
return COGL_INVALID_HANDLE;
@@ -324,27 +334,7 @@ cogl_offscreen_unref (CoglHandle handle)
}
void
-cogl_offscreen_blit_region (CoglHandle src_buffer,
- CoglHandle dst_buffer,
- int src_x,
- int src_y,
- int src_w,
- int src_h,
- int dst_x,
- int dst_y,
- int dst_w,
- int dst_h)
-{
-}
-
-void
-cogl_offscreen_blit (CoglHandle src_buffer,
- CoglHandle dst_buffer)
-{
-}
-
-void
-cogl_draw_buffer (CoglBufferTarget target, CoglHandle offscreen)
+cogl_set_draw_buffer (CoglBufferTarget target, CoglHandle offscreen)
{
}
diff --git a/gles/cogl-fbo.h b/gles/cogl-fbo.h
index 308c1d95..8499f8fb 100644
--- a/gles/cogl-fbo.h
+++ b/gles/cogl-fbo.h
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/gles/cogl-gles2-wrapper.c b/gles/cogl-gles2-wrapper.c
index 54a1d8c5..523676dd 100644
--- a/gles/cogl-gles2-wrapper.c
+++ b/gles/cogl-gles2-wrapper.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2008 OpenedHand
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -356,7 +354,7 @@ cogl_gles2_get_fragment_shader (const CoglGles2WrapperSettings *settings)
g_string_append (shader_source, cogl_fixed_fragment_shader_main_declare);
g_string_append (shader_source, cogl_fixed_fragment_shader_main_start);
-
+
/* This pointless extra variable is needed to work around an
apparent bug in the PowerVR drivers. Without it the alpha
blending seems to stop working */
diff --git a/gles/cogl-gles2-wrapper.h b/gles/cogl-gles2-wrapper.h
index 4d4fd1a4..bd7f6d97 100644
--- a/gles/cogl-gles2-wrapper.h
+++ b/gles/cogl-gles2-wrapper.h
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2008 OpenedHand
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/gles/cogl-internal.h b/gles/cogl-internal.h
deleted file mode 100644
index 5b9c8ab3..00000000
--- a/gles/cogl-internal.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Clutter COGL
- *
- * A basic GL/GLES Abstraction/Utility Layer
- *
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * 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.
- */
-
-#ifndef __COGL_INTERNAL_H
-#define __COGL_INTERNAL_H
-
-typedef enum {
- COGL_BOXED_NONE,
- COGL_BOXED_INT,
- COGL_BOXED_FLOAT,
- COGL_BOXED_MATRIX
-} CoglBoxedType;
-
-typedef struct _CoglBoxedValue
-{
- CoglBoxedType type;
- int size, count;
- gboolean transpose;
-
- union {
- gfloat float_value[4];
- gint int_value[4];
- gfloat matrix[16];
- gfloat *float_array;
- gint *int_array;
- gpointer array;
- } v;
-} CoglBoxedValue;
-
-
-#define COGL_DEBUG 0
-
-#if COGL_DEBUG
-
-#include <stdio.h>
-
-const char *_cogl_error_string(GLenum errorCode);
-
-#define GE(x...) G_STMT_START { \
- GLenum err; \
- (x); \
- while ((err = glGetError()) != GL_NO_ERROR) { \
- fprintf(stderr, "glError: %s caught at %s:%u\n", \
- (char *)_cogl_error_string(err), \
- __FILE__, __LINE__); \
- } \
-} G_STMT_END
-
-#else /* COGL_DEBUG */
-
-#define GE(x) (x)
-
-#endif /* COGL_DEBUG */
-
-#define COGL_ENABLE_BLEND (1<<1)
-#define COGL_ENABLE_ALPHA_TEST (1<<2)
-#define COGL_ENABLE_VERTEX_ARRAY (1<<3)
-#define COGL_ENABLE_COLOR_ARRAY (1<<4)
-#define COGL_ENABLE_BACKFACE_CULLING (1<<5)
-
-void
-_cogl_features_init (void);
-
-gint
-_cogl_get_format_bpp (CoglPixelFormat format);
-
-void
-cogl_enable (gulong flags);
-
-gulong
-cogl_get_enable ();
-
-#endif /* __COGL_INTERNAL_H */
diff --git a/gles/cogl-primitives.c b/gles/cogl-primitives.c
index ae91aa06..1e03e1ea 100644
--- a/gles/cogl-primitives.c
+++ b/gles/cogl-primitives.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/gles/cogl-program.c b/gles/cogl-program.c
index 3c709601..e8fc6a0f 100644
--- a/gles/cogl-program.c
+++ b/gles/cogl-program.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2008 OpenedHand
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -89,7 +87,7 @@ cogl_program_attach_shader (CoglHandle program_handle,
CoglProgram *program;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
+
if (!cogl_is_program (program_handle) || !cogl_is_shader (shader_handle))
return;
@@ -116,7 +114,7 @@ void
cogl_program_use (CoglHandle handle)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
+
if (handle != COGL_INVALID_HANDLE && !cogl_is_program (handle))
return;
@@ -124,7 +122,7 @@ cogl_program_use (CoglHandle handle)
ctx->gles2.settings_dirty = TRUE;
}
-COGLint
+int
cogl_program_get_uniform_location (CoglHandle handle,
const gchar *uniform_name)
{
@@ -157,21 +155,21 @@ cogl_program_get_uniform_location (CoglHandle handle,
}
void
-cogl_program_uniform_1f (COGLint uniform_no,
+cogl_program_uniform_1f (int uniform_no,
gfloat value)
{
cogl_program_uniform_float (uniform_no, 1, 1, &value);
}
void
-cogl_program_uniform_1i (COGLint uniform_no,
+cogl_program_uniform_1i (int uniform_no,
gint value)
{
cogl_program_uniform_int (uniform_no, 1, 1, &value);
}
static void
-cogl_program_uniform_x (COGLint uniform_no,
+cogl_program_uniform_x (int uniform_no,
gint size,
gint count,
CoglBoxedType type,
@@ -217,7 +215,7 @@ cogl_program_uniform_x (COGLint uniform_no,
}
void
-cogl_program_uniform_float (COGLint uniform_no,
+cogl_program_uniform_float (int uniform_no,
gint size,
gint count,
const GLfloat *value)
@@ -227,7 +225,7 @@ cogl_program_uniform_float (COGLint uniform_no,
}
void
-cogl_program_uniform_int (COGLint uniform_no,
+cogl_program_uniform_int (int uniform_no,
gint size,
gint count,
const GLint *value)
@@ -237,7 +235,7 @@ cogl_program_uniform_int (COGLint uniform_no,
}
void
-cogl_program_uniform_matrix (COGLint uniform_no,
+cogl_program_uniform_matrix (int uniform_no,
gint size,
gint count,
gboolean transpose,
@@ -298,7 +296,7 @@ cogl_program_use (CoglHandle program_handle)
{
}
-COGLint
+int
cogl_program_get_uniform_location (CoglHandle program_handle,
const gchar *uniform_name)
{
@@ -306,13 +304,13 @@ cogl_program_get_uniform_location (CoglHandle program_handle,
}
void
-cogl_program_uniform_1f (COGLint uniform_no,
+cogl_program_uniform_1f (int uniform_no,
gfloat value)
{
}
void
-cogl_program_uniform_float (COGLint uniform_no,
+cogl_program_uniform_float (int uniform_no,
gint size,
gint count,
const GLfloat *value)
@@ -320,15 +318,15 @@ cogl_program_uniform_float (COGLint uniform_no,
}
void
-cogl_program_uniform_int (COGLint uniform_no,
+cogl_program_uniform_int (int uniform_no,
gint size,
gint count,
- const COGLint *value)
+ const int *value)
{
}
void
-cogl_program_uniform_matrix (COGLint uniform_no,
+cogl_program_uniform_matrix (int uniform_no,
gint size,
gint count,
gboolean transpose,
diff --git a/gles/cogl-program.h b/gles/cogl-program.h
index fdf52cd6..23b7ebeb 100644
--- a/gles/cogl-program.h
+++ b/gles/cogl-program.h
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2008 OpenedHand
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/gles/cogl-shader-private.h b/gles/cogl-shader-private.h
index e95fcd7d..2b905d89 100644
--- a/gles/cogl-shader-private.h
+++ b/gles/cogl-shader-private.h
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2008 OpenedHand
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/gles/cogl-shader.c b/gles/cogl-shader.c
index 5ea43840..ff5f0c58 100644
--- a/gles/cogl-shader.c
+++ b/gles/cogl-shader.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2008 OpenedHand
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -50,26 +48,35 @@ _cogl_shader_free (CoglShader *shader)
}
CoglHandle
-cogl_create_shader (COGLenum shaderType)
+cogl_create_shader (CoglShaderType type)
{
CoglShader *shader;
-
- _COGL_GET_CONTEXT (ctx, 0);
+ GLenum gl_type;
+
+ if (type == COGL_SHADER_TYPE_VERTEX)
+ gl_type = GL_VERTEX_SHADER;
+ else if (type == COGL_SHADER_TYPE_FRAGMENT)
+ gl_type = GL_FRAGMENT_SHADER;
+ else
+ {
+ g_warning ("Unexpected shader type (0x%08lX) given to "
+ "cogl_create_shader", (unsigned long) type);
+ return COGL_INVALID_HANDLE;
+ }
shader = g_slice_new (CoglShader);
- shader->gl_handle = glCreateShader (shaderType);
- shader->type = shaderType;
+ shader->gl_handle = glCreateShader (gl_type);
return _cogl_shader_handle_new (shader);
}
void
cogl_shader_source (CoglHandle handle,
- const gchar *source)
+ const char *source)
{
CoglShader *shader;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
+
if (!cogl_is_shader (handle))
return;
@@ -94,11 +101,11 @@ cogl_shader_compile (CoglHandle handle)
void
cogl_shader_get_info_log (CoglHandle handle,
- guint size,
- gchar *buffer)
+ size_t size,
+ char *buffer)
{
CoglShader *shader;
- COGLint len = 0;
+ int len = 0;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
if (!cogl_is_shader (handle))
@@ -110,20 +117,48 @@ cogl_shader_get_info_log (CoglHandle handle,
buffer[len] = '\0';
}
-void
-cogl_shader_get_parameteriv (CoglHandle handle,
- COGLenum pname,
- COGLint *dest)
+CoglShaderType
+cogl_shader_get_type (CoglHandle handle)
{
+ GLint type;
CoglShader *shader;
- _COGL_GET_CONTEXT (ctx, NO_RETVAL);
if (!cogl_is_shader (handle))
- return;
+ {
+ g_warning ("Non shader handle type passed to cogl_shader_get_type");
+ return COGL_SHADER_TYPE_VERTEX;
+ }
+
+ shader = _cogl_shader_pointer_from_handle (handle);
+
+ GE (glGetShaderiv (shader->gl_handle, GL_SHADER_TYPE, &type));
+ if (type == GL_VERTEX_SHADER)
+ return COGL_SHADER_TYPE_VERTEX;
+ else if (type == GL_FRAGMENT_SHADER)
+ return COGL_SHADER_TYPE_VERTEX;
+ else
+ {
+ g_warning ("Unexpected shader type 0x%08lX", (unsigned long)type);
+ return COGL_SHADER_TYPE_VERTEX;
+ }
+}
+
+gboolean
+cogl_shader_is_compiled (CoglHandle handle)
+{
+ GLint status;
+ CoglShader *shader;
+
+ if (!cogl_is_shader (handle))
+ return FALSE;
shader = _cogl_shader_pointer_from_handle (handle);
- glGetShaderiv (shader->gl_handle, pname, dest);
+ GE (glGetShaderiv (shader->gl_handle, GL_COMPILE_STATUS, &status));
+ if (status == GL_TRUE)
+ return TRUE;
+ else
+ return FALSE;
}
#else /* HAVE_COGL_GLES2 */
@@ -131,7 +166,7 @@ cogl_shader_get_parameteriv (CoglHandle handle,
/* No support on regular OpenGL 1.1 */
CoglHandle
-cogl_create_shader (COGLenum shaderType)
+cogl_create_shader (CoglShaderType type)
{
return COGL_INVALID_HANDLE;
}
@@ -155,7 +190,7 @@ cogl_shader_unref (CoglHandle handle)
void
cogl_shader_source (CoglHandle shader,
- const gchar *source)
+ const char *source)
{
}
@@ -166,16 +201,21 @@ cogl_shader_compile (CoglHandle shader_handle)
void
cogl_shader_get_info_log (CoglHandle handle,
- guint size,
- gchar *buffer)
+ size_t size,
+ char *buffer)
{
}
-void
-cogl_shader_get_parameteriv (CoglHandle handle,
- COGLenum pname,
- COGLint *dest)
+CoglShaderType
+cogl_shader_get_type (CoglHandle handle)
{
+ return COGL_SHADER_TYPE_VERTEX;
+}
+
+gboolean
+cogl_shader_is_compiled (CoglHandle handle)
+{
+ return FALSE;
}
#endif /* HAVE_COGL_GLES2 */
diff --git a/gles/cogl-texture-private.h b/gles/cogl-texture-private.h
index 2a3a4a5a..7cf6fe95 100644
--- a/gles/cogl-texture-private.h
+++ b/gles/cogl-texture-private.h
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -26,7 +24,7 @@
#ifndef __COGL_TEXTURE_H
#define __COGL_TEXTURE_H
-#include "cogl-bitmap.h"
+#include "cogl-bitmap-private.h"
#include "cogl-handle.h"
typedef struct _CoglTexture CoglTexture;
@@ -70,8 +68,8 @@ struct _CoglTexture
GArray *slice_y_spans;
GArray *slice_gl_handles;
gint max_waste;
- COGLenum min_filter;
- COGLenum mag_filter;
+ CoglTextureFilter min_filter;
+ CoglTextureFilter mag_filter;
gboolean is_foreign;
GLint wrap_mode;
gboolean auto_mipmap;
diff --git a/gles/cogl-texture.c b/gles/cogl-texture.c
index e2a5ec90..1564faf2 100644
--- a/gles/cogl-texture.c
+++ b/gles/cogl-texture.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -30,7 +28,7 @@
#include "cogl.h"
#include "cogl-internal.h"
#include "cogl-util.h"
-#include "cogl-bitmap.h"
+#include "cogl-bitmap-private.h"
#include "cogl-texture-private.h"
#include "cogl-material.h"
#include "cogl-context.h"
@@ -42,17 +40,6 @@
#include <stdlib.h>
#include <math.h>
-/*
-#define COGL_DEBUG 1
-
-#define GE(x) \
-{ \
- glGetError(); x; \
- GLuint err = glGetError(); \
- if (err != 0) \
- printf("err: 0x%x\n", err); \
-} */
-
extern void _cogl_journal_flush (void);
static void _cogl_texture_free (CoglTexture *tex);
@@ -485,9 +472,6 @@ _cogl_texture_download_from_gl (CoglTexture *tex,
_cogl_current_matrix_push ();
_cogl_current_matrix_identity ();
- /* Draw to all channels */
- cogl_draw_buffer (COGL_WINDOW_BUFFER | COGL_MASK_BUFFER, 0);
-
/* Direct copy operation */
if (ctx->texture_download_material == COGL_INVALID_HANDLE)
@@ -584,8 +568,6 @@ _cogl_texture_download_from_gl (CoglTexture *tex,
_cogl_set_current_matrix (COGL_MATRIX_MODELVIEW);
_cogl_current_matrix_pop ();
- cogl_draw_buffer (COGL_WINDOW_BUFFER, 0);
-
return TRUE;
}
@@ -1435,12 +1417,13 @@ cogl_texture_new_from_data (guint width,
}
CoglHandle
-cogl_texture_new_from_bitmap (CoglBitmap *bmp,
+cogl_texture_new_from_bitmap (CoglHandle bmp_handle,
gint max_waste,
CoglTextureFlags flags,
CoglPixelFormat internal_format)
{
CoglTexture *tex;
+ CoglBitmap *bmp = (CoglBitmap *)bmp_handle;
/* Create new texture and fill with loaded data */
tex = (CoglTexture*) g_malloc ( sizeof (CoglTexture));
@@ -1498,19 +1481,20 @@ cogl_texture_new_from_file (const gchar *filename,
CoglPixelFormat internal_format,
GError **error)
{
- CoglBitmap *bmp;
+ CoglHandle bmp;
CoglHandle handle;
g_return_val_if_fail (error == NULL || *error == NULL, COGL_INVALID_HANDLE);
- if (!(bmp = cogl_bitmap_new_from_file (filename, error)))
+ bmp = cogl_bitmap_new_from_file (filename, error);
+ if (bmp == COGL_INVALID_HANDLE)
return COGL_INVALID_HANDLE;
handle = cogl_texture_new_from_bitmap (bmp,
max_waste,
flags,
internal_format);
- cogl_bitmap_free (bmp);
+ cogl_handle_unref (bmp);
return handle;
}
@@ -1783,7 +1767,7 @@ cogl_texture_get_gl_texture (CoglHandle handle,
return TRUE;
}
-COGLenum
+CoglTextureFilter
cogl_texture_get_min_filter (CoglHandle handle)
{
CoglTexture *tex;
@@ -1796,7 +1780,7 @@ cogl_texture_get_min_filter (CoglHandle handle)
return tex->min_filter;
}
-COGLenum
+CoglTextureFilter
cogl_texture_get_mag_filter (CoglHandle handle)
{
CoglTexture *tex;
@@ -1811,8 +1795,8 @@ cogl_texture_get_mag_filter (CoglHandle handle)
void
cogl_texture_set_filters (CoglHandle handle,
- COGLenum min_filter,
- COGLenum mag_filter)
+ CoglTextureFilter min_filter,
+ CoglTextureFilter mag_filter)
{
CoglTexture *tex;
GLuint gl_handle;
diff --git a/gles/cogl-util.c b/gles/cogl-util.c
index b024e763..4fc90b8e 100644
--- a/gles/cogl-util.c
+++ b/gles/cogl-util.c
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -44,7 +42,7 @@ cogl_util_next_p2 (int a)
{
int rval=1;
- while(rval < a)
+ while(rval < a)
rval <<= 1;
return rval;
diff --git a/gles/cogl-util.h b/gles/cogl-util.h
index 759da8cc..589ddd35 100644
--- a/gles/cogl-util.h
+++ b/gles/cogl-util.h
@@ -1,11 +1,9 @@
/*
- * Clutter COGL
+ * Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Authored By Matthew Allum <mallum@openedhand.com>
- *
- * Copyright (C) 2007 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -26,7 +24,7 @@
#ifndef __COGL_UTIL_H
#define __COGL_UTIL_H
-int
+int
cogl_util_next_p2 (int a);
#endif /* __COGL_UTIL_H */
diff --git a/gles/cogl.c b/gles/cogl.c
index 5b49a190..0fcf4fc3 100644
--- a/gles/cogl.c
+++ b/gles/cogl.c
@@ -1,9 +1,9 @@
/*
* Cogl
*
- * A basic GL/GLES Abstraction/Utility Layer
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Copyright (C) 2007,2008,2009 OpenedHand
+ * Copyright (C) 2007,2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/gles/stringify.sh b/gles/stringify.sh
index bb8e7574..a60d28d7 100644
--- a/gles/stringify.sh
+++ b/gles/stringify.sh
@@ -1,16 +1,36 @@
#! /bin/sh
+# Cogl
+#
+# An object oriented GL/GLES Abstraction/Utility Layer
+#
+# Copyright (C) 2008,2009 Intel Corporation.
+#
+# 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.
+
+
output_copyright ()
{
cat <<EOF > "$1";
/*
- * Clutter COGL
- *
- * A basic GL/GLES Abstraction/Utility Layer
+ * Cogl
*
- * Authored By Matthew Allum <mallum@openedhand.com>
+ * An object oriented GL/GLES Abstraction/Utility Layer
*
- * Copyright (C) 2008 OpenedHand
+ * Copyright (C) 2008,2009 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public