-Upgraded webp to a MUCH newer version. Hoping it fixes some bugs in the process. Keeping old version just in case for now.
-Added ability to convert xml and tscn scenes to binary on export, makes loading of larger scenes faster
This commit is contained in:
@ -1562,6 +1562,17 @@ void EditorImportExport::image_export_get_images_in_group(const StringName& p_gr
|
||||
}
|
||||
}
|
||||
|
||||
void EditorImportExport::set_convert_text_scenes(bool p_convert) {
|
||||
|
||||
convert_text_scenes=p_convert;
|
||||
}
|
||||
|
||||
bool EditorImportExport::get_convert_text_scenes() const{
|
||||
|
||||
return convert_text_scenes;
|
||||
}
|
||||
|
||||
|
||||
void EditorImportExport::load_config() {
|
||||
|
||||
Ref<ConfigFile> cf = memnew( ConfigFile );
|
||||
@ -1604,6 +1615,12 @@ void EditorImportExport::load_config() {
|
||||
}
|
||||
}
|
||||
|
||||
if (cf->has_section("convert_scenes")) {
|
||||
|
||||
convert_text_scenes = cf->get_value("convert_scenes","convert_text_scenes");
|
||||
}
|
||||
|
||||
|
||||
if (cf->has_section("export_filter_files")) {
|
||||
|
||||
|
||||
@ -1837,6 +1854,8 @@ void EditorImportExport::save_config() {
|
||||
case SCRIPT_ACTION_ENCRYPT: cf->set_value("script","action","encrypt"); break;
|
||||
}
|
||||
|
||||
cf->set_value("convert_scenes","convert_text_scenes",convert_text_scenes);
|
||||
|
||||
cf->set_value("script","encrypt_key",script_key);
|
||||
|
||||
switch(sample_action) {
|
||||
@ -1935,6 +1954,8 @@ EditorImportExport::EditorImportExport() {
|
||||
sample_action_max_hz=44100;
|
||||
sample_action_trim=false;
|
||||
|
||||
convert_text_scenes=true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -284,6 +284,8 @@ protected:
|
||||
int sample_action_max_hz;
|
||||
bool sample_action_trim;
|
||||
|
||||
bool convert_text_scenes;
|
||||
|
||||
static EditorImportExport* singleton;
|
||||
|
||||
static void _bind_methods();
|
||||
@ -362,6 +364,9 @@ public:
|
||||
void sample_set_trim(bool p_trim);
|
||||
bool sample_get_trim() const;
|
||||
|
||||
void set_convert_text_scenes(bool p_convert);
|
||||
bool get_convert_text_scenes() const;
|
||||
|
||||
void load_config();
|
||||
void save_config();
|
||||
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
#include "tools/editor/io_plugins/editor_sample_import_plugin.h"
|
||||
#include "tools/editor/io_plugins/editor_translation_import_plugin.h"
|
||||
#include "tools/editor/io_plugins/editor_mesh_import_plugin.h"
|
||||
#include "tools/editor/io_plugins/editor_export_scene.h"
|
||||
|
||||
#include "plugins/editor_preview_plugins.h"
|
||||
|
||||
@ -5684,6 +5685,7 @@ EditorNode::EditorNode() {
|
||||
|
||||
editor_import_export->add_export_plugin( Ref<EditorTextureExportPlugin>( memnew(EditorTextureExportPlugin)));
|
||||
editor_import_export->add_export_plugin( Ref<EditorSampleExportPlugin>( memnew(EditorSampleExportPlugin)));
|
||||
editor_import_export->add_export_plugin( Ref<EditorSceneExportPlugin>( memnew(EditorSceneExportPlugin)));
|
||||
|
||||
add_editor_plugin( memnew( CanvasItemEditorPlugin(this) ) );
|
||||
add_editor_plugin( memnew( SpatialEditorPlugin(this) ) );
|
||||
|
||||
112
tools/editor/io_plugins/editor_export_scene.cpp
Normal file
112
tools/editor/io_plugins/editor_export_scene.cpp
Normal file
@ -0,0 +1,112 @@
|
||||
#include "editor_export_scene.h"
|
||||
#include "io/resource_loader.h"
|
||||
#include "io/resource_saver.h"
|
||||
#include "os/dir_access.h"
|
||||
#include "os/file_access.h"
|
||||
#include "tools/editor/editor_settings.h"
|
||||
#include "scene/resources/packed_scene.h"
|
||||
#include "globals.h"
|
||||
|
||||
Vector<uint8_t> EditorSceneExportPlugin::custom_export(String& p_path,const Ref<EditorExportPlatform> &p_platform) {
|
||||
|
||||
if (!EditorImportExport::get_singleton()->get_convert_text_scenes()) {
|
||||
return Vector<uint8_t>();
|
||||
}
|
||||
|
||||
|
||||
String extension = p_path.extension();
|
||||
|
||||
//step 1 check if scene
|
||||
|
||||
if (extension=="xml" || extension=="xres") {
|
||||
|
||||
String type = ResourceLoader::get_resource_type(p_path);
|
||||
|
||||
if (type!="PackedScene")
|
||||
return Vector<uint8_t>();
|
||||
|
||||
} else if (extension!="tscn" && extension!="xscn") {
|
||||
return Vector<uint8_t>();
|
||||
}
|
||||
|
||||
//step 2 check if cached
|
||||
|
||||
uint64_t sd=0;
|
||||
String smd5;
|
||||
String gp = Globals::get_singleton()->globalize_path(p_path);
|
||||
String md5=gp.md5_text();
|
||||
String tmp_path = EditorSettings::get_singleton()->get_settings_path().plus_file("tmp/");
|
||||
|
||||
bool valid=false;
|
||||
{
|
||||
//if existing, make sure it's valid
|
||||
FileAccessRef f = FileAccess::open(tmp_path+"scnexp-"+md5+".txt",FileAccess::READ);
|
||||
if (f) {
|
||||
|
||||
uint64_t d = f->get_line().strip_edges().to_int64();
|
||||
sd = FileAccess::get_modified_time(p_path);
|
||||
|
||||
if (d==sd) {
|
||||
valid=true;
|
||||
} else {
|
||||
String cmd5 = f->get_line().strip_edges();
|
||||
smd5 = FileAccess::get_md5(p_path);
|
||||
if (cmd5==smd5) {
|
||||
valid=true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (!valid) {
|
||||
//cache failed, convert
|
||||
DirAccess *da = DirAccess::create(DirAccess::ACCESS_RESOURCES);
|
||||
|
||||
String copy = p_path+".convert."+extension;
|
||||
|
||||
// a copy will allow loading the internal resources without conflicting with opened scenes
|
||||
da->copy(p_path,copy);
|
||||
|
||||
//@todo for tscn use something more efficient
|
||||
|
||||
Ref<PackedScene> copyres = ResourceLoader::load(copy,"PackedScene");
|
||||
|
||||
da->remove(copy);
|
||||
|
||||
memdelete(da);
|
||||
|
||||
ERR_FAIL_COND_V(!copyres.is_valid(),Vector<uint8_t>());
|
||||
|
||||
Error err = ResourceSaver::save(tmp_path+"scnexp-"+md5+".scn",copyres);
|
||||
|
||||
copyres=Ref<PackedScene>();
|
||||
|
||||
ERR_FAIL_COND_V(err!=OK,Vector<uint8_t>());
|
||||
|
||||
FileAccessRef f = FileAccess::open(tmp_path+"scnexp-"+md5+".txt",FileAccess::WRITE);
|
||||
|
||||
if (sd==0)
|
||||
sd = FileAccess::get_modified_time(p_path);
|
||||
if (smd5==String())
|
||||
smd5 = FileAccess::get_md5(p_path);
|
||||
|
||||
f->store_line(String::num(sd));
|
||||
f->store_line(smd5);
|
||||
f->store_line(gp); //source path for reference
|
||||
}
|
||||
|
||||
|
||||
Vector<uint8_t> ret = FileAccess::get_file_as_array(tmp_path+"scnexp-"+md5+".scn");
|
||||
|
||||
p_path+=".optimized.scn";
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
EditorSceneExportPlugin::EditorSceneExportPlugin()
|
||||
{
|
||||
}
|
||||
16
tools/editor/io_plugins/editor_export_scene.h
Normal file
16
tools/editor/io_plugins/editor_export_scene.h
Normal file
@ -0,0 +1,16 @@
|
||||
#ifndef EDITOR_EXPORT_SCENE_H
|
||||
#define EDITOR_EXPORT_SCENE_H
|
||||
|
||||
#include "tools/editor/editor_import_export.h"
|
||||
|
||||
|
||||
class EditorSceneExportPlugin : public EditorExportPlugin {
|
||||
OBJ_TYPE( EditorSceneExportPlugin, EditorExportPlugin );
|
||||
public:
|
||||
|
||||
virtual Vector<uint8_t> custom_export(String& p_path,const Ref<EditorExportPlatform> &p_platform);
|
||||
|
||||
EditorSceneExportPlugin();
|
||||
};
|
||||
|
||||
#endif // EDITOR_EXPORT_SCENE_H
|
||||
@ -297,6 +297,7 @@ void ProjectExportDialog::_notification(int p_what) {
|
||||
// _rescan();
|
||||
_update_platform();
|
||||
export_mode->select( EditorImportExport::get_singleton()->get_export_filter() );
|
||||
convert_text_scenes->set_pressed( EditorImportExport::get_singleton()->get_convert_text_scenes() );
|
||||
filters->set_text( EditorImportExport::get_singleton()->get_export_custom_filter() );
|
||||
if (EditorImportExport::get_singleton()->get_export_filter()!=EditorImportExport::EXPORT_SELECTED)
|
||||
tree_vb->hide();
|
||||
@ -420,6 +421,8 @@ void ProjectExportDialog::_export_mode_changed(int p_idx) {
|
||||
else
|
||||
tree_vb->show();
|
||||
|
||||
EditorImportExport::get_singleton()->set_convert_text_scenes( convert_text_scenes->is_pressed() );
|
||||
|
||||
_save_export_cfg();
|
||||
|
||||
}
|
||||
@ -1137,6 +1140,7 @@ ProjectExportDialog::ProjectExportDialog(EditorNode *p_editor) {
|
||||
vb = memnew( VBoxContainer );
|
||||
vb->set_name("Resources");
|
||||
sections->add_child(vb);
|
||||
|
||||
export_mode = memnew( OptionButton );
|
||||
export_mode->add_item("Export selected resources (including dependencies).");
|
||||
export_mode->add_item("Export all resources in the project.");
|
||||
@ -1145,6 +1149,8 @@ ProjectExportDialog::ProjectExportDialog(EditorNode *p_editor) {
|
||||
|
||||
vb->add_margin_child("Export Mode:",export_mode);
|
||||
|
||||
|
||||
|
||||
tree_vb = memnew( VBoxContainer );
|
||||
vb->add_child(tree_vb);
|
||||
tree_vb->set_v_size_flags(SIZE_EXPAND_FILL);
|
||||
@ -1165,6 +1171,10 @@ ProjectExportDialog::ProjectExportDialog(EditorNode *p_editor) {
|
||||
vb->add_margin_child("Filters to export non-resource files (Comma Separated, ie: *.json, *.txt):",filters);
|
||||
filters->connect("text_changed",this,"_filters_edited");
|
||||
|
||||
convert_text_scenes = memnew( CheckButton );
|
||||
convert_text_scenes->set_text("Convert text scenes to binary on export");
|
||||
vb->add_child(convert_text_scenes);
|
||||
convert_text_scenes->connect("toggled",this,"_export_mode_changed");
|
||||
|
||||
image_vb = memnew( VBoxContainer );
|
||||
image_vb->set_name("Images");
|
||||
|
||||
@ -108,6 +108,7 @@ private:
|
||||
PropertyEditor *platform_options;
|
||||
|
||||
OptionButton *export_mode;
|
||||
CheckButton *convert_text_scenes;
|
||||
VBoxContainer *tree_vb;
|
||||
|
||||
VBoxContainer *image_vb;
|
||||
|
||||
Reference in New Issue
Block a user