| 791 | } D3DFORMAT; |
| 792 | |
| 793 | void SaveDDSFile(const char* pszFile, CMP_Texture& texture) |
| 794 | { |
| 795 | FILE* pFile = fopen(pszFile, ("wb")); |
| 796 | if (!pFile) |
| 797 | return; |
| 798 | |
| 799 | bool DDSet = false; |
| 800 | |
| 801 | switch (texture.format) |
| 802 | { |
| 803 | case CMP_FORMAT_BC1: |
| 804 | case CMP_FORMAT_BC2: |
| 805 | case CMP_FORMAT_BC3: |
| 806 | case CMP_FORMAT_BC4: |
| 807 | case CMP_FORMAT_BC4_S: |
| 808 | case CMP_FORMAT_BC5: |
| 809 | case CMP_FORMAT_BC5_S: { |
| 810 | fwrite(&DDS_HEADER, sizeof(DWORD), 1, pFile); |
| 811 | DDSD2 ddsd2; |
| 812 | memset(&ddsd2, 0, sizeof(DDSD2)); |
| 813 | ddsd2.dwSize = sizeof(DDSD2); |
| 814 | ddsd2.dwWidth = texture.dwWidth; |
| 815 | ddsd2.dwHeight = texture.dwHeight; |
| 816 | ddsd2.dwMipMapCount = 1; // For this example code only 1 mip level is used. |
| 817 | ddsd2.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT | DDSD_MIPMAPCOUNT; |
| 818 | ddsd2.dwFlags |= DDSD_LINEARSIZE; |
| 819 | ddsd2.dwLinearSize = texture.dwDataSize; |
| 820 | ddsd2.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); |
| 821 | ddsd2.ddsCaps.dwCaps = DDSCAPS_TEXTURE; // In this example texture are just 2D no cubemap or volume |
| 822 | ddsd2.ddpfPixelFormat.dwFlags = DDPF_FOURCC; |
| 823 | |
| 824 | switch (texture.format) |
| 825 | { |
| 826 | case CMP_FORMAT_BC1: |
| 827 | ddsd2.ddpfPixelFormat.dwFourCC = FOURCC_DXT1; |
| 828 | break; |
| 829 | case CMP_FORMAT_BC2: |
| 830 | ddsd2.ddpfPixelFormat.dwFourCC = FOURCC_DXT3; |
| 831 | break; |
| 832 | case CMP_FORMAT_BC3: |
| 833 | ddsd2.ddpfPixelFormat.dwFourCC = FOURCC_DXT5; |
| 834 | break; |
| 835 | case CMP_FORMAT_BC4: |
| 836 | ddsd2.ddpfPixelFormat.dwFourCC = FOURCC_BC4U; // FOURCC_ATI1N; |
| 837 | break; |
| 838 | case CMP_FORMAT_BC4_S: |
| 839 | ddsd2.ddpfPixelFormat.dwFourCC = FOURCC_BC4S; |
| 840 | break; |
| 841 | case CMP_FORMAT_BC5: |
| 842 | ddsd2.ddpfPixelFormat.dwFourCC = FOURCC_BC5U; // FOURCC_ATI2N_XY; |
| 843 | break; |
| 844 | case CMP_FORMAT_BC5_S: |
| 845 | ddsd2.ddpfPixelFormat.dwFourCC = FOURCC_BC5S; |
| 846 | break; |
| 847 | } |
| 848 | |
| 849 | ddsd2.ddpfPixelFormat.dwPrivateFormatBitCount = 0; |
| 850 | |