Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/libmupen64plus/mupen64plus-video-glide64mk2/src/Glide64/TexMod.h
2 views
1
/*
2
* Glide64 - Glide video plugin for Nintendo 64 emulators.
3
* Copyright (c) 2002 Dave2001
4
* Copyright (c) 2003-2009 Sergey 'Gonetz' Lipski
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
*/
20
21
//****************************************************************
22
//
23
// Glide64 - Glide Plugin for Nintendo 64 emulators
24
// Project started on December 29th, 2001
25
//
26
// Authors:
27
// Dave2001, original author, founded the project in 2001, left it in 2002
28
// Gugaman, joined the project in 2002, left it in 2002
29
// Sergey 'Gonetz' Lipski, joined the project in 2002, main author since fall of 2002
30
// Hiroshi 'KoolSmoky' Morii, joined the project in 2007
31
//
32
//****************************************************************
33
//
34
// To modify Glide64:
35
// * Write your name and (optional)email, commented by your work, so I know who did it, and so that you can find which parts you modified when it comes time to send it to me.
36
// * Do NOT send me the whole project or file that you modified. Take out your modified code sections, and tell me where to put them. If people sent the whole thing, I would have many different versions, but no idea how to combine them all.
37
//
38
//****************************************************************
39
40
static void mod_tex_inter_color_using_factor (wxUint16 *dst, int size, wxUint32 color, wxUint32 factor)
41
{
42
float percent = factor / 255.0f;
43
float percent_i = 1 - percent;
44
wxUint32 cr, cg, cb;
45
wxUint16 col, a;
46
wxUint8 r, g, b;
47
48
cr = (color >> 12) & 0xF;
49
cg = (color >> 8) & 0xF;
50
cb = (color >> 4) & 0xF;
51
52
for (int i=0; i<size; i++)
53
{
54
col = *dst;
55
a = col & 0xF000;
56
r = (wxUint8)(percent_i * ((col >> 8) & 0xF) + percent * cr);
57
g = (wxUint8)(percent_i * ((col >> 4) & 0xF) + percent * cg);
58
b = (wxUint8)(percent_i * (col & 0xF) + percent * cb);
59
*(dst++) = a | (r << 8) | (g << 4) | b;
60
}
61
}
62
63
static void mod_tex_inter_col_using_col1 (wxUint16 *dst, int size, wxUint32 color0, wxUint32 color1)
64
{
65
wxUint32 cr, cg, cb;
66
wxUint16 col, a;
67
wxUint8 r, g, b;
68
69
float percent_r = ((color1 >> 12) & 0xF) / 15.0f;
70
float percent_g = ((color1 >> 8) & 0xF) / 15.0f;
71
float percent_b = ((color1 >> 4) & 0xF) / 15.0f;
72
float percent_r_i = 1.0f - percent_r;
73
float percent_g_i = 1.0f - percent_g;
74
float percent_b_i = 1.0f - percent_b;
75
76
cr = (color0 >> 12) & 0xF;
77
cg = (color0 >> 8) & 0xF;
78
cb = (color0 >> 4) & 0xF;
79
80
for (int i=0; i<size; i++)
81
{
82
col = *dst;
83
a = col & 0xF000;
84
r = (wxUint8)(percent_r_i * ((col >> 8) & 0xF) + percent_r * cr);
85
g = (wxUint8)(percent_g_i * ((col >> 4) & 0xF) + percent_g * cg);
86
b = (wxUint8)(percent_b_i * (col & 0xF) + percent_b * cb);
87
*(dst++) = a | (r << 8) | (g << 4) | b;
88
}
89
}
90
91
static void mod_full_color_sub_tex (wxUint16 *dst, int size, wxUint32 color)
92
{
93
wxUint32 cr, cg, cb, ca;
94
wxUint16 col;
95
wxUint8 a, r, g, b;
96
97
cr = (color >> 12) & 0xF;
98
cg = (color >> 8) & 0xF;
99
cb = (color >> 4) & 0xF;
100
ca = color & 0xF;
101
102
for (int i=0; i<size; i++)
103
{
104
col = *dst;
105
a = (wxUint8)(ca - ((col >> 12) & 0xF));
106
r = (wxUint8)(cr - ((col >> 8) & 0xF));
107
g = (wxUint8)(cg - ((col >> 4) & 0xF));
108
b = (wxUint8)(cb - (col & 0xF));
109
*(dst++) = (a << 12) | (r << 8) | (g << 4) | b;
110
}
111
}
112
113
static void mod_col_inter_col1_using_tex (wxUint16 *dst, int size, wxUint32 color0, wxUint32 color1)
114
{
115
wxUint32 cr0, cg0, cb0, cr1, cg1, cb1;
116
wxUint16 col;
117
wxUint8 r, g, b;
118
wxUint16 a;
119
float percent_r, percent_g, percent_b;
120
121
cr0 = (color0 >> 12) & 0xF;
122
cg0 = (color0 >> 8) & 0xF;
123
cb0 = (color0 >> 4) & 0xF;
124
cr1 = (color1 >> 12) & 0xF;
125
cg1 = (color1 >> 8) & 0xF;
126
cb1 = (color1 >> 4) & 0xF;
127
128
for (int i=0; i<size; i++)
129
{
130
col = *dst;
131
a = col & 0xF000;
132
percent_r = ((col >> 8) & 0xF) / 15.0f;
133
percent_g = ((col >> 4) & 0xF) / 15.0f;
134
percent_b = (col & 0xF) / 15.0f;
135
r = min(15, (wxUint8)((1.0f-percent_r) * cr0 + percent_r * cr1 + 0.0001f));
136
g = min(15, (wxUint8)((1.0f-percent_g) * cg0 + percent_g * cg1 + 0.0001f));
137
b = min(15, (wxUint8)((1.0f-percent_b) * cb0 + percent_b * cb1 + 0.0001f));
138
*(dst++) = a | (r << 8) | (g << 4) | b;
139
}
140
}
141
142
static void mod_col_inter_col1_using_texa (wxUint16 *dst, int size, wxUint32 color0, wxUint32 color1)
143
{
144
wxUint32 cr0, cg0, cb0, cr1, cg1, cb1;
145
wxUint16 col;
146
wxUint8 r, g, b;
147
wxUint16 a;
148
float percent, percent_i;
149
150
cr0 = (color0 >> 12) & 0xF;
151
cg0 = (color0 >> 8) & 0xF;
152
cb0 = (color0 >> 4) & 0xF;
153
cr1 = (color1 >> 12) & 0xF;
154
cg1 = (color1 >> 8) & 0xF;
155
cb1 = (color1 >> 4) & 0xF;
156
157
for (int i=0; i<size; i++)
158
{
159
col = *dst;
160
a = col & 0xF000;
161
percent = (a >> 12) / 15.0f;
162
percent_i = 1.0f - percent;
163
r = (wxUint8)(percent_i * cr0 + percent * cr1);
164
g = (wxUint8)(percent_i * cg0 + percent * cg1);
165
b = (wxUint8)(percent_i * cb0 + percent * cb1);
166
*(dst++) = a | (r << 8) | (g << 4) | b;
167
}
168
}
169
170
static void mod_col_inter_col1_using_texa__mul_tex (wxUint16 *dst, int size, wxUint32 color0, wxUint32 color1)
171
{
172
wxUint32 cr0, cg0, cb0, cr1, cg1, cb1;
173
wxUint16 col;
174
wxUint8 r, g, b;
175
wxUint16 a;
176
float percent, percent_i;
177
178
cr0 = (color0 >> 12) & 0xF;
179
cg0 = (color0 >> 8) & 0xF;
180
cb0 = (color0 >> 4) & 0xF;
181
cr1 = (color1 >> 12) & 0xF;
182
cg1 = (color1 >> 8) & 0xF;
183
cb1 = (color1 >> 4) & 0xF;
184
185
for (int i=0; i<size; i++)
186
{
187
col = *dst;
188
a = col & 0xF000;
189
percent = (a >> 12) / 15.0f;
190
percent_i = 1.0f - percent;
191
r = (wxUint8)(((percent_i * cr0 + percent * cr1) / 15.0f) * (((col & 0x0F00) >> 8) / 15.0f) * 15.0f);
192
g = (wxUint8)(((percent_i * cg0 + percent * cg1) / 15.0f) * (((col & 0x00F0) >> 4) / 15.0f) * 15.0f);
193
b = (wxUint8)(((percent_i * cb0 + percent * cb1) / 15.0f) * ((col & 0x000F) / 15.0f) * 15.0f);
194
*(dst++) = a | (r << 8) | (g << 4) | b;
195
}
196
}
197
198
static void mod_col_inter_tex_using_tex (wxUint16 *dst, int size, wxUint32 color)
199
{
200
wxUint32 cr, cg, cb;
201
wxUint16 col;
202
wxUint8 r, g, b;
203
wxUint16 a;
204
float percent_r, percent_g, percent_b;
205
206
cr = (color >> 12) & 0xF;
207
cg = (color >> 8) & 0xF;
208
cb = (color >> 4) & 0xF;
209
210
for (int i=0; i<size; i++)
211
{
212
col = *dst;
213
a = col & 0xF000;
214
percent_r = ((col >> 8) & 0xF) / 15.0f;
215
percent_g = ((col >> 4) & 0xF) / 15.0f;
216
percent_b = (col & 0xF) / 15.0f;
217
r = (wxUint8)((1.0f-percent_r) * cr + percent_r * ((col & 0x0F00) >> 8));
218
g = (wxUint8)((1.0f-percent_g) * cg + percent_g * ((col & 0x00F0) >> 4));
219
b = (wxUint8)((1.0f-percent_b) * cb + percent_b * (col & 0x000F));
220
*(dst++) = a | (r << 8) | (g << 4) | b;
221
}
222
}
223
224
static void mod_col_inter_tex_using_texa (wxUint16 *dst, int size, wxUint32 color)
225
{
226
wxUint32 cr, cg, cb;
227
wxUint16 col;
228
wxUint8 r, g, b;
229
wxUint16 a;
230
float percent, percent_i;
231
232
cr = (color >> 12) & 0xF;
233
cg = (color >> 8) & 0xF;
234
cb = (color >> 4) & 0xF;
235
236
for (int i=0; i<size; i++)
237
{
238
col = *dst;
239
a = col & 0xF000;
240
percent = (a >> 12) / 15.0f;
241
percent_i = 1.0f - percent;
242
r = (wxUint8)(percent_i * cr + percent * ((col & 0x0F00) >> 8));
243
g = (wxUint8)(percent_i * cg + percent * ((col & 0x00F0) >> 4));
244
b = (wxUint8)(percent_i * cb + percent * (col & 0x000F));
245
*(dst++) = a | (r << 8) | (g << 4) | b;
246
}
247
}
248
249
static void mod_col2_inter__col_inter_col1_using_tex__using_texa (wxUint16 *dst, int size,
250
wxUint32 color0, wxUint32 color1,
251
wxUint32 color2)
252
{
253
wxUint32 cr0, cg0, cb0, cr1, cg1, cb1, cr2, cg2, cb2;
254
wxUint16 col;
255
wxUint8 r, g, b;
256
wxUint16 a;
257
float percent_r, percent_g, percent_b, percent_a;
258
259
cr0 = (color0 >> 12) & 0xF;
260
cg0 = (color0 >> 8) & 0xF;
261
cb0 = (color0 >> 4) & 0xF;
262
cr1 = (color1 >> 12) & 0xF;
263
cg1 = (color1 >> 8) & 0xF;
264
cb1 = (color1 >> 4) & 0xF;
265
cr2 = (color2 >> 12) & 0xF;
266
cg2 = (color2 >> 8) & 0xF;
267
cb2 = (color2 >> 4) & 0xF;
268
269
for (int i=0; i<size; i++)
270
{
271
col = *dst;
272
a = col & 0xF000;
273
percent_a = (a >> 12) / 15.0f;
274
percent_r = ((col >> 8) & 0xF) / 15.0f;
275
percent_g = ((col >> 4) & 0xF) / 15.0f;
276
percent_b = (col & 0xF) / 15.0f;
277
r = (wxUint8)(((1.0f-percent_r) * cr0 + percent_r * cr1) * percent_a + cr2 * (1.0f-percent_a));
278
g = (wxUint8)(((1.0f-percent_g) * cg0 + percent_g * cg1) * percent_a + cg2 * (1.0f-percent_a));
279
b = (wxUint8)(((1.0f-percent_b) * cb0 + percent_b * cb1) * percent_a + cb2 * (1.0f-percent_a));
280
*(dst++) = a | (r << 8) | (g << 4) | b;
281
}
282
}
283
284
static void mod_tex_scale_fac_add_fac (wxUint16 *dst, int size, wxUint32 factor)
285
{
286
float percent = factor / 255.0f;
287
wxUint16 col;
288
wxUint8 a;
289
float base_a = (1.0f - percent) * 15.0f;
290
291
for (int i=0; i<size; i++)
292
{
293
col = *dst;
294
a = (wxUint8)(base_a + percent * (col>>12));
295
*(dst++) = (a<<12) | (col & 0x0FFF);
296
}
297
}
298
299
static void mod_tex_sub_col_mul_fac_add_tex (wxUint16 *dst, int size, wxUint32 color, wxUint32 factor)
300
{
301
float percent = factor / 255.0f;
302
wxUint32 cr, cg, cb;
303
wxUint16 col, a;
304
float r, g, b;
305
306
cr = (color >> 12) & 0xF;
307
cg = (color >> 8) & 0xF;
308
cb = (color >> 4) & 0xF;
309
310
for (int i=0; i<size; i++)
311
{
312
col = *dst;
313
a = col & 0xF000;
314
r = (float)((col >> 8) & 0xF);
315
r = /*max(*/(r - cr) * percent/*, 0.0f)*/ + r;
316
if (r > 15.0f) r = 15.0f;
317
if (r < 0.0f) r = 0.0f;
318
g = (float)((col >> 4) & 0xF);
319
g = /*max(*/(g - cg) * percent/*, 0.0f)*/ + g;
320
if (g > 15.0f) g = 15.0f;
321
if (g < 0.0f) g = 0.0f;
322
b = (float)(col & 0xF);
323
b = /*max(*/(b - cb) * percent/*, 0.0f)*/ + b;
324
if (b > 15.0f) b = 15.0f;
325
if (b < 0.0f) b = 0.0f;
326
327
*(dst++) = a | ((wxUint16)r << 8) | ((wxUint16)g << 4) | (wxUint16)b;
328
}
329
}
330
331
static void mod_tex_scale_col_add_col (wxUint16 *dst, int size, wxUint32 color0, wxUint32 color1)
332
{
333
wxUint32 cr0, cg0, cb0, cr1, cg1, cb1;
334
wxUint16 col;
335
wxUint8 r, g, b;
336
wxUint16 a;
337
float percent_r, percent_g, percent_b;
338
339
cr0 = (color0 >> 12) & 0xF;
340
cg0 = (color0 >> 8) & 0xF;
341
cb0 = (color0 >> 4) & 0xF;
342
cr1 = (color1 >> 12) & 0xF;
343
cg1 = (color1 >> 8) & 0xF;
344
cb1 = (color1 >> 4) & 0xF;
345
346
for (int i=0; i<size; i++)
347
{
348
col = *dst;
349
a = col & 0xF000;
350
percent_r = ((col >> 8) & 0xF) / 15.0f;
351
percent_g = ((col >> 4) & 0xF) / 15.0f;
352
percent_b = (col & 0xF) / 15.0f;
353
r = min(15, (wxUint8)(percent_r * cr0 + cr1 + 0.0001f));
354
g = min(15, (wxUint8)(percent_g * cg0 + cg1 + 0.0001f));
355
b = min(15, (wxUint8)(percent_b * cb0 + cb1 + 0.0001f));
356
*(dst++) = a | (r << 8) | (g << 4) | b;
357
}
358
}
359
360
static void mod_tex_add_col (wxUint16 *dst, int size, wxUint32 color)
361
{
362
wxUint32 cr, cg, cb;
363
wxUint16 col;
364
wxUint8 a, r, g, b;
365
366
cr = (color >> 12) & 0xF;
367
cg = (color >> 8) & 0xF;
368
cb = (color >> 4) & 0xF;
369
370
for (int i=0; i<size; i++)
371
{
372
col = *dst;
373
a = (wxUint8)((col >> 12) & 0xF);
374
// a = col & 0xF000;
375
r = (wxUint8)(cr + ((col >> 8) & 0xF))&0xF;
376
g = (wxUint8)(cg + ((col >> 4) & 0xF))&0xF;
377
b = (wxUint8)(cb + (col & 0xF))&0xF;
378
*(dst++) = (a << 12) | (r << 8) | (g << 4) | b;
379
}
380
}
381
382
static void mod_col_mul_texa_add_tex (wxUint16 *dst, int size, wxUint32 color)
383
{
384
wxUint32 cr, cg, cb;
385
wxUint16 col;
386
wxUint8 r, g, b;
387
wxUint16 a;
388
float factor;
389
390
cr = (color >> 12) & 0xF;
391
cg = (color >> 8) & 0xF;
392
cb = (color >> 4) & 0xF;
393
394
for (int i=0; i<size; i++)
395
{
396
col = *dst;
397
a = col & 0xF000;
398
factor = (a >> 12) / 15.0f;
399
r = (wxUint8)(cr*factor + ((col >> 8) & 0xF))&0xF;
400
g = (wxUint8)(cg*factor + ((col >> 4) & 0xF))&0xF;
401
b = (wxUint8)(cb*factor + (col & 0xF))&0xF;
402
*(dst++) = a | (r << 8) | (g << 4) | b;
403
}
404
}
405
406
static void mod_tex_sub_col (wxUint16 *dst, int size, wxUint32 color)
407
{
408
int cr, cg, cb;
409
wxUint16 col;
410
wxUint8 a, r, g, b;
411
412
cr = (color >> 12) & 0xF;
413
cg = (color >> 8) & 0xF;
414
cb = (color >> 4) & 0xF;
415
416
for (int i=0; i<size; i++)
417
{
418
col = *dst;
419
a = (wxUint8)(col & 0xF000);
420
r = (wxUint8)max((((col >> 8) & 0xF) - cr), 0);
421
g = (wxUint8)max((((col >> 4) & 0xF) - cg), 0);
422
b = (wxUint8)max(((col & 0xF) - cb), 0);
423
*(dst++) = (a << 12) | (r << 8) | (g << 4) | b;
424
}
425
}
426
427
static void mod_tex_sub_col_mul_fac (wxUint16 *dst, int size, wxUint32 color, wxUint32 factor)
428
{
429
float percent = factor / 255.0f;
430
wxUint32 cr, cg, cb;
431
wxUint16 col, a;
432
float r, g, b;
433
434
cr = (color >> 12) & 0xF;
435
cg = (color >> 8) & 0xF;
436
cb = (color >> 4) & 0xF;
437
438
for (int i=0; i<size; i++)
439
{
440
col = *dst;
441
a = (wxUint8)((col >> 12) & 0xF);
442
r = (float)((col >> 8) & 0xF);
443
r = (r - cr) * percent;
444
if (r > 15.0f) r = 15.0f;
445
if (r < 0.0f) r = 0.0f;
446
g = (float)((col >> 4) & 0xF);
447
g = (g - cg) * percent;
448
if (g > 15.0f) g = 15.0f;
449
if (g < 0.0f) g = 0.0f;
450
b = (float)(col & 0xF);
451
b = (b - cb) * percent;
452
if (b > 15.0f) b = 15.0f;
453
if (b < 0.0f) b = 0.0f;
454
455
*(dst++) = (a << 12) | ((wxUint16)r << 8) | ((wxUint16)g << 4) | (wxUint16)b;
456
}
457
}
458
459
static void mod_col_inter_tex_using_col1 (wxUint16 *dst, int size, wxUint32 color0, wxUint32 color1)
460
{
461
wxUint32 cr, cg, cb;
462
wxUint16 col, a;
463
wxUint8 r, g, b;
464
465
float percent_r = ((color1 >> 12) & 0xF) / 15.0f;
466
float percent_g = ((color1 >> 8) & 0xF) / 15.0f;
467
float percent_b = ((color1 >> 4) & 0xF) / 15.0f;
468
float percent_r_i = 1.0f - percent_r;
469
float percent_g_i = 1.0f - percent_g;
470
float percent_b_i = 1.0f - percent_b;
471
472
cr = (color0 >> 12) & 0xF;
473
cg = (color0 >> 8) & 0xF;
474
cb = (color0 >> 4) & 0xF;
475
476
for (int i=0; i<size; i++)
477
{
478
col = *dst;
479
a = (wxUint8)((col >> 12) & 0xF);
480
r = (wxUint8)(percent_r * ((col >> 8) & 0xF) + percent_r_i * cr);
481
g = (wxUint8)(percent_g * ((col >> 4) & 0xF) + percent_g_i * cg);
482
b = (wxUint8)(percent_b * (col & 0xF) + percent_b_i * cb);
483
*(dst++) = (a << 12) | (r << 8) | (g << 4) | b;
484
}
485
}
486
487
static void mod_tex_inter_noise_using_col (wxUint16 *dst, int size, wxUint32 color)
488
{
489
wxUint16 col, a;
490
wxUint8 r, g, b, noise;
491
492
float percent_r = ((color >> 12) & 0xF) / 15.0f;
493
float percent_g = ((color >> 8) & 0xF) / 15.0f;
494
float percent_b = ((color >> 4) & 0xF) / 15.0f;
495
float percent_r_i = 1.0f - percent_r;
496
float percent_g_i = 1.0f - percent_g;
497
float percent_b_i = 1.0f - percent_b;
498
499
for (int i=0; i<size; i++)
500
{
501
col = *dst;
502
a = col & 0xF000;
503
noise = rand()%16;
504
r = (wxUint8)(percent_r_i * ((col >> 8) & 0xF) + percent_r * noise);
505
g = (wxUint8)(percent_g_i * ((col >> 4) & 0xF) + percent_g * noise);
506
b = (wxUint8)(percent_b_i * (col & 0xF) + percent_b * noise);
507
*(dst++) = a | (r << 8) | (g << 4) | b;
508
}
509
}
510
511
static void mod_tex_inter_col_using_texa (wxUint16 *dst, int size, wxUint32 color)
512
{
513
wxUint32 cr, cg, cb;
514
wxUint16 col;
515
wxUint8 r, g, b;
516
wxUint16 a;
517
float percent, percent_i;
518
519
cr = (color >> 12) & 0xF;
520
cg = (color >> 8) & 0xF;
521
cb = (color >> 4) & 0xF;
522
523
for (int i=0; i<size; i++)
524
{
525
col = *dst;
526
a = col & 0xF000;
527
percent = (a >> 12) / 15.0f;
528
percent_i = 1.0f - percent;
529
r = (wxUint8)(percent * cr + percent_i * ((col & 0x0F00) >> 8));
530
g = (wxUint8)(percent * cg + percent_i * ((col & 0x00F0) >> 4));
531
b = (wxUint8)(percent * cb + percent_i * (col & 0x000F));
532
*(dst++) = a | (r << 8) | (g << 4) | b;
533
}
534
}
535
536
static void mod_tex_mul_col (wxUint16 *dst, int size, wxUint32 color)
537
{
538
float cr, cg, cb;
539
wxUint16 col;
540
wxUint8 r, g, b;
541
wxUint16 a;
542
543
cr = (float)((color >> 12) & 0xF)/16.0f;
544
cg = (float)((color >> 8) & 0xF)/16.0f;
545
cb = (float)((color >> 4) & 0xF)/16.0f;
546
547
for (int i=0; i<size; i++)
548
{
549
col = *dst;
550
a = col & 0xF000;
551
r = (wxUint8)(cr * ((col & 0x0F00) >> 8));
552
g = (wxUint8)(cg * ((col & 0x00F0) >> 4));
553
b = (wxUint8)(cb * (col & 0x000F));
554
*(dst++) = a | (r << 8) | (g << 4) | b;
555
}
556
}
557
558
static void mod_tex_scale_fac_add_col (wxUint16 *dst, int size, wxUint32 color, wxUint32 factor)
559
{
560
float percent = factor / 255.0f;
561
wxUint32 cr, cg, cb;
562
wxUint16 col;
563
float r, g, b;
564
565
cr = (color >> 12) & 0xF;
566
cg = (color >> 8) & 0xF;
567
cb = (color >> 4) & 0xF;
568
569
for (int i=0; i<size; i++)
570
{
571
col = *dst;
572
r = cr + percent * (float)((col>>8)&0xF);
573
g = cg + percent * (float)((col>>4)&0xF);
574
b = cb + percent * (float)(col&0xF);
575
*(dst++) = (col&0xF000) | ((wxUint8)r << 8) | ((wxUint8)g << 4) | (wxUint8)b;
576
}
577
}
578
579