浏览代码

Merge pull request #44271 from akien-mga/pvrtc-compress-cleanup

PVRTC: Move compress func to `modules/pvr`, drop obsolete PVRTexTool code
Rémi Verschelde 4 年之前
父节点
当前提交
32c06dfc8d

+ 33 - 38
core/io/image.cpp

@@ -66,10 +66,10 @@ const char *Image::format_names[Image::FORMAT_MAX] = {
 	"BPTC_RGBA",
 	"BPTC_RGBF",
 	"BPTC_RGBFU",
-	"PVRTC2", //pvrtc
-	"PVRTC2A",
-	"PVRTC4",
-	"PVRTC4A",
+	"PVRTC1_2", //pvrtc
+	"PVRTC1_2A",
+	"PVRTC1_4",
+	"PVRTC1_4A",
 	"ETC", //etc1
 	"ETC2_R11", //etc2
 	"ETC2_R11S", //signed", NOT srgb.
@@ -155,13 +155,13 @@ int Image::get_format_pixel_size(Format p_format) {
 			return 1; //float /
 		case FORMAT_BPTC_RGBFU:
 			return 1; //unsigned float
-		case FORMAT_PVRTC2:
+		case FORMAT_PVRTC1_2:
 			return 1; //pvrtc
-		case FORMAT_PVRTC2A:
+		case FORMAT_PVRTC1_2A:
 			return 1;
-		case FORMAT_PVRTC4:
+		case FORMAT_PVRTC1_4:
 			return 1;
-		case FORMAT_PVRTC4A:
+		case FORMAT_PVRTC1_4A:
 			return 1;
 		case FORMAT_ETC:
 			return 1; //etc1
@@ -200,13 +200,13 @@ void Image::get_format_min_pixel_size(Format p_format, int &r_w, int &r_h) {
 			r_w = 4;
 			r_h = 4;
 		} break;
-		case FORMAT_PVRTC2:
-		case FORMAT_PVRTC2A: {
+		case FORMAT_PVRTC1_2:
+		case FORMAT_PVRTC1_2A: {
 			r_w = 16;
 			r_h = 8;
 		} break;
-		case FORMAT_PVRTC4A:
-		case FORMAT_PVRTC4: {
+		case FORMAT_PVRTC1_4A:
+		case FORMAT_PVRTC1_4: {
 			r_w = 8;
 			r_h = 8;
 		} break;
@@ -242,9 +242,9 @@ void Image::get_format_min_pixel_size(Format p_format, int &r_w, int &r_h) {
 }
 
 int Image::get_format_pixel_rshift(Format p_format) {
-	if (p_format == FORMAT_DXT1 || p_format == FORMAT_RGTC_R || p_format == FORMAT_PVRTC4 || p_format == FORMAT_PVRTC4A || p_format == FORMAT_ETC || p_format == FORMAT_ETC2_R11 || p_format == FORMAT_ETC2_R11S || p_format == FORMAT_ETC2_RGB8 || p_format == FORMAT_ETC2_RGB8A1) {
+	if (p_format == FORMAT_DXT1 || p_format == FORMAT_RGTC_R || p_format == FORMAT_PVRTC1_4 || p_format == FORMAT_PVRTC1_4A || p_format == FORMAT_ETC || p_format == FORMAT_ETC2_R11 || p_format == FORMAT_ETC2_R11S || p_format == FORMAT_ETC2_RGB8 || p_format == FORMAT_ETC2_RGB8A1) {
 		return 1;
-	} else if (p_format == FORMAT_PVRTC2 || p_format == FORMAT_PVRTC2A) {
+	} else if (p_format == FORMAT_PVRTC1_2 || p_format == FORMAT_PVRTC1_2A) {
 		return 2;
 	} else {
 		return 0;
@@ -261,12 +261,12 @@ int Image::get_format_block_size(Format p_format) {
 
 			return 4;
 		}
-		case FORMAT_PVRTC2:
-		case FORMAT_PVRTC2A: {
+		case FORMAT_PVRTC1_2:
+		case FORMAT_PVRTC1_2A: {
 			return 4;
 		}
-		case FORMAT_PVRTC4A:
-		case FORMAT_PVRTC4: {
+		case FORMAT_PVRTC1_4A:
+		case FORMAT_PVRTC1_4: {
 			return 4;
 		}
 		case FORMAT_ETC: {
@@ -2216,8 +2216,8 @@ bool Image::is_invisible() const {
 
 		} break;
 
-		case FORMAT_PVRTC2A:
-		case FORMAT_PVRTC4A:
+		case FORMAT_PVRTC1_2A:
+		case FORMAT_PVRTC1_4A:
 		case FORMAT_DXT3:
 		case FORMAT_DXT5: {
 			detected = true;
@@ -2258,8 +2258,8 @@ Image::AlphaMode Image::detect_alpha() const {
 			}
 
 		} break;
-		case FORMAT_PVRTC2A:
-		case FORMAT_PVRTC4A:
+		case FORMAT_PVRTC1_2A:
+		case FORMAT_PVRTC1_4A:
 		case FORMAT_DXT3:
 		case FORMAT_DXT5: {
 			detected = true;
@@ -2355,7 +2355,7 @@ Error Image::decompress() {
 		_image_decompress_bc(this);
 	} else if (format >= FORMAT_BPTC_RGBA && format <= FORMAT_BPTC_RGBFU && _image_decompress_bptc) {
 		_image_decompress_bptc(this);
-	} else if (format >= FORMAT_PVRTC2 && format <= FORMAT_PVRTC4A && _image_decompress_pvrtc) {
+	} else if (format >= FORMAT_PVRTC1_2 && format <= FORMAT_PVRTC1_4A && _image_decompress_pvrtc) {
 		_image_decompress_pvrtc(this);
 	} else if (format == FORMAT_ETC && _image_decompress_etc1) {
 		_image_decompress_etc1(this);
@@ -2377,13 +2377,9 @@ Error Image::compress_from_channels(CompressMode p_mode, UsedChannels p_channels
 			ERR_FAIL_COND_V(!_image_compress_bc_func, ERR_UNAVAILABLE);
 			_image_compress_bc_func(this, p_lossy_quality, p_channels);
 		} break;
-		case COMPRESS_PVRTC2: {
-			ERR_FAIL_COND_V(!_image_compress_pvrtc2_func, ERR_UNAVAILABLE);
-			_image_compress_pvrtc2_func(this);
-		} break;
-		case COMPRESS_PVRTC4: {
-			ERR_FAIL_COND_V(!_image_compress_pvrtc4_func, ERR_UNAVAILABLE);
-			_image_compress_pvrtc4_func(this);
+		case COMPRESS_PVRTC1_4: {
+			ERR_FAIL_COND_V(!_image_compress_pvrtc1_4bpp_func, ERR_UNAVAILABLE);
+			_image_compress_pvrtc1_4bpp_func(this);
 		} break;
 		case COMPRESS_ETC: {
 			ERR_FAIL_COND_V(!_image_compress_etc1_func, ERR_UNAVAILABLE);
@@ -2714,8 +2710,7 @@ ImageMemLoadFunc Image::_bmp_mem_loader_func = nullptr;
 
 void (*Image::_image_compress_bc_func)(Image *, float, Image::UsedChannels) = nullptr;
 void (*Image::_image_compress_bptc_func)(Image *, float, Image::UsedChannels) = nullptr;
-void (*Image::_image_compress_pvrtc2_func)(Image *) = nullptr;
-void (*Image::_image_compress_pvrtc4_func)(Image *) = nullptr;
+void (*Image::_image_compress_pvrtc1_4bpp_func)(Image *) = nullptr;
 void (*Image::_image_compress_etc1_func)(Image *, float) = nullptr;
 void (*Image::_image_compress_etc2_func)(Image *, float, Image::UsedChannels) = nullptr;
 void (*Image::_image_decompress_pvrtc)(Image *) = nullptr;
@@ -3173,10 +3168,10 @@ void Image::_bind_methods() {
 	BIND_ENUM_CONSTANT(FORMAT_BPTC_RGBA); //btpc bc6h
 	BIND_ENUM_CONSTANT(FORMAT_BPTC_RGBF); //float /
 	BIND_ENUM_CONSTANT(FORMAT_BPTC_RGBFU); //unsigned float
-	BIND_ENUM_CONSTANT(FORMAT_PVRTC2); //pvrtc
-	BIND_ENUM_CONSTANT(FORMAT_PVRTC2A);
-	BIND_ENUM_CONSTANT(FORMAT_PVRTC4);
-	BIND_ENUM_CONSTANT(FORMAT_PVRTC4A);
+	BIND_ENUM_CONSTANT(FORMAT_PVRTC1_2); //pvrtc
+	BIND_ENUM_CONSTANT(FORMAT_PVRTC1_2A);
+	BIND_ENUM_CONSTANT(FORMAT_PVRTC1_4);
+	BIND_ENUM_CONSTANT(FORMAT_PVRTC1_4A);
 	BIND_ENUM_CONSTANT(FORMAT_ETC); //etc1
 	BIND_ENUM_CONSTANT(FORMAT_ETC2_R11); //etc2
 	BIND_ENUM_CONSTANT(FORMAT_ETC2_R11S); //signed ); NOT srgb.
@@ -3200,10 +3195,10 @@ void Image::_bind_methods() {
 	BIND_ENUM_CONSTANT(ALPHA_BLEND);
 
 	BIND_ENUM_CONSTANT(COMPRESS_S3TC);
-	BIND_ENUM_CONSTANT(COMPRESS_PVRTC2);
-	BIND_ENUM_CONSTANT(COMPRESS_PVRTC4);
+	BIND_ENUM_CONSTANT(COMPRESS_PVRTC1_4);
 	BIND_ENUM_CONSTANT(COMPRESS_ETC);
 	BIND_ENUM_CONSTANT(COMPRESS_ETC2);
+	BIND_ENUM_CONSTANT(COMPRESS_BPTC);
 
 	BIND_ENUM_CONSTANT(USED_CHANNELS_L);
 	BIND_ENUM_CONSTANT(USED_CHANNELS_LA);

+ 7 - 9
core/io/image.h

@@ -91,10 +91,10 @@ public:
 		FORMAT_BPTC_RGBA, //btpc bc7
 		FORMAT_BPTC_RGBF, //float bc6h
 		FORMAT_BPTC_RGBFU, //unsigned float bc6hu
-		FORMAT_PVRTC2, //pvrtc
-		FORMAT_PVRTC2A,
-		FORMAT_PVRTC4,
-		FORMAT_PVRTC4A,
+		FORMAT_PVRTC1_2, //pvrtc1
+		FORMAT_PVRTC1_2A,
+		FORMAT_PVRTC1_4,
+		FORMAT_PVRTC1_4A,
 		FORMAT_ETC, //etc1
 		FORMAT_ETC2_R11, //etc2
 		FORMAT_ETC2_R11S, //signed, NOT srgb.
@@ -138,8 +138,7 @@ public:
 
 	static void (*_image_compress_bc_func)(Image *, float, UsedChannels p_channels);
 	static void (*_image_compress_bptc_func)(Image *, float p_lossy_quality, UsedChannels p_channels);
-	static void (*_image_compress_pvrtc2_func)(Image *);
-	static void (*_image_compress_pvrtc4_func)(Image *);
+	static void (*_image_compress_pvrtc1_4bpp_func)(Image *);
 	static void (*_image_compress_etc1_func)(Image *, float);
 	static void (*_image_compress_etc2_func)(Image *, float, UsedChannels p_channels);
 
@@ -332,11 +331,10 @@ public:
 
 	enum CompressMode {
 		COMPRESS_S3TC,
-		COMPRESS_PVRTC2,
-		COMPRESS_PVRTC4,
+		COMPRESS_PVRTC1_4,
 		COMPRESS_ETC,
 		COMPRESS_ETC2,
-		COMPRESS_BPTC
+		COMPRESS_BPTC,
 	};
 	enum CompressSource {
 		COMPRESS_SOURCE_GENERIC,

+ 15 - 14
doc/classes/Image.xml

@@ -636,18 +636,19 @@
 		<constant name="FORMAT_BPTC_RGBFU" value="24" enum="Format">
 			Texture format that uses [url=https://www.khronos.org/opengl/wiki/BPTC_Texture_Compression]BPTC[/url] compression with unsigned floating-point RGB components.
 		</constant>
-		<constant name="FORMAT_PVRTC2" value="25" enum="Format">
+		<constant name="FORMAT_PVRTC1_2" value="25" enum="Format">
 			Texture format used on PowerVR-supported mobile platforms, uses 2-bit color depth with no alpha. More information can be found [url=https://en.wikipedia.org/wiki/PVRTC]here[/url].
 			[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space conversion is performed.
 		</constant>
-		<constant name="FORMAT_PVRTC2A" value="26" enum="Format">
-			Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an alpha component.
+		<constant name="FORMAT_PVRTC1_2A" value="26" enum="Format">
+			Same as [constant FORMAT_PVRTC1_2], but with an alpha component.
 		</constant>
-		<constant name="FORMAT_PVRTC4" value="27" enum="Format">
-			Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-bit color depth and no alpha.
+		<constant name="FORMAT_PVRTC1_4" value="27" enum="Format">
+			Texture format used on PowerVR-supported mobile platforms, uses 4-bit color depth with no alpha. More information can be found [url=https://en.wikipedia.org/wiki/PVRTC]here[/url].
+			[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space conversion is performed.
 		</constant>
-		<constant name="FORMAT_PVRTC4A" value="28" enum="Format">
-			Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an alpha component.
+		<constant name="FORMAT_PVRTC1_4A" value="28" enum="Format">
+			Same as [constant FORMAT_PVRTC1_4], but with an alpha component.
 		</constant>
 		<constant name="FORMAT_ETC" value="29" enum="Format">
 			[url=https://en.wikipedia.org/wiki/Ericsson_Texture_Compression#ETC1]Ericsson Texture Compression format 1[/url], also referred to as "ETC1", and is part of the OpenGL ES graphics standard. This format cannot store an alpha channel.
@@ -714,18 +715,18 @@
 		<constant name="COMPRESS_S3TC" value="0" enum="CompressMode">
 			Use S3TC compression.
 		</constant>
-		<constant name="COMPRESS_PVRTC2" value="1" enum="CompressMode">
-			Use PVRTC2 compression.
-		</constant>
-		<constant name="COMPRESS_PVRTC4" value="2" enum="CompressMode">
-			Use PVRTC4 compression.
+		<constant name="COMPRESS_PVRTC1_4" value="1" enum="CompressMode">
+			Use PVRTC1 4-bpp compression.
 		</constant>
-		<constant name="COMPRESS_ETC" value="3" enum="CompressMode">
+		<constant name="COMPRESS_ETC" value="2" enum="CompressMode">
 			Use ETC compression.
 		</constant>
-		<constant name="COMPRESS_ETC2" value="4" enum="CompressMode">
+		<constant name="COMPRESS_ETC2" value="3" enum="CompressMode">
 			Use ETC2 compression.
 		</constant>
+		<constant name="COMPRESS_BPTC" value="4" enum="CompressMode">
+			Use BPTC compression.
+		</constant>
 		<constant name="USED_CHANNELS_L" value="0" enum="UsedChannels">
 		</constant>
 		<constant name="USED_CHANNELS_LA" value="1" enum="UsedChannels">

+ 3 - 5
editor/editor_node.cpp

@@ -58,7 +58,9 @@
 #include "scene/gui/tab_container.h"
 #include "scene/gui/tabs.h"
 #include "scene/gui/texture_progress.h"
+#include "scene/main/window.h"
 #include "scene/resources/packed_scene.h"
+#include "servers/display_server.h"
 #include "servers/navigation_server_2d.h"
 #include "servers/navigation_server_3d.h"
 #include "servers/physics_server_2d.h"
@@ -172,12 +174,10 @@
 #include "editor/progress_dialog.h"
 #include "editor/project_export.h"
 #include "editor/project_settings_editor.h"
-#include "editor/pvrtc_compress.h"
 #include "editor/quick_open.h"
 #include "editor/register_exporters.h"
 #include "editor/settings_config_dialog.h"
-#include "scene/main/window.h"
-#include "servers/display_server.h"
+
 #include <stdio.h>
 #include <stdlib.h>
 
@@ -5726,8 +5726,6 @@ EditorNode::EditorNode() {
 		EditorInspector::add_inspector_plugin(smp);
 	}
 
-	_pvrtc_register_compressors();
-
 	editor_selection = memnew(EditorSelection);
 
 	EditorFileSystem *efs = memnew(EditorFileSystem);

+ 0 - 9
editor/editor_settings.cpp

@@ -407,15 +407,6 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
 	_initial_set("filesystem/file_dialog/thumbnail_size", 64);
 	hints["filesystem/file_dialog/thumbnail_size"] = PropertyInfo(Variant::INT, "filesystem/file_dialog/thumbnail_size", PROPERTY_HINT_RANGE, "32,128,16");
 
-	// Import
-	_initial_set("filesystem/import/pvrtc_texture_tool", "");
-#ifdef WINDOWS_ENABLED
-	hints["filesystem/import/pvrtc_texture_tool"] = PropertyInfo(Variant::STRING, "filesystem/import/pvrtc_texture_tool", PROPERTY_HINT_GLOBAL_FILE, "*.exe");
-#else
-	hints["filesystem/import/pvrtc_texture_tool"] = PropertyInfo(Variant::STRING, "filesystem/import/pvrtc_texture_tool", PROPERTY_HINT_GLOBAL_FILE, "");
-#endif
-	_initial_set("filesystem/import/pvrtc_fast_conversion", false);
-
 	/* Docks */
 
 	// SceneTree

+ 1 - 1
editor/import/resource_importer_texture.cpp

@@ -537,7 +537,7 @@ Error ResourceImporterTexture::import(const String &p_source_file, const String
 		}
 
 		if (ProjectSettings::get_singleton()->get("rendering/vram_compression/import_pvrtc")) {
-			_save_stex(image, p_save_path + ".pvrtc.stex", compress_mode, lossy, Image::COMPRESS_PVRTC4, mipmaps, stream, detect_3d, detect_roughness, detect_normal, force_normal, srgb_friendly_pack, true, mipmap_limit, normal_image, roughness_channel);
+			_save_stex(image, p_save_path + ".pvrtc.stex", compress_mode, lossy, Image::COMPRESS_PVRTC1_4, mipmaps, stream, detect_3d, detect_roughness, detect_normal, force_normal, srgb_friendly_pack, true, mipmap_limit, normal_image, roughness_channel);
 			r_platform_variants->push_back("pvrtc");
 			formats_imported.push_back("pvrtc");
 		}

+ 0 - 141
editor/pvrtc_compress.cpp

@@ -1,141 +0,0 @@
-/*************************************************************************/
-/*  pvrtc_compress.cpp                                                   */
-/*************************************************************************/
-/*                       This file is part of:                           */
-/*                           GODOT ENGINE                                */
-/*                      https://godotengine.org                          */
-/*************************************************************************/
-/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur.                 */
-/* Copyright (c) 2014-2020 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 "pvrtc_compress.h"
-
-#include "core/io/resource_loader.h"
-#include "core/io/resource_saver.h"
-#include "core/os/dir_access.h"
-#include "core/os/file_access.h"
-#include "core/os/os.h"
-#include "editor_settings.h"
-#include "scene/resources/texture.h"
-
-static void (*_base_image_compress_pvrtc2_func)(Image *) = nullptr;
-static void (*_base_image_compress_pvrtc4_func)(Image *) = nullptr;
-
-static void _compress_image(Image::CompressMode p_mode, Image *p_image) {
-	String ttpath = EditorSettings::get_singleton()->get("filesystem/import/pvrtc_texture_tool");
-
-	if (ttpath.strip_edges() == "" || !FileAccess::exists(ttpath)) {
-		switch (p_mode) {
-			case Image::COMPRESS_PVRTC2:
-				if (_base_image_compress_pvrtc2_func) {
-					_base_image_compress_pvrtc2_func(p_image);
-				} else if (_base_image_compress_pvrtc4_func) {
-					_base_image_compress_pvrtc4_func(p_image);
-				}
-				break;
-			case Image::COMPRESS_PVRTC4:
-				if (_base_image_compress_pvrtc4_func) {
-					_base_image_compress_pvrtc4_func(p_image);
-				}
-				break;
-			default:
-				ERR_FAIL_MSG("Unsupported Image compress mode used in PVRTC module.");
-		}
-		return;
-	}
-
-	String tmppath = EditorSettings::get_singleton()->get_cache_dir();
-	String src_img = tmppath.plus_file("_tmp_src_img.png");
-	String dst_img = tmppath.plus_file("_tmp_dst_img.pvr");
-
-	List<String> args;
-	args.push_back("-i");
-	args.push_back(src_img);
-	args.push_back("-o");
-	args.push_back(dst_img);
-	args.push_back("-f");
-
-	switch (p_mode) {
-		case Image::COMPRESS_PVRTC2:
-			args.push_back("PVRTC2");
-			break;
-		case Image::COMPRESS_PVRTC4:
-			args.push_back("PVRTC4");
-			break;
-		case Image::COMPRESS_ETC:
-			args.push_back("ETC");
-			break;
-		default:
-			ERR_FAIL_MSG("Unsupported Image compress mode used in PVRTC module.");
-	}
-
-	if (EditorSettings::get_singleton()->get("filesystem/import/pvrtc_fast_conversion").operator bool()) {
-		args.push_back("-pvrtcfast");
-	}
-	if (p_image->has_mipmaps()) {
-		args.push_back("-m");
-	}
-
-	// Save source PNG.
-	Ref<ImageTexture> t = memnew(ImageTexture);
-	t->create_from_image(Ref<Image>(p_image));
-	ResourceSaver::save(src_img, t);
-
-	Error err = OS::get_singleton()->execute(ttpath, args, true);
-	if (err != OK) {
-		// Clean up generated files.
-		DirAccess::remove_file_or_error(src_img);
-		DirAccess::remove_file_or_error(dst_img);
-		ERR_FAIL_MSG("Could not execute PVRTC tool: " + ttpath);
-	}
-
-	t = ResourceLoader::load(dst_img, "Texture2D");
-	if (t.is_null()) {
-		// Clean up generated files.
-		DirAccess::remove_file_or_error(src_img);
-		DirAccess::remove_file_or_error(dst_img);
-		ERR_FAIL_MSG("Can't load back converted image using PVRTC tool.");
-	}
-
-	p_image->copy_internals_from(t->get_data());
-
-	// Clean up generated files.
-	DirAccess::remove_file_or_error(src_img);
-	DirAccess::remove_file_or_error(dst_img);
-}
-
-static void _compress_pvrtc2(Image *p_image) {
-	_compress_image(Image::COMPRESS_PVRTC2, p_image);
-}
-
-static void _compress_pvrtc4(Image *p_image) {
-	_compress_image(Image::COMPRESS_PVRTC4, p_image);
-}
-
-void _pvrtc_register_compressors() {
-	_base_image_compress_pvrtc2_func = Image::_image_compress_pvrtc2_func;
-	_base_image_compress_pvrtc4_func = Image::_image_compress_pvrtc4_func;
-
-	Image::_image_compress_pvrtc2_func = _compress_pvrtc2;
-	Image::_image_compress_pvrtc4_func = _compress_pvrtc4;
-}

+ 6 - 4
modules/etc/image_etc.cpp → modules/etc/image_compress_etc.cpp

@@ -1,5 +1,5 @@
 /*************************************************************************/
-/*  image_etc.cpp                                                        */
+/*  image_compress_etc.cpp                                               */
 /*************************************************************************/
 /*                       This file is part of:                           */
 /*                           GODOT ENGINE                                */
@@ -28,14 +28,16 @@
 /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */
 /*************************************************************************/
 
-#include "image_etc.h"
-#include "Etc.h"
-#include "EtcFilter.h"
+#include "image_compress_etc.h"
+
 #include "core/io/image.h"
 #include "core/os/copymem.h"
 #include "core/os/os.h"
 #include "core/string/print_string.h"
 
+#include <Etc.h>
+#include <EtcFilter.h>
+
 static Image::Format _get_etc2_mode(Image::UsedChannels format) {
 	switch (format) {
 		case Image::USED_CHANNELS_R:

+ 4 - 4
modules/etc/image_etc.h → modules/etc/image_compress_etc.h

@@ -1,5 +1,5 @@
 /*************************************************************************/
-/*  image_etc.h                                                          */
+/*  image_compress_etc.h                                                 */
 /*************************************************************************/
 /*                       This file is part of:                           */
 /*                           GODOT ENGINE                                */
@@ -28,9 +28,9 @@
 /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */
 /*************************************************************************/
 
-#ifndef IMAGE_ETC1_H
-#define IMAGE_ETC1_H
+#ifndef IMAGE_COMPRESS_ETC_H
+#define IMAGE_COMPRESS_ETC_H
 
 void _register_etc_compress_func();
 
-#endif // IMAGE_ETC_H
+#endif // IMAGE_COMPRESS_ETC_H

+ 1 - 1
modules/etc/register_types.cpp

@@ -30,7 +30,7 @@
 
 #include "register_types.h"
 
-#include "image_etc.h"
+#include "image_compress_etc.h"
 #include "texture_loader_pkm.h"
 
 static Ref<ResourceFormatPKM> resource_loader_pkm;

+ 84 - 0
modules/pvr/image_compress_pvrtc.cpp

@@ -0,0 +1,84 @@
+/*************************************************************************/
+/*  image_compress_pvrtc.cpp                                             */
+/*************************************************************************/
+/*                       This file is part of:                           */
+/*                           GODOT ENGINE                                */
+/*                      https://godotengine.org                          */
+/*************************************************************************/
+/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur.                 */
+/* Copyright (c) 2014-2020 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_compress_pvrtc.h"
+
+#include "core/io/image.h"
+#include "core/object/reference.h"
+
+#include <PvrTcEncoder.h>
+#include <RgbaBitmap.h>
+
+static void _compress_pvrtc1_4bpp(Image *p_img) {
+	Ref<Image> img = p_img->duplicate();
+
+	bool make_mipmaps = false;
+	if (!img->is_size_po2() || img->get_width() != img->get_height()) {
+		make_mipmaps = img->has_mipmaps();
+		img->resize_to_po2(true);
+	}
+	img->convert(Image::FORMAT_RGBA8);
+	if (!img->has_mipmaps() && make_mipmaps) {
+		img->generate_mipmaps();
+	}
+
+	bool use_alpha = img->detect_alpha();
+
+	Ref<Image> new_img;
+	new_img.instance();
+	new_img->create(img->get_width(), img->get_height(), img->has_mipmaps(), use_alpha ? Image::FORMAT_PVRTC1_4A : Image::FORMAT_PVRTC1_4);
+
+	Vector<uint8_t> data = new_img->get_data();
+	{
+		uint8_t *wr = data.ptrw();
+		const uint8_t *r = img->get_data().ptr();
+
+		for (int i = 0; i <= new_img->get_mipmap_count(); i++) {
+			int ofs, size, w, h;
+			img->get_mipmap_offset_size_and_dimensions(i, ofs, size, w, h);
+			Javelin::RgbaBitmap bm(w, h);
+			void *dst = (void *)bm.GetData();
+			copymem(dst, &r[ofs], size);
+			Javelin::ColorRgba<unsigned char> *dp = bm.GetData();
+			for (int j = 0; j < size / 4; j++) {
+				// Red and blue colors are swapped.
+				SWAP(dp[j].r, dp[j].b);
+			}
+			new_img->get_mipmap_offset_size_and_dimensions(i, ofs, size, w, h);
+			Javelin::PvrTcEncoder::EncodeRgba4Bpp(&wr[ofs], bm);
+		}
+	}
+
+	p_img->create(new_img->get_width(), new_img->get_height(), new_img->has_mipmaps(), new_img->get_format(), data);
+}
+
+void _register_pvrtc_compress_func() {
+	Image::_image_compress_pvrtc1_4bpp_func = _compress_pvrtc1_4bpp;
+}

+ 5 - 7
editor/pvrtc_compress.h → modules/pvr/image_compress_pvrtc.h

@@ -1,5 +1,5 @@
 /*************************************************************************/
-/*  pvrtc_compress.h                                                     */
+/*  image_compress_pvrtc.h                                               */
 /*************************************************************************/
 /*                       This file is part of:                           */
 /*                           GODOT ENGINE                                */
@@ -28,11 +28,9 @@
 /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */
 /*************************************************************************/
 
-#ifndef PVRTC_COMPRESS_H
-#define PVRTC_COMPRESS_H
+#ifndef IMAGE_COMPRESS_PVRTC_H
+#define IMAGE_COMPRESS_PVRTC_H
 
-#include "core/io/image.h"
+void _register_pvrtc_compress_func();
 
-void _pvrtc_register_compressors();
-
-#endif // PVRTC_COMPRESS_H
+#endif // IMAGE_COMPRESS_PVRTC_H

+ 3 - 0
modules/pvr/register_types.cpp

@@ -30,6 +30,7 @@
 
 #include "register_types.h"
 
+#include "image_compress_pvrtc.h"
 #include "texture_loader_pvr.h"
 
 static Ref<ResourceFormatPVR> resource_loader_pvr;
@@ -37,6 +38,8 @@ static Ref<ResourceFormatPVR> resource_loader_pvr;
 void register_pvr_types() {
 	resource_loader_pvr.instance();
 	ResourceLoader::add_resource_format_loader(resource_loader_pvr);
+
+	_register_pvrtc_compress_func();
 }
 
 void unregister_pvr_types() {

+ 5 - 53
modules/pvr/texture_loader_pvr.cpp

@@ -29,11 +29,8 @@
 /*************************************************************************/
 
 #include "texture_loader_pvr.h"
-#include "PvrTcEncoder.h"
-#include "RgbaBitmap.h"
+
 #include "core/os/file_access.h"
-#include <string.h>
-#include <new>
 
 static void _pvrtc_decompress(Image *p_img);
 
@@ -111,11 +108,11 @@ RES ResourceFormatPVR::load(const String &p_path, const String &p_original_path,
 	switch (flags & 0xFF) {
 		case 0x18:
 		case 0xC:
-			format = (flags & PVR_HAS_ALPHA) ? Image::FORMAT_PVRTC2A : Image::FORMAT_PVRTC2;
+			format = (flags & PVR_HAS_ALPHA) ? Image::FORMAT_PVRTC1_2A : Image::FORMAT_PVRTC1_2;
 			break;
 		case 0x19:
 		case 0xD:
-			format = (flags & PVR_HAS_ALPHA) ? Image::FORMAT_PVRTC4A : Image::FORMAT_PVRTC4;
+			format = (flags & PVR_HAS_ALPHA) ? Image::FORMAT_PVRTC1_4A : Image::FORMAT_PVRTC1_4;
 			break;
 		case 0x16:
 			format = Image::FORMAT_L8;
@@ -183,53 +180,8 @@ String ResourceFormatPVR::get_resource_type(const String &p_path) const {
 	return "";
 }
 
-static void _compress_pvrtc4(Image *p_img) {
-	Ref<Image> img = p_img->duplicate();
-
-	bool make_mipmaps = false;
-	if (!img->is_size_po2() || img->get_width() != img->get_height()) {
-		make_mipmaps = img->has_mipmaps();
-		img->resize_to_po2(true);
-	}
-	img->convert(Image::FORMAT_RGBA8);
-	if (!img->has_mipmaps() && make_mipmaps) {
-		img->generate_mipmaps();
-	}
-
-	bool use_alpha = img->detect_alpha();
-
-	Ref<Image> new_img;
-	new_img.instance();
-	new_img->create(img->get_width(), img->get_height(), img->has_mipmaps(), use_alpha ? Image::FORMAT_PVRTC4A : Image::FORMAT_PVRTC4);
-
-	Vector<uint8_t> data = new_img->get_data();
-	{
-		uint8_t *wr = data.ptrw();
-		const uint8_t *r = img->get_data().ptr();
-
-		for (int i = 0; i <= new_img->get_mipmap_count(); i++) {
-			int ofs, size, w, h;
-			img->get_mipmap_offset_size_and_dimensions(i, ofs, size, w, h);
-			Javelin::RgbaBitmap bm(w, h);
-			void *dst = (void *)bm.GetData();
-			copymem(dst, &r[ofs], size);
-			Javelin::ColorRgba<unsigned char> *dp = bm.GetData();
-			for (int j = 0; j < size / 4; j++) {
-				/* red and blue colors are swapped.  */
-				SWAP(dp[j].r, dp[j].b);
-			}
-			new_img->get_mipmap_offset_size_and_dimensions(i, ofs, size, w, h);
-			Javelin::PvrTcEncoder::EncodeRgba4Bpp(&wr[ofs], bm);
-		}
-	}
-
-	p_img->create(new_img->get_width(), new_img->get_height(), new_img->has_mipmaps(), new_img->get_format(), data);
-}
-
 ResourceFormatPVR::ResourceFormatPVR() {
 	Image::_image_decompress_pvrtc = _pvrtc_decompress;
-	Image::_image_compress_pvrtc4_func = _compress_pvrtc4;
-	Image::_image_compress_pvrtc2_func = _compress_pvrtc4;
 }
 
 /////////////////////////////////////////////////////////
@@ -635,9 +587,9 @@ static void decompress_pvrtc(PVRTCBlock *p_comp_img, const int p_2bit, const int
 }
 
 static void _pvrtc_decompress(Image *p_img) {
-	ERR_FAIL_COND(p_img->get_format() != Image::FORMAT_PVRTC2 && p_img->get_format() != Image::FORMAT_PVRTC2A && p_img->get_format() != Image::FORMAT_PVRTC4 && p_img->get_format() != Image::FORMAT_PVRTC4A);
+	ERR_FAIL_COND(p_img->get_format() != Image::FORMAT_PVRTC1_2 && p_img->get_format() != Image::FORMAT_PVRTC1_2A && p_img->get_format() != Image::FORMAT_PVRTC1_4 && p_img->get_format() != Image::FORMAT_PVRTC1_4A);
 
-	bool _2bit = (p_img->get_format() == Image::FORMAT_PVRTC2 || p_img->get_format() == Image::FORMAT_PVRTC2A);
+	bool _2bit = (p_img->get_format() == Image::FORMAT_PVRTC1_2 || p_img->get_format() == Image::FORMAT_PVRTC1_2A);
 
 	Vector<uint8_t> data = p_img->get_data();
 	const uint8_t *r = data.ptr();

+ 4 - 4
servers/rendering/renderer_rd/renderer_storage_rd.cpp

@@ -318,7 +318,7 @@ Ref<Image> RendererStorageRD::_validate_texture_format(const Ref<Image> &p_image
 			r_format.swizzle_b = RD::TEXTURE_SWIZZLE_B;
 			r_format.swizzle_a = RD::TEXTURE_SWIZZLE_ONE;
 		} break; //unsigned float bc6hu
-		case Image::FORMAT_PVRTC2: {
+		case Image::FORMAT_PVRTC1_2: {
 			//this is not properly supported by MoltekVK it seems, so best to use ETC2
 			if (RD::get_singleton()->texture_is_format_supported_for_usage(RD::DATA_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG, RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_UPDATE_BIT)) {
 				r_format.format = RD::DATA_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG;
@@ -336,7 +336,7 @@ Ref<Image> RendererStorageRD::_validate_texture_format(const Ref<Image> &p_image
 			r_format.swizzle_a = RD::TEXTURE_SWIZZLE_ONE;
 
 		} break; //pvrtc
-		case Image::FORMAT_PVRTC2A: {
+		case Image::FORMAT_PVRTC1_2A: {
 			//this is not properly supported by MoltekVK it seems, so best to use ETC2
 			if (RD::get_singleton()->texture_is_format_supported_for_usage(RD::DATA_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG, RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_UPDATE_BIT)) {
 				r_format.format = RD::DATA_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG;
@@ -353,7 +353,7 @@ Ref<Image> RendererStorageRD::_validate_texture_format(const Ref<Image> &p_image
 			r_format.swizzle_b = RD::TEXTURE_SWIZZLE_B;
 			r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
 		} break;
-		case Image::FORMAT_PVRTC4: {
+		case Image::FORMAT_PVRTC1_4: {
 			//this is not properly supported by MoltekVK it seems, so best to use ETC2
 			if (RD::get_singleton()->texture_is_format_supported_for_usage(RD::DATA_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG, RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_UPDATE_BIT)) {
 				r_format.format = RD::DATA_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG;
@@ -370,7 +370,7 @@ Ref<Image> RendererStorageRD::_validate_texture_format(const Ref<Image> &p_image
 			r_format.swizzle_b = RD::TEXTURE_SWIZZLE_B;
 			r_format.swizzle_a = RD::TEXTURE_SWIZZLE_ONE;
 		} break;
-		case Image::FORMAT_PVRTC4A: {
+		case Image::FORMAT_PVRTC1_4A: {
 			//this is not properly supported by MoltekVK it seems, so best to use ETC2
 			if (RD::get_singleton()->texture_is_format_supported_for_usage(RD::DATA_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG, RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_UPDATE_BIT)) {
 				r_format.format = RD::DATA_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG;