55 unsigned char* dest_surface,
58 unsigned char* src_surface,
61 unsigned char* mip_surface,
66 bool has_hsv_shift = hsv_shift[0]!=0.0f || hsv_shift[1]!=0.0f || hsv_shift[2]!=0.0f;
71 for (
unsigned y=0;y<height/2;++y) {
72 unsigned* dest_ptr=(
unsigned*)dest_surface;
73 dest_ptr+=2*y*dest_pitch;
74 unsigned* src_ptr=(
unsigned*)src_surface;
75 src_ptr+=y*2*src_pitch;
76 unsigned* mip_ptr=(
unsigned*)mip_surface;
82 for (
unsigned x=0;x<width/2;x++) {
83 b8g8r8a8_10=src_ptr[src_pitch];
84 dest_ptr[dest_pitch]=b8g8r8a8_10;
85 b8g8r8a8_00=*src_ptr++;
86 *dest_ptr++=b8g8r8a8_00;
88 b8g8r8a8_11=src_ptr[src_pitch];
89 dest_ptr[dest_pitch]=b8g8r8a8_11;
90 b8g8r8a8_01=*src_ptr++;
91 *dest_ptr++=b8g8r8a8_01;
93 unsigned b8g8r8a8=
Combine_A8R8G8B8(b8g8r8a8_00,b8g8r8a8_01,b8g8r8a8_10,b8g8r8a8_11);
107 for (
unsigned y=0;y<height/2;++y) {
108 unsigned char* dest_ptr=dest_surface+2*y*dest_pitch;
109 unsigned char* src_ptr=src_surface+y*2*src_pitch;
110 unsigned char* mip_ptr=mip_surface+y*mip_pitch;
111 unsigned b8g8r8a8_00;
112 unsigned b8g8r8a8_01;
113 unsigned b8g8r8a8_10;
114 unsigned b8g8r8a8_11;
115 for (
unsigned x=0;x<width/2;x++,dest_ptr+=dest_bpp*2,src_ptr+=src_bpp*2,mip_ptr+=dest_bpp) {
126 Write_B8G8R8A8(dest_ptr+dest_bpp+dest_pitch,dest_format,b8g8r8a8_11);
128 unsigned b8g8r8a8=
Combine_A8R8G8B8(b8g8r8a8_00,b8g8r8a8_01,b8g8r8a8_10,b8g8r8a8_11);
148 unsigned char* dest_surface,
149 unsigned dest_surface_width,
150 unsigned dest_surface_height,
151 unsigned dest_surface_pitch,
153 unsigned char* src_surface,
154 unsigned src_surface_width,
155 unsigned src_surface_height,
156 unsigned src_surface_pitch,
158 const unsigned char* src_palette,
159 unsigned src_palette_bpp,
160 bool generate_mip_level,
173 for(
unsigned y=0; y<dest_surface_height; y++ ) {
174 unsigned char* dest_ptr=dest_surface;
175 dest_ptr+=y*dest_surface_pitch;
176 unsigned char* src_ptr_mid=src_surface;
177 src_ptr_mid+=y*src_surface_pitch;
178 unsigned char* src_ptr_next_line = ( src_ptr_mid + src_surface_pitch );
179 unsigned char* src_ptr_prev_line = ( src_ptr_mid - src_surface_pitch );
181 if( y == src_surface_height-1 )
182 src_ptr_next_line = src_ptr_mid;
184 src_ptr_prev_line = src_ptr_mid;
186 for(
unsigned x=0; x<dest_surface_width; x++ ) {
210 int v00=bv00,v01=bv01,vM1=bvM1,v10=bv10,v1M=bv1M;
215 if( (v00 < vM1) && (v00 < v01) ) {
222 unsigned short uL = ( v00>1 ) ? 63 : 127;
224 switch(dest_surface_format) {
226 *dest_ptr++ = (
unsigned char)iDu;
227 *dest_ptr++ = (
unsigned char)iDv;
231 *(
unsigned short*)dest_ptr = (
unsigned short)( ( (iDu>>3) & 0x1f ) << 0 );
232 *(
unsigned short*)dest_ptr |= (
unsigned short)( ( (iDv>>3) & 0x1f ) << 5 );
233 *(
unsigned short*)dest_ptr |= (
unsigned short)( ( ( uL>>2) & 0x3f ) << 10 );
238 *dest_ptr++ = (
unsigned char)iDu;
239 *dest_ptr++ = (
unsigned char)iDv;
240 *dest_ptr++ = (
unsigned char)uL;
241 *dest_ptr++ = (
unsigned char)0L;
250 src_ptr_mid+=src_bpp;
251 src_ptr_prev_line+=src_bpp;
252 src_ptr_next_line+=src_bpp;
258 bool has_hsv_shift = hsv_shift[0]!=0.0f || hsv_shift[1]!=0.0f || hsv_shift[2]!=0.0f;
261 dest_surface_pitch/=4;
262 src_surface_pitch/=4;
263 if (dest_surface_width==src_surface_width && dest_surface_height==src_surface_height) {
265 if (generate_mip_level) {
266 if (dest_surface_width==1) {
267 unsigned b8g8r8a8=*(
unsigned*)src_surface;
268 if (has_hsv_shift)
Recolor(b8g8r8a8,hsv_shift);
269 *(
unsigned*)dest_surface=b8g8r8a8;
272 for (
unsigned y=0;y<dest_surface_height/2;++y) {
273 unsigned* dest_ptr=(
unsigned*)dest_surface;
274 dest_ptr+=2*y*dest_surface_pitch;
275 unsigned* src_ptr=(
unsigned*)src_surface;
276 unsigned* mip_ptr=src_ptr;
277 src_ptr+=y*2*src_surface_pitch;
278 mip_ptr+=y*src_surface_pitch;
279 unsigned b8g8r8a8_00;
280 unsigned b8g8r8a8_01;
281 unsigned b8g8r8a8_10;
282 unsigned b8g8r8a8_11;
283 for (
unsigned x=0;x<dest_surface_width/2;x++) {
285 b8g8r8a8_10=src_ptr[src_surface_pitch];
286 b8g8r8a8_00=*src_ptr++;
287 b8g8r8a8_11=src_ptr[src_surface_pitch];
288 b8g8r8a8_01=*src_ptr++;
291 Recolor(b8g8r8a8_00,hsv_shift);
292 Recolor(b8g8r8a8_01,hsv_shift);
293 Recolor(b8g8r8a8_10,hsv_shift);
294 Recolor(b8g8r8a8_11,hsv_shift);
298 dest_ptr[dest_surface_pitch]=b8g8r8a8_10;
299 *dest_ptr++=b8g8r8a8_00;
300 dest_ptr[dest_surface_pitch]=b8g8r8a8_11;
301 *dest_ptr++=b8g8r8a8_01;
304 *mip_ptr++=
Combine_A8R8G8B8(b8g8r8a8_00,b8g8r8a8_01,b8g8r8a8_10,b8g8r8a8_11);
310 for (
unsigned y=0;y<dest_surface_height;++y) {
311 unsigned* dest_ptr=(
unsigned*)dest_surface;
312 dest_ptr+=y*dest_surface_pitch;
313 const unsigned* src_ptr=(
unsigned*)src_surface;
314 src_ptr+=y*src_surface_pitch;
317 for (
unsigned x=0;x<dest_surface_width;++x) {
318 unsigned b8g8r8a8=*src_ptr++;
320 *dest_ptr++=b8g8r8a8;
324 for (
unsigned x=0;x<dest_surface_width;++x) {
325 *dest_ptr++=*src_ptr++;
334 for (
unsigned y=0;y<dest_surface_height;++y) {
335 unsigned* dest_ptr=(
unsigned*)dest_surface;
336 dest_ptr+=y*dest_surface_pitch;
337 unsigned src_y=y*src_surface_height/dest_surface_height;
338 const unsigned* src_ptr=(
unsigned*)src_surface;
339 src_ptr+=src_y*src_surface_pitch;
340 for (
unsigned x=0;x<dest_surface_width;++x) {
341 unsigned src_x=x*src_surface_width/dest_surface_width;
342 unsigned b8g8r8a8=src_ptr[src_x];
346 *dest_ptr++=b8g8r8a8;
357 if (dest_surface_width==src_surface_width && dest_surface_height==src_surface_height) {
359 if (generate_mip_level) {
361 if (dest_surface_width==1) {
362 unsigned char* dest_ptr=dest_surface;
363 unsigned char* src_ptr=src_surface;
365 Read_B8G8R8A8(b8g8r8a8,src_ptr,src_surface_format,src_palette,src_palette_bpp);
372 for (
unsigned y=0;y<dest_surface_height/2;++y) {
373 unsigned char* dest_ptr=dest_surface+2*y*dest_surface_pitch;
374 unsigned char* src_ptr=src_surface+y*2*src_surface_pitch;
375 unsigned char* mip_ptr=src_surface+y*src_surface_pitch;
376 unsigned b8g8r8a8_00;
377 unsigned b8g8r8a8_01;
378 unsigned b8g8r8a8_10;
379 unsigned b8g8r8a8_11;
380 for (
unsigned x=0;x<dest_surface_width/2;x++,dest_ptr+=dest_bpp*2,src_ptr+=src_bpp*2,mip_ptr+=src_bpp) {
382 Read_B8G8R8A8(b8g8r8a8_00,src_ptr,src_surface_format,src_palette,src_palette_bpp);
383 Read_B8G8R8A8(b8g8r8a8_01,src_ptr+src_bpp,src_surface_format,src_palette,src_palette_bpp);
384 Read_B8G8R8A8(b8g8r8a8_10,src_ptr+src_surface_pitch,src_surface_format,src_palette,src_palette_bpp);
385 Read_B8G8R8A8(b8g8r8a8_11,src_ptr+src_bpp+src_surface_pitch,src_surface_format,src_palette,src_palette_bpp);
389 Recolor(b8g8r8a8_00,hsv_shift);
390 Recolor(b8g8r8a8_01,hsv_shift);
391 Recolor(b8g8r8a8_10,hsv_shift);
392 Recolor(b8g8r8a8_11,hsv_shift);
397 Write_B8G8R8A8(dest_ptr+dest_bpp,dest_surface_format,b8g8r8a8_01);
398 Write_B8G8R8A8(dest_ptr+dest_surface_pitch,dest_surface_format,b8g8r8a8_10);
399 Write_B8G8R8A8(dest_ptr+dest_bpp+dest_surface_pitch,dest_surface_format,b8g8r8a8_11);
402 unsigned b8g8r8a8=
Combine_A8R8G8B8(b8g8r8a8_00,b8g8r8a8_01,b8g8r8a8_10,b8g8r8a8_11);
409 for (
unsigned y=0;y<dest_surface_height;++y) {
410 unsigned char* dest_ptr=dest_surface+y*dest_surface_pitch;
411 const unsigned char* src_ptr=src_surface+y*src_surface_pitch;
413 for (
unsigned x=0;x<dest_surface_width;++x,dest_ptr+=dest_bpp,src_ptr+=src_bpp) {
414 Copy_Pixel(dest_ptr,dest_surface_format,src_ptr,src_surface_format,src_palette,src_palette_bpp,hsv_shift);
418 for (
unsigned x=0;x<dest_surface_width;++x,dest_ptr+=dest_bpp,src_ptr+=src_bpp) {
419 Copy_Pixel(dest_ptr,dest_surface_format,src_ptr,src_surface_format,src_palette,src_palette_bpp);
428 for (
unsigned y=0;y<dest_surface_height;++y) {
429 unsigned char* dest_ptr=dest_surface+y*dest_surface_pitch;
430 unsigned src_y=y*src_surface_height/dest_surface_height;
431 const unsigned char* src_ptr=src_surface+src_y*src_surface_pitch;
433 for (
unsigned x=0;x<dest_surface_width;++x,dest_ptr+=dest_bpp) {
434 unsigned src_x=x*src_surface_width/dest_surface_width;
436 Copy_Pixel(dest_ptr,dest_surface_format,src_ptr+src_x,src_surface_format,src_palette,src_palette_bpp,hsv_shift);
440 for (
unsigned x=0;x<dest_surface_width;++x,dest_ptr+=dest_bpp) {
441 unsigned src_x=x*src_surface_width/dest_surface_width;
443 Copy_Pixel(dest_ptr,dest_surface_format,src_ptr+src_x,src_surface_format,src_palette,src_palette_bpp);