2
// AggPas 2.4 RM3 pixel format definition file
5
procedure blend_pix_bgra(p : unsigned_ptr; cr ,cg ,cb ,alpha : int; cover : unsigned = 0 );
15
order_bgra(p^ ).R:=((cr - r ) * alpha + (r shl base_shift ) ) shr base_shift;
16
order_bgra(p^ ).G:=((cg - g ) * alpha + (g shl base_shift ) ) shr base_shift;
17
order_bgra(p^ ).B:=((cb - b ) * alpha + (b shl base_shift ) ) shr base_shift;
18
order_bgra(p^ ).A:=(alpha + a ) - ((alpha * a + base_mask ) shr base_shift );
22
{ copy_or_blend_pix_bgra }
23
procedure copy_or_blend_pix_bgra(p : unsigned_ptr; cr ,cg ,cb ,alpha : unsigned ); overload;
26
if alpha = base_mask then
28
order_bgra(p^ ).R:=cr;
29
order_bgra(p^ ).G:=cg;
30
order_bgra(p^ ).B:=cb;
31
order_bgra(p^ ).A:=base_mask;
35
blend_pix_bgra(p ,cr ,cg ,cb ,alpha );
39
{ copy_or_blend_pix_bgra }
40
procedure copy_or_blend_pix_bgra(p : unsigned_ptr; cr ,cg ,cb ,alpha ,cover : unsigned ); overload;
43
copy_or_blend_pix_bgra(p ,cr ,cg ,cb ,alpha )
47
alpha:=(alpha * (cover + 1 ) ) shr 8;
49
if alpha = base_mask then
51
order_bgra(p^ ).R:=cr;
52
order_bgra(p^ ).G:=cg;
53
order_bgra(p^ ).B:=cb;
54
order_bgra(p^ ).A:=base_mask;
58
blend_pix_bgra(p ,cr ,cg ,cb ,alpha ,cover );
65
procedure bgra32_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_bgra(p^ ).R:=c.r;
73
order_bgra(p^ ).G:=c.g;
74
order_bgra(p^ ).B:=c.b;
75
order_bgra(p^ ).A:=c.a;
79
{ bgra32_blend_pixel }
80
procedure bgra32_blend_pixel(this : pixel_formats_ptr; x ,y : int; c : aggclr_ptr; cover : int8u );
82
copy_or_blend_pix_bgra(
83
unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) ) ,
84
c.r ,c.g ,c.b ,c.a ,cover );
89
function bgra32_pixel(this : pixel_formats_ptr; x ,y : int ) : aggclr;
94
p:=unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
104
{ bgra32_copy_hline }
105
procedure bgra32_copy_hline(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr );
111
p:=unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
113
order_bgra(v ).R:=c.r;
114
order_bgra(v ).G:=c.g;
115
order_bgra(v ).B:=c.b;
116
order_bgra(v ).A:=c.a;
122
inc(ptrcomp(p ) ,4 );
129
{ bgra32_copy_vline }
130
procedure bgra32_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_bgra(v ).R:=c.r;
139
order_bgra(v ).G:=c.g;
140
order_bgra(v ).B:=c.b;
141
order_bgra(v ).A:=c.a;
146
p :=unsigned_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
154
{ bgra32_blend_hline }
155
procedure bgra32_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_bgra(v ).R:=c.r;
172
order_bgra(v ).G:=c.g;
173
order_bgra(v ).B:=c.b;
174
order_bgra(v ).A:=c.a;
179
inc(ptrcomp(p ) ,sizeof(unsigned ) );
188
blend_pix_bgra(p ,c.r ,c.g ,c.b ,alpha );
190
inc(ptrcomp(p ) ,sizeof(unsigned ) );
196
blend_pix_bgra(p ,c.r ,c.g ,c.b ,alpha ,cover );
198
inc(ptrcomp(p ) ,sizeof(unsigned ) );
207
{ bgra32_blend_vline }
208
procedure bgra32_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_bgra(v ).R:=c.r;
225
order_bgra(v ).G:=c.g;
226
order_bgra(v ).B:=c.b;
227
order_bgra(v ).A:=c.a;
231
p :=unsigned_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
241
blend_pix_bgra(p ,c.r ,c.g ,c.b ,alpha );
243
p:=unsigned_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
250
blend_pix_bgra(p ,c.r ,c.g ,c.b ,alpha ,cover );
252
p:=unsigned_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
262
{ bgra32_blend_solid_hspan }
263
procedure bgra32_blend_solid_hspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr; covers : int8u_ptr );
272
p:=unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
275
alpha:=(c.a * (covers^ + 1 ) ) shr 8;
277
if alpha = base_mask then
279
order_bgra(p^ ).R:=c.r;
280
order_bgra(p^ ).G:=c.g;
281
order_bgra(p^ ).B:=c.b;
282
order_bgra(p^ ).A:=base_mask;
286
blend_pix_bgra(p ,c.r ,c.g ,c.b ,alpha ,covers^ );
288
inc(ptrcomp(p ) ,4 );
289
inc(ptrcomp(covers ) );
299
{ bgra32_blend_solid_vspan }
300
procedure bgra32_blend_solid_vspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr; covers : int8u_ptr );
309
p:=unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
312
alpha:=(c.a * (covers^ + 1 ) ) shr 8;
314
if alpha = base_mask then
316
order_bgra(p^ ).R:=c.r;
317
order_bgra(p^ ).G:=c.g;
318
order_bgra(p^ ).B:=c.b;
319
order_bgra(p^ ).A:=base_mask;
323
blend_pix_bgra(p ,c.r ,c.g ,c.b ,alpha ,covers^ );
325
p:=unsigned_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
327
inc(ptrcomp(covers ) ,sizeof(int8u ) );
336
{ bgra32_blend_color_hspan }
337
procedure bgra32_blend_color_hspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr; covers : int8u_ptr; cover : int8u );
342
p:=unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
344
if covers <> NIL then
346
copy_or_blend_pix_bgra(p ,colors.r ,colors.g ,colors.b ,colors.a ,covers^ );
348
inc(ptrcomp(covers ) ,sizeof(int8u ) );
349
inc(ptrcomp(p ) ,4 );
350
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
357
copy_or_blend_pix_bgra(p ,colors.r ,colors.g ,colors.b ,colors.a );
359
inc(ptrcomp(p ) ,4 );
360
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
366
copy_or_blend_pix_bgra(p ,colors.r ,colors.g ,colors.b ,colors.a ,cover );
368
inc(ptrcomp(p ) ,4 );
369
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
376
{ bgra32_blend_color_vspan }
377
procedure bgra32_blend_color_vspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr; covers : int8u_ptr; cover : int8u );
382
p:=unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
384
if covers <> NIL then
386
copy_or_blend_pix_bgra(
394
inc(ptrcomp(covers ) ,sizeof(int8u ) );
396
p:=unsigned_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
398
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
405
copy_or_blend_pix_bgra(
412
p:=unsigned_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
414
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
420
copy_or_blend_pix_bgra(
428
p:=unsigned_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
430
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
437
{ bgra32_blend_from }
438
procedure bgra32_blend_from(this : pixel_formats_ptr; from : pixel_formats_ptr; psrc_ : int8u_ptr; xdst ,ydst ,xsrc ,ysrc : int; len : unsigned; cover : int8u );
440
psrc ,pdst : unsigned_ptr;
445
psrc:=unsigned_ptr(psrc_ );
446
pdst:=unsigned_ptr(ptrcomp(this.m_rbuf.row(ydst ) ) + (xdst shl 2 ) * sizeof(int8u ) );
449
if ptrcomp(xdst ) > ptrcomp(xsrc ) then
451
inc(ptrcomp(psrc ) ,((len - 1 ) shl 2 ) * sizeof(int8u ) );
452
inc(ptrcomp(pdst ) ,((len - 1 ) shl 2 ) * sizeof(int8u ) );
460
copy_or_blend_pix_bgra(
462
order_bgra(psrc^ ).R ,
463
order_bgra(psrc^ ).G ,
464
order_bgra(psrc^ ).B ,
465
order_bgra(psrc^ ).A );
467
inc(ptrcomp(psrc ) ,incp );
468
inc(ptrcomp(pdst ) ,incp );
474
copy_or_blend_pix_bgra(
476
order_bgra(psrc^ ).R ,
477
order_bgra(psrc^ ).G ,
478
order_bgra(psrc^ ).B ,
479
order_bgra(psrc^ ).A ,
482
inc(ptrcomp(psrc ) ,incp );
483
inc(ptrcomp(pdst ) ,incp );
490
{ bgra32_copy_color_hspan }
491
procedure bgra32_copy_color_hspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr );
496
p:=unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
499
order_bgra(pointer(p )^ ).R:=colors.r;
500
order_bgra(pointer(p )^ ).G:=colors.g;
501
order_bgra(pointer(p )^ ).B:=colors.b;
502
order_bgra(pointer(p )^ ).A:=colors.a;
504
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
505
inc(ptrcomp(p ) ,4 );
512
{ bgra32_copy_color_vspan }
513
procedure bgra32_copy_color_vspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr );
518
p:=unsigned_ptr(ptrcomp(this.m_rbuf.row(y ) ) + (x shl 2 ) );
521
order_bgra(pointer(p )^ ).R:=colors.r;
522
order_bgra(pointer(p )^ ).G:=colors.g;
523
order_bgra(pointer(p )^ ).B:=colors.b;
524
order_bgra(pointer(p )^ ).A:=colors.a;
526
p:=unsigned_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
528
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
535
{ bgra32_blend_from_color }
536
procedure bgra32_blend_from_color(this : pixel_formats_ptr; from : pixel_formats_ptr; color : aggclr_ptr; xdst ,ydst ,xsrc ,ysrc : int; len : unsigned; cover : int8u );
544
ppsz:=from._pix_width;
545
psrc:=pointer(ptrcomp(from.row_ptr(ysrc ) ) + xsrc * ppsz );
549
pdst:=unsigned_ptr(ptrcomp(this.m_rbuf.row_xy(xdst ,ydst ,len ) ) + (xdst shl 2 ) );
552
copy_or_blend_pix_bgra(
553
pdst ,color.r, color.g, color.b, color.a,
554
shr_int32(psrc^ * cover + base_mask ,base_shift ) );
556
inc(ptrcomp(psrc ) ,ppsz );
557
inc(ptrcomp(pdst ) ,4 );
566
{ bgra32_blend_from_lut }
567
procedure bgra32_blend_from_lut(this : pixel_formats_ptr; from : pixel_formats_ptr; color_lut : aggclr_ptr; xdst ,ydst ,xsrc ,ysrc : int; len : unsigned; cover : int8u );
577
ppsz:=from._pix_width;
578
psrc:=pointer(ptrcomp(from.row_ptr(ysrc ) ) + xsrc * ppsz );
582
pdst:=unsigned_ptr(ptrcomp(this.m_rbuf.row_xy(xdst ,ydst ,len ) ) + (xdst shl 2 ) );
586
color:=aggclr_ptr(ptrcomp(color_lut ) + psrc^ * sizeof(aggclr ) );
588
copy_or_blend_pix_bgra(pdst ,color.r, color.g, color.b, color.a );
590
inc(ptrcomp(psrc ) ,ppsz );
591
inc(ptrcomp(pdst ) ,4 );
597
color:=aggclr_ptr(ptrcomp(color_lut ) + psrc^ * sizeof(aggclr ) );
599
copy_or_blend_pix_bgra(pdst ,color.r, color.g, color.b, color.a ,cover );
601
inc(ptrcomp(psrc ) ,ppsz );
602
inc(ptrcomp(pdst ) ,4 );