2
// AggPas 2.4 RM3 pixel format definition file
5
function make_pix_565(r ,g ,b : unsigned ) : int16u;
8
((r and $F8 ) shl 8 ) or
9
((g and $FC ) shl 3 ) or
15
procedure make_color_565(var color : aggclr; p : int16u_ptr );
20
(p^ shl 3 ) and $F8 );
25
procedure blend_pix_565(p : int16u_ptr; cr ,cg ,cb ,alpha : int );
34
r:=(rgb shr 8 ) and $F8;
35
g:=(rgb shr 3 ) and $FC;
36
b:=(rgb shl 3 ) and $F8;
39
((((cr - r ) * alpha + (r shl 8 ) ) ) and $F800 ) or
40
((((cg - g ) * alpha + (g shl 8 ) ) shr 5 ) and $07E0 ) or
41
(((cb - b ) * alpha + (b shl 8 ) ) shr 11 );
45
{ copy_or_blend_pix_565 }
46
procedure copy_or_blend_pix_565(p : int16u_ptr; c : aggclr_ptr; cover : unsigned );
53
alpha:=(c.a * (cover + 1 ) ) shr 8;
55
if alpha = base_mask then
56
p^:=make_pix_565(c.r ,c.g ,c.b )
58
blend_pix_565(p ,c.r ,c.g ,c.b ,alpha );
65
procedure rgb565_copy_pixel(this : pixel_formats_ptr; x ,y : int; c : aggclr_ptr );
67
int16u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * sizeof(int16u ) )^:=make_pix_565(c.r ,c.g ,c.b );
71
{ rgb565_blend_pixel }
72
procedure rgb565_blend_pixel(this : pixel_formats_ptr; x ,y : int; c : aggclr_ptr; cover : int8u );
74
copy_or_blend_pix_565(int16u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * sizeof(int16u ) ) ,c ,cover );
79
function rgb565_pixel(this : pixel_formats_ptr; x ,y : int ) : aggclr;
83
int16u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * sizeof(int16u ) ) );
88
procedure rgb565_copy_hline(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr );
94
p:=int16u_ptr (ptrcomp(this.m_rbuf.row(y ) ) + x * sizeof(int16u ) );
95
v:=make_pix_565(c.r ,c.g ,c.b );
100
inc(ptrcomp(p ) ,sizeof(int16u ) );
107
{ rgb565_copy_vline }
108
procedure rgb565_copy_vline(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr );
114
p:=int16u_ptr (ptrcomp(this.m_rbuf.row(y ) ) + x * sizeof(int16u ) );
115
v:=make_pix_565(c.r ,c.g ,c.b );
119
p :=int16u_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
127
{ rgb565_blend_hline }
128
procedure rgb565_blend_hline(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr; cover : int8u );
138
p:=int16u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * sizeof(int16u ) );
140
alpha:=(c.a * (cover + 1 ) ) shr 8;
142
if alpha = base_mask then
144
v:=make_pix_565(c.r ,c.g ,c.b );
149
inc(ptrcomp(p ) ,sizeof(int16u ) );
157
blend_pix_565(p ,c.r ,c.g ,c.b ,alpha );
159
inc(ptrcomp(p ) ,sizeof(int16u ) );
168
{ rgb565_blend_vline }
169
procedure rgb565_blend_vline(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr; cover : int8u );
179
p:=int16u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * sizeof(int16u ) );
181
alpha:=(c.a * (cover + 1 ) ) shr 8;
183
if alpha = base_mask then
185
v:=make_pix_565(c.r ,c.g ,c.b );
189
p :=int16u_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
198
blend_pix_565(p ,c.r ,c.g ,c.b ,alpha );
200
p:=int16u_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
210
{ rgb565_blend_solid_hspan }
211
procedure rgb565_blend_solid_hspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr; covers : int8u_ptr );
216
p:=int16u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * sizeof(int16u ) );
219
copy_or_blend_pix_565(p ,c ,covers^ );
221
inc(ptrcomp(covers ) );
222
inc(ptrcomp(p ) ,sizeof(int16u ) );
229
{ rgb565_blend_solid_vspan }
230
procedure rgb565_blend_solid_vspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; c : aggclr_ptr; covers : int8u_ptr );
235
p:=int16u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * sizeof(int16u ) );
238
copy_or_blend_pix_565(p ,c ,covers^ );
240
inc(ptrcomp(covers ) );
242
p:=int16u_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
250
{ rgb565_blend_color_hspan }
251
procedure rgb565_blend_color_hspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr; covers : int8u_ptr; cover : int8u );
256
p:=int16u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * sizeof(int16u ) );
259
if covers <> NIL then
261
copy_or_blend_pix_565(p ,colors ,covers^ );
263
inc(ptrcomp(covers ) ,sizeof(int8u ) );
267
copy_or_blend_pix_565(p ,colors ,cover );
269
inc(ptrcomp(p ) ,sizeof(int16u ) );
270
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
277
{ rgb565_blend_color_vspan }
278
procedure rgb565_blend_color_vspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr; covers : int8u_ptr; cover : int8u );
283
p:=int16u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * sizeof(int16u ) );
286
if covers <> NIL then
288
copy_or_blend_pix_565(p ,colors ,covers^ );
290
inc(ptrcomp(covers ) ,sizeof(int8u ) );
294
copy_or_blend_pix_565(p ,colors ,cover );
296
p:=int16u_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
298
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
306
procedure rgb565_copy_from(this : pixel_formats_ptr; from : rendering_buffer_ptr; xdst ,ydst ,xsrc ,ysrc : int; len : unsigned );
309
int16u_ptr(ptrcomp(from.row(ysrc ) ) + xsrc * sizeof(int16u ) )^ ,
310
int16u_ptr(ptrcomp(this.m_rbuf.row(ydst ) ) + xdst * sizeof(int16 ) )^ ,
311
len * sizeof(int16u ) );
315
{ rgb565_blend_from }
316
procedure rgb565_blend_from(this : pixel_formats_ptr; from : pixel_formats_ptr; psrc_ : int8u_ptr; xdst ,ydst ,xsrc ,ysrc : int; len : unsigned; cover : int8u );
325
pdst:=int16u_ptr(ptrcomp(this.m_rbuf.row(ydst ) ) + xdst * sizeof(int16u ) );
328
alpha:=int8u_ptr(ptrcomp(psrc ) + from.m_order.A )^;
331
if (alpha = base_mask ) and
334
int8u_ptr(ptrcomp(psrc ) + from.m_order.R )^ ,
335
int8u_ptr(ptrcomp(psrc ) + from.m_order.G )^ ,
336
int8u_ptr(ptrcomp(psrc ) + from.m_order.B )^ )
340
int8u_ptr(ptrcomp(psrc ) + from.m_order.R )^ ,
341
int8u_ptr(ptrcomp(psrc ) + from.m_order.G )^ ,
342
int8u_ptr(ptrcomp(psrc ) + from.m_order.B )^ ,
345
inc(ptrcomp(psrc ) ,4 );
346
inc(ptrcomp(pdst ) ,sizeof(int16u ) );
353
{ rgb565_copy_color_hspan }
354
procedure rgb565_copy_color_hspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr );
359
p:=int16u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * sizeof(int16u ) );
362
p^:=make_pix_565(colors.r ,colors.g ,colors.b );
364
inc(ptrcomp(p ) ,sizeof(int16u ) );
365
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
372
{ rgb565_copy_color_vspan }
373
procedure rgb565_copy_color_vspan(this : pixel_formats_ptr; x ,y : int; len : unsigned; colors : aggclr_ptr );
378
p:=int16u_ptr(ptrcomp(this.m_rbuf.row(y ) ) + x * sizeof(int16u ) );
381
p^:=make_pix_565(colors.r ,colors.g ,colors.b );
382
p :=int16u_ptr(this.m_rbuf.next_row(int8u_ptr(p ) ) );
384
inc(ptrcomp(colors ) ,sizeof(aggclr ) );
391
{ rgb565_blend_from_color }
392
procedure rgb565_blend_from_color(this : pixel_formats_ptr; from : pixel_formats_ptr; color : aggclr_ptr; xdst ,ydst ,xsrc ,ysrc : int; len : unsigned; cover : int8u );
400
ppsz:=from._pix_width;
401
psrc:=from.row_ptr(ysrc );
405
pdst:=int16u_ptr(ptrcomp(this.m_rbuf.row_xy(xdst ,ydst ,len ) ) + xdst * sizeof(int16u ) );
408
blend_pix_565(pdst ,color.r ,color.g ,color.b ,shr_int32(psrc^ * cover + base_mask ,base_shift ) );
410
inc(ptrcomp(psrc ) ,ppsz );
411
inc(ptrcomp(pdst ) ,sizeof(int16u ) );
420
{ rgb565_blend_from_lut }
421
procedure rgb565_blend_from_lut(this : pixel_formats_ptr; from : pixel_formats_ptr; color_lut : aggclr_ptr; xdst ,ydst ,xsrc ,ysrc : int; len : unsigned; cover : int8u );
431
ppsz:=from._pix_width;
432
psrc:=from.row_ptr(ysrc );
436
pdst:=int16u_ptr(ptrcomp(this.m_rbuf.row_xy(xdst ,ydst ,len ) ) + xdst * sizeof(int16u ) );
439
color:=aggclr_ptr(ptrcomp(color_lut ) + psrc^ * sizeof(aggclr ) );
441
blend_pix_565(pdst ,color.r ,color.g ,color.b ,shr_int32(psrc^ * cover + base_mask ,base_shift ) );
443
inc(ptrcomp(psrc ) ,ppsz );
444
inc(ptrcomp(pdst ) ,sizeof(int16u ) );