From 485a5ebe2beb45bfade3fafe08a1a9f39ac4ee09 Mon Sep 17 00:00:00 2001 From: Relintai Date: Sat, 16 Dec 2023 00:25:38 +0100 Subject: [PATCH] Removed the tga module. --- modules/tga/SCsub | 9 - modules/tga/config.py | 6 - modules/tga/image_loader_tga.cpp | 383 ------------------------------- modules/tga/image_loader_tga.h | 85 ------- modules/tga/register_types.cpp | 48 ---- modules/tga/register_types.h | 38 --- 6 files changed, 569 deletions(-) delete mode 100644 modules/tga/SCsub delete mode 100644 modules/tga/config.py delete mode 100644 modules/tga/image_loader_tga.cpp delete mode 100644 modules/tga/image_loader_tga.h delete mode 100644 modules/tga/register_types.cpp delete mode 100644 modules/tga/register_types.h diff --git a/modules/tga/SCsub b/modules/tga/SCsub deleted file mode 100644 index 31cd6ce..0000000 --- a/modules/tga/SCsub +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env python - -Import("env") -Import("env_modules") - -env_tga = env_modules.Clone() - -# Pandemonium's own source files -env_tga.add_source_files(env.modules_sources, "*.cpp") diff --git a/modules/tga/config.py b/modules/tga/config.py deleted file mode 100644 index d22f945..0000000 --- a/modules/tga/config.py +++ /dev/null @@ -1,6 +0,0 @@ -def can_build(env, platform): - return True - - -def configure(env): - pass diff --git a/modules/tga/image_loader_tga.cpp b/modules/tga/image_loader_tga.cpp deleted file mode 100644 index 4a48142..0000000 --- a/modules/tga/image_loader_tga.cpp +++ /dev/null @@ -1,383 +0,0 @@ -/*************************************************************************/ -/* image_loader_tga.cpp */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ - -#include "image_loader_tga.h" - -#include "core/error/error_macros.h" -#include "core/io/file_access_memory.h" -#include "core/os/os.h" -#include "core/string/print_string.h" - -Error ImageLoaderTGA::decode_tga_rle(const uint8_t *p_compressed_buffer, size_t p_pixel_size, uint8_t *p_uncompressed_buffer, size_t p_output_size, size_t p_input_size) { - Error error; - - PoolVector pixels; - error = pixels.resize(p_pixel_size); - if (error != OK) { - return error; - } - - PoolVector::Write pixels_w = pixels.write(); - - size_t compressed_pos = 0; - size_t output_pos = 0; - size_t c = 0; - size_t count = 0; - - while (output_pos < p_output_size) { - c = p_compressed_buffer[compressed_pos]; - compressed_pos += 1; - count = (c & 0x7f) + 1; - - if (output_pos + count * p_pixel_size > p_output_size) { - return ERR_PARSE_ERROR; - } - - if (c & 0x80) { - if (compressed_pos + p_pixel_size > p_input_size) { - return ERR_PARSE_ERROR; - } - for (size_t i = 0; i < p_pixel_size; i++) { - pixels_w.ptr()[i] = p_compressed_buffer[compressed_pos]; - compressed_pos += 1; - } - for (size_t i = 0; i < count; i++) { - for (size_t j = 0; j < p_pixel_size; j++) { - p_uncompressed_buffer[output_pos + j] = pixels_w.ptr()[j]; - } - output_pos += p_pixel_size; - } - } else { - if (compressed_pos + count * p_pixel_size > p_input_size) { - return ERR_PARSE_ERROR; - } - count *= p_pixel_size; - for (size_t i = 0; i < count; i++) { - p_uncompressed_buffer[output_pos] = p_compressed_buffer[compressed_pos]; - compressed_pos += 1; - output_pos += 1; - } - } - } - return OK; -} - -Error ImageLoaderTGA::convert_to_image(Ref p_image, const uint8_t *p_buffer, const tga_header_s &p_header, const uint8_t *p_palette, const bool p_is_monochrome, size_t p_input_size) { -#define TGA_PUT_PIXEL(r, g, b, a) \ - int image_data_ofs = ((y * width) + x); \ - image_data_w[image_data_ofs * 4 + 0] = r; \ - image_data_w[image_data_ofs * 4 + 1] = g; \ - image_data_w[image_data_ofs * 4 + 2] = b; \ - image_data_w[image_data_ofs * 4 + 3] = a; - - uint32_t width = p_header.image_width; - uint32_t height = p_header.image_height; - tga_origin_e origin = static_cast((p_header.image_descriptor & TGA_ORIGIN_MASK) >> TGA_ORIGIN_SHIFT); - uint8_t alpha_bits = p_header.image_descriptor & TGA_IMAGE_DESCRIPTOR_ALPHA_MASK; - uint32_t x_start; - int32_t x_step; - uint32_t x_end; - uint32_t y_start; - int32_t y_step; - uint32_t y_end; - - if (origin == TGA_ORIGIN_TOP_LEFT || origin == TGA_ORIGIN_TOP_RIGHT) { - y_start = 0; - y_step = 1; - y_end = height; - } else { - y_start = height - 1; - y_step = -1; - y_end = -1; - } - - if (origin == TGA_ORIGIN_TOP_LEFT || origin == TGA_ORIGIN_BOTTOM_LEFT) { - x_start = 0; - x_step = 1; - x_end = width; - } else { - x_start = width - 1; - x_step = -1; - x_end = -1; - } - - PoolVector image_data; - image_data.resize(width * height * sizeof(uint32_t)); - PoolVector::Write image_data_w = image_data.write(); - - size_t i = 0; - uint32_t x = x_start; - uint32_t y = y_start; - - if (p_header.pixel_depth == 8) { - if (p_is_monochrome) { - while (y != y_end) { - while (x != x_end) { - if (i >= p_input_size) { - return ERR_PARSE_ERROR; - } - uint8_t shade = p_buffer[i]; - - TGA_PUT_PIXEL(shade, shade, shade, 0xff) - - x += x_step; - i += 1; - } - x = x_start; - y += y_step; - } - } else { - while (y != y_end) { - while (x != x_end) { - if (i >= p_input_size) { - return ERR_PARSE_ERROR; - } - uint8_t index = p_buffer[i]; - uint8_t r = 0x00; - uint8_t g = 0x00; - uint8_t b = 0x00; - uint8_t a = 0xff; - - if (p_header.color_map_depth == 24) { - // Due to low-high byte order, the color table must be - // read in the same order as image data (little endian) - r = (p_palette[(index * 3) + 2]); - g = (p_palette[(index * 3) + 1]); - b = (p_palette[(index * 3) + 0]); - } else { - return ERR_INVALID_DATA; - } - - TGA_PUT_PIXEL(r, g, b, a) - - x += x_step; - i += 1; - } - x = x_start; - y += y_step; - } - } - } else if (p_header.pixel_depth == 16) { - while (y != y_end) { - while (x != x_end) { - if (i + 1 >= p_input_size) { - return ERR_PARSE_ERROR; - } - - // Always stored as RGBA5551 - uint8_t r = (p_buffer[i + 1] & 0x7c) << 1; - uint8_t g = ((p_buffer[i + 1] & 0x03) << 6) | ((p_buffer[i + 0] & 0xe0) >> 2); - uint8_t b = (p_buffer[i + 0] & 0x1f) << 3; - uint8_t a = (p_buffer[i + 1] & 0x80) ? 0xff : 0; - - TGA_PUT_PIXEL(r, g, b, alpha_bits ? a : 0xff); - - x += x_step; - i += 2; - } - x = x_start; - y += y_step; - } - } else if (p_header.pixel_depth == 24) { - while (y != y_end) { - while (x != x_end) { - if (i + 2 >= p_input_size) { - return ERR_PARSE_ERROR; - } - - uint8_t r = p_buffer[i + 2]; - uint8_t g = p_buffer[i + 1]; - uint8_t b = p_buffer[i + 0]; - - TGA_PUT_PIXEL(r, g, b, 0xff) - - x += x_step; - i += 3; - } - x = x_start; - y += y_step; - } - } else if (p_header.pixel_depth == 32) { - while (y != y_end) { - while (x != x_end) { - if (i + 3 >= p_input_size) { - return ERR_PARSE_ERROR; - } - - uint8_t a = p_buffer[i + 3]; - uint8_t r = p_buffer[i + 2]; - uint8_t g = p_buffer[i + 1]; - uint8_t b = p_buffer[i + 0]; - - TGA_PUT_PIXEL(r, g, b, a) - - x += x_step; - i += 4; - } - x = x_start; - y += y_step; - } - } - - image_data_w.release(); - - p_image->create(width, height, false, Image::FORMAT_RGBA8, image_data); - - return OK; -} - -Error ImageLoaderTGA::load_image(Ref p_image, FileAccess *f, bool p_force_linear, float p_scale) { - PoolVector src_image; - uint64_t src_image_len = f->get_len(); - ERR_FAIL_COND_V(src_image_len == 0, ERR_FILE_CORRUPT); - ERR_FAIL_COND_V(src_image_len < (int64_t)sizeof(tga_header_s), ERR_FILE_CORRUPT); - src_image.resize(src_image_len); - - Error err = OK; - - tga_header_s tga_header; - tga_header.id_length = f->get_8(); - tga_header.color_map_type = f->get_8(); - tga_header.image_type = static_cast(f->get_8()); - - tga_header.first_color_entry = f->get_16(); - tga_header.color_map_length = f->get_16(); - tga_header.color_map_depth = f->get_8(); - - tga_header.x_origin = f->get_16(); - tga_header.y_origin = f->get_16(); - tga_header.image_width = f->get_16(); - tga_header.image_height = f->get_16(); - tga_header.pixel_depth = f->get_8(); - tga_header.image_descriptor = f->get_8(); - - bool is_encoded = (tga_header.image_type == TGA_TYPE_RLE_INDEXED || tga_header.image_type == TGA_TYPE_RLE_RGB || tga_header.image_type == TGA_TYPE_RLE_MONOCHROME); - bool has_color_map = (tga_header.image_type == TGA_TYPE_RLE_INDEXED || tga_header.image_type == TGA_TYPE_INDEXED); - bool is_monochrome = (tga_header.image_type == TGA_TYPE_RLE_MONOCHROME || tga_header.image_type == TGA_TYPE_MONOCHROME); - - if (tga_header.image_type == TGA_TYPE_NO_DATA) { - err = FAILED; - } - - uint64_t color_map_size; - if (has_color_map) { - if (tga_header.color_map_length > 256 || (tga_header.color_map_depth != 24) || tga_header.color_map_type != 1) { - err = FAILED; - } - color_map_size = tga_header.color_map_length * (tga_header.color_map_depth >> 3); - } else { - if (tga_header.color_map_type) { - err = FAILED; - } - color_map_size = 0; - } - - if ((src_image_len - f->get_position()) < (tga_header.id_length + color_map_size)) { - err = FAILED; // TGA data appears to be truncated (fewer bytes than expected). - } - - if (tga_header.image_width <= 0 || tga_header.image_height <= 0) { - err = FAILED; - } - - if (!(tga_header.pixel_depth == 8 || tga_header.pixel_depth == 16 || tga_header.pixel_depth == 24 || tga_header.pixel_depth == 32)) { - err = FAILED; - } - - if (err == OK) { - f->seek(f->get_position() + tga_header.id_length); - - PoolVector palette; - - if (has_color_map) { - err = palette.resize(color_map_size); - if (err == OK) { - PoolVector::Write palette_w = palette.write(); - f->get_buffer(&palette_w[0], color_map_size); - } else { - return OK; - } - } - - PoolVector::Write src_image_w = src_image.write(); - f->get_buffer(&src_image_w[0], src_image_len - f->get_position()); - - PoolVector::Read src_image_r = src_image.read(); - - const size_t pixel_size = tga_header.pixel_depth >> 3; - size_t buffer_size = (tga_header.image_width * tga_header.image_height) * pixel_size; - - PoolVector uncompressed_buffer; - uncompressed_buffer.resize(buffer_size); - PoolVector::Write uncompressed_buffer_w = uncompressed_buffer.write(); - PoolVector::Read uncompressed_buffer_r; - - const uint8_t *buffer = nullptr; - - if (is_encoded) { - err = decode_tga_rle(src_image_r.ptr(), pixel_size, uncompressed_buffer_w.ptr(), buffer_size, src_image_len); - - if (err == OK) { - uncompressed_buffer_r = uncompressed_buffer.read(); - buffer = uncompressed_buffer_r.ptr(); - } - } else { - buffer = src_image_r.ptr(); - buffer_size = src_image_len; - }; - - if (err == OK) { - PoolVector::Read palette_r = palette.read(); - err = convert_to_image(p_image, buffer, tga_header, palette_r.ptr(), is_monochrome, buffer_size); - } - } - - f->close(); - return err; -} - -void ImageLoaderTGA::get_recognized_extensions(List *p_extensions) const { - p_extensions->push_back("tga"); -} - -static Ref _tga_mem_loader_func(const uint8_t *p_tga, int p_size) { - FileAccessMemory memfile; - Error open_memfile_error = memfile.open_custom(p_tga, p_size); - ERR_FAIL_COND_V_MSG(open_memfile_error, Ref(), "Could not create memfile for TGA image buffer."); - Ref img; - img.instance(); - Error load_error = ImageLoaderTGA().load_image(img, &memfile, false, 1.0f); - ERR_FAIL_COND_V_MSG(load_error, Ref(), "Failed to load TGA image."); - return img; -} - -ImageLoaderTGA::ImageLoaderTGA() { - Image::_tga_mem_loader_func = _tga_mem_loader_func; -} diff --git a/modules/tga/image_loader_tga.h b/modules/tga/image_loader_tga.h deleted file mode 100644 index 05b46e7..0000000 --- a/modules/tga/image_loader_tga.h +++ /dev/null @@ -1,85 +0,0 @@ -#ifndef IMAGE_LOADER_TGA_H -#define IMAGE_LOADER_TGA_H -/*************************************************************************/ -/* image_loader_tga.h */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ - -#include "core/io/image_loader.h" - -/** - @author SaracenOne -*/ -#define TGA_IMAGE_DESCRIPTOR_ALPHA_MASK 0xf - -class ImageLoaderTGA : public ImageFormatLoader { - enum tga_type_e { - TGA_TYPE_NO_DATA = 0, - TGA_TYPE_INDEXED = 1, - TGA_TYPE_RGB = 2, - TGA_TYPE_MONOCHROME = 3, - TGA_TYPE_RLE_INDEXED = 9, - TGA_TYPE_RLE_RGB = 10, - TGA_TYPE_RLE_MONOCHROME = 11 - }; - - enum tga_origin_e { - TGA_ORIGIN_BOTTOM_LEFT = 0x00, - TGA_ORIGIN_BOTTOM_RIGHT = 0x01, - TGA_ORIGIN_TOP_LEFT = 0x02, - TGA_ORIGIN_TOP_RIGHT = 0x03, - TGA_ORIGIN_SHIFT = 0x04, - TGA_ORIGIN_MASK = 0x30 - }; - - struct tga_header_s { - uint8_t id_length; - uint8_t color_map_type; - tga_type_e image_type; - - uint16_t first_color_entry; - uint16_t color_map_length; - uint8_t color_map_depth; - - uint16_t x_origin; - uint16_t y_origin; - uint16_t image_width; - uint16_t image_height; - uint8_t pixel_depth; - uint8_t image_descriptor; - }; - static Error decode_tga_rle(const uint8_t *p_compressed_buffer, size_t p_pixel_size, uint8_t *p_uncompressed_buffer, size_t p_output_size, size_t p_input_size); - static Error convert_to_image(Ref p_image, const uint8_t *p_buffer, const tga_header_s &p_header, const uint8_t *p_palette, const bool p_is_monochrome, size_t p_input_size); - -public: - virtual Error load_image(Ref p_image, FileAccess *f, bool p_force_linear, float p_scale); - virtual void get_recognized_extensions(List *p_extensions) const; - ImageLoaderTGA(); -}; - -#endif diff --git a/modules/tga/register_types.cpp b/modules/tga/register_types.cpp deleted file mode 100644 index bb5cbd9..0000000 --- a/modules/tga/register_types.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/*************************************************************************/ -/* register_types.cpp */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ - -#include "register_types.h" - -#include "image_loader_tga.h" - -static ImageLoaderTGA *image_loader_tga = nullptr; - -void register_tga_types(ModuleRegistrationLevel p_level) { - if (p_level == MODULE_REGISTRATION_LEVEL_CORE) { - image_loader_tga = memnew(ImageLoaderTGA); - ImageLoader::add_image_format_loader(image_loader_tga); - } -} - -void unregister_tga_types(ModuleRegistrationLevel p_level) { - if (p_level == MODULE_REGISTRATION_LEVEL_CORE) { - memdelete(image_loader_tga); - } -} diff --git a/modules/tga/register_types.h b/modules/tga/register_types.h deleted file mode 100644 index 4fe941b..0000000 --- a/modules/tga/register_types.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef TGA_REGISTER_TYPES_H -#define TGA_REGISTER_TYPES_H -/*************************************************************************/ -/* register_types.h */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ - -#include "modules/register_module_types.h" - -void register_tga_types(ModuleRegistrationLevel p_level); -void unregister_tga_types(ModuleRegistrationLevel p_level); - -#endif // TGA_REGISTER_TYPES_H