Merge pull request #44271 from akien-mga/pvrtc-compress-cleanup
PVRTC: Move compress func to `modules/pvr`, drop obsolete PVRTexTool code
This commit is contained in:
commit
32c06dfc8d
|
@ -66,10 +66,10 @@ const char *Image::format_names[Image::FORMAT_MAX] = {
|
||||||
"BPTC_RGBA",
|
"BPTC_RGBA",
|
||||||
"BPTC_RGBF",
|
"BPTC_RGBF",
|
||||||
"BPTC_RGBFU",
|
"BPTC_RGBFU",
|
||||||
"PVRTC2", //pvrtc
|
"PVRTC1_2", //pvrtc
|
||||||
"PVRTC2A",
|
"PVRTC1_2A",
|
||||||
"PVRTC4",
|
"PVRTC1_4",
|
||||||
"PVRTC4A",
|
"PVRTC1_4A",
|
||||||
"ETC", //etc1
|
"ETC", //etc1
|
||||||
"ETC2_R11", //etc2
|
"ETC2_R11", //etc2
|
||||||
"ETC2_R11S", //signed", NOT srgb.
|
"ETC2_R11S", //signed", NOT srgb.
|
||||||
|
@ -155,13 +155,13 @@ int Image::get_format_pixel_size(Format p_format) {
|
||||||
return 1; //float /
|
return 1; //float /
|
||||||
case FORMAT_BPTC_RGBFU:
|
case FORMAT_BPTC_RGBFU:
|
||||||
return 1; //unsigned float
|
return 1; //unsigned float
|
||||||
case FORMAT_PVRTC2:
|
case FORMAT_PVRTC1_2:
|
||||||
return 1; //pvrtc
|
return 1; //pvrtc
|
||||||
case FORMAT_PVRTC2A:
|
case FORMAT_PVRTC1_2A:
|
||||||
return 1;
|
return 1;
|
||||||
case FORMAT_PVRTC4:
|
case FORMAT_PVRTC1_4:
|
||||||
return 1;
|
return 1;
|
||||||
case FORMAT_PVRTC4A:
|
case FORMAT_PVRTC1_4A:
|
||||||
return 1;
|
return 1;
|
||||||
case FORMAT_ETC:
|
case FORMAT_ETC:
|
||||||
return 1; //etc1
|
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_w = 4;
|
||||||
r_h = 4;
|
r_h = 4;
|
||||||
} break;
|
} break;
|
||||||
case FORMAT_PVRTC2:
|
case FORMAT_PVRTC1_2:
|
||||||
case FORMAT_PVRTC2A: {
|
case FORMAT_PVRTC1_2A: {
|
||||||
r_w = 16;
|
r_w = 16;
|
||||||
r_h = 8;
|
r_h = 8;
|
||||||
} break;
|
} break;
|
||||||
case FORMAT_PVRTC4A:
|
case FORMAT_PVRTC1_4A:
|
||||||
case FORMAT_PVRTC4: {
|
case FORMAT_PVRTC1_4: {
|
||||||
r_w = 8;
|
r_w = 8;
|
||||||
r_h = 8;
|
r_h = 8;
|
||||||
} break;
|
} 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) {
|
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;
|
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;
|
return 2;
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -261,12 +261,12 @@ int Image::get_format_block_size(Format p_format) {
|
||||||
|
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
case FORMAT_PVRTC2:
|
case FORMAT_PVRTC1_2:
|
||||||
case FORMAT_PVRTC2A: {
|
case FORMAT_PVRTC1_2A: {
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
case FORMAT_PVRTC4A:
|
case FORMAT_PVRTC1_4A:
|
||||||
case FORMAT_PVRTC4: {
|
case FORMAT_PVRTC1_4: {
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
case FORMAT_ETC: {
|
case FORMAT_ETC: {
|
||||||
|
@ -2216,8 +2216,8 @@ bool Image::is_invisible() const {
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case FORMAT_PVRTC2A:
|
case FORMAT_PVRTC1_2A:
|
||||||
case FORMAT_PVRTC4A:
|
case FORMAT_PVRTC1_4A:
|
||||||
case FORMAT_DXT3:
|
case FORMAT_DXT3:
|
||||||
case FORMAT_DXT5: {
|
case FORMAT_DXT5: {
|
||||||
detected = true;
|
detected = true;
|
||||||
|
@ -2258,8 +2258,8 @@ Image::AlphaMode Image::detect_alpha() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case FORMAT_PVRTC2A:
|
case FORMAT_PVRTC1_2A:
|
||||||
case FORMAT_PVRTC4A:
|
case FORMAT_PVRTC1_4A:
|
||||||
case FORMAT_DXT3:
|
case FORMAT_DXT3:
|
||||||
case FORMAT_DXT5: {
|
case FORMAT_DXT5: {
|
||||||
detected = true;
|
detected = true;
|
||||||
|
@ -2355,7 +2355,7 @@ Error Image::decompress() {
|
||||||
_image_decompress_bc(this);
|
_image_decompress_bc(this);
|
||||||
} else if (format >= FORMAT_BPTC_RGBA && format <= FORMAT_BPTC_RGBFU && _image_decompress_bptc) {
|
} else if (format >= FORMAT_BPTC_RGBA && format <= FORMAT_BPTC_RGBFU && _image_decompress_bptc) {
|
||||||
_image_decompress_bptc(this);
|
_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);
|
_image_decompress_pvrtc(this);
|
||||||
} else if (format == FORMAT_ETC && _image_decompress_etc1) {
|
} else if (format == FORMAT_ETC && _image_decompress_etc1) {
|
||||||
_image_decompress_etc1(this);
|
_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);
|
ERR_FAIL_COND_V(!_image_compress_bc_func, ERR_UNAVAILABLE);
|
||||||
_image_compress_bc_func(this, p_lossy_quality, p_channels);
|
_image_compress_bc_func(this, p_lossy_quality, p_channels);
|
||||||
} break;
|
} break;
|
||||||
case COMPRESS_PVRTC2: {
|
case COMPRESS_PVRTC1_4: {
|
||||||
ERR_FAIL_COND_V(!_image_compress_pvrtc2_func, ERR_UNAVAILABLE);
|
ERR_FAIL_COND_V(!_image_compress_pvrtc1_4bpp_func, ERR_UNAVAILABLE);
|
||||||
_image_compress_pvrtc2_func(this);
|
_image_compress_pvrtc1_4bpp_func(this);
|
||||||
} break;
|
|
||||||
case COMPRESS_PVRTC4: {
|
|
||||||
ERR_FAIL_COND_V(!_image_compress_pvrtc4_func, ERR_UNAVAILABLE);
|
|
||||||
_image_compress_pvrtc4_func(this);
|
|
||||||
} break;
|
} break;
|
||||||
case COMPRESS_ETC: {
|
case COMPRESS_ETC: {
|
||||||
ERR_FAIL_COND_V(!_image_compress_etc1_func, ERR_UNAVAILABLE);
|
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_bc_func)(Image *, float, Image::UsedChannels) = nullptr;
|
||||||
void (*Image::_image_compress_bptc_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_pvrtc1_4bpp_func)(Image *) = nullptr;
|
||||||
void (*Image::_image_compress_pvrtc4_func)(Image *) = nullptr;
|
|
||||||
void (*Image::_image_compress_etc1_func)(Image *, float) = nullptr;
|
void (*Image::_image_compress_etc1_func)(Image *, float) = nullptr;
|
||||||
void (*Image::_image_compress_etc2_func)(Image *, float, Image::UsedChannels) = nullptr;
|
void (*Image::_image_compress_etc2_func)(Image *, float, Image::UsedChannels) = nullptr;
|
||||||
void (*Image::_image_decompress_pvrtc)(Image *) = 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_RGBA); //btpc bc6h
|
||||||
BIND_ENUM_CONSTANT(FORMAT_BPTC_RGBF); //float /
|
BIND_ENUM_CONSTANT(FORMAT_BPTC_RGBF); //float /
|
||||||
BIND_ENUM_CONSTANT(FORMAT_BPTC_RGBFU); //unsigned float
|
BIND_ENUM_CONSTANT(FORMAT_BPTC_RGBFU); //unsigned float
|
||||||
BIND_ENUM_CONSTANT(FORMAT_PVRTC2); //pvrtc
|
BIND_ENUM_CONSTANT(FORMAT_PVRTC1_2); //pvrtc
|
||||||
BIND_ENUM_CONSTANT(FORMAT_PVRTC2A);
|
BIND_ENUM_CONSTANT(FORMAT_PVRTC1_2A);
|
||||||
BIND_ENUM_CONSTANT(FORMAT_PVRTC4);
|
BIND_ENUM_CONSTANT(FORMAT_PVRTC1_4);
|
||||||
BIND_ENUM_CONSTANT(FORMAT_PVRTC4A);
|
BIND_ENUM_CONSTANT(FORMAT_PVRTC1_4A);
|
||||||
BIND_ENUM_CONSTANT(FORMAT_ETC); //etc1
|
BIND_ENUM_CONSTANT(FORMAT_ETC); //etc1
|
||||||
BIND_ENUM_CONSTANT(FORMAT_ETC2_R11); //etc2
|
BIND_ENUM_CONSTANT(FORMAT_ETC2_R11); //etc2
|
||||||
BIND_ENUM_CONSTANT(FORMAT_ETC2_R11S); //signed ); NOT srgb.
|
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(ALPHA_BLEND);
|
||||||
|
|
||||||
BIND_ENUM_CONSTANT(COMPRESS_S3TC);
|
BIND_ENUM_CONSTANT(COMPRESS_S3TC);
|
||||||
BIND_ENUM_CONSTANT(COMPRESS_PVRTC2);
|
BIND_ENUM_CONSTANT(COMPRESS_PVRTC1_4);
|
||||||
BIND_ENUM_CONSTANT(COMPRESS_PVRTC4);
|
|
||||||
BIND_ENUM_CONSTANT(COMPRESS_ETC);
|
BIND_ENUM_CONSTANT(COMPRESS_ETC);
|
||||||
BIND_ENUM_CONSTANT(COMPRESS_ETC2);
|
BIND_ENUM_CONSTANT(COMPRESS_ETC2);
|
||||||
|
BIND_ENUM_CONSTANT(COMPRESS_BPTC);
|
||||||
|
|
||||||
BIND_ENUM_CONSTANT(USED_CHANNELS_L);
|
BIND_ENUM_CONSTANT(USED_CHANNELS_L);
|
||||||
BIND_ENUM_CONSTANT(USED_CHANNELS_LA);
|
BIND_ENUM_CONSTANT(USED_CHANNELS_LA);
|
||||||
|
|
|
@ -91,10 +91,10 @@ public:
|
||||||
FORMAT_BPTC_RGBA, //btpc bc7
|
FORMAT_BPTC_RGBA, //btpc bc7
|
||||||
FORMAT_BPTC_RGBF, //float bc6h
|
FORMAT_BPTC_RGBF, //float bc6h
|
||||||
FORMAT_BPTC_RGBFU, //unsigned float bc6hu
|
FORMAT_BPTC_RGBFU, //unsigned float bc6hu
|
||||||
FORMAT_PVRTC2, //pvrtc
|
FORMAT_PVRTC1_2, //pvrtc1
|
||||||
FORMAT_PVRTC2A,
|
FORMAT_PVRTC1_2A,
|
||||||
FORMAT_PVRTC4,
|
FORMAT_PVRTC1_4,
|
||||||
FORMAT_PVRTC4A,
|
FORMAT_PVRTC1_4A,
|
||||||
FORMAT_ETC, //etc1
|
FORMAT_ETC, //etc1
|
||||||
FORMAT_ETC2_R11, //etc2
|
FORMAT_ETC2_R11, //etc2
|
||||||
FORMAT_ETC2_R11S, //signed, NOT srgb.
|
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_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_bptc_func)(Image *, float p_lossy_quality, UsedChannels p_channels);
|
||||||
static void (*_image_compress_pvrtc2_func)(Image *);
|
static void (*_image_compress_pvrtc1_4bpp_func)(Image *);
|
||||||
static void (*_image_compress_pvrtc4_func)(Image *);
|
|
||||||
static void (*_image_compress_etc1_func)(Image *, float);
|
static void (*_image_compress_etc1_func)(Image *, float);
|
||||||
static void (*_image_compress_etc2_func)(Image *, float, UsedChannels p_channels);
|
static void (*_image_compress_etc2_func)(Image *, float, UsedChannels p_channels);
|
||||||
|
|
||||||
|
@ -332,11 +331,10 @@ public:
|
||||||
|
|
||||||
enum CompressMode {
|
enum CompressMode {
|
||||||
COMPRESS_S3TC,
|
COMPRESS_S3TC,
|
||||||
COMPRESS_PVRTC2,
|
COMPRESS_PVRTC1_4,
|
||||||
COMPRESS_PVRTC4,
|
|
||||||
COMPRESS_ETC,
|
COMPRESS_ETC,
|
||||||
COMPRESS_ETC2,
|
COMPRESS_ETC2,
|
||||||
COMPRESS_BPTC
|
COMPRESS_BPTC,
|
||||||
};
|
};
|
||||||
enum CompressSource {
|
enum CompressSource {
|
||||||
COMPRESS_SOURCE_GENERIC,
|
COMPRESS_SOURCE_GENERIC,
|
||||||
|
|
|
@ -636,18 +636,19 @@
|
||||||
<constant name="FORMAT_BPTC_RGBFU" value="24" enum="Format">
|
<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.
|
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>
|
||||||
<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].
|
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.
|
[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space conversion is performed.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="FORMAT_PVRTC2A" value="26" enum="Format">
|
<constant name="FORMAT_PVRTC1_2A" value="26" enum="Format">
|
||||||
Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with an alpha component.
|
Same as [constant FORMAT_PVRTC1_2], but with an alpha component.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="FORMAT_PVRTC4" value="27" enum="Format">
|
<constant name="FORMAT_PVRTC1_4" value="27" enum="Format">
|
||||||
Similar to [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC2[/url], but with 4-bit color depth and no alpha.
|
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>
|
||||||
<constant name="FORMAT_PVRTC4A" value="28" enum="Format">
|
<constant name="FORMAT_PVRTC1_4A" value="28" enum="Format">
|
||||||
Same as [url=https://en.wikipedia.org/wiki/PVRTC]PVRTC4[/url], but with an alpha component.
|
Same as [constant FORMAT_PVRTC1_4], but with an alpha component.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="FORMAT_ETC" value="29" enum="Format">
|
<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.
|
[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">
|
<constant name="COMPRESS_S3TC" value="0" enum="CompressMode">
|
||||||
Use S3TC compression.
|
Use S3TC compression.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="COMPRESS_PVRTC2" value="1" enum="CompressMode">
|
<constant name="COMPRESS_PVRTC1_4" value="1" enum="CompressMode">
|
||||||
Use PVRTC2 compression.
|
Use PVRTC1 4-bpp compression.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="COMPRESS_PVRTC4" value="2" enum="CompressMode">
|
<constant name="COMPRESS_ETC" value="2" enum="CompressMode">
|
||||||
Use PVRTC4 compression.
|
|
||||||
</constant>
|
|
||||||
<constant name="COMPRESS_ETC" value="3" enum="CompressMode">
|
|
||||||
Use ETC compression.
|
Use ETC compression.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="COMPRESS_ETC2" value="4" enum="CompressMode">
|
<constant name="COMPRESS_ETC2" value="3" enum="CompressMode">
|
||||||
Use ETC2 compression.
|
Use ETC2 compression.
|
||||||
</constant>
|
</constant>
|
||||||
|
<constant name="COMPRESS_BPTC" value="4" enum="CompressMode">
|
||||||
|
Use BPTC compression.
|
||||||
|
</constant>
|
||||||
<constant name="USED_CHANNELS_L" value="0" enum="UsedChannels">
|
<constant name="USED_CHANNELS_L" value="0" enum="UsedChannels">
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="USED_CHANNELS_LA" value="1" enum="UsedChannels">
|
<constant name="USED_CHANNELS_LA" value="1" enum="UsedChannels">
|
||||||
|
|
|
@ -58,7 +58,9 @@
|
||||||
#include "scene/gui/tab_container.h"
|
#include "scene/gui/tab_container.h"
|
||||||
#include "scene/gui/tabs.h"
|
#include "scene/gui/tabs.h"
|
||||||
#include "scene/gui/texture_progress.h"
|
#include "scene/gui/texture_progress.h"
|
||||||
|
#include "scene/main/window.h"
|
||||||
#include "scene/resources/packed_scene.h"
|
#include "scene/resources/packed_scene.h"
|
||||||
|
#include "servers/display_server.h"
|
||||||
#include "servers/navigation_server_2d.h"
|
#include "servers/navigation_server_2d.h"
|
||||||
#include "servers/navigation_server_3d.h"
|
#include "servers/navigation_server_3d.h"
|
||||||
#include "servers/physics_server_2d.h"
|
#include "servers/physics_server_2d.h"
|
||||||
|
@ -172,12 +174,10 @@
|
||||||
#include "editor/progress_dialog.h"
|
#include "editor/progress_dialog.h"
|
||||||
#include "editor/project_export.h"
|
#include "editor/project_export.h"
|
||||||
#include "editor/project_settings_editor.h"
|
#include "editor/project_settings_editor.h"
|
||||||
#include "editor/pvrtc_compress.h"
|
|
||||||
#include "editor/quick_open.h"
|
#include "editor/quick_open.h"
|
||||||
#include "editor/register_exporters.h"
|
#include "editor/register_exporters.h"
|
||||||
#include "editor/settings_config_dialog.h"
|
#include "editor/settings_config_dialog.h"
|
||||||
#include "scene/main/window.h"
|
|
||||||
#include "servers/display_server.h"
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
@ -5726,8 +5726,6 @@ EditorNode::EditorNode() {
|
||||||
EditorInspector::add_inspector_plugin(smp);
|
EditorInspector::add_inspector_plugin(smp);
|
||||||
}
|
}
|
||||||
|
|
||||||
_pvrtc_register_compressors();
|
|
||||||
|
|
||||||
editor_selection = memnew(EditorSelection);
|
editor_selection = memnew(EditorSelection);
|
||||||
|
|
||||||
EditorFileSystem *efs = memnew(EditorFileSystem);
|
EditorFileSystem *efs = memnew(EditorFileSystem);
|
||||||
|
|
|
@ -407,15 +407,6 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
|
||||||
_initial_set("filesystem/file_dialog/thumbnail_size", 64);
|
_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");
|
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 */
|
/* Docks */
|
||||||
|
|
||||||
// SceneTree
|
// SceneTree
|
||||||
|
|
|
@ -537,7 +537,7 @@ Error ResourceImporterTexture::import(const String &p_source_file, const String
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ProjectSettings::get_singleton()->get("rendering/vram_compression/import_pvrtc")) {
|
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");
|
r_platform_variants->push_back("pvrtc");
|
||||||
formats_imported.push_back("pvrtc");
|
formats_imported.push_back("pvrtc");
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* image_etc.cpp */
|
/* image_compress_etc.cpp */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
|
@ -28,14 +28,16 @@
|
||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#include "image_etc.h"
|
#include "image_compress_etc.h"
|
||||||
#include "Etc.h"
|
|
||||||
#include "EtcFilter.h"
|
|
||||||
#include "core/io/image.h"
|
#include "core/io/image.h"
|
||||||
#include "core/os/copymem.h"
|
#include "core/os/copymem.h"
|
||||||
#include "core/os/os.h"
|
#include "core/os/os.h"
|
||||||
#include "core/string/print_string.h"
|
#include "core/string/print_string.h"
|
||||||
|
|
||||||
|
#include <Etc.h>
|
||||||
|
#include <EtcFilter.h>
|
||||||
|
|
||||||
static Image::Format _get_etc2_mode(Image::UsedChannels format) {
|
static Image::Format _get_etc2_mode(Image::UsedChannels format) {
|
||||||
switch (format) {
|
switch (format) {
|
||||||
case Image::USED_CHANNELS_R:
|
case Image::USED_CHANNELS_R:
|
|
@ -1,5 +1,5 @@
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* image_etc.h */
|
/* image_compress_etc.h */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
|
@ -28,9 +28,9 @@
|
||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#ifndef IMAGE_ETC1_H
|
#ifndef IMAGE_COMPRESS_ETC_H
|
||||||
#define IMAGE_ETC1_H
|
#define IMAGE_COMPRESS_ETC_H
|
||||||
|
|
||||||
void _register_etc_compress_func();
|
void _register_etc_compress_func();
|
||||||
|
|
||||||
#endif // IMAGE_ETC_H
|
#endif // IMAGE_COMPRESS_ETC_H
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
#include "register_types.h"
|
#include "register_types.h"
|
||||||
|
|
||||||
#include "image_etc.h"
|
#include "image_compress_etc.h"
|
||||||
#include "texture_loader_pkm.h"
|
#include "texture_loader_pkm.h"
|
||||||
|
|
||||||
static Ref<ResourceFormatPKM> resource_loader_pkm;
|
static Ref<ResourceFormatPKM> resource_loader_pkm;
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* pvrtc_compress.h */
|
/* image_compress_pvrtc.h */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
|
@ -28,11 +28,9 @@
|
||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#ifndef PVRTC_COMPRESS_H
|
#ifndef IMAGE_COMPRESS_PVRTC_H
|
||||||
#define PVRTC_COMPRESS_H
|
#define IMAGE_COMPRESS_PVRTC_H
|
||||||
|
|
||||||
#include "core/io/image.h"
|
void _register_pvrtc_compress_func();
|
||||||
|
|
||||||
void _pvrtc_register_compressors();
|
#endif // IMAGE_COMPRESS_PVRTC_H
|
||||||
|
|
||||||
#endif // PVRTC_COMPRESS_H
|
|
|
@ -30,6 +30,7 @@
|
||||||
|
|
||||||
#include "register_types.h"
|
#include "register_types.h"
|
||||||
|
|
||||||
|
#include "image_compress_pvrtc.h"
|
||||||
#include "texture_loader_pvr.h"
|
#include "texture_loader_pvr.h"
|
||||||
|
|
||||||
static Ref<ResourceFormatPVR> resource_loader_pvr;
|
static Ref<ResourceFormatPVR> resource_loader_pvr;
|
||||||
|
@ -37,6 +38,8 @@ static Ref<ResourceFormatPVR> resource_loader_pvr;
|
||||||
void register_pvr_types() {
|
void register_pvr_types() {
|
||||||
resource_loader_pvr.instance();
|
resource_loader_pvr.instance();
|
||||||
ResourceLoader::add_resource_format_loader(resource_loader_pvr);
|
ResourceLoader::add_resource_format_loader(resource_loader_pvr);
|
||||||
|
|
||||||
|
_register_pvrtc_compress_func();
|
||||||
}
|
}
|
||||||
|
|
||||||
void unregister_pvr_types() {
|
void unregister_pvr_types() {
|
||||||
|
|
|
@ -29,11 +29,8 @@
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#include "texture_loader_pvr.h"
|
#include "texture_loader_pvr.h"
|
||||||
#include "PvrTcEncoder.h"
|
|
||||||
#include "RgbaBitmap.h"
|
|
||||||
#include "core/os/file_access.h"
|
#include "core/os/file_access.h"
|
||||||
#include <string.h>
|
|
||||||
#include <new>
|
|
||||||
|
|
||||||
static void _pvrtc_decompress(Image *p_img);
|
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) {
|
switch (flags & 0xFF) {
|
||||||
case 0x18:
|
case 0x18:
|
||||||
case 0xC:
|
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;
|
break;
|
||||||
case 0x19:
|
case 0x19:
|
||||||
case 0xD:
|
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;
|
break;
|
||||||
case 0x16:
|
case 0x16:
|
||||||
format = Image::FORMAT_L8;
|
format = Image::FORMAT_L8;
|
||||||
|
@ -183,53 +180,8 @@ String ResourceFormatPVR::get_resource_type(const String &p_path) const {
|
||||||
return "";
|
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() {
|
ResourceFormatPVR::ResourceFormatPVR() {
|
||||||
Image::_image_decompress_pvrtc = _pvrtc_decompress;
|
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) {
|
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();
|
Vector<uint8_t> data = p_img->get_data();
|
||||||
const uint8_t *r = data.ptr();
|
const uint8_t *r = data.ptr();
|
||||||
|
|
|
@ -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_b = RD::TEXTURE_SWIZZLE_B;
|
||||||
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_ONE;
|
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_ONE;
|
||||||
} break; //unsigned float bc6hu
|
} 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
|
//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)) {
|
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;
|
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;
|
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_ONE;
|
||||||
|
|
||||||
} break; //pvrtc
|
} 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
|
//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)) {
|
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;
|
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_b = RD::TEXTURE_SWIZZLE_B;
|
||||||
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
|
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
|
||||||
} break;
|
} break;
|
||||||
case Image::FORMAT_PVRTC4: {
|
case Image::FORMAT_PVRTC1_4: {
|
||||||
//this is not properly supported by MoltekVK it seems, so best to use ETC2
|
//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)) {
|
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;
|
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_b = RD::TEXTURE_SWIZZLE_B;
|
||||||
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_ONE;
|
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_ONE;
|
||||||
} break;
|
} break;
|
||||||
case Image::FORMAT_PVRTC4A: {
|
case Image::FORMAT_PVRTC1_4A: {
|
||||||
//this is not properly supported by MoltekVK it seems, so best to use ETC2
|
//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)) {
|
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;
|
r_format.format = RD::DATA_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG;
|
||||||
|
|
Loading…
Reference in New Issue