* clutter/cogl/gles/cogl-texture.c:

(cogl_texture_download_from_gl:) Store old blending factors
	and restore them when done. The lack of ability to retrieve
	the alpha channel now more noticable in test-cogl-tex-getset
	since the edges of the hand are not antialiased.

	* clutter/cogl/gl(es)/cogl-internal.h: Declare
	cogl_blend_func to avoid "implicit implementation" compile
	warning.
This commit is contained in:
Ivan Leben 2008-05-19 15:21:56 +00:00
parent d049d9ead4
commit 006573ac61
3 changed files with 17 additions and 2 deletions

View File

@ -58,4 +58,8 @@ cogl_enable (gulong flags);
gulong gulong
cogl_get_enable (); cogl_get_enable ();
void
cogl_blend_func (COGLenum src_factor,
COGLenum dst_factor);
#endif /* __COGL_INTERNAL_H */ #endif /* __COGL_INTERNAL_H */

View File

@ -60,4 +60,8 @@ cogl_enable (gulong flags);
gulong gulong
cogl_get_enable (); cogl_get_enable ();
void
cogl_blend_func (COGLenum src_factor,
COGLenum dst_factor);
#endif /* __COGL_INTERNAL_H */ #endif /* __COGL_INTERNAL_H */

View File

@ -255,6 +255,10 @@ _cogl_texture_download_from_gl (CoglTexture *tex,
ClutterFixed tx1, ty1; ClutterFixed tx1, ty1;
ClutterFixed tx2, ty2; ClutterFixed tx2, ty2;
int bw, bh; int bw, bh;
COGLenum old_src_factor;
COGLenum old_dst_factor;
_COGL_GET_CONTEXT (ctx, FALSE);
handle = _cogl_texture_handle_from_pointer (tex); handle = _cogl_texture_handle_from_pointer (tex);
bpp = _cogl_get_format_bpp (COGL_PIXEL_FORMAT_RGBA_8888); bpp = _cogl_get_format_bpp (COGL_PIXEL_FORMAT_RGBA_8888);
@ -286,6 +290,10 @@ _cogl_texture_download_from_gl (CoglTexture *tex,
/* Draw to all channels */ /* Draw to all channels */
cogl_draw_buffer (COGL_WINDOW_BUFFER | COGL_MASK_BUFFER, 0); cogl_draw_buffer (COGL_WINDOW_BUFFER | COGL_MASK_BUFFER, 0);
/* Store old blending factors and setup direct copy operation */
old_src_factor = ctx->blend_src_factor;
old_dst_factor = ctx->blend_dst_factor;
cogl_blend_func (CGL_ONE, CGL_ZERO);
/* If whole image fits into the viewport and target buffer /* If whole image fits into the viewport and target buffer
has got no special rowstride, we can do it in one pass */ has got no special rowstride, we can do it in one pass */
@ -297,7 +305,6 @@ _cogl_texture_download_from_gl (CoglTexture *tex,
for direct copy to framebuffer */ for direct copy to framebuffer */
cogl_paint_init (&cback); cogl_paint_init (&cback);
cogl_color (&cwhite); cogl_color (&cwhite);
cogl_blend_func (CGL_ONE, CGL_ZERO);
/* Draw the texture image */ /* Draw the texture image */
cogl_texture_rectangle (handle, cogl_texture_rectangle (handle,
@ -350,7 +357,6 @@ _cogl_texture_download_from_gl (CoglTexture *tex,
for direct copy to framebuffer */ for direct copy to framebuffer */
cogl_paint_init (&cback); cogl_paint_init (&cback);
cogl_color (&cwhite); cogl_color (&cwhite);
cogl_blend_func (CGL_ONE, CGL_ZERO);
/* Draw a portion of texture */ /* Draw a portion of texture */
cogl_texture_rectangle (handle, cogl_texture_rectangle (handle,
@ -397,6 +403,7 @@ _cogl_texture_download_from_gl (CoglTexture *tex,
glPopMatrix (); glPopMatrix ();
cogl_draw_buffer (COGL_WINDOW_BUFFER, 0); cogl_draw_buffer (COGL_WINDOW_BUFFER, 0);
cogl_blend_func (old_src_factor, old_dst_factor);
return TRUE; return TRUE;
} }