| 1735 | #define TDDS_EF_BUMP_RGBA(bits, rm, gm, bm, am) TDDS_EF(bits, rm, gm, bm, am, TINYDDS_DDPF_BUMPLUMINANCE | TINYDDS_DDPF_ALPHAPIXELS) |
| 1736 | |
| 1737 | static bool TinyDDS_EncodeFormat(TinyDDS_Format fmt, TinyDDS_Header* header, TinyDDS_HeaderDX10* headerDx10) { |
| 1738 | // lets start with the easy part. if its real DXGI_FORMAT we can just fill in the Dx10 part |
| 1739 | if(fmt < TDDS_SYNTHESISED_DXGIFORMATS) { |
| 1740 | headerDx10->DXGIFormat = (TinyImageFormat_DXGI_FORMAT)fmt; |
| 1741 | header->formatFourCC = TINYDDS_MAKE_RIFFCODE('D','X','1','0'); |
| 1742 | header->formatFlags = TINYDDS_DDPF_FOURCC; |
| 1743 | } else { |
| 1744 | headerDx10->DXGIFormat = TIF_DXGI_FORMAT_UNKNOWN; |
| 1745 | } |
| 1746 | // now lets try synthesising if possible |
| 1747 | // if we can reset the DX10 fourCC but leave the format in place |
| 1748 | // that way if we have slices which can only be DXGI_FORMAT we can use it |
| 1749 | switch(fmt) { |
| 1750 | case TDDS_UNDEFINED: break; |
| 1751 | |
| 1752 | case TDDS_R1_UNORM: TDDS_EF_RGB(1, 0x1, 0, 0) |
| 1753 | case TDDS_R4G4_UNORM: TDDS_EF_RGB(8, 0x0F, 0xF0, 0) |
| 1754 | case TDDS_G4R4_UNORM: TDDS_EF_RGB(8, 0xF0, 0x0F, 0) |
| 1755 | case TDDS_B2G3R3_UNORM: TDDS_EF_RGB(8, 0x3, 0x7, 0x7 ) |
| 1756 | case TDDS_R8_UNORM: TDDS_EF_RGB(8, 0xFF, 0, 0 ); |
| 1757 | case TDDS_A8_UNORM: TDDS_EF_ALPHA( 8, 0xFF); |
| 1758 | |
| 1759 | case TDDS_R16_UNORM:TDDS_EF_RGB( 16,0x0000FFFF, 0, 0) |
| 1760 | case TDDS_A4B4G4R4_UNORM: |
| 1761 | TDDS_EF_RGBA(16, 0xF000, 0x0F00, 0x00F0, 0x000F); |
| 1762 | case TDDS_X4B4G4R4_UNORM: |
| 1763 | TDDS_EF_RGBA(16, 0xF000, 0x0F00, 0x00F0, 0x0000); |
| 1764 | case TDDS_B4G4R4A4_UNORM: |
| 1765 | TDDS_EF_RGBA(16, 0x0F00, 0x00F0, 0x000F, 0xF000); |
| 1766 | case TDDS_B4G4R4X4_UNORM: |
| 1767 | TDDS_EF_RGBA(16, 0x0F00, 0x00F0, 0x000F, 0x0000); |
| 1768 | case TDDS_A4R4G4B4_UNORM: |
| 1769 | TDDS_EF_RGBA(16, 0x00F0, 0x0F00, 0xF000, 0x000F); |
| 1770 | case TDDS_X4R4G4B4_UNORM: |
| 1771 | TDDS_EF_RGBA(16, 0x00F0, 0x0F00, 0xF000, 0x0000); |
| 1772 | case TDDS_R4G4B4A4_UNORM: |
| 1773 | TDDS_EF_RGBA(16, 0x000F, 0x00F0, 0x0F00, 0xF000); |
| 1774 | case TDDS_R4G4B4X4_UNORM: |
| 1775 | TDDS_EF_RGBA(16, 0x000F, 0x00F0, 0x0F00, 0x0000); |
| 1776 | |
| 1777 | case TDDS_B5G5R5A1_UNORM: |
| 1778 | TDDS_EF_RGBA(16, 0x7C00, 0x03E0, 0x001F, 0x8000); |
| 1779 | case TDDS_B5G5R5X1_UNORM: |
| 1780 | TDDS_EF_RGBA(16, 0x7C00, 0x03E0, 0x001F, 0x0000); |
| 1781 | |
| 1782 | case TDDS_R5G5B5A1_UNORM: |
| 1783 | TDDS_EF_RGBA(16, 0x001F, 0x03E0, 0x7C00, 0x8000); |
| 1784 | case TDDS_R5G5B5X1_UNORM: |
| 1785 | TDDS_EF_RGBA(16, 0x001F, 0x03E0, 0x7C00, 0x0000); |
| 1786 | |
| 1787 | case TDDS_A1R5G5B5_UNORM: |
| 1788 | TDDS_EF_RGBA(16, 0x003E, 0x07C0, 0xF800, 0x0001); |
| 1789 | case TDDS_X1R5G5B5_UNORM: |
| 1790 | TDDS_EF_RGBA(16, 0x003E, 0x07C0, 0xF800, 0x0000); |
| 1791 | case TDDS_A1B5G5R5_UNORM: |
| 1792 | TDDS_EF_RGBA(16, 0xF800, 0x07C0, 0x003E, 0x0001); |
| 1793 | case TDDS_X1B5G5R5_UNORM: |
| 1794 | TDDS_EF_RGBA(16, 0xF800, 0x07C0, 0x003E, 0x0000); |
no outgoing calls
no test coverage detected