2
// AggPas 2.4 RM3 pixel format definition file
5
procedure blend_pix_abgr(p : unsigned_ptr; cr ,cg ,cb ,alpha : int; cover : unsigned = 0 );
15
order_abgr(p^ ).R:=((cr - r ) * alpha + (r shl base_shift ) ) shr base_shift;
16
order_abgr(p^ ).G:=((cg - g ) * alpha + (g shl base_shift ) ) shr base_shift;
17
order_abgr(p^ ).B:=((cb - b ) * alpha + (b shl base_shift ) ) shr base_shift;
18
order_abgr(p^ ).A:=(alpha + a ) - ((alpha * a + base_mask ) shr base_shift );
22
{ copy_or_blend_pix_abgr }
23
procedure copy_or_blend_pix_abgr(p : unsigned_ptr; cr ,cg ,cb ,alpha : unsigned ); overload;
26
if alpha = base_mask then
28
order_abgr(p^ ).R:=cr;
29
order_abgr(p^ ).G:=cg;
30
order_abgr(p^ ).B:=cb;
31
order_abgr(p^ ).A:=base_mask;
35
blend_pix_abgr(p ,cr ,cg ,cb ,alpha );
39
{ copy_or_blend_pix_abgr }
40
procedure copy_or_blend_pix_abgr(p : unsigned_ptr; cr ,cg ,cb ,alpha ,cover : unsigned ); overload;
43
copy_or_blend_pix_abgr(p ,cr ,cg ,cb ,alpha )
47
alpha:=(alpha * (cover + 1 ) ) shr 8;
49
if alpha = base_mask then
51
order_abgr(p^ ).R:=cr;
52
order_abgr(p^ ).G:=cg;
53
order_abgr(p^ ).B:=cb;
54
order_abgr(p^ ).A:=base_mask;
58
blend_pix_abgr(p ,cr ,cg ,cb ,alpha ,cover );
65
procedure abgr32_copy_pixel(this : pixel_formats_ptr; x ,y : int; c : aggclr_ptr );
70
p:=unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
72
order_abgr(p^ ).R:=c.r;
73
order_abgr(p^ ).G:=c.g;
74
order_abgr(p^ ).B:=c.b;
75
order_abgr(p^ ).A:=c.a;
79
{ abgr32_blend_pixel }
80
procedure abgr32_blend_pixel(this : pixel_formats_ptr; x ,y : int; c : aggclr_ptr; cover : int8u );
82
copy_or_blend_pix_abgr(
83
unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) ) ,
84
c.r ,c.g ,c.b ,c.a ,cover );
89
function abgr32_pixel(this : pixel_formats_ptr; x ,y : int ) : aggclr;
94
p:=unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
104
{ abgr32_copy_hline }
105
procedure abgr32_copy_hline(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr );
111
p:=int8u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
113
order_abgr(v ).R:=c.r;
114
order_abgr(v ).G:=c.g;
115
order_abgr(v ).B:=c.b;
116
order_abgr(v ).A:=c.a;
120
unsigned(pointer(p )^ ):=v;
122
inc(ptrcomp(p ) ,4 );
129
{ abgr32_copy_vline }
130
procedure abgr32_copy_vline(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr );
136
p:=unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
138
order_abgr(v ).R:=c.r;
139
order_abgr(v ).G:=c.g;
140
order_abgr(v ).B:=c.b;
141
order_abgr(v ).A:=c.a;
146
p :=unsigned_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
154
{ abgr32_blend_hline }
155
procedure abgr32_blend_hline(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr; cover : int8u );
165
p:=unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
167
alpha:=(c.a * (cover + 1 ) ) shr 8;
169
if alpha = base_mask then
171
order_abgr(v ).R:=c.r;
172
order_abgr(v ).G:=c.g;
173
order_abgr(v ).B:=c.b;
174
order_abgr(v ).A:=c.a;
179
inc(ptrcomp(p ) ,sizeof(unsigned ) );
188
blend_pix_abgr(p ,c.r ,c.g ,c.b ,alpha );
190
inc(ptrcomp(p ) ,sizeof(unsigned ) );
196
blend_pix_abgr(p ,c.r ,c.g ,c.b ,alpha ,cover );
198
inc(ptrcomp(p ) ,sizeof(unsigned ) );
207
{ abgr32_blend_vline }
208
procedure abgr32_blend_vline(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr; cover : int8u );
218
p:=unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
220
alpha:=(c.a * (cover + 1 ) ) shr 8;
222
if alpha = base_mask then
224
order_abgr(v ).R:=c.r;
225
order_abgr(v ).G:=c.g;
226
order_abgr(v ).B:=c.b;
227
order_abgr(v ).A:=c.a;
231
p :=unsigned_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
239
blend_pix_abgr(p ,c.r ,c.g ,c.b ,alpha );
241
p:=unsigned_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
248
blend_pix_abgr(p ,c.r ,c.g ,c.b ,alpha ,cover );
250
p:=unsigned_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
260
{ abgr32_blend_solid_hspan }
261
procedure abgr32_blend_solid_hspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr; covers : int8u_ptr );
270
p:=unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
273
alpha:=(c.a * (covers^ + 1 ) ) shr 8;
275
if alpha = base_mask then
277
order_abgr(p^ ).R:=c.r;
278
order_abgr(p^ ).G:=c.g;
279
order_abgr(p^ ).B:=c.b;
280
order_abgr(p^ ).A:=base_mask;
284
blend_pix_abgr(p ,c.r ,c.g ,c.b ,alpha ,covers^ );
286
inc(ptrcomp(p ) ,4 );
287
inc(ptrcomp(covers ) );
297
{ abgr32_blend_solid_vspan }
298
procedure abgr32_blend_solid_vspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr; covers : int8u_ptr );
307
p:=unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
310
alpha:=(c.a * (covers^ + 1 ) ) shr 8;
312
if alpha = base_mask then
314
order_abgr(p^ ).R:=c.r;
315
order_abgr(p^ ).G:=c.g;
316
order_abgr(p^ ).B:=c.b;
317
order_abgr(p^ ).A:=base_mask;
321
blend_pix_abgr(p ,c.r ,c.g ,c.b ,alpha ,covers^ );
323
p:=unsigned_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
325
inc(ptrcomp(covers ) ,sizeof(int8u ) );
334
{ abgr32_blend_color_hspan }
335
procedure abgr32_blend_color_hspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr; covers : int8u_ptr; cover : int8u );
340
p:=unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
342
if covers <> NIL then
344
copy_or_blend_pix_abgr(p ,colors.r ,colors.g ,colors.b ,colors.a ,covers^ );
346
inc(ptrcomp(covers ) ,sizeof(int8u ) );
347
inc(ptrcomp(p ) ,4 );
348
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
355
copy_or_blend_pix_abgr(p ,colors.r ,colors.g ,colors.b ,colors.a );
357
inc(ptrcomp(p ) ,4 );
358
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
364
copy_or_blend_pix_abgr(p ,colors.r ,colors.g ,colors.b ,colors.a ,cover );
366
inc(ptrcomp(p ) ,4 );
367
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
374
{ abgr32_blend_color_vspan }
375
procedure abgr32_blend_color_vspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr; covers : int8u_ptr; cover : int8u );
380
p:=unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
382
if covers <> NIL then
384
copy_or_blend_pix_abgr(
392
inc(ptrcomp(covers ) ,sizeof(int8u ) );
394
p:=unsigned_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
396
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
403
copy_or_blend_pix_abgr(
410
p:=unsigned_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
412
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
418
copy_or_blend_pix_abgr(
426
p:=unsigned_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
428
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
435
{ abgr32_blend_from }
436
procedure abgr32_blend_from(this : pixel_formats_ptr; from : pixel_formats_ptr; psrc_ : int8u_ptr; xdst ,ydst ,xsrc ,ysrc : int; len : unsigned; cover : int8u );
438
psrc ,pdst : unsigned_ptr;
443
psrc:=unsigned_ptr(psrc_ );
444
pdst:=unsigned_ptr(ptrcomp(this.m_rbuf.row(ydst ) ) + (xdst shl 2 ) * sizeof(int8u ) );
447
if ptrcomp(xdst ) > ptrcomp(xsrc ) then
449
inc(ptrcomp(psrc ) ,((len - 1 ) shl 2 ) * sizeof(int8u ) );
450
inc(ptrcomp(pdst ) ,((len - 1 ) shl 2 ) * sizeof(int8u ) );
458
copy_or_blend_pix_abgr(
460
order_abgr(psrc^ ).R ,
461
order_abgr(psrc^ ).G ,
462
order_abgr(psrc^ ).B ,
463
order_abgr(psrc^ ).A );
465
inc(ptrcomp(psrc ) ,incp );
466
inc(ptrcomp(pdst ) ,incp );
472
copy_or_blend_pix_abgr(
474
order_abgr(psrc^ ).R ,
475
order_abgr(psrc^ ).G ,
476
order_abgr(psrc^ ).B ,
477
order_abgr(psrc^ ).A ,
480
inc(ptrcomp(psrc ) ,incp );
481
inc(ptrcomp(pdst ) ,incp );
488
{ abgr32_copy_color_hspan }
489
procedure abgr32_copy_color_hspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr );
494
p:=unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
497
order_abgr(pointer(p )^ ).R:=colors.r;
498
order_abgr(pointer(p )^ ).G:=colors.g;
499
order_abgr(pointer(p )^ ).B:=colors.b;
500
order_abgr(pointer(p )^ ).A:=colors.a;
502
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
503
inc(ptrcomp(p ) ,4 );
510
{ abgr32_copy_color_vspan }
511
procedure abgr32_copy_color_vspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr );
516
p:=unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
519
order_abgr(pointer(p )^ ).R:=colors.r;
520
order_abgr(pointer(p )^ ).G:=colors.g;
521
order_abgr(pointer(p )^ ).B:=colors.b;
522
order_abgr(pointer(p )^ ).A:=colors.a;
524
p:=unsigned_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
526
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
533
{ abgr32_blend_from_color }
534
procedure abgr32_blend_from_color(this : pixel_formats_ptr; from : pixel_formats_ptr; color : aggclr_ptr; xdst ,ydst ,xsrc ,ysrc : int; len : unsigned; cover : int8u );
542
ppsz:=from._pix_width;
543
psrc:=from.row_ptr(ysrc );
547
pdst:=unsigned_ptr(ptrcomp(this.m_rbuf.row_xy(xdst ,ydst ,len ) ) + (xdst shl 2 ) );
550
copy_or_blend_pix_abgr(
551
pdst ,color.r, color.g, color.b, color.a,
552
shr_int32(psrc^ * cover + base_mask ,base_shift ) );
554
inc(ptrcomp(psrc ) ,ppsz );
555
inc(ptrcomp(pdst ) ,4 );
564
{ abgr32_blend_from_lut }
565
procedure abgr32_blend_from_lut(this : pixel_formats_ptr; from : pixel_formats_ptr; color_lut : aggclr_ptr; xdst ,ydst ,xsrc ,ysrc : int; len : unsigned; cover : int8u );
575
ppsz:=from._pix_width;
576
psrc:=from.row_ptr(ysrc );
580
pdst:=unsigned_ptr(ptrcomp(this.m_rbuf.row_xy(xdst ,ydst ,len ) ) + (xdst shl 2 ) );
584
color:=aggclr_ptr(ptrcomp(color_lut ) + psrc^ * sizeof(aggclr ) );
586
copy_or_blend_pix_abgr(pdst ,color.r, color.g, color.b, color.a );
588
inc(ptrcomp(psrc ) ,ppsz );
589
inc(ptrcomp(pdst ) ,4 );
595
color:=aggclr_ptr(ptrcomp(color_lut ) + psrc^ * sizeof(aggclr ) );
597
copy_or_blend_pix_abgr(pdst ,color.r, color.g, color.b, color.a ,cover );
599
inc(ptrcomp(psrc ) ,ppsz );
600
inc(ptrcomp(pdst ) ,4 );