summaryrefslogtreecommitdiff
path: root/src/corelib/render/software/pf_bgr24.inc
diff options
context:
space:
mode:
authorGraeme Geldenhuys <graeme@mastermaths.co.za>2012-02-27 19:53:35 +0200
committerGraeme Geldenhuys <graeme@mastermaths.co.za>2012-03-07 22:44:08 +0200
commitb50c7fe536960a49349475f5c361044b097f24dc (patch)
treeeb74f0624ebaca3b6ee64a08b3edb63883eb06c2 /src/corelib/render/software/pf_bgr24.inc
parenta955b0e4833ba419478be83523fe433d645cd789 (diff)
downloadfpGUI-b50c7fe536960a49349475f5c361044b097f24dc.tar.xz
initial import of AggPas 2.4 RM3
The AggPas demos will not compile at this time, because I have restructured the directories a bit. I wanted a pristine checkin though. The demos will be fixed in the next few commits.
Diffstat (limited to 'src/corelib/render/software/pf_bgr24.inc')
-rw-r--r--src/corelib/render/software/pf_bgr24.inc533
1 files changed, 533 insertions, 0 deletions
diff --git a/src/corelib/render/software/pf_bgr24.inc b/src/corelib/render/software/pf_bgr24.inc
new file mode 100644
index 00000000..daa0bbec
--- /dev/null
+++ b/src/corelib/render/software/pf_bgr24.inc
@@ -0,0 +1,533 @@
+//
+// AggPas 2.4 RM3 pixel format definition file
+//
+{ blend_pix_bgr }
+procedure blend_pix_bgr(p : int8u_ptr; cr ,cg ,cb ,alpha : int; cover : unsigned = 0 );
+begin
+ order_bgr(pointer(p )^ ).R:=order_bgr(pointer(p )^ ).R + ((cr - order_bgr(pointer(p )^ ).R ) * alpha ) shr base_shift;
+ order_bgr(pointer(p )^ ).G:=order_bgr(pointer(p )^ ).G + ((cg - order_bgr(pointer(p )^ ).G ) * alpha ) shr base_shift;
+ order_bgr(pointer(p )^ ).B:=order_bgr(pointer(p )^ ).B + ((cb - order_bgr(pointer(p )^ ).B ) * alpha ) shr base_shift;
+
+end;
+
+{ copy_or_blend_pix_bgr }
+procedure copy_or_blend_pix_bgr(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
+ begin
+ order_bgr(pointer(p )^ ).R:=c.r;
+ order_bgr(pointer(p )^ ).G:=c.g;
+ order_bgr(pointer(p )^ ).B:=c.b;
+
+ end
+ else
+ blend_pix_bgr(p ,c.r ,c.g ,c.b ,alpha ,cover );
+
+ end;
+
+end;
+
+{ copy_or_blend_pix_bgr }
+procedure copy_or_blend_pix_bgr(p : int8u_ptr; c : aggclr_ptr ); overload;
+begin
+ if c.a <> 0 then
+ if c.a = base_mask then
+ begin
+ order_bgr(pointer(p )^ ).R:=c.r;
+ order_bgr(pointer(p )^ ).G:=c.g;
+ order_bgr(pointer(p )^ ).B:=c.b;
+
+ end
+ else
+ blend_pix_bgr(p ,c.r ,c.g ,c.b ,c.a );
+
+end;
+
+{ bgr24_copy_pixel }
+procedure bgr24_copy_pixel(this : pixel_formats_ptr; x ,y : int; c : aggclr_ptr );
+var
+ p : int8u_ptr;
+
+begin
+ p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x + x + x );
+
+ order_bgr(pointer(p )^ ).R:=c.r;
+ order_bgr(pointer(p )^ ).G:=c.g;
+ order_bgr(pointer(p )^ ).B:=c.b;
+
+end;
+
+{ bgr24_blend_pixel }
+procedure bgr24_blend_pixel(this : pixel_formats_ptr; x ,y : int; c : aggclr_ptr; cover : int8u );
+begin
+ copy_or_blend_pix_bgr(int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x + x + x ) ,c ,cover );
+
+end;
+
+{ bgr24_pixel }
+function bgr24_pixel(this : pixel_formats_ptr; x ,y : int ) : aggclr;
+var
+ p : int8u_ptr;
+
+begin
+ p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x + x + x );
+
+ result.ConstrInt(
+ order_bgr(pointer(p )^ ).R ,
+ order_bgr(pointer(p )^ ).G ,
+ order_bgr(pointer(p )^ ).B );
+
+end;
+
+{ bgr24_copy_hline }
+procedure bgr24_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 + x + x );
+
+ repeat
+ order_bgr(pointer(p )^ ).R:=c.r;
+ order_bgr(pointer(p )^ ).G:=c.g;
+ order_bgr(pointer(p )^ ).B:=c.b;
+
+ inc(ptrcomp(p ) ,3 );
+ dec(len );
+
+ until len = 0;
+
+end;
+
+{ bgr24_copy_vline }
+procedure bgr24_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 + x + x );
+
+ repeat
+ order_bgr(pointer(p )^ ).R:=c.r;
+ order_bgr(pointer(p )^ ).G:=c.g;
+ order_bgr(pointer(p )^ ).B:=c.b;
+
+ p:=this.m_rbuf.next_row(p );
+
+ dec(len );
+
+ until len = 0;
+
+end;
+
+{ bgr24_blend_hline }
+procedure bgr24_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 + x + x );
+
+ alpha:=(c.a * (cover + 1 ) ) shr 8;
+
+ if alpha = base_mask then
+ repeat
+ order_bgr(pointer(p )^ ).R:=c.r;
+ order_bgr(pointer(p )^ ).G:=c.g;
+ order_bgr(pointer(p )^ ).B:=c.b;
+
+ inc(ptrcomp(p ) ,3 );
+ dec(len );
+
+ until len = 0
+ else
+ repeat
+ blend_pix_bgr(p ,c.r ,c.g ,c.b ,alpha );
+
+ inc(ptrcomp(p ) ,3 );
+ dec(len );
+
+ until len = 0;
+
+ end;
+
+end;
+
+{ bgr24_blend_vline }
+procedure bgr24_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 + x + x );
+
+ alpha:=(c.a * (cover + 1 ) ) shr 8;
+
+ if alpha = base_mask then
+ repeat
+ order_bgr(pointer(p )^ ).R:=c.r;
+ order_bgr(pointer(p )^ ).G:=c.g;
+ order_bgr(pointer(p )^ ).B:=c.b;
+
+ p:=int8u_ptr(this.m_rbuf.next_row(p ) );
+
+ dec(len );
+
+ until len = 0
+ else
+ repeat
+ blend_pix_bgr(p ,c.r ,c.g ,c.b ,alpha ,cover );
+
+ p:=int8u_ptr(this.m_rbuf.next_row(p ) );
+
+ dec(len );
+
+ until len = 0;
+
+ end;
+
+end;
+
+{ bgr24_blend_solid_hspan }
+procedure bgr24_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 + x + x );
+
+ repeat
+ alpha:=(c.a * (covers^ + 1 ) ) shr 8;
+
+ if alpha = base_mask then
+ begin
+ order_bgr(pointer(p )^ ).R:=c.r;
+ order_bgr(pointer(p )^ ).G:=c.g;
+ order_bgr(pointer(p )^ ).B:=c.b;
+
+ end
+ else
+ blend_pix_bgr(p ,c.r ,c.g ,c.b ,alpha ,covers^ );
+
+ inc(ptrcomp(p ) ,3 );
+ inc(ptrcomp(covers ) );
+ dec(len );
+
+ until len = 0;
+
+ end;
+
+end;
+
+{ bgr24_blend_solid_vspan }
+procedure bgr24_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 + x + x );
+
+ repeat
+ alpha:=(c.a * (covers^ + 1 ) ) shr 8;
+
+ if alpha = base_mask then
+ begin
+ order_bgr(pointer(p )^ ).R:=c.r;
+ order_bgr(pointer(p )^ ).G:=c.g;
+ order_bgr(pointer(p )^ ).B:=c.b;
+
+ end
+ else
+ blend_pix_bgr(p ,c.r ,c.g ,c.b ,alpha,covers^ );
+
+ p:=int8u_ptr(this.m_rbuf.next_row(p ) );
+
+ inc(ptrcomp(covers ) );
+ dec(len );
+
+ until len = 0;
+
+ end;
+
+end;
+
+{ bgr24_blend_color_hspan }
+procedure bgr24_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 + x + x );
+
+ if covers <> NIL then
+ repeat
+ copy_or_blend_pix_bgr(p ,colors ,covers^ );
+
+ inc(ptrcomp(colors ) ,sizeof(aggclr ) );
+ inc(ptrcomp(covers ) ,sizeof(int8u ) );
+ inc(ptrcomp(p ) ,3 );
+ dec(len );
+
+ until len = 0
+ else
+ if cover = 255 then
+ repeat
+ copy_or_blend_pix_bgr(p ,colors );
+
+ inc(ptrcomp(colors ) ,sizeof(aggclr ) );
+ inc(ptrcomp(p ) ,3 );
+ dec(len );
+
+ until len = 0
+ else
+ repeat
+ copy_or_blend_pix_bgr(p ,colors ,cover );
+
+ inc(ptrcomp(colors ) ,sizeof(aggclr ) );
+ inc(ptrcomp(p ) ,3 );
+ dec(len );
+
+ until len = 0;
+
+end;
+
+{ bgr24_blend_color_vspan }
+procedure bgr24_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 + x + x );
+
+ if covers <> NIL then
+ repeat
+ copy_or_blend_pix_bgr(p ,colors ,covers^ );
+
+ inc(ptrcomp(colors ) ,sizeof(aggclr ) );
+ inc(ptrcomp(covers ) ,sizeof(int8u ) );
+
+ p:=int8u_ptr(this.m_rbuf.next_row(p ) );
+
+ dec(len );
+
+ until len = 0
+ else
+ if cover = 255 then
+ repeat
+ copy_or_blend_pix_bgr(p ,colors );
+
+ inc(ptrcomp(colors ) ,sizeof(aggclr ) );
+
+ p:=int8u_ptr(this.m_rbuf.next_row(p ) );
+
+ dec(len );
+
+ until len = 0
+ else
+ repeat
+ copy_or_blend_pix_bgr(p ,colors ,cover );
+
+ inc(ptrcomp(colors ) ,sizeof(aggclr ) );
+
+ p:=int8u_ptr(this.m_rbuf.next_row(p ) );
+
+ dec(len );
+
+ until len = 0;
+
+end;
+
+{ bgr24_blend_from }
+procedure bgr24_blend_from(this : pixel_formats_ptr; from : pixel_formats_ptr; psrc_ : int8u_ptr; xdst ,ydst ,xsrc ,ysrc : int; len : unsigned; cover : int8u );
+var
+ psrc ,pdst : int8u_ptr;
+
+ color : aggclr;
+ alpha : unsigned;
+
+begin
+ psrc:=psrc_;
+ pdst:=int8u_ptr(ptrcomp(this.m_rbuf.row(ydst ) ) + xdst * 3 * sizeof(int8u ) );
+
+ if cover = 255 then
+ repeat
+ alpha:=int8u_ptr(ptrcomp(psrc ) + from.m_order.A )^;
+
+ if alpha <> 0 then
+ if alpha = base_mask then
+ begin
+ order_bgr(pointer(pdst )^ ).R:=int8u_ptr(ptrcomp(psrc ) + from.m_order.R )^;
+ order_bgr(pointer(pdst )^ ).G:=int8u_ptr(ptrcomp(psrc ) + from.m_order.G )^;
+ order_bgr(pointer(pdst )^ ).B:=int8u_ptr(ptrcomp(psrc ) + from.m_order.B )^;
+
+ end
+ else
+ blend_pix_bgr(
+ pdst ,
+ int8u_ptr(ptrcomp(psrc ) + from.m_order.R )^ ,
+ int8u_ptr(ptrcomp(psrc ) + from.m_order.G )^ ,
+ int8u_ptr(ptrcomp(psrc ) + from.m_order.B )^ ,
+ alpha );
+
+ inc(ptrcomp(psrc ) ,4 );
+ inc(ptrcomp(pdst ) ,3 );
+ dec(len );
+
+ until len = 0
+ else
+ repeat
+ color.ConstrInt(
+ int8u_ptr(ptrcomp(psrc ) + from.m_order.R )^ ,
+ int8u_ptr(ptrcomp(psrc ) + from.m_order.G )^ ,
+ int8u_ptr(ptrcomp(psrc ) + from.m_order.B )^ ,
+ int8u_ptr(ptrcomp(psrc ) + from.m_order.A )^ );
+
+ copy_or_blend_pix_bgr(pdst ,@color ,cover );
+
+ inc(ptrcomp(psrc ) ,4 );
+ inc(ptrcomp(pdst ) ,3 );
+ dec(len );
+
+ until len = 0;
+
+end;
+
+{ bgr24_copy_color_hspan }
+procedure bgr24_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 + x + x );
+
+ repeat
+ order_bgr(pointer(p )^ ).R:=colors.r;
+ order_bgr(pointer(p )^ ).G:=colors.g;
+ order_bgr(pointer(p )^ ).B:=colors.b;
+
+ inc(ptrcomp(colors ) ,sizeof(aggclr ) );
+ inc(ptrcomp(p ) ,3 );
+ dec(len );
+
+ until len = 0;
+
+end;
+
+{ bgr24_copy_color_vspan }
+procedure bgr24_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 + x + x );
+
+ repeat
+ order_bgr(pointer(p )^ ).R:=colors.r;
+ order_bgr(pointer(p )^ ).G:=colors.g;
+ order_bgr(pointer(p )^ ).B:=colors.b;
+
+ p:=int8u_ptr(this.m_rbuf.next_row(p ) );
+
+ inc(ptrcomp(colors ) ,sizeof(aggclr ) );
+ dec(len );
+
+ until len = 0;
+
+end;
+
+{ bgr24_blend_from_color }
+procedure bgr24_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 * 3 * sizeof(int8u ) );
+
+ repeat
+ copy_or_blend_pix_bgr(
+ pdst ,color ,
+ shr_int32(psrc^ * cover + base_mask ,base_shift ) );
+
+ inc(ptrcomp(psrc ) ,ppsz );
+ inc(ptrcomp(pdst ) ,3 );
+ dec(len );
+
+ until len = 0;
+
+ end;
+
+end;
+
+{ bgr24_blend_from_lut }
+procedure bgr24_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;
+
+ color : aggclr_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 * 3 * sizeof(int8u ) );
+
+ if cover = 255 then
+ repeat
+ color:=aggclr_ptr(ptrcomp(color_lut ) + psrc^ * sizeof(aggclr ) );
+
+ blend_pix_bgr(pdst ,color.r ,color.g ,color.b ,color.a );
+
+ inc(ptrcomp(psrc ) ,ppsz );
+ inc(ptrcomp(pdst ) ,3 );
+ dec(len );
+
+ until len = 0
+ else
+ repeat
+ copy_or_blend_pix_bgr(
+ pdst ,aggclr_ptr(ptrcomp(color_lut ) + psrc^ * sizeof(aggclr ) ) ,cover);
+
+ inc(ptrcomp(psrc ) ,ppsz );
+ inc(ptrcomp(pdst ) ,3 );
+ dec(len );
+
+ until len = 0;
+
+ end;
+
+end;
+