From 1208ac55766e410f7cac3ad9d6cf588e7846ca64 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Fri, 22 Apr 2011 12:23:25 -0400 Subject: Take into account color intensity for filtered transparency in canvas export. --- libdimension/gl.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'libdimension/gl.c') diff --git a/libdimension/gl.c b/libdimension/gl.c index 77eefcd..857c7de 100644 --- a/libdimension/gl.c +++ b/libdimension/gl.c @@ -112,8 +112,14 @@ dmnsn_gl_write_canvas(const dmnsn_canvas *canvas) pixel[2] = sRGB.B*UINT16_MAX; } - /* color.filter + color.trans is in [0.0, 1.0] by definition */ - pixel[3] = (color.filter + color.trans)*UINT16_MAX; + double alpha = dmnsn_color_intensity(color)*color.filter + color.trans; + if (alpha <= 0.0) { + pixel[3] = 0; + } else if (alpha >= 1.0) { + pixel[3] = UINT16_MAX; + } else { + pixel[3] = alpha*UINT16_MAX; + } } } @@ -201,6 +207,12 @@ dmnsn_gl_optimizer_fn(const dmnsn_canvas *canvas, pixel[2] = sRGB.B*UINT16_MAX; } - /* color.filter + color.trans is in [0.0, 1.0] by definition */ - pixel[3] = (color.filter + color.trans)*UINT16_MAX; + double alpha = dmnsn_color_intensity(color)*color.filter + color.trans; + if (alpha <= 0.0) { + pixel[3] = 0; + } else if (alpha >= 1.0) { + pixel[3] = UINT16_MAX; + } else { + pixel[3] = alpha*UINT16_MAX; + } } -- cgit v1.2.3