MCPcopy Create free account
hub / github.com/crownengine/crown / decodeBlockEtc2ModeT

Function decodeBlockEtc2ModeT

3rdparty/bimg/src/image.cpp:2640–2697  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2638 }
2639
2640 static void decodeBlockEtc2ModeT(uint8_t _dst[16*4], const uint8_t _src[8])
2641 {
2642 uint8_t rgb[16];
2643
2644 // 0 1 2 3 4 5 6 7
2645 // 7654321076543210765432107654321076543210765432107654321076543210
2646 // ...rr.rrggggbbbbrrrrggggbbbbDD.Dmmmmmmmmmmmmmmmmllllllllllllllll
2647 // ^ ^ ^ ^ ^
2648 // +-- c0 +-- c1 | +-- msb +-- lsb
2649 // +-- dist
2650
2651 rgb[ 0] = ( (_src[0] >> 1) & 0xc)
2652 | (_src[0] & 0x3)
2653 ;
2654 rgb[ 1] = _src[1] >> 4;
2655 rgb[ 2] = _src[1] & 0xf;
2656
2657 rgb[ 8] = _src[2] >> 4;
2658 rgb[ 9] = _src[2] & 0xf;
2659 rgb[10] = _src[3] >> 4;
2660
2661 rgb[ 0] = bitRangeConvert(rgb[ 0], 4, 8);
2662 rgb[ 1] = bitRangeConvert(rgb[ 1], 4, 8);
2663 rgb[ 2] = bitRangeConvert(rgb[ 2], 4, 8);
2664 rgb[ 8] = bitRangeConvert(rgb[ 8], 4, 8);
2665 rgb[ 9] = bitRangeConvert(rgb[ 9], 4, 8);
2666 rgb[10] = bitRangeConvert(rgb[10], 4, 8);
2667
2668 uint8_t dist = ((_src[3] >> 1) & 0x6) | (_src[3] & 0x1);
2669 int32_t mod = s_etc2Mod[dist];
2670
2671 rgb[ 4] = uint8_satadd(rgb[ 8], mod);
2672 rgb[ 5] = uint8_satadd(rgb[ 9], mod);
2673 rgb[ 6] = uint8_satadd(rgb[10], mod);
2674
2675 rgb[12] = uint8_satadd(rgb[ 8], -mod);
2676 rgb[13] = uint8_satadd(rgb[ 9], -mod);
2677 rgb[14] = uint8_satadd(rgb[10], -mod);
2678
2679 uint32_t indexMsb = (_src[4]<<8) | _src[5];
2680 uint32_t indexLsb = (_src[6]<<8) | _src[7];
2681
2682 for (uint32_t ii = 0; ii < 16; ++ii)
2683 {
2684 const uint32_t idx = (ii&0xc) | ( (ii & 0x3)<<4);
2685 const uint32_t lsbi = indexLsb & 1;
2686 const uint32_t msbi = (indexMsb & 1)<<1;
2687 const uint32_t pal = (lsbi | msbi)<<2;
2688
2689 _dst[idx + 0] = rgb[pal+2];
2690 _dst[idx + 1] = rgb[pal+1];
2691 _dst[idx + 2] = rgb[pal+0];
2692 _dst[idx + 3] = 255;
2693
2694 indexLsb >>= 1;
2695 indexMsb >>= 1;
2696 }
2697 }

Callers 1

decodeBlockEtc12Function · 0.85

Calls 2

bitRangeConvertFunction · 0.85
uint8_sataddFunction · 0.85

Tested by

no test coverage detected