Skip to content

Commit

Permalink
Merge pull request godotengine#44271 from akien-mga/pvrtc-compress-cl…
Browse files Browse the repository at this point in the history
…eanup

PVRTC: Move compress func to `modules/pvr`, drop obsolete PVRTexTool code
  • Loading branch information
akien-mga authored Dec 10, 2020
2 parents 5b3e2dc + 9263f8e commit 32c06df
Show file tree
Hide file tree
Showing 15 changed files with 171 additions and 290 deletions.
71 changes: 33 additions & 38 deletions core/io/image.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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: {
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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.
Expand All @@ -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);
Expand Down
16 changes: 7 additions & 9 deletions core/io/image.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,10 +91,10 @@ class Image : public Resource {
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.
Expand Down Expand Up @@ -138,8 +138,7 @@ class Image : public Resource {

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);

Expand Down Expand Up @@ -332,11 +331,10 @@ class Image : public Resource {

enum CompressMode {
COMPRESS_S3TC,
COMPRESS_PVRTC2,
COMPRESS_PVRTC4,
COMPRESS_PVRTC1_4,
COMPRESS_ETC,
COMPRESS_ETC2,
COMPRESS_BPTC
COMPRESS_BPTC,
};
enum CompressSource {
COMPRESS_SOURCE_GENERIC,
Expand Down
29 changes: 15 additions & 14 deletions doc/classes/Image.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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">
Expand Down
8 changes: 3 additions & 5 deletions editor/editor_node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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>

Expand Down Expand Up @@ -5726,8 +5726,6 @@ EditorNode::EditorNode() {
EditorInspector::add_inspector_plugin(smp);
}

_pvrtc_register_compressors();

editor_selection = memnew(EditorSelection);

EditorFileSystem *efs = memnew(EditorFileSystem);
Expand Down
9 changes: 0 additions & 9 deletions editor/editor_settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion editor/import/resource_importer_texture.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}
Expand Down
Loading

0 comments on commit 32c06df

Please sign in to comment.