| 443 | } |
| 444 | |
| 445 | struct BlockDXTAlphaLinear { |
| 446 | uchar alpha0; |
| 447 | uchar alpha1; |
| 448 | uchar bits[6]; |
| 449 | |
| 450 | void GetAlphas( uchar alpha_array[8] ) { |
| 451 | alpha_array[0] = alpha0; |
| 452 | alpha_array[1] = alpha1; |
| 453 | |
| 454 | // 8-alpha or 6-alpha block? |
| 455 | if( alpha_array[0] > alpha_array[1] ) { |
| 456 | // 8-alpha block: derive the other 6 alphas. |
| 457 | // 000 = alpha_0, 001 = alpha_1, others are interpolated |
| 458 | |
| 459 | alpha_array[2] = ( 6 * alpha0 + alpha1) / 7; // bit code 010 |
| 460 | alpha_array[3] = ( 5 * alpha0 + 2 * alpha1) / 7; // Bit code 011 |
| 461 | alpha_array[4] = ( 4 * alpha0 + 3 * alpha1) / 7; // Bit code 100 |
| 462 | alpha_array[5] = ( 3 * alpha0 + 4 * alpha1) / 7; // Bit code 101 |
| 463 | alpha_array[6] = ( 2 * alpha0 + 5 * alpha1) / 7; // Bit code 110 |
| 464 | alpha_array[7] = ( alpha0 + 6 * alpha1) / 7; // Bit code 111 |
| 465 | } else { |
| 466 | // 6-alpha block: derive the other alphas. |
| 467 | // 000 = alpha_0, 001 = alpha_1, others are interpolated |
| 468 | |
| 469 | alpha_array[2] = (4 * alpha0 + alpha1) / 5; // Bit code 010 |
| 470 | alpha_array[3] = (3 * alpha0 + 2 * alpha1) / 5; // Bit code 011 |
| 471 | alpha_array[4] = (2 * alpha0 + 3 * alpha1) / 5; // Bit code 100 |
| 472 | alpha_array[5] = ( alpha0 + 4 * alpha1) / 5; // Bit code 101 |
| 473 | alpha_array[6] = 0x00; // Bit code 110 |
| 474 | alpha_array[7] = 0xFF; // Bit code 111 |
| 475 | } |
| 476 | } |
| 477 | |
| 478 | void GetBits( uchar bit_array[16] ) { |
| 479 | // Split 24 packed bits into 8 bytes, 3 bits at a time. |
| 480 | uint b = bits[0] | bits[1] << 8 | bits[2] << 16; |
| 481 | bit_array[0] = uchar(b & 0x07); |
| 482 | b >>= 3; |
| 483 | bit_array[1] = uchar(b & 0x07); |
| 484 | b >>= 3; |
| 485 | bit_array[2] = uchar(b & 0x07); |
| 486 | b >>= 3; |
| 487 | bit_array[3] = uchar(b & 0x07); |
| 488 | b >>= 3; |
| 489 | bit_array[4] = uchar(b & 0x07); |
| 490 | b >>= 3; |
| 491 | bit_array[5] = uchar(b & 0x07); |
| 492 | b >>= 3; |
| 493 | bit_array[6] = uchar(b & 0x07); |
| 494 | b >>= 3; |
| 495 | bit_array[7] = uchar(b & 0x07); |
| 496 | |
| 497 | b = bits[3] | bits[4] << 8 | bits[5] << 16; |
| 498 | bit_array[8] = uchar(b & 0x07); |
| 499 | b >>= 3; |
| 500 | bit_array[9] = uchar(b & 0x07); |
| 501 | b >>= 3; |
| 502 | bit_array[10] = uchar(b & 0x07); |
nothing calls this directly
no outgoing calls
no test coverage detected