| 385 | |
| 386 | |
| 387 | struct 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 | |
| 431 | static QDataStream & operator>> ( QDataStream & s, BlockDXT & c ) |
nothing calls this directly
no outgoing calls
no test coverage detected