diff options
author | Benjamin Otte <otte@redhat.com> | 2010-05-19 13:19:56 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2010-05-20 11:02:49 +0200 |
commit | 26e8e506b66022910c262da0618ef5be8c5a080e (patch) | |
tree | 3e5f57acb81c08174469966642c06b894777ca72 | |
parent | e4cb46b50015f792b0e8c7b49f3b42f2c3c0ad00 (diff) |
gl: Add _cairo_gl_surface_is_texture()
It's more explicit then just checking surface->fb != 0
Also, it makes improving that check easier.
-rw-r--r-- | src/cairo-gl-device.c | 4 | ||||
-rw-r--r-- | src/cairo-gl-private.h | 6 | ||||
-rw-r--r-- | src/cairo-gl-surface.c | 11 |
3 files changed, 14 insertions, 7 deletions
diff --git a/src/cairo-gl-device.c b/src/cairo-gl-device.c index e31fc055..be4298fd 100644 --- a/src/cairo-gl-device.c +++ b/src/cairo-gl-device.c @@ -190,7 +190,7 @@ _cairo_gl_context_set_destination (cairo_gl_context_t *ctx, if (ctx->current_target != surface) { ctx->current_target = surface; - if (surface->fb) { + if (_cairo_gl_surface_is_texture (surface)) { glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, surface->fb); glDrawBuffer (GL_COLOR_ATTACHMENT0_EXT); glReadBuffer (GL_COLOR_ATTACHMENT0_EXT); @@ -206,7 +206,7 @@ _cairo_gl_context_set_destination (cairo_gl_context_t *ctx, glMatrixMode (GL_PROJECTION); glLoadIdentity (); - if (surface->fb) + if (_cairo_gl_surface_is_texture (surface)) glOrtho (0, surface->width, 0, surface->height, -1.0, 1.0); else glOrtho (0, surface->width, surface->height, 0, -1.0, 1.0); diff --git a/src/cairo-gl-private.h b/src/cairo-gl-private.h index 825dd93f..19c34c31 100644 --- a/src/cairo-gl-private.h +++ b/src/cairo-gl-private.h @@ -228,6 +228,12 @@ _cairo_gl_surface_init (cairo_device_t *device, cairo_content_t content, int width, int height); +static cairo_always_inline cairo_bool_t cairo_warn +_cairo_gl_surface_is_texture (cairo_gl_surface_t *surface) +{ + return surface->fb != 0; +} + cairo_private cairo_status_t _cairo_gl_surface_draw_image (cairo_gl_surface_t *dst, cairo_image_surface_t *src, diff --git a/src/cairo-gl-surface.c b/src/cairo-gl-surface.c index ecd30a4a..992a40b5 100644 --- a/src/cairo-gl-surface.c +++ b/src/cairo-gl-surface.c @@ -400,7 +400,8 @@ cairo_gl_surface_set_size (cairo_surface_t *abstract_surface, if (unlikely (abstract_surface->status)) return; - if (! _cairo_surface_is_gl (abstract_surface) || surface->fb) { + if (! _cairo_surface_is_gl (abstract_surface) || + ! _cairo_gl_surface_is_texture (surface)) { status = _cairo_surface_set_error (abstract_surface, CAIRO_STATUS_SURFACE_TYPE_MISMATCH); return; @@ -447,7 +448,7 @@ cairo_gl_surface_swapbuffers (cairo_surface_t *abstract_surface) return; } - if (! surface->fb) { + if (! _cairo_gl_surface_is_texture (surface)) { cairo_gl_context_t *ctx; if (_cairo_gl_context_acquire (surface->base.device, &ctx)) @@ -536,7 +537,7 @@ _cairo_gl_surface_draw_image (cairo_gl_surface_t *dst, glPixelStorei (GL_UNPACK_ALIGNMENT, 1); glPixelStorei (GL_UNPACK_ROW_LENGTH, src->stride / cpp); - if (dst->fb) { + if (_cairo_gl_surface_is_texture (dst)) { glBindTexture (ctx->tex_target, dst->tex); glTexParameteri (ctx->tex_target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri (ctx->tex_target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); @@ -666,12 +667,12 @@ _cairo_gl_surface_get_image (cairo_gl_surface_t *surface, glPixelStorei (GL_PACK_ALIGNMENT, 1); glPixelStorei (GL_PACK_ROW_LENGTH, image->stride / cpp); - if (surface->fb == 0 && GLEW_MESA_pack_invert) + if (! _cairo_gl_surface_is_texture (surface) && GLEW_MESA_pack_invert) glPixelStorei (GL_PACK_INVERT_MESA, 1); glReadPixels (interest->x, interest->y, interest->width, interest->height, format, type, image->data); - if (surface->fb == 0 && GLEW_MESA_pack_invert) + if (! _cairo_gl_surface_is_texture (surface) && GLEW_MESA_pack_invert) glPixelStorei (GL_PACK_INVERT_MESA, 0); _cairo_gl_context_release (ctx); |