Reviewed-by: Robert Bragg <<a href="mailto:robert@linux.intel.com">robert@linux.intel.com</a>><br><br><div class="gmail_quote">On Thu, Mar 22, 2012 at 5:32 PM, Neil Roberts <span dir="ltr"><<a href="mailto:neil@linux.intel.com">neil@linux.intel.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">All of the texture driver virtual functions now take an explicit<br>
CoglContext parameter as a step towards removing the global context.<br>
---<br>
cogl/cogl-atlas.c | 6 +-<br>
cogl/cogl-framebuffer.c | 4 +-<br>
cogl/cogl-texture-2d-sliced.c | 6 +-<br>
cogl/cogl-texture-2d.c | 24 ++++---<br>
cogl/cogl-texture-3d.c | 12 ++-<br>
cogl/cogl-texture-driver.h | 111 +++++++++++++++------------<br>
cogl/cogl-texture-rectangle.c | 27 +++++--<br>
cogl/driver/gl/cogl-texture-driver-gl.c | 99 +++++++++++-------------<br>
cogl/driver/gles/cogl-texture-driver-gles.c | 87 ++++++++++-----------<br>
9 files changed, 201 insertions(+), 175 deletions(-)<br>
<br>
diff --git a/cogl/cogl-atlas.c b/cogl/cogl-atlas.c<br>
index 68f48c0..014d612 100644<br>
--- a/cogl/cogl-atlas.c<br>
+++ b/cogl/cogl-atlas.c<br>
@@ -196,7 +196,8 @@ _cogl_atlas_get_initial_size (CoglPixelFormat format,<br>
/* Some platforms might not support this large size so we'll<br>
decrease the size until it can */<br>
while (size > 1 &&<br>
- !ctx->texture_driver->size_supported (GL_TEXTURE_2D,<br>
+ !ctx->texture_driver->size_supported (ctx,<br>
+ GL_TEXTURE_2D,<br>
gl_intformat,<br>
gl_type,<br>
size, size))<br>
@@ -226,7 +227,8 @@ _cogl_atlas_create_map (CoglPixelFormat format,<br>
<br>
/* Keep trying increasingly larger atlases until we can fit all of<br>
the textures */<br>
- while (ctx->texture_driver->size_supported (GL_TEXTURE_2D,<br>
+ while (ctx->texture_driver->size_supported (ctx,<br>
+ GL_TEXTURE_2D,<br>
gl_intformat,<br>
gl_type,<br>
map_width, map_height))<br>
diff --git a/cogl/cogl-framebuffer.c b/cogl/cogl-framebuffer.c<br>
index 647b61d..af95cac 100644<br>
--- a/cogl/cogl-framebuffer.c<br>
+++ b/cogl/cogl-framebuffer.c<br>
@@ -2062,7 +2062,7 @@ cogl_framebuffer_read_pixels_into_bitmap (CoglFramebuffer *framebuffer,<br>
bpp = _cogl_pixel_format_get_bytes_per_pixel (read_format);<br>
rowstride = cogl_bitmap_get_rowstride (tmp_bmp);<br>
<br>
- ctx->texture_driver->prep_gl_for_pixels_download (rowstride, bpp);<br>
+ ctx->texture_driver->prep_gl_for_pixels_download (ctx, rowstride, bpp);<br>
<br>
tmp_data = _cogl_bitmap_bind (tmp_bmp,<br>
COGL_BUFFER_ACCESS_WRITE,<br>
@@ -2110,7 +2110,7 @@ cogl_framebuffer_read_pixels_into_bitmap (CoglFramebuffer *framebuffer,<br>
<br>
bpp = _cogl_pixel_format_get_bytes_per_pixel (bmp_format);<br>
<br>
- ctx->texture_driver->prep_gl_for_pixels_download (rowstride, bpp);<br>
+ ctx->texture_driver->prep_gl_for_pixels_download (ctx, rowstride, bpp);<br>
<br>
pixels = _cogl_bitmap_bind (shared_bmp,<br>
COGL_BUFFER_ACCESS_WRITE,<br>
diff --git a/cogl/cogl-texture-2d-sliced.c b/cogl/cogl-texture-2d-sliced.c<br>
index 7150d2b..90c9a9e 100644<br>
--- a/cogl/cogl-texture-2d-sliced.c<br>
+++ b/cogl/cogl-texture-2d-sliced.c<br>
@@ -651,7 +651,8 @@ _cogl_texture_2d_sliced_slices_create (CoglContext *ctx,<br>
CoglSpan span;<br>
<br>
/* Check if size supported else bail out */<br>
- if (!ctx->texture_driver->size_supported (GL_TEXTURE_2D,<br>
+ if (!ctx->texture_driver->size_supported (ctx,<br>
+ GL_TEXTURE_2D,<br>
gl_intformat,<br>
gl_type,<br>
max_width,<br>
@@ -685,7 +686,8 @@ _cogl_texture_2d_sliced_slices_create (CoglContext *ctx,<br>
else<br>
{<br>
/* Decrease the size of largest slice until supported by GL */<br>
- while (!ctx->texture_driver->size_supported (GL_TEXTURE_2D,<br>
+ while (!ctx->texture_driver->size_supported (ctx,<br>
+ GL_TEXTURE_2D,<br>
gl_intformat,<br>
gl_type,<br>
max_width,<br>
diff --git a/cogl/cogl-texture-2d.c b/cogl/cogl-texture-2d.c<br>
index cd0d522..a3f0426 100644<br>
--- a/cogl/cogl-texture-2d.c<br>
+++ b/cogl/cogl-texture-2d.c<br>
@@ -127,7 +127,8 @@ _cogl_texture_2d_can_create (unsigned int width,<br>
&gl_type);<br>
<br>
/* Check that the driver can create a texture with that size */<br>
- if (!ctx->texture_driver->size_supported (GL_TEXTURE_2D,<br>
+ if (!ctx->texture_driver->size_supported (ctx,<br>
+ GL_TEXTURE_2D,<br>
gl_intformat,<br>
gl_type,<br>
width,<br>
@@ -202,7 +203,7 @@ cogl_texture_2d_new_with_size (CoglContext *ctx,<br>
tex_2d = _cogl_texture_2d_create_base (width, height, COGL_TEXTURE_NONE,<br>
internal_format);<br>
<br>
- ctx->texture_driver->gen (GL_TEXTURE_2D, 1, &tex_2d->gl_texture);<br>
+ ctx->texture_driver->gen (ctx, GL_TEXTURE_2D, 1, &tex_2d->gl_texture);<br>
_cogl_bind_gl_texture_transient (GL_TEXTURE_2D,<br>
tex_2d->gl_texture,<br>
tex_2d->is_foreign);<br>
@@ -278,8 +279,9 @@ _cogl_texture_2d_new_from_bitmap (CoglBitmap *bmp,<br>
_cogl_bitmap_unmap (dst_bmp);<br>
}<br>
<br>
- ctx->texture_driver->gen (GL_TEXTURE_2D, 1, &tex_2d->gl_texture);<br>
- ctx->texture_driver->upload_to_gl (GL_TEXTURE_2D,<br>
+ ctx->texture_driver->gen (ctx, GL_TEXTURE_2D, 1, &tex_2d->gl_texture);<br>
+ ctx->texture_driver->upload_to_gl (ctx,<br>
+ GL_TEXTURE_2D,<br>
tex_2d->gl_texture,<br>
FALSE,<br>
dst_bmp,<br>
@@ -347,7 +349,7 @@ cogl_texture_2d_new_from_foreign (CoglContext *ctx,<br>
GLenum gl_int_format = 0;<br>
CoglTexture2D *tex_2d;<br>
<br>
- if (!ctx->texture_driver->allows_foreign_gl_target (GL_TEXTURE_2D))<br>
+ if (!ctx->texture_driver->allows_foreign_gl_target (ctx, GL_TEXTURE_2D))<br>
return COGL_INVALID_HANDLE;<br>
<br>
/* Make sure it is a valid GL texture object */<br>
@@ -474,7 +476,7 @@ _cogl_egl_texture_2d_new_from_image (CoglContext *ctx,<br>
tex_2d = _cogl_texture_2d_create_base (width, height, COGL_TEXTURE_NONE,<br>
format);<br>
<br>
- ctx->texture_driver->gen (GL_TEXTURE_2D, 1, &tex_2d->gl_texture);<br>
+ ctx->texture_driver->gen (ctx, GL_TEXTURE_2D, 1, &tex_2d->gl_texture);<br>
_cogl_bind_gl_texture_transient (GL_TEXTURE_2D,<br>
tex_2d->gl_texture,<br>
FALSE);<br>
@@ -716,7 +718,7 @@ _cogl_texture_2d_pre_paint (CoglTexture *tex, CoglTexturePrePaintFlags flags)<br>
available we'll fallback to temporarily enabling<br>
GL_GENERATE_MIPMAP and reuploading the first pixel */<br>
if (cogl_has_feature (ctx, COGL_FEATURE_ID_OFFSCREEN))<br>
- ctx->texture_driver->gl_generate_mipmaps (GL_TEXTURE_2D);<br>
+ ctx->texture_driver->gl_generate_mipmaps (ctx, GL_TEXTURE_2D);<br>
#if defined(HAVE_COGL_GLES) || defined(HAVE_COGL_GL)<br>
else<br>
{<br>
@@ -784,7 +786,8 @@ _cogl_texture_2d_set_region (CoglTexture *tex,<br>
}<br>
<br>
/* Send data to GL */<br>
- ctx->texture_driver->upload_subregion_to_gl (GL_TEXTURE_2D,<br>
+ ctx->texture_driver->upload_subregion_to_gl (ctx,<br>
+ GL_TEXTURE_2D,<br>
tex_2d->gl_texture,<br>
FALSE,<br>
src_x, src_y,<br>
@@ -822,12 +825,13 @@ _cogl_texture_2d_get_data (CoglTexture *tex,<br>
&gl_format,<br>
&gl_type);<br>
<br>
- ctx->texture_driver->prep_gl_for_pixels_download (rowstride, bpp);<br>
+ ctx->texture_driver->prep_gl_for_pixels_download (ctx, rowstride, bpp);<br>
<br>
_cogl_bind_gl_texture_transient (GL_TEXTURE_2D,<br>
tex_2d->gl_texture,<br>
tex_2d->is_foreign);<br>
- return ctx->texture_driver->gl_get_tex_image (GL_TEXTURE_2D,<br>
+ return ctx->texture_driver->gl_get_tex_image (ctx,<br>
+ GL_TEXTURE_2D,<br>
gl_format,<br>
gl_type,<br>
data);<br>
diff --git a/cogl/cogl-texture-3d.c b/cogl/cogl-texture-3d.c<br>
index e33c248..83ef3ad 100644<br>
--- a/cogl/cogl-texture-3d.c<br>
+++ b/cogl/cogl-texture-3d.c<br>
@@ -174,7 +174,8 @@ _cogl_texture_3d_can_create (CoglContext *ctx,<br>
&gl_type);<br>
<br>
/* Check that the driver can create a texture with that size */<br>
- if (!ctx->texture_driver->size_supported_3d (GL_TEXTURE_3D,<br>
+ if (!ctx->texture_driver->size_supported_3d (ctx,<br>
+ GL_TEXTURE_3D,<br>
gl_intformat,<br>
gl_type,<br>
width,<br>
@@ -224,7 +225,7 @@ cogl_texture_3d_new_with_size (CoglContext *ctx,<br>
width, height, depth,<br>
internal_format);<br>
<br>
- ctx->texture_driver->gen (GL_TEXTURE_3D, 1, &tex_3d->gl_texture);<br>
+ ctx->texture_driver->gen (ctx, GL_TEXTURE_3D, 1, &tex_3d->gl_texture);<br>
_cogl_bind_gl_texture_transient (GL_TEXTURE_3D,<br>
tex_3d->gl_texture,<br>
FALSE);<br>
@@ -296,9 +297,10 @@ _cogl_texture_3d_new_from_bitmap (CoglContext *ctx,<br>
_cogl_bitmap_unmap (dst_bmp);<br>
}<br>
<br>
- ctx->texture_driver->gen (GL_TEXTURE_3D, 1, &tex_3d->gl_texture);<br>
+ ctx->texture_driver->gen (ctx, GL_TEXTURE_3D, 1, &tex_3d->gl_texture);<br>
<br>
- ctx->texture_driver->upload_to_gl_3d (GL_TEXTURE_3D,<br>
+ ctx->texture_driver->upload_to_gl_3d (ctx,<br>
+ GL_TEXTURE_3D,<br>
tex_3d->gl_texture,<br>
FALSE, /* is_foreign */<br>
height,<br>
@@ -510,7 +512,7 @@ _cogl_texture_3d_pre_paint (CoglTexture *tex, CoglTexturePrePaintFlags flags)<br>
available we'll fallback to temporarily enabling<br>
GL_GENERATE_MIPMAP and reuploading the first pixel */<br>
if (cogl_has_feature (ctx, COGL_FEATURE_ID_OFFSCREEN))<br>
- ctx->texture_driver->gl_generate_mipmaps (GL_TEXTURE_3D);<br>
+ ctx->texture_driver->gl_generate_mipmaps (ctx, GL_TEXTURE_3D);<br>
#if defined (HAVE_COGL_GL) || defined (HAVE_COGL_GLES)<br>
else if (ctx->driver != COGL_DRIVER_GLES2)<br>
{<br>
diff --git a/cogl/cogl-texture-driver.h b/cogl/cogl-texture-driver.h<br>
index 07ccdf8..bd48b76 100644<br>
--- a/cogl/cogl-texture-driver.h<br>
+++ b/cogl/cogl-texture-driver.h<br>
@@ -34,9 +34,10 @@ struct _CoglTextureDriver<br>
* the driver will not allocate room for the mipmap tree.<br>
*/<br>
void<br>
- (* gen) (GLenum gl_target,<br>
- GLsizei n,<br>
- GLuint *textures);<br>
+ (* gen) (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
+ GLsizei n,<br>
+ GLuint *textures);<br>
<br>
/*<br>
* This sets up the glPixelStore state for an upload to a destination with<br>
@@ -46,7 +47,8 @@ struct _CoglTextureDriver<br>
* buffer which is why this interface is limited. The GL driver has a more<br>
* flexible version of this function that is uses internally */<br>
void<br>
- (* prep_gl_for_pixels_upload) (int pixels_rowstride,<br>
+ (* prep_gl_for_pixels_upload) (CoglContext *ctx,<br>
+ int pixels_rowstride,<br>
int pixels_bpp);<br>
<br>
/*<br>
@@ -63,18 +65,19 @@ struct _CoglTextureDriver<br>
* XXX: sorry for the ridiculous number of arguments :-(<br>
*/<br>
void<br>
- (* upload_subregion_to_gl) (GLenum gl_target,<br>
- GLuint gl_handle,<br>
- gboolean is_foreign,<br>
- int src_x,<br>
- int src_y,<br>
- int dst_x,<br>
- int dst_y,<br>
- int width,<br>
- int height,<br>
- CoglBitmap *source_bmp,<br>
- GLuint source_gl_format,<br>
- GLuint source_gl_type);<br>
+ (* upload_subregion_to_gl) (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
+ GLuint gl_handle,<br>
+ gboolean is_foreign,<br>
+ int src_x,<br>
+ int src_y,<br>
+ int dst_x,<br>
+ int dst_y,<br>
+ int width,<br>
+ int height,<br>
+ CoglBitmap *source_bmp,<br>
+ GLuint source_gl_format,<br>
+ GLuint source_gl_type);<br>
<br>
/*<br>
* Replaces the contents of the GL texture with the entire bitmap. On<br>
@@ -83,13 +86,14 @@ struct _CoglTextureDriver<br>
* alignment value because there is no GL_UNPACK_ROW_LENGTH<br>
*/<br>
void<br>
- (* upload_to_gl) (GLenum gl_target,<br>
- GLuint gl_handle,<br>
- gboolean is_foreign,<br>
- CoglBitmap *source_bmp,<br>
- GLint internal_gl_format,<br>
- GLuint source_gl_format,<br>
- GLuint source_gl_type);<br>
+ (* upload_to_gl) (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
+ GLuint gl_handle,<br>
+ gboolean is_foreign,<br>
+ CoglBitmap *source_bmp,<br>
+ GLint internal_gl_format,<br>
+ GLuint source_gl_format,<br>
+ GLuint source_gl_type);<br>
<br>
/*<br>
* Replaces the contents of the GL texture with the entire bitmap. The<br>
@@ -99,15 +103,16 @@ struct _CoglTextureDriver<br>
* height of the bitmap by the depth.<br>
*/<br>
void<br>
- (* upload_to_gl_3d) (GLenum gl_target,<br>
- GLuint gl_handle,<br>
- gboolean is_foreign,<br>
- GLint height,<br>
- GLint depth,<br>
- CoglBitmap *source_bmp,<br>
- GLint internal_gl_format,<br>
- GLuint source_gl_format,<br>
- GLuint source_gl_type);<br>
+ (* upload_to_gl_3d) (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
+ GLuint gl_handle,<br>
+ gboolean is_foreign,<br>
+ GLint height,<br>
+ GLint depth,<br>
+ CoglBitmap *source_bmp,<br>
+ GLint internal_gl_format,<br>
+ GLuint source_gl_format,<br>
+ GLuint source_gl_type);<br>
<br>
/*<br>
* This sets up the glPixelStore state for an download to a destination with<br>
@@ -117,7 +122,8 @@ struct _CoglTextureDriver<br>
* destination buffer, the GL driver has a more flexible version of<br>
* this function that it uses internally. */<br>
void<br>
- (* prep_gl_for_pixels_download) (int pixels_rowstride,<br>
+ (* prep_gl_for_pixels_download) (CoglContext *ctx,<br>
+ int pixels_rowstride,<br>
int pixels_bpp);<br>
<br>
/*<br>
@@ -128,36 +134,39 @@ struct _CoglTextureDriver<br>
* _cogl_texture_draw_and_read () )<br>
*/<br>
gboolean<br>
- (* gl_get_tex_image) (GLenum gl_target,<br>
- GLenum dest_gl_format,<br>
- GLenum dest_gl_type,<br>
+ (* gl_get_tex_image) (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
+ GLenum dest_gl_format,<br>
+ GLenum dest_gl_type,<br>
guint8 *dest);<br>
<br>
/*<br>
* It may depend on the driver as to what texture sizes are supported...<br>
*/<br>
gboolean<br>
- (* size_supported) (GLenum gl_target,<br>
+ (* size_supported) (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
GLenum gl_format,<br>
GLenum gl_type,<br>
- int width,<br>
- int height);<br>
+ int width,<br>
+ int height);<br>
<br>
gboolean<br>
- (* size_supported_3d) (GLenum gl_target,<br>
+ (* size_supported_3d) (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
GLenum gl_format,<br>
GLenum gl_type,<br>
- int width,<br>
- int height,<br>
- int depth);<br>
+ int width,<br>
+ int height,<br>
+ int depth);<br>
<br>
/*<br>
* This driver abstraction is needed because GLES doesn't support setting<br>
* a texture border color.<br>
*/<br>
void<br>
- (* try_setting_gl_border_color) (<br>
- GLuint gl_target,<br>
+ (* try_setting_gl_border_color) (CoglContext *ctx,<br>
+ GLuint gl_target,<br>
const GLfloat *transparent_color);<br>
<br>
/*<br>
@@ -166,7 +175,8 @@ struct _CoglTextureDriver<br>
* but GLES doesn't<br>
*/<br>
gboolean<br>
- (* allows_foreign_gl_target) (GLenum gl_target);<br>
+ (* allows_foreign_gl_target) (CoglContext *ctx,<br>
+ GLenum gl_target);<br>
<br>
/*<br>
* glGenerateMipmap semantics may need to be emulated for some<br>
@@ -174,7 +184,8 @@ struct _CoglTextureDriver<br>
* number of known texels.<br>
*/<br>
void<br>
- (* gl_generate_mipmaps) (GLenum texture_target);<br>
+ (* gl_generate_mipmaps) (CoglContext *ctx,<br>
+ GLenum texture_target);<br>
<br>
/*<br>
* The driver may impose constraints on what formats can be used to store<br>
@@ -184,9 +195,9 @@ struct _CoglTextureDriver<br>
*/<br>
CoglPixelFormat<br>
(* find_best_gl_get_data_format) (CoglContext *context,<br>
- CoglPixelFormat format,<br>
- GLenum *closest_gl_format,<br>
- GLenum *closest_gl_type);<br>
+ CoglPixelFormat format,<br>
+ GLenum *closest_gl_format,<br>
+ GLenum *closest_gl_type);<br>
};<br>
<br>
#endif /* __COGL_TEXTURE_DRIVER_H */<br>
diff --git a/cogl/cogl-texture-rectangle.c b/cogl/cogl-texture-rectangle.c<br>
index a7c4ae2..e4db54d 100644<br>
--- a/cogl/cogl-texture-rectangle.c<br>
+++ b/cogl/cogl-texture-rectangle.c<br>
@@ -135,7 +135,8 @@ _cogl_texture_rectangle_can_create (unsigned int width,<br>
&gl_type);<br>
<br>
/* Check that the driver can create a texture with that size */<br>
- if (!ctx->texture_driver->size_supported (GL_TEXTURE_RECTANGLE_ARB,<br>
+ if (!ctx->texture_driver->size_supported (ctx,<br>
+ GL_TEXTURE_RECTANGLE_ARB,<br>
gl_intformat,<br>
gl_type,<br>
width,<br>
@@ -206,7 +207,10 @@ cogl_texture_rectangle_new_with_size (CoglContext *ctx,<br>
tex_rect = _cogl_texture_rectangle_create_base (width, height,<br>
internal_format);<br>
<br>
- ctx->texture_driver->gen (GL_TEXTURE_RECTANGLE_ARB, 1, &tex_rect->gl_texture);<br>
+ ctx->texture_driver->gen (ctx,<br>
+ GL_TEXTURE_RECTANGLE_ARB,<br>
+ 1, /* num textures */<br>
+ &tex_rect->gl_texture);<br>
_cogl_bind_gl_texture_transient (GL_TEXTURE_RECTANGLE_ARB,<br>
tex_rect->gl_texture,<br>
tex_rect->is_foreign);<br>
@@ -255,8 +259,12 @@ _cogl_texture_rectangle_new_from_bitmap (CoglBitmap *bmp,<br>
cogl_bitmap_get_height (bmp),<br>
internal_format);<br>
<br>
- ctx->texture_driver->gen (GL_TEXTURE_RECTANGLE_ARB, 1, &tex_rect->gl_texture);<br>
- ctx->texture_driver->upload_to_gl (GL_TEXTURE_RECTANGLE_ARB,<br>
+ ctx->texture_driver->gen (ctx,<br>
+ GL_TEXTURE_RECTANGLE_ARB,<br>
+ 1, /* num textures */<br>
+ &tex_rect->gl_texture);<br>
+ ctx->texture_driver->upload_to_gl (ctx,<br>
+ GL_TEXTURE_RECTANGLE_ARB,<br>
tex_rect->gl_texture,<br>
FALSE,<br>
dst_bmp,<br>
@@ -288,7 +296,8 @@ _cogl_texture_rectangle_new_from_foreign (GLuint gl_handle,<br>
<br>
_COGL_GET_CONTEXT (ctx, NULL);<br>
<br>
- if (!ctx->texture_driver->allows_foreign_gl_target (GL_TEXTURE_RECTANGLE_ARB))<br>
+ if (!ctx->texture_driver->allows_foreign_gl_target (ctx,<br>
+ GL_TEXTURE_RECTANGLE_ARB))<br>
return NULL;<br>
<br>
/* Make sure it is a valid GL texture object */<br>
@@ -506,7 +515,8 @@ _cogl_texture_rectangle_set_region (CoglTexture *tex,<br>
&gl_type);<br>
<br>
/* Send data to GL */<br>
- ctx->texture_driver->upload_subregion_to_gl (GL_TEXTURE_RECTANGLE_ARB,<br>
+ ctx->texture_driver->upload_subregion_to_gl (ctx,<br>
+ GL_TEXTURE_RECTANGLE_ARB,<br>
tex_rect->gl_texture,<br>
FALSE,<br>
src_x, src_y,<br>
@@ -542,12 +552,13 @@ _cogl_texture_rectangle_get_data (CoglTexture *tex,<br>
&gl_format,<br>
&gl_type);<br>
<br>
- ctx->texture_driver->prep_gl_for_pixels_download (rowstride, bpp);<br>
+ ctx->texture_driver->prep_gl_for_pixels_download (ctx, rowstride, bpp);<br>
<br>
_cogl_bind_gl_texture_transient (GL_TEXTURE_RECTANGLE_ARB,<br>
tex_rect->gl_texture,<br>
tex_rect->is_foreign);<br>
- return ctx->texture_driver->gl_get_tex_image (GL_TEXTURE_RECTANGLE_ARB,<br>
+ return ctx->texture_driver->gl_get_tex_image (ctx,<br>
+ GL_TEXTURE_RECTANGLE_ARB,<br>
gl_format,<br>
gl_type,<br>
data);<br>
diff --git a/cogl/driver/gl/cogl-texture-driver-gl.c b/cogl/driver/gl/cogl-texture-driver-gl.c<br>
index 373fade..31f6f83 100644<br>
--- a/cogl/driver/gl/cogl-texture-driver-gl.c<br>
+++ b/cogl/driver/gl/cogl-texture-driver-gl.c<br>
@@ -46,14 +46,13 @@<br>
#include <math.h><br>
<br>
static void<br>
-_cogl_texture_driver_gen (GLenum gl_target,<br>
- GLsizei n,<br>
- GLuint *textures)<br>
+_cogl_texture_driver_gen (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
+ GLsizei n,<br>
+ GLuint *textures)<br>
{<br>
unsigned int i;<br>
<br>
- _COGL_GET_CONTEXT (ctx, NO_RETVAL);<br>
-<br>
GE (ctx, glGenTextures (n, textures));<br>
<br>
for (i = 0; i < n; i++)<br>
@@ -86,14 +85,13 @@ _cogl_texture_driver_gen (GLenum gl_target,<br>
/* OpenGL - unlike GLES - can upload a sub region of pixel data from a larger<br>
* source buffer */<br>
static void<br>
-prep_gl_for_pixels_upload_full (int pixels_rowstride,<br>
+prep_gl_for_pixels_upload_full (CoglContext *ctx,<br>
+ int pixels_rowstride,<br>
int image_height,<br>
int pixels_src_x,<br>
int pixels_src_y,<br>
int pixels_bpp)<br>
{<br>
- _COGL_GET_CONTEXT (ctx, NO_RETVAL);<br>
-<br>
GE( ctx, glPixelStorei (GL_UNPACK_ROW_LENGTH,<br>
pixels_rowstride / pixels_bpp) );<br>
<br>
@@ -107,23 +105,23 @@ prep_gl_for_pixels_upload_full (int pixels_rowstride,<br>
}<br>
<br>
static void<br>
-_cogl_texture_driver_prep_gl_for_pixels_upload (int pixels_rowstride,<br>
+_cogl_texture_driver_prep_gl_for_pixels_upload (CoglContext *ctx,<br>
+ int pixels_rowstride,<br>
int pixels_bpp)<br>
{<br>
- prep_gl_for_pixels_upload_full (pixels_rowstride, 0, 0, 0, pixels_bpp);<br>
+ prep_gl_for_pixels_upload_full (ctx, pixels_rowstride, 0, 0, 0, pixels_bpp);<br>
}<br>
<br>
/* OpenGL - unlike GLES - can download pixel data into a sub region of<br>
* a larger destination buffer */<br>
static void<br>
-prep_gl_for_pixels_download_full (int pixels_rowstride,<br>
+prep_gl_for_pixels_download_full (CoglContext *ctx,<br>
+ int pixels_rowstride,<br>
int image_height,<br>
int pixels_src_x,<br>
int pixels_src_y,<br>
int pixels_bpp)<br>
{<br>
- _COGL_GET_CONTEXT (ctx, NO_RETVAL);<br>
-<br>
GE( ctx, glPixelStorei (GL_PACK_ROW_LENGTH, pixels_rowstride / pixels_bpp) );<br>
<br>
GE( ctx, glPixelStorei (GL_PACK_SKIP_PIXELS, pixels_src_x) );<br>
@@ -136,14 +134,16 @@ prep_gl_for_pixels_download_full (int pixels_rowstride,<br>
}<br>
<br>
static void<br>
-_cogl_texture_driver_prep_gl_for_pixels_download (int pixels_rowstride,<br>
+_cogl_texture_driver_prep_gl_for_pixels_download (CoglContext *ctx,<br>
+ int pixels_rowstride,<br>
int pixels_bpp)<br>
{<br>
- prep_gl_for_pixels_download_full (pixels_rowstride, 0, 0, 0, pixels_bpp);<br>
+ prep_gl_for_pixels_download_full (ctx, pixels_rowstride, 0, 0, 0, pixels_bpp);<br>
}<br>
<br>
static void<br>
-_cogl_texture_driver_upload_subregion_to_gl (GLenum gl_target,<br>
+_cogl_texture_driver_upload_subregion_to_gl (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
GLuint gl_handle,<br>
gboolean is_foreign,<br>
int src_x,<br>
@@ -160,12 +160,11 @@ _cogl_texture_driver_upload_subregion_to_gl (GLenum gl_target,<br>
CoglPixelFormat source_format = cogl_bitmap_get_format (source_bmp);<br>
int bpp = _cogl_pixel_format_get_bytes_per_pixel (source_format);<br>
<br>
- _COGL_GET_CONTEXT (ctx, NO_RETVAL);<br>
-<br>
data = _cogl_bitmap_bind (source_bmp, COGL_BUFFER_ACCESS_READ, 0);<br>
<br>
/* Setup gl alignment to match rowstride and top-left corner */<br>
- prep_gl_for_pixels_upload_full (cogl_bitmap_get_rowstride (source_bmp),<br>
+ prep_gl_for_pixels_upload_full (ctx,<br>
+ cogl_bitmap_get_rowstride (source_bmp),<br>
0,<br>
src_x,<br>
src_y,<br>
@@ -184,7 +183,8 @@ _cogl_texture_driver_upload_subregion_to_gl (GLenum gl_target,<br>
}<br>
<br>
static void<br>
-_cogl_texture_driver_upload_to_gl (GLenum gl_target,<br>
+_cogl_texture_driver_upload_to_gl (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
GLuint gl_handle,<br>
gboolean is_foreign,<br>
CoglBitmap *source_bmp,<br>
@@ -196,12 +196,11 @@ _cogl_texture_driver_upload_to_gl (GLenum gl_target,<br>
CoglPixelFormat source_format = cogl_bitmap_get_format (source_bmp);<br>
int bpp = _cogl_pixel_format_get_bytes_per_pixel (source_format);<br>
<br>
- _COGL_GET_CONTEXT (ctx, NO_RETVAL);<br>
-<br>
data = _cogl_bitmap_bind (source_bmp, COGL_BUFFER_ACCESS_READ, 0);<br>
<br>
/* Setup gl alignment to match rowstride and top-left corner */<br>
- prep_gl_for_pixels_upload_full (cogl_bitmap_get_rowstride (source_bmp),<br>
+ prep_gl_for_pixels_upload_full (ctx,<br>
+ cogl_bitmap_get_rowstride (source_bmp),<br>
0, 0, 0, bpp);<br>
<br>
_cogl_bind_gl_texture_transient (gl_target, gl_handle, is_foreign);<br>
@@ -219,7 +218,8 @@ _cogl_texture_driver_upload_to_gl (GLenum gl_target,<br>
}<br>
<br>
static void<br>
-_cogl_texture_driver_upload_to_gl_3d (GLenum gl_target,<br>
+_cogl_texture_driver_upload_to_gl_3d (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
GLuint gl_handle,<br>
gboolean is_foreign,<br>
GLint height,<br>
@@ -233,12 +233,11 @@ _cogl_texture_driver_upload_to_gl_3d (GLenum gl_target,<br>
CoglPixelFormat source_format = cogl_bitmap_get_format (source_bmp);<br>
int bpp = _cogl_pixel_format_get_bytes_per_pixel (source_format);<br>
<br>
- _COGL_GET_CONTEXT (ctx, NO_RETVAL);<br>
-<br>
data = _cogl_bitmap_bind (source_bmp, COGL_BUFFER_ACCESS_READ, 0);<br>
<br>
/* Setup gl alignment to match rowstride and top-left corner */<br>
- prep_gl_for_pixels_upload_full (cogl_bitmap_get_rowstride (source_bmp),<br>
+ prep_gl_for_pixels_upload_full (ctx,<br>
+ cogl_bitmap_get_rowstride (source_bmp),<br>
(cogl_bitmap_get_height (source_bmp) /<br>
depth),<br>
0, 0, bpp);<br>
@@ -260,13 +259,12 @@ _cogl_texture_driver_upload_to_gl_3d (GLenum gl_target,<br>
}<br>
<br>
static gboolean<br>
-_cogl_texture_driver_gl_get_tex_image (GLenum gl_target,<br>
- GLenum dest_gl_format,<br>
- GLenum dest_gl_type,<br>
+_cogl_texture_driver_gl_get_tex_image (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
+ GLenum dest_gl_format,<br>
+ GLenum dest_gl_type,<br>
guint8 *dest)<br>
{<br>
- _COGL_GET_CONTEXT (ctx, FALSE);<br>
-<br>
GE (ctx, glGetTexImage (gl_target,<br>
0, /* level */<br>
dest_gl_format,<br>
@@ -276,18 +274,17 @@ _cogl_texture_driver_gl_get_tex_image (GLenum gl_target,<br>
}<br>
<br>
static gboolean<br>
-_cogl_texture_driver_size_supported_3d (GLenum gl_target,<br>
+_cogl_texture_driver_size_supported_3d (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
GLenum gl_format,<br>
GLenum gl_type,<br>
- int width,<br>
- int height,<br>
- int depth)<br>
+ int width,<br>
+ int height,<br>
+ int depth)<br>
{<br>
GLenum proxy_target;<br>
GLint new_width = 0;<br>
<br>
- _COGL_GET_CONTEXT (ctx, FALSE);<br>
-<br>
if (gl_target == GL_TEXTURE_3D)<br>
proxy_target = GL_PROXY_TEXTURE_3D;<br>
else<br>
@@ -306,17 +303,16 @@ _cogl_texture_driver_size_supported_3d (GLenum gl_target,<br>
}<br>
<br>
static gboolean<br>
-_cogl_texture_driver_size_supported (GLenum gl_target,<br>
+_cogl_texture_driver_size_supported (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
GLenum gl_format,<br>
GLenum gl_type,<br>
- int width,<br>
- int height)<br>
+ int width,<br>
+ int height)<br>
{<br>
GLenum proxy_target;<br>
GLint new_width = 0;<br>
<br>
- _COGL_GET_CONTEXT (ctx, FALSE);<br>
-<br>
if (gl_target == GL_TEXTURE_2D)<br>
proxy_target = GL_PROXY_TEXTURE_2D;<br>
#if HAVE_COGL_GL<br>
@@ -339,12 +335,11 @@ _cogl_texture_driver_size_supported (GLenum gl_target,<br>
}<br>
<br>
static void<br>
-_cogl_texture_driver_try_setting_gl_border_color (<br>
- GLuint gl_target,<br>
- const GLfloat *transparent_color)<br>
+_cogl_texture_driver_try_setting_gl_border_color<br>
+ (CoglContext *ctx,<br>
+ GLuint gl_target,<br>
+ const GLfloat *transparent_color)<br>
{<br>
- _COGL_GET_CONTEXT (ctx, NO_RETVAL);<br>
-<br>
/* Use a transparent border color so that we can leave the<br>
color buffer alone when using texture co-ordinates<br>
outside of the texture */<br>
@@ -353,7 +348,8 @@ _cogl_texture_driver_try_setting_gl_border_color (<br>
}<br>
<br>
static gboolean<br>
-_cogl_texture_driver_allows_foreign_gl_target (GLenum gl_target)<br>
+_cogl_texture_driver_allows_foreign_gl_target (CoglContext *ctx,<br>
+ GLenum gl_target)<br>
{<br>
/* GL_ARB_texture_rectangle textures are supported if they are<br>
created from foreign because some chipsets have trouble with<br>
@@ -369,10 +365,9 @@ _cogl_texture_driver_allows_foreign_gl_target (GLenum gl_target)<br>
}<br>
<br>
static void<br>
-_cogl_texture_driver_gl_generate_mipmaps (GLenum gl_target)<br>
+_cogl_texture_driver_gl_generate_mipmaps (CoglContext *ctx,<br>
+ GLenum gl_target)<br>
{<br>
- _COGL_GET_CONTEXT (ctx, NO_RETVAL);<br>
-<br>
GE( ctx, glGenerateMipmap (gl_target) );<br>
}<br>
<br>
diff --git a/cogl/driver/gles/cogl-texture-driver-gles.c b/cogl/driver/gles/cogl-texture-driver-gles.c<br>
index ad1c248..f2690da 100644<br>
--- a/cogl/driver/gles/cogl-texture-driver-gles.c<br>
+++ b/cogl/driver/gles/cogl-texture-driver-gles.c<br>
@@ -53,14 +53,13 @@<br>
#endif<br>
<br>
static void<br>
-_cogl_texture_driver_gen (GLenum gl_target,<br>
- GLsizei n,<br>
- GLuint *textures)<br>
+_cogl_texture_driver_gen (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
+ GLsizei n,<br>
+ GLuint *textures)<br>
{<br>
unsigned int i;<br>
<br>
- _COGL_GET_CONTEXT (ctx, NO_RETVAL);<br>
-<br>
GE (ctx, glGenTextures (n, textures));<br>
<br>
for (i = 0; i < n; i++)<br>
@@ -84,21 +83,24 @@ _cogl_texture_driver_gen (GLenum gl_target,<br>
}<br>
<br>
static void<br>
-_cogl_texture_driver_prep_gl_for_pixels_upload (int pixels_rowstride,<br>
+_cogl_texture_driver_prep_gl_for_pixels_upload (CoglContext *context,<br>
+ int pixels_rowstride,<br>
int pixels_bpp)<br>
{<br>
_cogl_texture_prep_gl_alignment_for_pixels_upload (pixels_rowstride);<br>
}<br>
<br>
static void<br>
-_cogl_texture_driver_prep_gl_for_pixels_download (int pixels_rowstride,<br>
+_cogl_texture_driver_prep_gl_for_pixels_download (CoglContext *ctx,<br>
+ int pixels_rowstride,<br>
int pixels_bpp)<br>
{<br>
_cogl_texture_prep_gl_alignment_for_pixels_download (pixels_rowstride);<br>
}<br>
<br>
static CoglBitmap *<br>
-prepare_bitmap_alignment_for_upload (CoglBitmap *src_bmp)<br>
+prepare_bitmap_alignment_for_upload (CoglContext *ctx,<br>
+ CoglBitmap *src_bmp)<br>
{<br>
CoglPixelFormat format = cogl_bitmap_get_format (src_bmp);<br>
int bpp = _cogl_pixel_format_get_bytes_per_pixel (format);<br>
@@ -124,7 +126,8 @@ prepare_bitmap_alignment_for_upload (CoglBitmap *src_bmp)<br>
}<br>
<br>
static void<br>
-_cogl_texture_driver_upload_subregion_to_gl (GLenum gl_target,<br>
+_cogl_texture_driver_upload_subregion_to_gl (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
GLuint gl_handle,<br>
gboolean is_foreign,<br>
int src_x,<br>
@@ -143,8 +146,6 @@ _cogl_texture_driver_upload_subregion_to_gl (GLenum gl_target,<br>
CoglBitmap *slice_bmp;<br>
int rowstride;<br>
<br>
- _COGL_GET_CONTEXT (ctx, NO_RETVAL);<br>
-<br>
/* If we are copying a sub region of the source bitmap then we need<br>
to copy it because GLES does not support GL_UNPACK_ROW_LENGTH */<br>
if (src_x != 0 || src_y != 0 ||<br>
@@ -162,12 +163,12 @@ _cogl_texture_driver_upload_subregion_to_gl (GLenum gl_target,<br>
width, height);<br>
}<br>
else<br>
- slice_bmp = prepare_bitmap_alignment_for_upload (source_bmp);<br>
+ slice_bmp = prepare_bitmap_alignment_for_upload (ctx, source_bmp);<br>
<br>
rowstride = cogl_bitmap_get_rowstride (slice_bmp);<br>
<br>
/* Setup gl alignment to match rowstride and top-left corner */<br>
- _cogl_texture_driver_prep_gl_for_pixels_upload (rowstride, bpp);<br>
+ _cogl_texture_driver_prep_gl_for_pixels_upload (ctx, rowstride, bpp);<br>
<br>
data = _cogl_bitmap_bind (slice_bmp, COGL_BUFFER_ACCESS_READ, 0);<br>
<br>
@@ -186,7 +187,8 @@ _cogl_texture_driver_upload_subregion_to_gl (GLenum gl_target,<br>
}<br>
<br>
static void<br>
-_cogl_texture_driver_upload_to_gl (GLenum gl_target,<br>
+_cogl_texture_driver_upload_to_gl (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
GLuint gl_handle,<br>
gboolean is_foreign,<br>
CoglBitmap *source_bmp,<br>
@@ -202,13 +204,11 @@ _cogl_texture_driver_upload_to_gl (GLenum gl_target,<br>
CoglBitmap *bmp;<br>
guint8 *data;<br>
<br>
- _COGL_GET_CONTEXT (ctx, NO_RETVAL);<br>
-<br>
- bmp = prepare_bitmap_alignment_for_upload (source_bmp);<br>
+ bmp = prepare_bitmap_alignment_for_upload (ctx, source_bmp);<br>
rowstride = cogl_bitmap_get_rowstride (bmp);<br>
<br>
/* Setup gl alignment to match rowstride and top-left corner */<br>
- _cogl_texture_driver_prep_gl_for_pixels_upload (rowstride, bpp);<br>
+ _cogl_texture_driver_prep_gl_for_pixels_upload (ctx, rowstride, bpp);<br>
<br>
_cogl_bind_gl_texture_transient (gl_target, gl_handle, is_foreign);<br>
<br>
@@ -228,7 +228,8 @@ _cogl_texture_driver_upload_to_gl (GLenum gl_target,<br>
}<br>
<br>
static void<br>
-_cogl_texture_driver_upload_to_gl_3d (GLenum gl_target,<br>
+_cogl_texture_driver_upload_to_gl_3d (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
GLuint gl_handle,<br>
gboolean is_foreign,<br>
GLint height,<br>
@@ -245,8 +246,6 @@ _cogl_texture_driver_upload_to_gl_3d (GLenum gl_target,<br>
int bmp_height = cogl_bitmap_get_height (source_bmp);<br>
guint8 *data;<br>
<br>
- _COGL_GET_CONTEXT (ctx, NO_RETVAL);<br>
-<br>
_cogl_bind_gl_texture_transient (gl_target, gl_handle, is_foreign);<br>
<br>
/* If the rowstride or image height can't be specified with just<br>
@@ -260,7 +259,7 @@ _cogl_texture_driver_upload_to_gl_3d (GLenum gl_target,<br>
CoglPixelFormat source_bmp_format = cogl_bitmap_get_format (source_bmp);<br>
int i;<br>
<br>
- _cogl_texture_driver_prep_gl_for_pixels_upload (bmp_width * bpp, bpp);<br>
+ _cogl_texture_driver_prep_gl_for_pixels_upload (ctx, bmp_width * bpp, bpp);<br>
<br>
/* Initialize the texture with empty data and then upload each<br>
image with a sub-region update */<br>
@@ -314,7 +313,7 @@ _cogl_texture_driver_upload_to_gl_3d (GLenum gl_target,<br>
{<br>
data = _cogl_bitmap_bind (source_bmp, COGL_BUFFER_ACCESS_READ, 0);<br>
<br>
- _cogl_texture_driver_prep_gl_for_pixels_upload (rowstride, bpp);<br>
+ _cogl_texture_driver_prep_gl_for_pixels_upload (ctx, rowstride, bpp);<br>
<br>
GE( ctx, glTexImage3D (gl_target,<br>
0, /* level */<br>
@@ -335,26 +334,26 @@ _cogl_texture_driver_upload_to_gl_3d (GLenum gl_target,<br>
* fallback to a generic render + readpixels approach to downloading<br>
* texture data. (See _cogl_texture_draw_and_read() ) */<br>
static gboolean<br>
-_cogl_texture_driver_gl_get_tex_image (GLenum gl_target,<br>
- GLenum dest_gl_format,<br>
- GLenum dest_gl_type,<br>
+_cogl_texture_driver_gl_get_tex_image (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
+ GLenum dest_gl_format,<br>
+ GLenum dest_gl_type,<br>
guint8 *dest)<br>
{<br>
return FALSE;<br>
}<br>
<br>
static gboolean<br>
-_cogl_texture_driver_size_supported_3d (GLenum gl_target,<br>
+_cogl_texture_driver_size_supported_3d (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
GLenum gl_format,<br>
GLenum gl_type,<br>
- int width,<br>
- int height,<br>
- int depth)<br>
+ int width,<br>
+ int height,<br>
+ int depth)<br>
{<br>
GLint max_size;<br>
<br>
- _COGL_GET_CONTEXT (ctx, FALSE);<br>
-<br>
/* GLES doesn't support a proxy texture target so let's at least<br>
check whether the size is greater than<br>
GL_MAX_3D_TEXTURE_SIZE_OES */<br>
@@ -364,16 +363,15 @@ _cogl_texture_driver_size_supported_3d (GLenum gl_target,<br>
}<br>
<br>
static gboolean<br>
-_cogl_texture_driver_size_supported (GLenum gl_target,<br>
+_cogl_texture_driver_size_supported (CoglContext *ctx,<br>
+ GLenum gl_target,<br>
GLenum gl_format,<br>
GLenum gl_type,<br>
- int width,<br>
- int height)<br>
+ int width,<br>
+ int height)<br>
{<br>
GLint max_size;<br>
<br>
- _COGL_GET_CONTEXT (ctx, FALSE);<br>
-<br>
/* GLES doesn't support a proxy texture target so let's at least<br>
check whether the size is greater than GL_MAX_TEXTURE_SIZE */<br>
GE( ctx, glGetIntegerv (GL_MAX_TEXTURE_SIZE, &max_size) );<br>
@@ -382,15 +380,17 @@ _cogl_texture_driver_size_supported (GLenum gl_target,<br>
}<br>
<br>
static void<br>
-_cogl_texture_driver_try_setting_gl_border_color (<br>
- GLuint gl_target,<br>
- const GLfloat *transparent_color)<br>
+_cogl_texture_driver_try_setting_gl_border_color<br>
+ (CoglContext *ctx,<br>
+ GLuint gl_target,<br>
+ const GLfloat *transparent_color)<br>
{<br>
/* FAIL! */<br>
}<br>
<br>
static gboolean<br>
-_cogl_texture_driver_allows_foreign_gl_target (GLenum gl_target)<br>
+_cogl_texture_driver_allows_foreign_gl_target (CoglContext *ctx,<br>
+ GLenum gl_target)<br>
{<br>
/* Allow 2-dimensional textures only */<br>
if (gl_target != GL_TEXTURE_2D)<br>
@@ -399,10 +399,9 @@ _cogl_texture_driver_allows_foreign_gl_target (GLenum gl_target)<br>
}<br>
<br>
static void<br>
-_cogl_texture_driver_gl_generate_mipmaps (GLenum gl_target)<br>
+_cogl_texture_driver_gl_generate_mipmaps (CoglContext *ctx,<br>
+ GLenum gl_target)<br>
{<br>
- _COGL_GET_CONTEXT (ctx, NO_RETVAL);<br>
-<br>
if (ctx->driver == COGL_DRIVER_GLES2)<br>
GE( ctx, glGenerateMipmap (gl_target) );<br>
}<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.7.3.16.g9464b<br>
<br>
_______________________________________________<br>
Cogl mailing list<br>
<a href="mailto:Cogl@lists.freedesktop.org">Cogl@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/cogl" target="_blank">http://lists.freedesktop.org/mailman/listinfo/cogl</a><br>
</font></span></blockquote></div><br>