| 455 | |
| 456 | |
| 457 | ILuint DecodePixelFormat(ILuint *CompFormat) |
| 458 | { |
| 459 | ILuint BlockSize; |
| 460 | |
| 461 | if (Head.Flags2 & DDS_FOURCC) { |
| 462 | BlockSize = ((Head.Width + 3)/4) * ((Head.Height + 3)/4) * Head.Depth; |
| 463 | switch (Head.FourCC) |
| 464 | { |
| 465 | case IL_MAKEFOURCC('D','X','T','1'): |
| 466 | *CompFormat = PF_DXT1; |
| 467 | BlockSize *= 8; |
| 468 | break; |
| 469 | |
| 470 | case IL_MAKEFOURCC('D','X','T','2'): |
| 471 | *CompFormat = PF_DXT2; |
| 472 | BlockSize *= 16; |
| 473 | break; |
| 474 | |
| 475 | case IL_MAKEFOURCC('D','X','T','3'): |
| 476 | *CompFormat = PF_DXT3; |
| 477 | BlockSize *= 16; |
| 478 | break; |
| 479 | |
| 480 | case IL_MAKEFOURCC('D','X','T','4'): |
| 481 | *CompFormat = PF_DXT4; |
| 482 | BlockSize *= 16; |
| 483 | break; |
| 484 | |
| 485 | case IL_MAKEFOURCC('D','X','T','5'): |
| 486 | *CompFormat = PF_DXT5; |
| 487 | BlockSize *= 16; |
| 488 | break; |
| 489 | |
| 490 | case IL_MAKEFOURCC('A', 'T', 'I', '1'): |
| 491 | *CompFormat = PF_ATI1N; |
| 492 | BlockSize *= 8; |
| 493 | break; |
| 494 | |
| 495 | case IL_MAKEFOURCC('A', 'T', 'I', '2'): |
| 496 | *CompFormat = PF_3DC; |
| 497 | BlockSize *= 16; |
| 498 | break; |
| 499 | |
| 500 | case IL_MAKEFOURCC('R', 'X', 'G', 'B'): |
| 501 | *CompFormat = PF_RXGB; |
| 502 | BlockSize *= 16; |
| 503 | break; |
| 504 | |
| 505 | case IL_MAKEFOURCC('$', '\0', '\0', '\0'): |
| 506 | *CompFormat = PF_A16B16G16R16; |
| 507 | BlockSize = Head.Width * Head.Height * Head.Depth * 8; |
| 508 | break; |
| 509 | |
| 510 | case IL_MAKEFOURCC('o', '\0', '\0', '\0'): |
| 511 | *CompFormat = PF_R16F; |
| 512 | BlockSize = Head.Width * Head.Height * Head.Depth * 2; |
| 513 | break; |
| 514 | |