summaryrefslogtreecommitdiff
path: root/src/corelib/render/software/pf_gray8.inc
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/render/software/pf_gray8.inc')
-rw-r--r--src/corelib/render/software/pf_gray8.inc874
1 files changed, 437 insertions, 437 deletions
diff --git a/src/corelib/render/software/pf_gray8.inc b/src/corelib/render/software/pf_gray8.inc
index 47454637..effc3a19 100644
--- a/src/corelib/render/software/pf_gray8.inc
+++ b/src/corelib/render/software/pf_gray8.inc
@@ -1,437 +1,437 @@
-//
-// AggPas 2.4 RM3 pixel format definition file
-//
-{ blend_pix_gray }
-procedure blend_pix_gray(p : int8u_ptr; cv ,alpha : unsigned; cover : unsigned = 0 );
-begin
- p^:=int8u((((cv - p^ ) * alpha ) + (p^ shl base_shift ) ) shr base_shift );
-
-end;
-
-{ copy_or_blend_pix_gray }
-procedure copy_or_blend_pix_gray(p : int8u_ptr; c : aggclr_ptr; cover : unsigned ); overload;
-var
- alpha : unsigned;
-
-begin
- if c.a <> 0 then
- begin
- alpha:=(c.a * (cover + 1 ) ) shr 8;
-
- if alpha = base_mask then
- p^:=c.v
- else
- blend_pix_gray(p ,c.v ,alpha ,cover );
-
- end;
-
-end;
-
-{ copy_or_blend_pix_gray }
-procedure copy_or_blend_pix_gray(p : int8u_ptr; c : aggclr_ptr ); overload;
-begin
- if c.a <> 0 then
- if c.a = base_mask then
- p^:=c.v
- else
- blend_pix_gray(p ,c.v ,c.a );
-
-end;
-
-{ gray8_copy_pixel }
-procedure gray8_copy_pixel(this : pixel_formats_ptr; x ,y : int; c : aggclr_ptr );
-begin
- int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset )^:=c.v;
-
-end;
-
-{ gray8_blend_pixel }
-procedure gray8_blend_pixel(this : pixel_formats_ptr; x ,y : int; c : aggclr_ptr; cover : int8u );
-begin
- copy_or_blend_pix_gray(
- int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset ) ,
- c ,cover );
-
-end;
-
-{ gray8_pixel }
-function gray8_pixel(this : pixel_formats_ptr; x ,y : int ) : aggclr;
-var
- p : int8u_ptr;
-
-begin
- p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
-
- result.ConstrInt(p^ );
-
-end;
-
-{ gray8_copy_hline }
-procedure gray8_copy_hline(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr );
-var
- p : int8u_ptr;
-
-begin
- p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
-
- repeat
- p^:=c.v;
-
- inc(ptrcomp(p ) ,this.m_step );
- dec(len );
-
- until len = 0;
-
-end;
-
-{ gray8_copy_vline }
-procedure gray8_copy_vline(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr );
-var
- p : int8u_ptr;
-
-begin
- p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
-
- repeat
- p^:=c.v;
- p :=this.m_rbuf.next_row(p );
-
- dec(len );
-
- until len = 0;
-
-end;
-
-{ gray8_blend_hline }
-procedure gray8_blend_hline(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr; cover : int8u );
-var
- p : int8u_ptr;
-
- alpha : unsigned;
-
-begin
- if c.a <> 0 then
- begin
- p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
-
- alpha:=(c.a * (cover + 1 ) ) shr 8;
-
- if alpha = base_mask then
- repeat
- p^:=c.v;
-
- inc(ptrcomp(p ) ,this.m_step );
- dec(len );
-
- until len = 0
- else
- repeat
- blend_pix_gray(p ,c.v ,alpha ,cover );
-
- inc(ptrcomp(p ) ,this.m_step );
- dec(len );
-
- until len = 0;
-
- end;
-
-end;
-
-{ gray8_blend_vline }
-procedure gray8_blend_vline(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr; cover : int8u );
-var
- p : int8u_ptr;
-
- alpha : unsigned;
-
-begin
- if c.a <> 0 then
- begin
- p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
-
- alpha:=(c.a * (cover + 1 ) ) shr 8;
-
- if alpha = base_mask then
- repeat
- p^:=c.v;
- p :=this.m_rbuf.next_row(p );
-
- dec(len );
-
- until len = 0
- else
- repeat
- blend_pix_gray(p ,c.v ,alpha ,cover );
-
- p:=this.m_rbuf.next_row(p );
-
- dec(len );
-
- until len = 0;
-
- end;
-
-end;
-
-{ gray8_blend_solid_hspan }
-procedure gray8_blend_solid_hspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr; covers : int8u_ptr );
-var
- p : int8u_ptr;
-
- alpha : unsigned;
-
-begin
- if c.a <> 0 then
- begin
- p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
-
- repeat
- alpha:=(c.a * (covers^ + 1 ) ) shr 8;
-
- if alpha = base_mask then
- p^:=c.v
- else
- blend_pix_gray(p ,c.v ,alpha ,covers^ );
-
- inc(ptrcomp(p ) ,this.m_step );
- inc(ptrcomp(covers ) );
- dec(len );
-
- until len = 0;
-
- end;
-
-end;
-
-{ gray8_blend_solid_vspan }
-procedure gray8_blend_solid_vspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr; covers : int8u_ptr );
-var
- p : int8u_ptr;
-
- alpha : unsigned;
-
-begin
- if c.a <> 0 then
- begin
- p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
-
- repeat
- alpha:=(c.a * (covers^ + 1 ) ) shr 8;
-
- if alpha = base_mask then
- p^:=c.v
- else
- blend_pix_gray(p ,c.v ,alpha ,covers^ );
-
- p:=this.m_rbuf.next_row(p );
-
- inc(ptrcomp(covers ) ,sizeof(int8u ) );
- dec(len );
-
- until len = 0;
-
- end;
-
-end;
-
-{ gray8_blend_color_hspan }
-procedure gray8_blend_color_hspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr; covers : int8u_ptr; cover : int8u );
-var
- p : int8u_ptr;
-
-begin
- p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
-
- if covers <> NIL then
- repeat
- copy_or_blend_pix_gray(p ,colors ,covers^ );
-
- inc(ptrcomp(colors ) ,sizeof(aggclr ) );
- inc(ptrcomp(covers ) ,sizeof(int8u ) );
- inc(ptrcomp(p ) ,this.m_step );
- dec(len );
-
- until len = 0
- else
- if cover = 255 then
- repeat
- if colors.a = base_mask then
- p^:=colors.v
- else
- copy_or_blend_pix_gray(p ,colors );
-
- inc(ptrcomp(colors ) ,sizeof(aggclr ) );
- inc(ptrcomp(p ) ,this.m_step );
- dec(len );
-
- until len = 0
- else
- repeat
- copy_or_blend_pix_gray(p ,colors ,cover );
-
- inc(ptrcomp(colors ) ,sizeof(aggclr ) );
- inc(ptrcomp(p ) ,this.m_step );
- dec(len );
-
- until len = 0;
-
-end;
-
-{ gray8_blend_color_vspan }
-procedure gray8_blend_color_vspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr; covers : int8u_ptr; cover : int8u );
-var
- p : int8u_ptr;
-
-begin
- p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
-
- if covers <> NIL then
- repeat
- copy_or_blend_pix_gray(p ,colors ,covers^ );
-
- inc(ptrcomp(colors ) ,sizeof(aggclr ) );
- inc(ptrcomp(covers ) ,sizeof(int8u ) );
-
- p:=this.m_rbuf.next_row(p );
-
- dec(len );
-
- until len = 0
- else
- if cover = 255 then
- repeat
- if colors.a = base_mask then
- p^:=colors.v
- else
- copy_or_blend_pix_gray(p ,colors );
-
- p:=this.m_rbuf.next_row(p );
-
- inc(ptrcomp(colors ) ,sizeof(aggclr ) );
- dec(len );
-
- until len = 0
-
- else
- repeat
- copy_or_blend_pix_gray(p ,colors ,cover );
-
- inc(ptrcomp(colors ) ,sizeof(aggclr ) );
-
- p:=this.m_rbuf.next_row(p );
-
- dec(len );
-
- until len = 0;
-
-end;
-
-{ gray8_copy_from }
-procedure gray8_copy_from(this : pixel_formats_ptr; from : rendering_buffer_ptr; xdst ,ydst ,xsrc ,ysrc : int; len : unsigned );
-begin
- move(
- int8u_ptr(ptrcomp(from.row(ysrc ) ) + xsrc * sizeof(int8u ) )^ ,
- int8u_ptr(ptrcomp(this.m_rbuf.row(ydst ) ) + xdst * sizeof(int8u ) )^ ,
- len * sizeof(int8u ) );
-
-end;
-
-{ gray8_copy_color_hspan }
-procedure gray8_copy_color_hspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr );
-var
- p : int8u_ptr;
-
-begin
- p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
-
- repeat
- p^:=colors.v;
-
- inc(ptrcomp(colors ) ,sizeof(aggclr ) );
- inc(ptrcomp(p ) ,this.m_step );
- dec(len );
-
- until len = 0;
-
-end;
-
-{ gray8_copy_color_vspan }
-procedure gray8_copy_color_vspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr );
-var
- p : int8u_ptr;
-
-begin
- p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
-
- repeat
- p^:=colors.v;
-
- inc(ptrcomp(colors ) ,sizeof(aggclr ) );
-
- p:=this.m_rbuf.next_row(p );
-
- dec(len );
-
- until len = 0;
-
-end;
-
-{ gray8_blend_from_color }
-procedure gray8_blend_from_color(this : pixel_formats_ptr; from : pixel_formats_ptr; color : aggclr_ptr; xdst ,ydst ,xsrc ,ysrc : int; len : unsigned; cover : int8u );
-var
- ppsz : unsigned;
-
- psrc ,pdst : int8u_ptr;
-
-begin
- ppsz:=from._pix_width;
- psrc:=from.row_ptr(ysrc );
-
- if psrc <> NIL then
- begin
- pdst:=int8u_ptr(ptrcomp(this.m_rbuf.row_xy(xdst ,ydst ,len ) ) + xdst * this.m_step + this.m_offset );
-
- repeat
- copy_or_blend_pix_gray(
- pdst ,color ,
- shr_int32(psrc^ * cover + base_mask ,base_shift ) );
-
- inc(ptrcomp(psrc ) ,ppsz );
- inc(ptrcomp(pdst ) ,this.m_step );
- dec(len );
-
- until len = 0;
-
- end;
-
-end;
-
-{ gray8_blend_from_lut }
-procedure gray8_blend_from_lut(this : pixel_formats_ptr; from : pixel_formats_ptr; color_lut : aggclr_ptr; xdst ,ydst ,xsrc ,ysrc : int; len : unsigned; cover : int8u );
-var
- ppsz : unsigned;
-
- psrc ,pdst : int8u_ptr;
-
-begin
- ppsz:=from._pix_width;
- psrc:=from.row_ptr(ysrc );
-
- if psrc <> NIL then
- begin
- pdst:=int8u_ptr(ptrcomp(this.m_rbuf.row_xy(xdst ,ydst ,len ) ) + xdst * this.m_step + this.m_offset );
-
- repeat
- copy_or_blend_pix_gray(
- pdst ,aggclr_ptr(ptrcomp(color_lut ) + psrc^ * sizeof(aggclr ) ) ,cover );
-
- inc(ptrcomp(psrc ) ,ppsz );
- inc(ptrcomp(pdst ) ,this.m_step );
- dec(len );
-
- until len = 0;
-
- end;
-
-end;
-
+//
+// AggPas 2.4 RM3 pixel format definition file
+//
+{ blend_pix_gray }
+procedure blend_pix_gray(p : int8u_ptr; cv ,alpha : unsigned; cover : unsigned = 0 );
+begin
+ p^:=int8u((((cv - p^ ) * alpha ) + (p^ shl base_shift ) ) shr base_shift );
+
+end;
+
+{ copy_or_blend_pix_gray }
+procedure copy_or_blend_pix_gray(p : int8u_ptr; c : aggclr_ptr; cover : unsigned ); overload;
+var
+ alpha : unsigned;
+
+begin
+ if c.a <> 0 then
+ begin
+ alpha:=(c.a * (cover + 1 ) ) shr 8;
+
+ if alpha = base_mask then
+ p^:=c.v
+ else
+ blend_pix_gray(p ,c.v ,alpha ,cover );
+
+ end;
+
+end;
+
+{ copy_or_blend_pix_gray }
+procedure copy_or_blend_pix_gray(p : int8u_ptr; c : aggclr_ptr ); overload;
+begin
+ if c.a <> 0 then
+ if c.a = base_mask then
+ p^:=c.v
+ else
+ blend_pix_gray(p ,c.v ,c.a );
+
+end;
+
+{ gray8_copy_pixel }
+procedure gray8_copy_pixel(this : pixel_formats_ptr; x ,y : int; c : aggclr_ptr );
+begin
+ int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset )^:=c.v;
+
+end;
+
+{ gray8_blend_pixel }
+procedure gray8_blend_pixel(this : pixel_formats_ptr; x ,y : int; c : aggclr_ptr; cover : int8u );
+begin
+ copy_or_blend_pix_gray(
+ int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset ) ,
+ c ,cover );
+
+end;
+
+{ gray8_pixel }
+function gray8_pixel(this : pixel_formats_ptr; x ,y : int ) : aggclr;
+var
+ p : int8u_ptr;
+
+begin
+ p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
+
+ result.ConstrInt(p^ );
+
+end;
+
+{ gray8_copy_hline }
+procedure gray8_copy_hline(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr );
+var
+ p : int8u_ptr;
+
+begin
+ p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
+
+ repeat
+ p^:=c.v;
+
+ inc(ptrcomp(p ) ,this.m_step );
+ dec(len );
+
+ until len = 0;
+
+end;
+
+{ gray8_copy_vline }
+procedure gray8_copy_vline(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr );
+var
+ p : int8u_ptr;
+
+begin
+ p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
+
+ repeat
+ p^:=c.v;
+ p :=this.m_rbuf.next_row(p );
+
+ dec(len );
+
+ until len = 0;
+
+end;
+
+{ gray8_blend_hline }
+procedure gray8_blend_hline(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr; cover : int8u );
+var
+ p : int8u_ptr;
+
+ alpha : unsigned;
+
+begin
+ if c.a <> 0 then
+ begin
+ p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
+
+ alpha:=(c.a * (cover + 1 ) ) shr 8;
+
+ if alpha = base_mask then
+ repeat
+ p^:=c.v;
+
+ inc(ptrcomp(p ) ,this.m_step );
+ dec(len );
+
+ until len = 0
+ else
+ repeat
+ blend_pix_gray(p ,c.v ,alpha ,cover );
+
+ inc(ptrcomp(p ) ,this.m_step );
+ dec(len );
+
+ until len = 0;
+
+ end;
+
+end;
+
+{ gray8_blend_vline }
+procedure gray8_blend_vline(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr; cover : int8u );
+var
+ p : int8u_ptr;
+
+ alpha : unsigned;
+
+begin
+ if c.a <> 0 then
+ begin
+ p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
+
+ alpha:=(c.a * (cover + 1 ) ) shr 8;
+
+ if alpha = base_mask then
+ repeat
+ p^:=c.v;
+ p :=this.m_rbuf.next_row(p );
+
+ dec(len );
+
+ until len = 0
+ else
+ repeat
+ blend_pix_gray(p ,c.v ,alpha ,cover );
+
+ p:=this.m_rbuf.next_row(p );
+
+ dec(len );
+
+ until len = 0;
+
+ end;
+
+end;
+
+{ gray8_blend_solid_hspan }
+procedure gray8_blend_solid_hspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr; covers : int8u_ptr );
+var
+ p : int8u_ptr;
+
+ alpha : unsigned;
+
+begin
+ if c.a <> 0 then
+ begin
+ p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
+
+ repeat
+ alpha:=(c.a * (covers^ + 1 ) ) shr 8;
+
+ if alpha = base_mask then
+ p^:=c.v
+ else
+ blend_pix_gray(p ,c.v ,alpha ,covers^ );
+
+ inc(ptrcomp(p ) ,this.m_step );
+ inc(ptrcomp(covers ) );
+ dec(len );
+
+ until len = 0;
+
+ end;
+
+end;
+
+{ gray8_blend_solid_vspan }
+procedure gray8_blend_solid_vspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr; covers : int8u_ptr );
+var
+ p : int8u_ptr;
+
+ alpha : unsigned;
+
+begin
+ if c.a <> 0 then
+ begin
+ p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
+
+ repeat
+ alpha:=(c.a * (covers^ + 1 ) ) shr 8;
+
+ if alpha = base_mask then
+ p^:=c.v
+ else
+ blend_pix_gray(p ,c.v ,alpha ,covers^ );
+
+ p:=this.m_rbuf.next_row(p );
+
+ inc(ptrcomp(covers ) ,sizeof(int8u ) );
+ dec(len );
+
+ until len = 0;
+
+ end;
+
+end;
+
+{ gray8_blend_color_hspan }
+procedure gray8_blend_color_hspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr; covers : int8u_ptr; cover : int8u );
+var
+ p : int8u_ptr;
+
+begin
+ p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
+
+ if covers <> NIL then
+ repeat
+ copy_or_blend_pix_gray(p ,colors ,covers^ );
+
+ inc(ptrcomp(colors ) ,sizeof(aggclr ) );
+ inc(ptrcomp(covers ) ,sizeof(int8u ) );
+ inc(ptrcomp(p ) ,this.m_step );
+ dec(len );
+
+ until len = 0
+ else
+ if cover = 255 then
+ repeat
+ if colors.a = base_mask then
+ p^:=colors.v
+ else
+ copy_or_blend_pix_gray(p ,colors );
+
+ inc(ptrcomp(colors ) ,sizeof(aggclr ) );
+ inc(ptrcomp(p ) ,this.m_step );
+ dec(len );
+
+ until len = 0
+ else
+ repeat
+ copy_or_blend_pix_gray(p ,colors ,cover );
+
+ inc(ptrcomp(colors ) ,sizeof(aggclr ) );
+ inc(ptrcomp(p ) ,this.m_step );
+ dec(len );
+
+ until len = 0;
+
+end;
+
+{ gray8_blend_color_vspan }
+procedure gray8_blend_color_vspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr; covers : int8u_ptr; cover : int8u );
+var
+ p : int8u_ptr;
+
+begin
+ p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
+
+ if covers <> NIL then
+ repeat
+ copy_or_blend_pix_gray(p ,colors ,covers^ );
+
+ inc(ptrcomp(colors ) ,sizeof(aggclr ) );
+ inc(ptrcomp(covers ) ,sizeof(int8u ) );
+
+ p:=this.m_rbuf.next_row(p );
+
+ dec(len );
+
+ until len = 0
+ else
+ if cover = 255 then
+ repeat
+ if colors.a = base_mask then
+ p^:=colors.v
+ else
+ copy_or_blend_pix_gray(p ,colors );
+
+ p:=this.m_rbuf.next_row(p );
+
+ inc(ptrcomp(colors ) ,sizeof(aggclr ) );
+ dec(len );
+
+ until len = 0
+
+ else
+ repeat
+ copy_or_blend_pix_gray(p ,colors ,cover );
+
+ inc(ptrcomp(colors ) ,sizeof(aggclr ) );
+
+ p:=this.m_rbuf.next_row(p );
+
+ dec(len );
+
+ until len = 0;
+
+end;
+
+{ gray8_copy_from }
+procedure gray8_copy_from(this : pixel_formats_ptr; from : rendering_buffer_ptr; xdst ,ydst ,xsrc ,ysrc : int; len : unsigned );
+begin
+ move(
+ int8u_ptr(ptrcomp(from.row(ysrc ) ) + xsrc * sizeof(int8u ) )^ ,
+ int8u_ptr(ptrcomp(this.m_rbuf.row(ydst ) ) + xdst * sizeof(int8u ) )^ ,
+ len * sizeof(int8u ) );
+
+end;
+
+{ gray8_copy_color_hspan }
+procedure gray8_copy_color_hspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr );
+var
+ p : int8u_ptr;
+
+begin
+ p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
+
+ repeat
+ p^:=colors.v;
+
+ inc(ptrcomp(colors ) ,sizeof(aggclr ) );
+ inc(ptrcomp(p ) ,this.m_step );
+ dec(len );
+
+ until len = 0;
+
+end;
+
+{ gray8_copy_color_vspan }
+procedure gray8_copy_color_vspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr );
+var
+ p : int8u_ptr;
+
+begin
+ p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * this.m_step + this.m_offset );
+
+ repeat
+ p^:=colors.v;
+
+ inc(ptrcomp(colors ) ,sizeof(aggclr ) );
+
+ p:=this.m_rbuf.next_row(p );
+
+ dec(len );
+
+ until len = 0;
+
+end;
+
+{ gray8_blend_from_color }
+procedure gray8_blend_from_color(this : pixel_formats_ptr; from : pixel_formats_ptr; color : aggclr_ptr; xdst ,ydst ,xsrc ,ysrc : int; len : unsigned; cover : int8u );
+var
+ ppsz : unsigned;
+
+ psrc ,pdst : int8u_ptr;
+
+begin
+ ppsz:=from._pix_width;
+ psrc:=from.row_ptr(ysrc );
+
+ if psrc <> NIL then
+ begin
+ pdst:=int8u_ptr(ptrcomp(this.m_rbuf.row_xy(xdst ,ydst ,len ) ) + xdst * this.m_step + this.m_offset );
+
+ repeat
+ copy_or_blend_pix_gray(
+ pdst ,color ,
+ shr_int32(psrc^ * cover + base_mask ,base_shift ) );
+
+ inc(ptrcomp(psrc ) ,ppsz );
+ inc(ptrcomp(pdst ) ,this.m_step );
+ dec(len );
+
+ until len = 0;
+
+ end;
+
+end;
+
+{ gray8_blend_from_lut }
+procedure gray8_blend_from_lut(this : pixel_formats_ptr; from : pixel_formats_ptr; color_lut : aggclr_ptr; xdst ,ydst ,xsrc ,ysrc : int; len : unsigned; cover : int8u );
+var
+ ppsz : unsigned;
+
+ psrc ,pdst : int8u_ptr;
+
+begin
+ ppsz:=from._pix_width;
+ psrc:=from.row_ptr(ysrc );
+
+ if psrc <> NIL then
+ begin
+ pdst:=int8u_ptr(ptrcomp(this.m_rbuf.row_xy(xdst ,ydst ,len ) ) + xdst * this.m_step + this.m_offset );
+
+ repeat
+ copy_or_blend_pix_gray(
+ pdst ,aggclr_ptr(ptrcomp(color_lut ) + psrc^ * sizeof(aggclr ) ) ,cover );
+
+ inc(ptrcomp(psrc ) ,ppsz );
+ inc(ptrcomp(pdst ) ,this.m_step );
+ dec(len );
+
+ until len = 0;
+
+ end;
+
+end;
+