[cogl/wip/rib/gles2-context: 1/5] Don't include any GL header from the public GL headers



commit ed2902d843d9fa7802ef9692e1f67e953b089537
Author: Neil Roberts <neil linux intel com>
Date:   Fri Mar 23 18:05:46 2012 +0000

    Don't include any GL header from the public GL headers
    
    This splits the GL header inclusion from cogl-defines.h into a
    separate headear called cogl-gl-header.h which we will only include
    internally. That way we don't leak GL declarations out of our public
    headers. The texture functions that were using GLenum and GLuint in
    the public header have now changed to just use unsigned int. Note
    however that if an EGL winsys is enabled then it will still publicly
    include an EGL header. This is a bit more awkward to fix because we
    have public API which returns an EGLDisplay and we can't determine
    what type that is.
    
    There is also a conformance test which just verifies that no GL header
    has been included while compiling. The test isn't added to
    test-conform-main because it doesn't actually test anything at
    runtime.

 cogl/Makefile.am                  |    6 ++--
 cogl/cogl-buffer-private.h        |    1 +
 cogl/cogl-context-private.h       |    1 +
 cogl/cogl-defines.h.in            |    4 ---
 cogl/cogl-gl-header.h.in          |   39 +++++++++++++++++++++++++++++++++++++
 cogl/cogl-internal.h              |    1 +
 cogl/cogl-shader-private.h        |    1 +
 cogl/cogl-texture.h               |   16 +++++++-------
 cogl/tesselator/tesselator.h      |    1 +
 configure.ac                      |    1 +
 tests/conform/Makefile.am         |    1 +
 tests/conform/test-no-gl-header.c |   17 ++++++++++++++++
 12 files changed, 74 insertions(+), 15 deletions(-)
---
diff --git a/cogl/Makefile.am b/cogl/Makefile.am
index 69cb5df..55b93f8 100644
--- a/cogl/Makefile.am
+++ b/cogl/Makefile.am
@@ -34,9 +34,9 @@ AM_CPPFLAGS = \
 
 AM_CFLAGS = $(COGL_DEP_CFLAGS) $(COGL_EXTRA_CFLAGS) $(MAINTAINER_CFLAGS)
 
-BUILT_SOURCES += cogl-defines.h
-DISTCLEANFILES += cogl-defines.h
-EXTRA_DIST += cogl-defines.h.in
+BUILT_SOURCES += cogl-defines.h cogl-gl-header.h
+DISTCLEANFILES += cogl-defines.h cogl-gl-header.h
+EXTRA_DIST += cogl-defines.h.in cogl-gl-header.h.in
 
 # Note: The cogl-1.0/cogl-gl-1.0 files are essentially for
 # compatability only.  I'm not really sure who could possibly be using
diff --git a/cogl/cogl-buffer-private.h b/cogl/cogl-buffer-private.h
index 62bcf45..0457af0 100644
--- a/cogl/cogl-buffer-private.h
+++ b/cogl/cogl-buffer-private.h
@@ -33,6 +33,7 @@
 #include "cogl-object-private.h"
 #include "cogl-buffer.h"
 #include "cogl-context.h"
+#include "cogl-gl-header.h"
 
 G_BEGIN_DECLS
 
diff --git a/cogl/cogl-context-private.h b/cogl/cogl-context-private.h
index a79672f..8b1ab2b 100644
--- a/cogl/cogl-context-private.h
+++ b/cogl/cogl-context-private.h
@@ -47,6 +47,7 @@
 #include "cogl-texture-2d.h"
 #include "cogl-texture-3d.h"
 #include "cogl-texture-rectangle.h"
+#include "cogl-gl-header.h"
 
 typedef struct
 {
diff --git a/cogl/cogl-defines.h.in b/cogl/cogl-defines.h.in
index 3d4b17d..ccdca06 100644
--- a/cogl/cogl-defines.h.in
+++ b/cogl/cogl-defines.h.in
@@ -29,7 +29,6 @@
 #define __COGL_DEFINES_H__
 
 #include <glib.h>
- COGL_GL_HEADER_INCLUDES@
 
 G_BEGIN_DECLS
 
@@ -41,9 +40,6 @@ G_BEGIN_DECLS
 #define NativeWindowType EGLNativeWindowType
 #endif
 
-#ifndef GL_OES_EGL_image
-#define GLeglImageOES void *
-#endif
 G_END_DECLS
 
 #endif
diff --git a/cogl/cogl-gl-header.h.in b/cogl/cogl-gl-header.h.in
new file mode 100644
index 0000000..30bc837
--- /dev/null
+++ b/cogl/cogl-gl-header.h.in
@@ -0,0 +1,39 @@
+/*
+ * Cogl
+ *
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2012 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, see <http://www.gnu.org/licenses/>.
+ *
+ *
+ */
+
+#if !defined(CLUTTER_COMPILATION)
+#error "cogl-gl-header.h should only be included when compiling Cogl"
+#endif
+
+#ifndef __COGL_GL_HEADER_H__
+#define __COGL_GL_HEADER_H__
+
+#include "cogl-defines.h"
+
+ COGL_GL_HEADER_INCLUDES@
+
+#ifndef GL_OES_EGL_image
+#define GLeglImageOES void *
+#endif
+
+#endif /* __COGL_GL_HEADER_H__ */
diff --git a/cogl/cogl-internal.h b/cogl/cogl-internal.h
index 284fc97..bd13547 100644
--- a/cogl/cogl-internal.h
+++ b/cogl/cogl-internal.h
@@ -25,6 +25,7 @@
 #define __COGL_INTERNAL_H
 
 #include "cogl-bitmask.h"
+#include "cogl-gl-header.h"
 
 #ifdef COGL_HAS_XLIB_SUPPORT
 #include <X11/Xutil.h>
diff --git a/cogl/cogl-shader-private.h b/cogl/cogl-shader-private.h
index 6c05b3f..06575e6 100644
--- a/cogl/cogl-shader-private.h
+++ b/cogl/cogl-shader-private.h
@@ -26,6 +26,7 @@
 
 #include "cogl-handle.h"
 #include "cogl-shader.h"
+#include "cogl-gl-header.h"
 
 typedef struct _CoglShader CoglShader;
 
diff --git a/cogl/cogl-texture.h b/cogl/cogl-texture.h
index 4eeffb5..c73ea8a 100644
--- a/cogl/cogl-texture.h
+++ b/cogl/cogl-texture.h
@@ -207,12 +207,12 @@ cogl_texture_new_from_data (unsigned int      width,
  * Since: 0.8
  */
 CoglTexture *
-cogl_texture_new_from_foreign (GLuint          gl_handle,
-                               GLenum          gl_target,
-                               GLuint          width,
-                               GLuint          height,
-                               GLuint          x_pot_waste,
-                               GLuint          y_pot_waste,
+cogl_texture_new_from_foreign (unsigned int gl_handle,
+                               unsigned int gl_target,
+                               unsigned int width,
+                               unsigned int height,
+                               unsigned int x_pot_waste,
+                               unsigned int y_pot_waste,
                                CoglPixelFormat format);
 
 /**
@@ -353,8 +353,8 @@ cogl_texture_is_sliced (CoglTexture *texture);
  */
 gboolean
 cogl_texture_get_gl_texture (CoglTexture *texture,
-                             GLuint      *out_gl_handle,
-                             GLenum      *out_gl_target);
+                             unsigned int *out_gl_handle,
+                             unsigned int *out_gl_target);
 
 /**
  * cogl_texture_get_data:
diff --git a/cogl/tesselator/tesselator.h b/cogl/tesselator/tesselator.h
index 69a6ece..5b651be 100644
--- a/cogl/tesselator/tesselator.h
+++ b/cogl/tesselator/tesselator.h
@@ -35,6 +35,7 @@
 /* This just includes the defines needed by the tesselator code */
 
 #include "cogl/cogl-defines.h"
+#include "cogl/cogl-gl-header.h"
 
 typedef struct GLUtesselator GLUtesselator;
 
diff --git a/configure.ac b/configure.ac
index 67fc4cf..55fa37c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1120,6 +1120,7 @@ cogl/Makefile
 cogl/cogl-1.0.pc
 cogl/cogl-2.0-experimental.pc
 cogl/cogl-defines.h
+cogl/cogl-gl-header.h
 cogl/cogl.rc
 cogl-pango/Makefile
 cogl-pango/cogl-pango-1.0.pc
diff --git a/tests/conform/Makefile.am b/tests/conform/Makefile.am
index e6ffc7b..5a82b46 100644
--- a/tests/conform/Makefile.am
+++ b/tests/conform/Makefile.am
@@ -52,6 +52,7 @@ test_sources = \
 	test-write-texture-formats.c \
 	test-point-size.c \
 	test-point-sprite.c \
+	test-no-gl-header.c \
 	$(NULL)
 
 test_conformance_SOURCES = $(common_sources) $(test_sources)
diff --git a/tests/conform/test-no-gl-header.c b/tests/conform/test-no-gl-header.c
new file mode 100644
index 0000000..49dae6c
--- /dev/null
+++ b/tests/conform/test-no-gl-header.c
@@ -0,0 +1,17 @@
+#include <cogl/cogl.h>
+
+#include "test-utils.h"
+
+/* If you just include cogl/cogl.h, you shouldn't end up including any
+   GL headers */
+#ifdef GL_TRUE
+#error "Including cogl.h shouldn't be including any GL headers"
+#endif
+
+void
+test_no_gl_header (void)
+{
+  if (cogl_test_verbose ())
+    g_print ("OK\n");
+}
+



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]