Re: [LIBART] Patch for 'full-span' redraw issues
- From: Daniele Nicolodi <daniele grinta net>
- To: libart <libart gnome org>
- Subject: Re: [LIBART] Patch for 'full-span' redraw issues
- Date: Thu, 13 Sep 2001 15:45:34 +0200
On Wed, Sep 12, 2001 at 04:57:28PM +0100, James Turner wrote:
> The attached patch fixes a bug in the art_render_ code when a SVP spans 
> an entire row of the render area; the row callbacks in art_rgb_svp.c 
> have additional logic in the (n_steps == 0) case to fill the row if 
> required.
This patch dont aply to me.
Attached there is a new patch that aply correctly to the cvs version
and that contain some cosmetic modifies, conform to the style used in 
the other files of libart.
Ciao
-- 
Daniele
		    --- http://www.grinta.net ---
Index: art_render_svp.c
===================================================================
RCS file: /cvs/gnome/libart_lgpl/art_render_svp.c,v
retrieving revision 1.2
diff -u -r1.2 art_render_svp.c
--- art_render_svp.c	2000/05/29 21:58:00	1.2
+++ art_render_svp.c	2001/09/13 14:23:04
@@ -105,6 +105,18 @@
 	  run[n_run].alpha = 0x8000;
 	  n_run++;
 	}
+    } 
+  else
+    {      
+      if (running_sum > 0x80ff)
+	{
+	  run[0].x = x0;
+	  run[0].alpha = running_sum;
+	  
+	  run[1].x = x1;
+	  run[1].alpha = 0x8000;
+	  n_run = 2;
+	}
     }
 
   render->n_run = n_run;
@@ -172,6 +184,22 @@
 	  n_run++;
 	  span_x[n_span++] = x1;
 	}
+    } 
+  else
+    {
+      if (running_sum > 0x80ff)
+	{
+	  run[0].x = x0;
+	  run[0].alpha = running_sum;
+	  
+	  run[1].x = x1;
+	  run[1].alpha = 0x8000;
+	  n_run = 2;
+	  
+	  span_x[0] = x0;
+	  span_x[1] = x1;
+	  n_span = 2;
+	}
     }
 
   render->n_run = n_run;
@@ -238,6 +266,20 @@
 	  run[n_run].alpha = 0x8000;
 	  n_run++;
 	}
+    } 
+  else
+    {
+      alpha = (running_sum >> 16) & 0xff;
+      if (alpha) 
+	{
+	  run[0].x = x0;
+	  alpha = ((running_sum >> 8) * opacity + 0x80080) >> 8;
+	  run[0].alpha = alpha;
+	  
+	  run[1].x = x1;
+	  run[1].alpha = 0x8000;
+	  n_run = 2;
+	}
     }
 
   render->n_run = n_run;
@@ -311,6 +353,24 @@
 	  run[n_run].alpha = 0x8000;
 	  n_run++;
 	  span_x[n_span++] = x1;
+	}
+    } 
+  else
+    {
+      alpha = (running_sum >> 16) & 0xff;
+      if (alpha)
+	{
+	  run[0].x = x0;
+	  alpha = ((running_sum >> 8) * opacity + 0x80080) >> 8;
+	  run[0].alpha = alpha;
+	  
+	  run[1].x = x1;
+	  run[1].alpha = 0x8000;
+	  n_run = 2;
+	  
+	  span_x[0] = x0;
+	  span_x[1] = x1;
+	  n_span = 2;
 	}
     }
 
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]