33#include " cfile/cfile.h"
44// KTX1 Spec definition https://registry.khronos.org/KTX/specs/1.0/ktxspec.v1.html
55// ETC2 formats spec https://registry.khronos.org/DataFormat/specs/1.4/dataformat.1.4.inline.html#ETC2
6+ /*
7+ KTX 1 Parser - Format supported by Etc2Comp and AMD Compressonator
8+ ETC2 support for the formats supported by AMD compressonator and their signed alternatives:
9+ ETC2_RGB / ETC2_SRGB -> 24 bit no alpha
10+ ETC2_RGBA1 / ETC2_SRGBA1 -> 24 bit with 1 bit punchthrough alpha
11+ ETC2_RGBA / ETC2_SRGBA -> 32 bit with 8 bit alpha
12+ */
613
714static const uint8_t KTX_ID[12 ] = { 0xAB , ' K' , ' T' , ' X' , ' ' , ' 1' , ' 1' , 0xBB , ' \r ' , ' \n ' , 0x1A , ' \n ' };
815
@@ -15,14 +22,10 @@ uint32_t ktx_etc_block_bytes(const int internal_format)
1522 case GL_COMPRESSED_SRGB8_ETC2:
1623 case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
1724 case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
18- case GL_COMPRESSED_R11_EAC:
19- case GL_COMPRESSED_SIGNED_R11_EAC:
2025 return 8 ;
2126
2227 case GL_COMPRESSED_RGBA8_ETC2_EAC:
2328 case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
24- case GL_COMPRESSED_RG11_EAC:
25- case GL_COMPRESSED_SIGNED_RG11_EAC:
2629 return 16 ;
2730
2831 default :
@@ -39,10 +42,6 @@ int ktx_map_ktx_format_to_gl_internal(const int ktx_format)
3942 return GL_COMPRESSED_RGB8_ETC2;
4043 case KTX_ETC2_RGBA_EAC:
4144 return GL_COMPRESSED_RGBA8_ETC2_EAC;
42- case KTX_EAC_R11:
43- return GL_COMPRESSED_R11_EAC;
44- case KTX_EAC_RG11:
45- return GL_COMPRESSED_RG11_EAC;
4645 case KTX_ETC2_SRGB:
4746 return GL_COMPRESSED_SRGB8_ETC2;
4847 case KTX_ETC2_SRGBA_EAC:
@@ -51,10 +50,6 @@ int ktx_map_ktx_format_to_gl_internal(const int ktx_format)
5150 return GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2;
5251 case KTX_ETC2_SRGB_A1:
5352 return GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2;
54- case KTX_EAC_R11_SNORM:
55- return GL_COMPRESSED_SIGNED_R11_EAC;
56- case KTX_EAC_RG11_SNORM:
57- return GL_COMPRESSED_SIGNED_RG11_EAC;
5853
5954 default : return 0 ;
6055 }
@@ -65,22 +60,19 @@ int ktx_map_gl_internal_to_bm(const int internal_format)
6560 switch (internal_format)
6661 {
6762 case GL_COMPRESSED_RGB8_ETC2:
63+ return BM_TYPE_ETC2_RGB;
6864 case GL_COMPRESSED_SRGB8_ETC2:
65+ return BM_TYPE_ETC2_SRGB;
66+
6967 case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
68+ return BM_TYPE_ETC2_RGBA1;
7069 case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
71- return BM_TYPE_ETC2_RGB ;
70+ return BM_TYPE_ETC2_SRGBA1 ;
7271
7372 case GL_COMPRESSED_RGBA8_ETC2_EAC:
74- case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
7573 return BM_TYPE_ETC2_RGBA_EAC;
76-
77- case GL_COMPRESSED_R11_EAC:
78- case GL_COMPRESSED_SIGNED_R11_EAC:
79- return BM_TYPE_EAC_R11;
80-
81- case GL_COMPRESSED_RG11_EAC:
82- case GL_COMPRESSED_SIGNED_RG11_EAC:
83- return BM_TYPE_EAC_RG11;
74+ case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
75+ return BM_TYPE_ETC2_SRGBA_EAC;
8476
8577 default :
8678 return BM_TYPE_NONE;
@@ -91,6 +83,7 @@ int ktx1_read_header(const char* filename, CFILE* img_cfp, int* w, int* h, int*
9183{
9284 CFILE* cf;
9385 char real_name[MAX_FILENAME_LEN];
86+ // copied from ddsutils
9487 if (img_cfp == nullptr ) {
9588 // this better not happen.. ever
9689 Assert (filename != nullptr );
@@ -187,17 +180,16 @@ int ktx1_read_header(const char* filename, CFILE* img_cfp, int* w, int* h, int*
187180 switch (bm_ct)
188181 {
189182 case BM_TYPE_ETC2_RGB:
183+ case BM_TYPE_ETC2_SRGB:
184+ case BM_TYPE_ETC2_RGBA1:
185+ case BM_TYPE_ETC2_SRGBA1:
190186 *bpp = 24 ;
191187 break ;
192188 case BM_TYPE_ETC2_RGBA_EAC:
189+ case BM_TYPE_ETC2_SRGBA_EAC:
193190 *bpp = 32 ;
194191 break ;
195- case BM_TYPE_EAC_R11:
196- *bpp = 8 ;
197- break ;
198- case BM_TYPE_EAC_RG11:
199- *bpp = 16 ;
200- break ;
192+
201193 default :
202194 *bpp = 0 ;
203195 break ;
@@ -217,6 +209,7 @@ int ktx1_read_bitmap(const char* filename, ubyte* dst, ubyte* out_bpp)
217209{
218210 CFILE* cf;
219211 char real_name[MAX_FILENAME_LEN];
212+ // copied from ddsutils
220213 // this better not happen.. ever
221214 Assert (filename != nullptr );
222215
0 commit comments