aboutsummaryrefslogtreecommitdiff
path: root/editor/import/resource_importer_texture.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'editor/import/resource_importer_texture.cpp')
-rw-r--r--editor/import/resource_importer_texture.cpp230
1 files changed, 102 insertions, 128 deletions
diff --git a/editor/import/resource_importer_texture.cpp b/editor/import/resource_importer_texture.cpp
index f7bd944ce..cb419e0f4 100644
--- a/editor/import/resource_importer_texture.cpp
+++ b/editor/import/resource_importer_texture.cpp
@@ -28,48 +28,41 @@
/*************************************************************************/
#include "resource_importer_texture.h"
-#include "io/image_loader.h"
-#include "scene/resources/texture.h"
#include "editor/editor_file_system.h"
#include "io/config_file.h"
+#include "io/image_loader.h"
+#include "scene/resources/texture.h"
-
-void ResourceImporterTexture::_texture_reimport_srgb(const Ref<StreamTexture>& p_tex) {
+void ResourceImporterTexture::_texture_reimport_srgb(const Ref<StreamTexture> &p_tex) {
singleton->mutex->lock();
StringName path = p_tex->get_path();
if (!singleton->make_flags.has(path)) {
- singleton->make_flags[path]=0;
+ singleton->make_flags[path] = 0;
}
- singleton->make_flags[path]|=MAKE_SRGB_FLAG;
+ singleton->make_flags[path] |= MAKE_SRGB_FLAG;
- print_line("requesting srgb for "+String(path));
+ print_line("requesting srgb for " + String(path));
singleton->mutex->unlock();
-
}
-
-
-void ResourceImporterTexture::_texture_reimport_3d(const Ref<StreamTexture>& p_tex) {
-
+void ResourceImporterTexture::_texture_reimport_3d(const Ref<StreamTexture> &p_tex) {
singleton->mutex->lock();
StringName path = p_tex->get_path();
if (!singleton->make_flags.has(path)) {
- singleton->make_flags[path]=0;
+ singleton->make_flags[path] = 0;
}
- singleton->make_flags[path]|=MAKE_3D_FLAG;
+ singleton->make_flags[path] |= MAKE_3D_FLAG;
- print_line("requesting 3d for "+String(path));
+ print_line("requesting 3d for " + String(path));
singleton->mutex->unlock();
-
-
}
void ResourceImporterTexture::update_imports() {
@@ -85,38 +78,36 @@ void ResourceImporterTexture::update_imports() {
}
Vector<String> to_reimport;
- for (Map<StringName,int>::Element *E=make_flags.front();E;E=E->next()) {
-
- print_line("checking for reimport "+String(E->key()));
+ for (Map<StringName, int>::Element *E = make_flags.front(); E; E = E->next()) {
+ print_line("checking for reimport " + String(E->key()));
Ref<ConfigFile> cf;
cf.instance();
- String src_path = String(E->key())+".import";
+ String src_path = String(E->key()) + ".import";
Error err = cf->load(src_path);
- ERR_CONTINUE(err!=OK);
+ ERR_CONTINUE(err != OK);
- bool changed=false;
- if (E->get()&MAKE_SRGB_FLAG && int(cf->get_value("params","flags/srgb"))==2) {
- cf->set_value("params","flags/srgb",1);
- changed=true;
+ bool changed = false;
+ if (E->get() & MAKE_SRGB_FLAG && int(cf->get_value("params", "flags/srgb")) == 2) {
+ cf->set_value("params", "flags/srgb", 1);
+ changed = true;
}
- if (E->get()&MAKE_3D_FLAG && bool(cf->get_value("params","detect_3d"))) {
- cf->set_value("params","detect_3d",false);
- cf->set_value("params","compress/mode",2);
- cf->set_value("params","flags/repeat",true);
- cf->set_value("params","flags/filter",true);
- cf->set_value("params","flags/mipmaps",true);
- changed=true;
+ if (E->get() & MAKE_3D_FLAG && bool(cf->get_value("params", "detect_3d"))) {
+ cf->set_value("params", "detect_3d", false);
+ cf->set_value("params", "compress/mode", 2);
+ cf->set_value("params", "flags/repeat", true);
+ cf->set_value("params", "flags/filter", true);
+ cf->set_value("params", "flags/mipmaps", true);
+ changed = true;
}
if (changed) {
cf->save(src_path);
to_reimport.push_back(E->key());
}
-
}
make_flags.clear();
@@ -126,21 +117,18 @@ void ResourceImporterTexture::update_imports() {
if (to_reimport.size()) {
EditorFileSystem::get_singleton()->reimport_files(to_reimport);
}
-
}
-
-
String ResourceImporterTexture::get_importer_name() const {
return "texture";
}
-String ResourceImporterTexture::get_visible_name() const{
+String ResourceImporterTexture::get_visible_name() const {
return "Texture";
}
-void ResourceImporterTexture::get_recognized_extensions(List<String> *p_extensions) const{
+void ResourceImporterTexture::get_recognized_extensions(List<String> *p_extensions) const {
ImageLoader::get_recognized_extensions(p_extensions);
}
@@ -148,14 +136,14 @@ String ResourceImporterTexture::get_save_extension() const {
return "stex";
}
-String ResourceImporterTexture::get_resource_type() const{
+String ResourceImporterTexture::get_resource_type() const {
return "StreamTexture";
}
-bool ResourceImporterTexture::get_option_visibility(const String& p_option,const Map<StringName,Variant>& p_options) const {
+bool ResourceImporterTexture::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
- if (p_option=="compress/lossy_quality" && int(p_options["compress/mode"])!=COMPRESS_LOSSY)
+ if (p_option == "compress/lossy_quality" && int(p_options["compress/mode"]) != COMPRESS_LOSSY)
return false;
return true;
@@ -166,7 +154,7 @@ int ResourceImporterTexture::get_preset_count() const {
}
String ResourceImporterTexture::get_preset_name(int p_idx) const {
- static const char* preset_names[]={
+ static const char *preset_names[] = {
"2D, Detect 3D",
"2D",
"2D Pixel",
@@ -176,30 +164,25 @@ String ResourceImporterTexture::get_preset_name(int p_idx) const {
return preset_names[p_idx];
}
+void ResourceImporterTexture::get_import_options(List<ImportOption> *r_options, int p_preset) const {
-void ResourceImporterTexture::get_import_options(List<ImportOption> *r_options,int p_preset) const {
-
-
- r_options->push_back(ImportOption(PropertyInfo(Variant::INT,"compress/mode",PROPERTY_HINT_ENUM,"Lossless,Lossy,Video RAM,Uncompressed",PROPERTY_USAGE_DEFAULT|PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED),p_preset==PRESET_3D?2:0));
- r_options->push_back(ImportOption(PropertyInfo(Variant::REAL,"compress/lossy_quality",PROPERTY_HINT_RANGE,"0,1,0.01"),0.7));
- r_options->push_back(ImportOption(PropertyInfo(Variant::INT,"flags/repeat",PROPERTY_HINT_ENUM,"Disabled,Enabled,Mirrored"),p_preset==PRESET_3D?1:0));
- r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL,"flags/filter"),p_preset==PRESET_2D_PIXEL?false:true));
- r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL,"flags/mipmaps"),p_preset==PRESET_3D?true:false));
- r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL,"flags/anisotropic"),false));
- r_options->push_back(ImportOption(PropertyInfo(Variant::INT,"flags/srgb",PROPERTY_HINT_ENUM,"Disable,Enable,Detect"),2));
- r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL,"process/fix_alpha_border"),p_preset!=PRESET_3D?true:false));
- r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL,"process/premult_alpha"),true));
- r_options->push_back(ImportOption(PropertyInfo(Variant::INT,"stream"),false));
- r_options->push_back(ImportOption(PropertyInfo(Variant::INT,"size_limit",PROPERTY_HINT_RANGE,"0,4096,1"),0));
- r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL,"detect_3d"),p_preset==PRESET_DETECT));
-
+ r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/mode", PROPERTY_HINT_ENUM, "Lossless,Lossy,Video RAM,Uncompressed", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), p_preset == PRESET_3D ? 2 : 0));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::REAL, "compress/lossy_quality", PROPERTY_HINT_RANGE, "0,1,0.01"), 0.7));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "flags/repeat", PROPERTY_HINT_ENUM, "Disabled,Enabled,Mirrored"), p_preset == PRESET_3D ? 1 : 0));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "flags/filter"), p_preset == PRESET_2D_PIXEL ? false : true));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "flags/mipmaps"), p_preset == PRESET_3D ? true : false));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "flags/anisotropic"), false));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "flags/srgb", PROPERTY_HINT_ENUM, "Disable,Enable,Detect"), 2));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "process/fix_alpha_border"), p_preset != PRESET_3D ? true : false));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "process/premult_alpha"), true));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "stream"), false));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "size_limit", PROPERTY_HINT_RANGE, "0,4096,1"), 0));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "detect_3d"), p_preset == PRESET_DETECT));
}
+void ResourceImporterTexture::_save_stex(const Image &p_image, const String &p_to_path, int p_compress_mode, float p_lossy_quality, Image::CompressMode p_vram_compression, bool p_mipmaps, int p_texture_flags, bool p_streamable, bool p_detect_3d, bool p_detect_srgb) {
-void ResourceImporterTexture::_save_stex(const Image& p_image, const String& p_to_path, int p_compress_mode, float p_lossy_quality, Image::CompressMode p_vram_compression, bool p_mipmaps, int p_texture_flags, bool p_streamable, bool p_detect_3d, bool p_detect_srgb) {
-
-
- FileAccess *f = FileAccess::open(p_to_path,FileAccess::WRITE);
+ FileAccess *f = FileAccess::open(p_to_path, FileAccess::WRITE);
f->store_8('G');
f->store_8('D');
f->store_8('S');
@@ -209,17 +192,16 @@ void ResourceImporterTexture::_save_stex(const Image& p_image, const String& p_t
f->store_32(p_image.get_height());
f->store_32(p_texture_flags);
- uint32_t format=0;
+ uint32_t format = 0;
if (p_streamable)
- format|=StreamTexture::FORMAT_BIT_STREAM;
- if (p_mipmaps || p_compress_mode==COMPRESS_VIDEO_RAM) //VRAM always uses mipmaps
- format|=StreamTexture::FORMAT_BIT_HAS_MIPMAPS; //mipmaps bit
+ format |= StreamTexture::FORMAT_BIT_STREAM;
+ if (p_mipmaps || p_compress_mode == COMPRESS_VIDEO_RAM) //VRAM always uses mipmaps
+ format |= StreamTexture::FORMAT_BIT_HAS_MIPMAPS; //mipmaps bit
if (p_detect_3d)
- format|=StreamTexture::FORMAT_BIT_DETECT_3D;
+ format |= StreamTexture::FORMAT_BIT_DETECT_3D;
if (p_detect_srgb)
- format|=StreamTexture::FORMAT_BIT_DETECT_SRGB;
-
+ format |= StreamTexture::FORMAT_BIT_DETECT_SRGB;
switch (p_compress_mode) {
case COMPRESS_LOSSLESS: {
@@ -233,13 +215,13 @@ void ResourceImporterTexture::_save_stex(const Image& p_image, const String& p_t
int mmc = image.get_mipmap_count() + 1;
- format|=StreamTexture::FORMAT_BIT_LOSSLESS;
+ format |= StreamTexture::FORMAT_BIT_LOSSLESS;
f->store_32(format);
f->store_32(mmc);
- for(int i=0;i<mmc;i++) {
+ for (int i = 0; i < mmc; i++) {
- if (i>0) {
+ if (i > 0) {
image.shrink_x2();
}
@@ -247,12 +229,10 @@ void ResourceImporterTexture::_save_stex(const Image& p_image, const String& p_t
int data_len = data.size();
f->store_32(data_len);
- PoolVector<uint8_t>::Read r= data.read();
- f->store_buffer(r.ptr(),data_len);
-
+ PoolVector<uint8_t>::Read r = data.read();
+ f->store_buffer(r.ptr(), data_len);
}
-
} break;
case COMPRESS_LOSSY: {
Image image = p_image;
@@ -264,23 +244,22 @@ void ResourceImporterTexture::_save_stex(const Image& p_image, const String& p_t
int mmc = image.get_mipmap_count() + 1;
- format|=StreamTexture::FORMAT_BIT_LOSSY;
+ format |= StreamTexture::FORMAT_BIT_LOSSY;
f->store_32(format);
f->store_32(mmc);
- for(int i=0;i<mmc;i++) {
+ for (int i = 0; i < mmc; i++) {
- if (i>0) {
+ if (i > 0) {
image.shrink_x2();
}
- PoolVector<uint8_t> data = Image::lossy_packer(image,p_lossy_quality);
+ PoolVector<uint8_t> data = Image::lossy_packer(image, p_lossy_quality);
int data_len = data.size();
f->store_32(data_len);
PoolVector<uint8_t>::Read r = data.read();
- f->store_buffer(r.ptr(),data_len);
-
+ f->store_buffer(r.ptr(), data_len);
}
} break;
case COMPRESS_VIDEO_RAM: {
@@ -293,10 +272,10 @@ void ResourceImporterTexture::_save_stex(const Image& p_image, const String& p_t
f->store_32(format);
- PoolVector<uint8_t> data=image.get_data();
+ PoolVector<uint8_t> data = image.get_data();
int dl = data.size();
PoolVector<uint8_t>::Read r = data.read();
- f->store_buffer(r.ptr(),dl);
+ f->store_buffer(r.ptr(), dl);
} break;
case COMPRESS_UNCOMPRESSED: {
@@ -311,11 +290,11 @@ void ResourceImporterTexture::_save_stex(const Image& p_image, const String& p_t
format |= image.get_format();
f->store_32(format);
- PoolVector<uint8_t> data=image.get_data();
+ PoolVector<uint8_t> data = image.get_data();
int dl = data.size();
PoolVector<uint8_t>::Read r = data.read();
- f->store_buffer(r.ptr(),dl);
+ f->store_buffer(r.ptr(), dl);
} break;
}
@@ -323,54 +302,52 @@ void ResourceImporterTexture::_save_stex(const Image& p_image, const String& p_t
memdelete(f);
}
-Error ResourceImporterTexture::import(const String& p_source_file, const String& p_save_path, const Map<StringName,Variant>& p_options, List<String>* r_platform_variants, List<String> *r_gen_files) {
+Error ResourceImporterTexture::import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files) {
int compress_mode = p_options["compress/mode"];
- float lossy= p_options["compress/lossy_quality"];
- int repeat= p_options["flags/repeat"];
- bool filter= p_options["flags/filter"];
- bool mipmaps= p_options["flags/mipmaps"];
- bool anisotropic= p_options["flags/anisotropic"];
- int srgb= p_options["flags/srgb"];
- bool fix_alpha_border= p_options["process/fix_alpha_border"];
- bool premult_alpha= p_options["process/premult_alpha"];
+ float lossy = p_options["compress/lossy_quality"];
+ int repeat = p_options["flags/repeat"];
+ bool filter = p_options["flags/filter"];
+ bool mipmaps = p_options["flags/mipmaps"];
+ bool anisotropic = p_options["flags/anisotropic"];
+ int srgb = p_options["flags/srgb"];
+ bool fix_alpha_border = p_options["process/fix_alpha_border"];
+ bool premult_alpha = p_options["process/premult_alpha"];
bool stream = p_options["stream"];
int size_limit = p_options["size_limit"];
-
Image image;
- Error err = ImageLoader::load_image(p_source_file,&image);
- if (err!=OK)
+ Error err = ImageLoader::load_image(p_source_file, &image);
+ if (err != OK)
return err;
-
- int tex_flags=0;
- if (repeat>0)
- tex_flags|=Texture::FLAG_REPEAT;
- if (repeat==2)
- tex_flags|=Texture::FLAG_MIRRORED_REPEAT;
+ int tex_flags = 0;
+ if (repeat > 0)
+ tex_flags |= Texture::FLAG_REPEAT;
+ if (repeat == 2)
+ tex_flags |= Texture::FLAG_MIRRORED_REPEAT;
if (filter)
- tex_flags|=Texture::FLAG_FILTER;
- if (mipmaps || compress_mode==COMPRESS_VIDEO_RAM)
- tex_flags|=Texture::FLAG_MIPMAPS;
+ tex_flags |= Texture::FLAG_FILTER;
+ if (mipmaps || compress_mode == COMPRESS_VIDEO_RAM)
+ tex_flags |= Texture::FLAG_MIPMAPS;
if (anisotropic)
- tex_flags|=Texture::FLAG_ANISOTROPIC_FILTER;
- if (srgb==1)
- tex_flags|=Texture::FLAG_CONVERT_TO_LINEAR;
+ tex_flags |= Texture::FLAG_ANISOTROPIC_FILTER;
+ if (srgb == 1)
+ tex_flags |= Texture::FLAG_CONVERT_TO_LINEAR;
- if (size_limit >0 && (image.get_width()>size_limit || image.get_height()>size_limit )) {
+ if (size_limit > 0 && (image.get_width() > size_limit || image.get_height() > size_limit)) {
//limit size
if (image.get_width() >= image.get_height()) {
int new_width = size_limit;
int new_height = image.get_height() * new_width / image.get_width();
- image.resize(new_width,new_height,Image::INTERPOLATE_CUBIC);
+ image.resize(new_width, new_height, Image::INTERPOLATE_CUBIC);
} else {
int new_height = size_limit;
int new_width = image.get_width() * new_height / image.get_height();
- image.resize(new_width,new_height,Image::INTERPOLATE_CUBIC);
+ image.resize(new_width, new_height, Image::INTERPOLATE_CUBIC);
}
}
@@ -383,40 +360,37 @@ Error ResourceImporterTexture::import(const String& p_source_file, const String&
}
bool detect_3d = p_options["detect_3d"];
- bool detect_srgb = srgb==2;
+ bool detect_srgb = srgb == 2;
- if (compress_mode==COMPRESS_VIDEO_RAM) {
+ if (compress_mode == COMPRESS_VIDEO_RAM) {
//must import in all formats
//Android, GLES 2.x
- _save_stex(image,p_save_path+".etc.stex",compress_mode,lossy,Image::COMPRESS_ETC,mipmaps,tex_flags,stream,detect_3d,detect_srgb);
+ _save_stex(image, p_save_path + ".etc.stex", compress_mode, lossy, Image::COMPRESS_ETC, mipmaps, tex_flags, stream, detect_3d, detect_srgb);
r_platform_variants->push_back("etc");
//_save_stex(image,p_save_path+".etc2.stex",compress_mode,lossy,Image::COMPRESS_ETC2,mipmaps,tex_flags,stream);
//r_platform_variants->push_back("etc2");
- _save_stex(image,p_save_path+".s3tc.stex",compress_mode,lossy,Image::COMPRESS_S3TC,mipmaps,tex_flags,stream,detect_3d,detect_srgb);
+ _save_stex(image, p_save_path + ".s3tc.stex", compress_mode, lossy, Image::COMPRESS_S3TC, mipmaps, tex_flags, stream, detect_3d, detect_srgb);
r_platform_variants->push_back("s3tc");
} else {
//import normally
- _save_stex(image,p_save_path+".stex",compress_mode,lossy,Image::COMPRESS_16BIT /*this is ignored */,mipmaps,tex_flags,stream,detect_3d,detect_srgb);
+ _save_stex(image, p_save_path + ".stex", compress_mode, lossy, Image::COMPRESS_16BIT /*this is ignored */, mipmaps, tex_flags, stream, detect_3d, detect_srgb);
}
return OK;
}
-ResourceImporterTexture *ResourceImporterTexture::singleton=NULL;
+ResourceImporterTexture *ResourceImporterTexture::singleton = NULL;
-ResourceImporterTexture::ResourceImporterTexture()
-{
+ResourceImporterTexture::ResourceImporterTexture() {
- singleton=this;
- StreamTexture::request_3d_callback=_texture_reimport_3d;
- StreamTexture::request_srgb_callback=_texture_reimport_srgb;
+ singleton = this;
+ StreamTexture::request_3d_callback = _texture_reimport_3d;
+ StreamTexture::request_srgb_callback = _texture_reimport_srgb;
mutex = Mutex::create();
}
-ResourceImporterTexture::~ResourceImporterTexture()
-{
+ResourceImporterTexture::~ResourceImporterTexture() {
memdelete(mutex);
}
-