MCPcopy Create free account
hub / github.com/codestation/qcma / BlockDXT

Class BlockDXT

common/dds.cpp:387–428  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

385
386
387struct BlockDXT {
388 Color565 col0;
389 Color565 col1;
390 uchar row[4];
391
392 void GetColors( Color8888 color_array[4] ) {
393 color_array[0].r = (col0.c.r << 3) | (col0.c.r >> 2);
394 color_array[0].g = (col0.c.g << 2) | (col0.c.g >> 4);
395 color_array[0].b = (col0.c.b << 3) | (col0.c.b >> 2);
396 color_array[0].a = 0xFF;
397
398 color_array[1].r = (col1.c.r << 3) | (col1.c.r >> 2);
399 color_array[1].g = (col1.c.g << 2) | (col1.c.g >> 4);
400 color_array[1].b = (col1.c.b << 3) | (col1.c.b >> 2);
401 color_array[1].a = 0xFF;
402
403 if( col0.u > col1.u ) {
404 // Four-color block: derive the other two colors.
405 color_array[2].r = (2 * color_array[0].r + color_array[1].r) / 3;
406 color_array[2].g = (2 * color_array[0].g + color_array[1].g) / 3;
407 color_array[2].b = (2 * color_array[0].b + color_array[1].b) / 3;
408 color_array[2].a = 0xFF;
409
410 color_array[3].r = (2 * color_array[1].r + color_array[0].r) / 3;
411 color_array[3].g = (2 * color_array[1].g + color_array[0].g) / 3;
412 color_array[3].b = (2 * color_array[1].b + color_array[0].b) / 3;
413 color_array[3].a = 0xFF;
414 } else {
415 // Three-color block: derive the other color.
416 color_array[2].r = (color_array[0].r + color_array[1].r) / 2;
417 color_array[2].g = (color_array[0].g + color_array[1].g) / 2;
418 color_array[2].b = (color_array[0].b + color_array[1].b) / 2;
419 color_array[2].a = 0xFF;
420
421 // Set all components to 0 to match DXT specs.
422 color_array[3].r = 0x00; // color_array[2].r;
423 color_array[3].g = 0x00; // color_array[2].g;
424 color_array[3].b = 0x00; // color_array[2].b;
425 color_array[3].a = 0x00;
426 }
427 }
428};
429
430
431static QDataStream & operator>> ( QDataStream & s, BlockDXT & c )

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected