cleaned all trailing white space from source files.
[sdk] / ecere / src / gfx / drivers / lfbConvert.ec
1 namespace gfx::drivers;
2
3 import "Display"
4
5 //////////////////////////////////////////////////////////////////////////////
6 // CONVERSION ROUTINES ///////////////////////////////////////////////////////
7 //////////////////////////////////////////////////////////////////////////////
8
9 #define CONVERT(function, sourcetype, dsttype)     \
10 { \
11    uint x,y,ic;                                     \
12    for(y = 0; y < dst.height; y++)                 \
13    {                                            \
14       c = y * dst.stride;                       \
15       ic = y * src.stride;                    \
16       for(x = 0; x < dst.width; x++, c++, ic++)      \
17       {                                         \
18          pixel = ((sourcetype *)src.picture)[ic];\
19          ((dsttype *)dst.picture)[c] = (dsttype)(function); \
20       } \
21    } \
22 }
23
24 static void BMP8_8(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
25 {
26    uint c;
27    byte pixel;
28    if(src.transparent)
29    {
30       if(lfbSystem && lfbSystem.palette == dst.palette)
31          CONVERT(
32             pixel ?
33                ( (pixel = lfbSystem.rgbLookup[(uint16)(Color555)(src.palette[pixel])]) ?
34                   pixel
35                :
36                   lfbSystem.rgbLookup[0x421])
37             :
38                0,
39             byte,byte)
40       else
41          CONVERT(BestColorMatch(dst.palette,1,255,src.palette[pixel]), byte,byte)
42    }
43    else
44    {
45       if(lfbSystem && lfbSystem.palette == dst.palette)
46          CONVERT(lfbSystem.rgbLookup[(uint16)(Color555)(src.palette[pixel])], byte,byte)
47       else
48          CONVERT(BestColorMatch(dst.palette,1,255,src.palette[pixel]), byte,byte)
49    }
50 }
51
52 static void BMP8_444(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
53 {
54    uint c;
55    Color444 pixel;
56    if(src.transparent)
57       CONVERT(pixel ? ( (pixel = (Color444)(src.palette[pixel])) ? pixel : 0x111) : 0, byte, Color444)
58    else
59       CONVERT((Color444)(src.palette[pixel]), byte, Color444)
60 }
61
62 static void BMP8_555(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
63 {
64    uint c;
65    Color555 pixel;
66    if(src.transparent)
67       CONVERT(pixel ? ( (pixel = (Color555)(src.palette[pixel])) ? pixel : 0x421) : 0, byte, Color555)
68    else
69       CONVERT((Color555)(src.palette[pixel]), byte, Color555)
70 }
71
72 static void BMP8_565(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
73 {
74    uint c;
75    Color565 pixel;
76    if(src.transparent)
77       CONVERT(pixel ? ( (pixel = (Color565)(src.palette[pixel])) ? pixel : 0x821) : 0, byte, Color565)
78    else
79       CONVERT((Color565)(src.palette[pixel]), byte, Color565);
80 }
81
82 static void BMP8_888(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
83 {
84    uint c;
85    byte pixel;
86    if(src.transparent)
87       // (src.palette[pixel] & 0xFFFFFF)
88       CONVERT(pixel ? src.palette[pixel] : 0, byte, ColorAlpha)
89    else
90       CONVERT(src.palette[pixel], byte, ColorAlpha)
91 }
92
93 static void BMP8_RGBA(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
94 {
95    uint c;
96    byte pixel;
97    if(src.transparent)
98       // (src.palette[pixel] & 0xFFFFFF)
99       CONVERT(pixel ? (ColorRGBA)(src.palette[pixel]) : 0, byte, ColorRGBA)
100    else
101       CONVERT((ColorRGBA)(src.palette[pixel]), byte, ColorRGBA)
102 }
103
104 static void BMP444_8(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
105 {
106    uint c;
107    Color444 pixel;
108    if(src.transparent)
109    {
110       if(lfbSystem && lfbSystem.palette == dst.palette)
111          CONVERT(
112             pixel ?
113                ( (pixel = lfbSystem.rgbLookup[(uint16)(Color555)(pixel)]) ?
114                   pixel
115                :
116                   lfbSystem.rgbLookup[0x421])
117             :
118                0,
119             Color444, byte)
120       else
121          CONVERT(BestColorMatch(dst.palette,1,255,(ColorAlpha)(pixel)), Color444, byte)
122    }
123    else
124    {
125       if(lfbSystem && lfbSystem.palette == dst.palette)
126          CONVERT(lfbSystem.rgbLookup[(uint16)(Color555)(pixel)],Color444,byte)
127       else
128          CONVERT(BestColorMatch(dst.palette,1,255,(ColorAlpha)(pixel)), Color444,byte)
129    }
130 }
131
132 static void BMP444_555(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
133 {
134    uint c;
135    Color444 pixel;
136    if(src.transparent)
137       CONVERT(pixel ? ( (pixel = (Color555)(pixel)) ? pixel : 0x421) : 0, Color444, Color555)
138    else
139       CONVERT((Color555)(pixel), Color444, Color555);
140 }
141
142 static void BMP444_565(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
143 {
144    uint c;
145    Color444 pixel;
146    if(src.transparent)
147       CONVERT(pixel ? ( (pixel = (Color565)(pixel) ) ? pixel : 0x821) : 0, Color444, Color565)
148    else
149       CONVERT((Color565)(pixel), Color444, Color565);
150 }
151
152 static void BMP444_888(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
153 {
154    uint c;
155    Color444 pixel;
156    if(src.transparent)
157       CONVERT(pixel ? ((ColorAlpha)(pixel) | 0xFF000000) : (ColorAlpha)(pixel), Color444, ColorAlpha)
158    else
159       CONVERT((ColorAlpha)(pixel) | 0xFF000000, Color444, ColorAlpha)
160 }
161
162 static void BMP555_8(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
163 {
164    uint c;
165    Color555 pixel;
166    if(src.transparent)
167    {
168       if(lfbSystem && lfbSystem.palette == dst.palette)
169          CONVERT(
170             pixel ?
171                ( (pixel = lfbSystem.rgbLookup[pixel]) ?
172                   pixel
173                :
174                   lfbSystem.rgbLookup[0x421])
175             :
176                0,
177             Color555, byte)
178       else
179          CONVERT(BestColorMatch(dst.palette,1,255,(ColorAlpha)(pixel)), Color555, byte)
180    }
181    else
182    {
183       if(lfbSystem && lfbSystem.palette == dst.palette)
184          CONVERT(lfbSystem.rgbLookup[(uint16)pixel], Color555, byte)
185       else
186          CONVERT(BestColorMatch(dst.palette,1,255,(ColorAlpha)(pixel)), Color555, byte)
187    }
188 }
189
190 static void BMP555_444(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
191 {
192    uint c;
193    Color444 pixel;
194    if(src.transparent)
195       CONVERT(pixel ? ( (pixel = (Color444)(pixel) ) ? pixel : 0x111) : 0, Color555, Color444)
196    else
197       CONVERT((Color444)(pixel), Color555, Color444);
198 }
199
200 static void BMP555_565(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
201 {
202    uint c;
203    Color555 pixel;
204    if(src.transparent)
205       CONVERT(pixel ? ( (pixel = (Color565)(pixel) ) ? pixel : 0x821) : 0, Color555, Color565)
206    else
207       CONVERT((Color565)(pixel), Color555, Color565);
208 }
209
210 static void BMP555_888(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
211 {
212    uint c;
213    Color555 pixel;
214    if(src.transparent)
215       CONVERT(pixel ? ((ColorAlpha)(pixel) | 0xFF000000) : (ColorAlpha)(pixel), Color555, ColorAlpha)
216    else
217       CONVERT((ColorAlpha)(pixel) | 0xFF000000, Color555, ColorAlpha)
218 }
219
220 static void BMP565_8(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
221 {
222    uint c;
223    Color565 pixel;
224    if(src.transparent)
225    {
226       if(lfbSystem && lfbSystem.palette == dst.palette)
227          CONVERT(
228             pixel ?
229                ( (pixel = lfbSystem.rgbLookup[(uint16)(Color555)(pixel)]) ?
230                   pixel
231                :
232                   lfbSystem.rgbLookup[0x421])
233             :
234                0,
235             Color565, byte)
236       else
237          CONVERT(BestColorMatch(dst.palette,1,255,(ColorAlpha)(pixel)), Color565, byte)
238    }
239    else
240    {
241       if(lfbSystem && lfbSystem.palette == dst.palette)
242          CONVERT(lfbSystem.rgbLookup[(uint16)(Color555)(pixel)], Color565, byte)
243       else
244          CONVERT(BestColorMatch(dst.palette,1,255,(ColorAlpha)(pixel)), Color565, byte)
245    }
246 }
247
248 static void BMP565_444(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
249 {
250    uint c;
251    Color565 pixel;
252    if(src.transparent)
253       CONVERT(pixel ? ( (pixel = (Color444)(pixel) ) ? pixel : 0x111) : 0, Color565, Color444)
254    else
255       CONVERT((Color444)(pixel), Color565, Color444);
256 }
257
258 static void BMP565_555(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
259 {
260    uint c;
261    Color565 pixel;
262    if(src.transparent)
263       CONVERT(pixel ? ( (pixel = (Color555)(pixel) ) ? pixel : 0x421) : 0, Color565, Color555)
264    else
265       CONVERT((Color555)(pixel), Color565, Color555);
266 }
267
268 static void BMP565_888(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
269 {
270    uint c;
271    Color565 pixel;
272    if(src.transparent)
273       CONVERT(pixel ? ((ColorAlpha)(pixel) | 0xFF000000) : (ColorAlpha)(pixel), Color565, ColorAlpha)
274    else
275       CONVERT((ColorAlpha)(pixel) | 0xFF000000, Color565, ColorAlpha)
276 }
277
278 static void BMP888_8(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
279 {
280    uint c;
281    ColorAlpha pixel;
282    if(src.transparent)
283    {
284       if(lfbSystem && lfbSystem.palette == dst.palette)
285          CONVERT(
286             (pixel & 0xFFFFFF) ?
287                ( (pixel = lfbSystem.rgbLookup[(Color555)(pixel)]) ?
288                   pixel
289                :
290                   lfbSystem.rgbLookup[0x421])
291             :
292                0,
293             ColorAlpha,byte)
294       else
295          CONVERT(BestColorMatch(dst.palette,1,255,pixel), ColorAlpha,byte)
296    }
297    else
298    {
299       if(lfbSystem && lfbSystem.palette == dst.palette)
300          CONVERT(lfbSystem.rgbLookup[(Color555)(pixel)], ColorAlpha,byte)
301       else
302          CONVERT(BestColorMatch(dst.palette,1,255,pixel), ColorAlpha,byte)
303    }
304 }
305
306 static void BMP888_444(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
307 {
308    uint c;
309    uint pixel;
310    if(src.transparent)
311       CONVERT((pixel & 0xFFFFFFFF) ? ( (pixel = (Color444)((ColorAlpha)pixel)) ? pixel : 0x111) : 0, ColorAlpha, Color444)
312    else
313       CONVERT((Color444)((ColorAlpha)pixel), ColorAlpha, Color444);
314 }
315
316 static void BMP888_555(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
317 {
318    uint c;
319    uint pixel;
320    if(src.transparent)
321       CONVERT((pixel & 0xFFFFFFFF) ? ( (pixel = (Color555)((ColorAlpha)pixel)) ? pixel : 0x421) : 0, ColorAlpha, Color555)
322    else
323       CONVERT((Color555)((ColorAlpha)pixel), ColorAlpha, Color555)
324 }
325
326 static void BMP888_565(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
327 {
328    uint c;
329    uint pixel;
330    if(src.transparent)
331       CONVERT((pixel & 0xFFFFFFFF) ? ( (pixel = (Color565)((ColorAlpha)pixel)) ? pixel : 0x821) : 0, ColorAlpha, Color565)
332    else
333       CONVERT((Color565)((ColorAlpha)pixel), ColorAlpha, Color565);
334 }
335
336 static void BMP888_RGBA(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
337 {
338    uint c;
339    ColorAlpha pixel;
340    CONVERT(pixel /* = (ColorRGBA)(pixel)*/, ColorAlpha, ColorRGBA);
341 }
342
343 static void BMPA_888(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
344 {
345    uint c;
346    byte pixel;
347    CONVERT((ColorAlpha { pixel, white }), byte, ColorAlpha)
348 }
349
350 static void BMPRGBA_555(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
351 {
352    uint c;
353    uint pixel;
354    if(src.transparent)
355       CONVERT((pixel & 0xFF000000) ? ( (pixel = (Color555)(*(ColorRGBA *)&pixel)) ? pixel : 0x421) : 0, uint, Color555)
356    else
357       CONVERT((Color555)(*(ColorRGBA *)&pixel), ColorRGBA, Color555);
358
359    // CONVERT(pixel /*= (Color555)(pixel)*/, ColorRGBA, Color555);
360 }
361
362 static void BMPRGBA_565(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
363 {
364    uint c;
365    uint pixel;
366    if(src.transparent)
367       CONVERT((pixel & 0xFF000000) ? ( (pixel = (Color565)(*(ColorRGBA *)&pixel)) ? pixel : 0x821) : 0, uint, Color565)
368    else
369       CONVERT((Color565)(*(ColorRGBA *)&pixel), ColorRGBA, Color565);
370 }
371
372 static void BMPRGBA_888(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
373 {
374    uint c;
375    ColorRGBA pixel;
376    CONVERT(pixel /* = (ColorAlpha)(pixel)*/, ColorRGBA, ColorAlpha);
377 }
378
379 static void BMPRGBA_8(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
380 {
381    uint c;
382    ColorRGBA pixel;
383    if(true) //src.transparent)
384    {
385       if(lfbSystem && lfbSystem.palette == dst.palette)
386          CONVERT(
387             //(pixel & 0xFF000000) ?
388             (pixel.a) ?
389                ( (pixel = lfbSystem.rgbLookup[(uint16)(Color555)(pixel)]) ?
390                   pixel
391                :
392                   lfbSystem.rgbLookup[0x421])
393             :
394                0,
395             ColorRGBA, byte)
396       else
397       {
398          //CONVERT((pixel & 0xFF000000) ?
399          CONVERT((pixel.a > 192) ?
400             (BestColorMatch(dst.palette,1,255, (ColorAlpha)(pixel))) : 0, ColorRGBA, byte)
401       }
402    }
403    else
404    {
405       if(lfbSystem && lfbSystem.palette == dst.palette)
406          CONVERT(lfbSystem.rgbLookup[(uint16)(Color555)(pixel)], ColorRGBA, byte)
407       else
408          CONVERT(BestColorMatch(dst.palette,1,255,(ColorAlpha)(pixel)), ColorRGBA, byte)
409    }
410 }
411
412 static void BMP888_A(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
413 {
414    uint c;
415    ColorAlpha pixel;
416    CONVERT(pixel.a, ColorAlpha,byte)
417 }
418
419 static void BMPRGBA_A(LFBSystem lfbSystem, Bitmap src, Bitmap dst)
420 {
421    uint c;
422    ColorRGBA pixel;
423    CONVERT(pixel.a, ColorRGBA, byte)
424 }
425
426 void (* converters_table[PixelFormat][PixelFormat]) (LFBSystem, Bitmap src, Bitmap dst) =
427 {
428    { null,null,null,null,null,null,null, null },
429    { null, BMP8_8, BMP8_444, BMP8_555, BMP8_565, BMP8_888, null, null, BMP8_RGBA },
430    { null, BMP444_8, null, BMP444_555, BMP444_565, BMP444_888, null, null },
431    { null, BMP555_8, BMP555_444, null, BMP555_565, BMP555_888, null, null },
432    { null, BMP565_8, BMP565_444, BMP565_555, null, BMP565_888, null, null },
433    { null, BMP888_8, BMP888_444, BMP888_555, BMP888_565, null, BMP888_A, null, BMP888_RGBA },
434    { null, null, null, null, null, BMPA_888, null, null },
435    { null,null,null,null,null,null,null, null },
436    { null,BMPRGBA_8,null,BMPRGBA_555,BMPRGBA_565,BMPRGBA_888,BMPRGBA_A, null }
437 };