Skip to content

Commit 3c96051

Browse files
Merge pull request #31 from moth1995/feature/add-etc1-le-3ds-support
add support for etc1 le + 3ds swizzle
2 parents 86dfb7d + ce24d69 commit 3c96051

1 file changed

Lines changed: 21 additions & 3 deletions

File tree

‎src/Image/heatimage.py‎

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,19 @@
2121
)
2222
from reversebox.compression.compression_rle_tzar import decompress_rle_tzar
2323
from reversebox.compression.compression_zlib2 import decompress_zlib
24-
from reversebox.image.byte_swap import swap_byte_order_gamecube, swap_byte_order_x360
24+
from reversebox.image.byte_swap import (
25+
swap_byte_order_etc1,
26+
swap_byte_order_gamecube,
27+
swap_byte_order_x360,
28+
)
2529
from reversebox.image.common import (
2630
calculate_aligned_value,
2731
get_block_data_size,
2832
get_bpp_for_image_format,
2933
)
3034
from reversebox.image.image_decoder import ImageDecoder
3135
from reversebox.image.image_formats import ImageFormats
32-
from reversebox.image.swizzling.swizzle_3ds import unswizzle_3ds
36+
from reversebox.image.swizzling.swizzle_3ds import unswizzle_3ds, unswizzle_3ds_blocks
3337
from reversebox.image.swizzling.swizzle_bc import unswizzle_bc
3438
from reversebox.image.swizzling.swizzle_gamecube import unswizzle_gamecube
3539
from reversebox.image.swizzling.swizzle_morton import unswizzle_morton
@@ -98,6 +102,12 @@ def _image_decode(self) -> bool:
98102
# endianess logic
99103
endianess_id: str = get_endianess_id(self.gui_params.endianess_type)
100104

105+
if endianess_id == "little" and image_format == ImageFormats.ETC1:
106+
try:
107+
self.encoded_image_data = swap_byte_order_etc1(self.encoded_image_data)
108+
except Exception as error:
109+
logger.warning(f"ETC1 byte swap function failed! Error: {error}")
110+
101111
if endianess_id == "byte_swap_x360":
102112
endianess_id = "little"
103113
try:
@@ -219,7 +229,15 @@ def _image_decode(self) -> bool:
219229
elif swizzling_id == "bc":
220230
self.encoded_image_data = unswizzle_bc(self.encoded_image_data, self.gui_params.img_width, self.gui_params.img_height, 8, 8, image_bpp)
221231
elif swizzling_id == "3ds":
222-
self.encoded_image_data = unswizzle_3ds(self.encoded_image_data, self.gui_params.img_width, self.gui_params.img_height, image_bpp)
232+
if image_format == ImageFormats.ETC1:
233+
self.encoded_image_data = unswizzle_3ds_blocks(
234+
self.encoded_image_data, self.gui_params.img_width, self.gui_params.img_height,
235+
4, block_width=4, block_height=4
236+
)
237+
else:
238+
self.encoded_image_data = unswizzle_3ds(
239+
self.encoded_image_data, self.gui_params.img_width, self.gui_params.img_height, image_bpp
240+
)
223241
else:
224242
logger.error(f"Swizzling type not supported! Type: {swizzling_id}")
225243

0 commit comments

Comments
 (0)