Added basic support for custom resource savers and loaders
This commit is contained in:
@@ -32,15 +32,16 @@
|
||||
|
||||
#include "texture_loader_dds.h"
|
||||
|
||||
static ResourceFormatDDS *resource_loader_dds = NULL;
|
||||
static Ref<ResourceFormatDDS> resource_loader_dds;
|
||||
|
||||
void register_dds_types() {
|
||||
|
||||
resource_loader_dds = memnew(ResourceFormatDDS);
|
||||
resource_loader_dds.instance();
|
||||
ResourceLoader::add_resource_format_loader(resource_loader_dds);
|
||||
}
|
||||
|
||||
void unregister_dds_types() {
|
||||
|
||||
memdelete(resource_loader_dds);
|
||||
ResourceLoader::remove_resource_format_loader(resource_loader_dds);
|
||||
resource_loader_dds.unref();
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#include "scene/resources/texture.h"
|
||||
|
||||
class ResourceFormatDDS : public ResourceFormatLoader {
|
||||
GDCLASS(ResourceFormatDDS, ResourceFormatLoader)
|
||||
public:
|
||||
virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
|
||||
virtual void get_recognized_extensions(List<String> *p_extensions) const;
|
||||
|
||||
@@ -33,11 +33,11 @@
|
||||
#include "image_etc.h"
|
||||
#include "texture_loader_pkm.h"
|
||||
|
||||
static ResourceFormatPKM *resource_loader_pkm = NULL;
|
||||
static Ref<ResourceFormatPKM> resource_loader_pkm;
|
||||
|
||||
void register_etc_types() {
|
||||
|
||||
resource_loader_pkm = memnew(ResourceFormatPKM);
|
||||
resource_loader_pkm.instance();
|
||||
ResourceLoader::add_resource_format_loader(resource_loader_pkm);
|
||||
|
||||
_register_etc_compress_func();
|
||||
@@ -45,5 +45,6 @@ void register_etc_types() {
|
||||
|
||||
void unregister_etc_types() {
|
||||
|
||||
memdelete(resource_loader_pkm);
|
||||
ResourceLoader::remove_resource_format_loader(resource_loader_pkm);
|
||||
resource_loader_pkm.unref();
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#include "scene/resources/texture.h"
|
||||
|
||||
class ResourceFormatPKM : public ResourceFormatLoader {
|
||||
GDCLASS(ResourceFormatPKM, ResourceFormatLoader)
|
||||
public:
|
||||
virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
|
||||
virtual void get_recognized_extensions(List<String> *p_extensions) const;
|
||||
|
||||
@@ -161,6 +161,7 @@ public:
|
||||
};
|
||||
|
||||
class GDNativeLibraryResourceLoader : public ResourceFormatLoader {
|
||||
GDCLASS(GDNativeLibraryResourceLoader, ResourceFormatLoader)
|
||||
public:
|
||||
virtual RES load(const String &p_path, const String &p_original_path, Error *r_error);
|
||||
virtual void get_recognized_extensions(List<String> *p_extensions) const;
|
||||
@@ -169,6 +170,7 @@ public:
|
||||
};
|
||||
|
||||
class GDNativeLibraryResourceSaver : public ResourceFormatSaver {
|
||||
GDCLASS(GDNativeLibraryResourceSaver, ResourceFormatSaver)
|
||||
public:
|
||||
virtual Error save(const String &p_path, const RES &p_resource, uint32_t p_flags);
|
||||
virtual bool recognize(const RES &p_resource) const;
|
||||
|
||||
@@ -380,6 +380,7 @@ public:
|
||||
};
|
||||
|
||||
class ResourceFormatLoaderNativeScript : public ResourceFormatLoader {
|
||||
GDCLASS(ResourceFormatLoaderNativeScript, ResourceFormatLoader)
|
||||
public:
|
||||
virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
|
||||
virtual void get_recognized_extensions(List<String> *p_extensions) const;
|
||||
@@ -388,6 +389,7 @@ public:
|
||||
};
|
||||
|
||||
class ResourceFormatSaverNativeScript : public ResourceFormatSaver {
|
||||
GDCLASS(ResourceFormatSaverNativeScript, ResourceFormatSaver)
|
||||
virtual Error save(const String &p_path, const RES &p_resource, uint32_t p_flags = 0);
|
||||
virtual bool recognize(const RES &p_resource) const;
|
||||
virtual void get_recognized_extensions(const RES &p_resource, List<String> *p_extensions) const;
|
||||
|
||||
@@ -39,8 +39,8 @@
|
||||
|
||||
NativeScriptLanguage *native_script_language;
|
||||
|
||||
ResourceFormatLoaderNativeScript *resource_loader_gdns = NULL;
|
||||
ResourceFormatSaverNativeScript *resource_saver_gdns = NULL;
|
||||
Ref<ResourceFormatLoaderNativeScript> resource_loader_gdns;
|
||||
Ref<ResourceFormatSaverNativeScript> resource_saver_gdns;
|
||||
|
||||
void register_nativescript_types() {
|
||||
native_script_language = memnew(NativeScriptLanguage);
|
||||
@@ -50,18 +50,20 @@ void register_nativescript_types() {
|
||||
native_script_language->set_language_index(ScriptServer::get_language_count());
|
||||
ScriptServer::register_language(native_script_language);
|
||||
|
||||
resource_saver_gdns = memnew(ResourceFormatSaverNativeScript);
|
||||
resource_saver_gdns.instance();
|
||||
ResourceSaver::add_resource_format_saver(resource_saver_gdns);
|
||||
|
||||
resource_loader_gdns = memnew(ResourceFormatLoaderNativeScript);
|
||||
resource_loader_gdns.instance();
|
||||
ResourceLoader::add_resource_format_loader(resource_loader_gdns);
|
||||
}
|
||||
|
||||
void unregister_nativescript_types() {
|
||||
|
||||
memdelete(resource_loader_gdns);
|
||||
ResourceLoader::remove_resource_format_loader(resource_loader_gdns);
|
||||
resource_loader_gdns.unref();
|
||||
|
||||
memdelete(resource_saver_gdns);
|
||||
ResourceSaver::remove_resource_format_saver(resource_saver_gdns);
|
||||
resource_saver_gdns.unref();
|
||||
|
||||
if (native_script_language) {
|
||||
ScriptServer::unregister_language(native_script_language);
|
||||
|
||||
@@ -417,8 +417,8 @@ void PluginScriptLanguage::unlock() {
|
||||
|
||||
PluginScriptLanguage::PluginScriptLanguage(const godot_pluginscript_language_desc *desc) :
|
||||
_desc(*desc) {
|
||||
_resource_loader = memnew(ResourceFormatLoaderPluginScript(this));
|
||||
_resource_saver = memnew(ResourceFormatSaverPluginScript(this));
|
||||
_resource_loader = Ref<ResourceFormatLoaderPluginScript>(memnew(ResourceFormatLoaderPluginScript(this)));
|
||||
_resource_saver = Ref<ResourceFormatSaverPluginScript>(memnew(ResourceFormatSaverPluginScript(this)));
|
||||
|
||||
// TODO: totally remove _lock attribute if NO_THREADS is set
|
||||
#ifdef NO_THREADS
|
||||
@@ -429,8 +429,6 @@ PluginScriptLanguage::PluginScriptLanguage(const godot_pluginscript_language_des
|
||||
}
|
||||
|
||||
PluginScriptLanguage::~PluginScriptLanguage() {
|
||||
memdelete(_resource_loader);
|
||||
memdelete(_resource_saver);
|
||||
#ifndef NO_THREADS
|
||||
if (_lock) {
|
||||
memdelete(_lock);
|
||||
|
||||
@@ -48,8 +48,8 @@ class PluginScriptLanguage : public ScriptLanguage {
|
||||
friend class PluginScript;
|
||||
friend class PluginScriptInstance;
|
||||
|
||||
ResourceFormatLoaderPluginScript *_resource_loader;
|
||||
ResourceFormatSaverPluginScript *_resource_saver;
|
||||
Ref<ResourceFormatLoaderPluginScript> _resource_loader;
|
||||
Ref<ResourceFormatSaverPluginScript> _resource_saver;
|
||||
const godot_pluginscript_language_desc _desc;
|
||||
godot_pluginscript_language_data *_data;
|
||||
|
||||
@@ -59,8 +59,8 @@ class PluginScriptLanguage : public ScriptLanguage {
|
||||
public:
|
||||
virtual String get_name() const;
|
||||
|
||||
_FORCE_INLINE_ ResourceFormatLoaderPluginScript *get_resource_loader() { return _resource_loader; };
|
||||
_FORCE_INLINE_ ResourceFormatSaverPluginScript *get_resource_saver() { return _resource_saver; };
|
||||
_FORCE_INLINE_ Ref<ResourceFormatLoaderPluginScript> get_resource_loader() { return _resource_loader; }
|
||||
_FORCE_INLINE_ Ref<ResourceFormatSaverPluginScript> get_resource_saver() { return _resource_saver; }
|
||||
|
||||
/* LANGUAGE FUNCTIONS */
|
||||
virtual void init();
|
||||
|
||||
@@ -39,6 +39,9 @@
|
||||
class PluginScriptLanguage;
|
||||
|
||||
class ResourceFormatLoaderPluginScript : public ResourceFormatLoader {
|
||||
|
||||
GDCLASS(ResourceFormatLoaderPluginScript, ResourceFormatLoader)
|
||||
|
||||
PluginScriptLanguage *_language;
|
||||
|
||||
public:
|
||||
@@ -50,6 +53,9 @@ public:
|
||||
};
|
||||
|
||||
class ResourceFormatSaverPluginScript : public ResourceFormatSaver {
|
||||
|
||||
GDCLASS(ResourceFormatSaverPluginScript, ResourceFormatSaver)
|
||||
|
||||
PluginScriptLanguage *_language;
|
||||
|
||||
public:
|
||||
|
||||
@@ -299,8 +299,8 @@ GDNativeCallRegistry *GDNativeCallRegistry::singleton;
|
||||
|
||||
Vector<Ref<GDNative> > singleton_gdnatives;
|
||||
|
||||
GDNativeLibraryResourceLoader *resource_loader_gdnlib = NULL;
|
||||
GDNativeLibraryResourceSaver *resource_saver_gdnlib = NULL;
|
||||
Ref<GDNativeLibraryResourceLoader> resource_loader_gdnlib;
|
||||
Ref<GDNativeLibraryResourceSaver> resource_saver_gdnlib;
|
||||
|
||||
void register_gdnative_types() {
|
||||
|
||||
@@ -312,8 +312,8 @@ void register_gdnative_types() {
|
||||
ClassDB::register_class<GDNativeLibrary>();
|
||||
ClassDB::register_class<GDNative>();
|
||||
|
||||
resource_loader_gdnlib = memnew(GDNativeLibraryResourceLoader);
|
||||
resource_saver_gdnlib = memnew(GDNativeLibraryResourceSaver);
|
||||
resource_loader_gdnlib.instance();
|
||||
resource_saver_gdnlib.instance();
|
||||
|
||||
ResourceLoader::add_resource_format_loader(resource_loader_gdnlib);
|
||||
ResourceSaver::add_resource_format_saver(resource_saver_gdnlib);
|
||||
@@ -391,8 +391,11 @@ void unregister_gdnative_types() {
|
||||
}
|
||||
#endif
|
||||
|
||||
memdelete(resource_loader_gdnlib);
|
||||
memdelete(resource_saver_gdnlib);
|
||||
ResourceLoader::remove_resource_format_loader(resource_loader_gdnlib);
|
||||
ResourceSaver::remove_resource_format_saver(resource_saver_gdnlib);
|
||||
|
||||
resource_loader_gdnlib.unref();
|
||||
resource_saver_gdnlib.unref();
|
||||
|
||||
// This is for printing out the sizes of the core types
|
||||
|
||||
|
||||
@@ -500,6 +500,7 @@ public:
|
||||
};
|
||||
|
||||
class ResourceFormatLoaderGDScript : public ResourceFormatLoader {
|
||||
GDCLASS(ResourceFormatLoaderGDScript, ResourceFormatLoader)
|
||||
public:
|
||||
virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
|
||||
virtual void get_recognized_extensions(List<String> *p_extensions) const;
|
||||
@@ -508,6 +509,7 @@ public:
|
||||
};
|
||||
|
||||
class ResourceFormatSaverGDScript : public ResourceFormatSaver {
|
||||
GDCLASS(ResourceFormatSaverGDScript, ResourceFormatSaver)
|
||||
public:
|
||||
virtual Error save(const String &p_path, const RES &p_resource, uint32_t p_flags = 0);
|
||||
virtual void get_recognized_extensions(const RES &p_resource, List<String> *p_extensions) const;
|
||||
|
||||
@@ -38,8 +38,8 @@
|
||||
#include "gdscript_tokenizer.h"
|
||||
|
||||
GDScriptLanguage *script_language_gd = NULL;
|
||||
ResourceFormatLoaderGDScript *resource_loader_gd = NULL;
|
||||
ResourceFormatSaverGDScript *resource_saver_gd = NULL;
|
||||
Ref<ResourceFormatLoaderGDScript> resource_loader_gd;
|
||||
Ref<ResourceFormatSaverGDScript> resource_saver_gd;
|
||||
|
||||
#ifdef TOOLS_ENABLED
|
||||
|
||||
@@ -87,9 +87,11 @@ void register_gdscript_types() {
|
||||
|
||||
script_language_gd = memnew(GDScriptLanguage);
|
||||
ScriptServer::register_language(script_language_gd);
|
||||
resource_loader_gd = memnew(ResourceFormatLoaderGDScript);
|
||||
|
||||
resource_loader_gd.instance();
|
||||
ResourceLoader::add_resource_format_loader(resource_loader_gd);
|
||||
resource_saver_gd = memnew(ResourceFormatSaverGDScript);
|
||||
|
||||
resource_saver_gd.instance();
|
||||
ResourceSaver::add_resource_format_saver(resource_saver_gd);
|
||||
|
||||
#ifdef TOOLS_ENABLED
|
||||
@@ -104,8 +106,14 @@ void unregister_gdscript_types() {
|
||||
|
||||
if (script_language_gd)
|
||||
memdelete(script_language_gd);
|
||||
if (resource_loader_gd)
|
||||
memdelete(resource_loader_gd);
|
||||
if (resource_saver_gd)
|
||||
memdelete(resource_saver_gd);
|
||||
|
||||
if (resource_loader_gd.is_valid()) {
|
||||
ResourceLoader::remove_resource_format_loader(resource_loader_gd);
|
||||
resource_loader_gd.unref();
|
||||
}
|
||||
|
||||
if (resource_saver_gd.is_valid()) {
|
||||
ResourceSaver::remove_resource_format_saver(resource_saver_gd);
|
||||
resource_saver_gd.unref();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -398,6 +398,7 @@ public:
|
||||
};
|
||||
|
||||
class ResourceFormatLoaderCSharpScript : public ResourceFormatLoader {
|
||||
GDCLASS(ResourceFormatLoaderCSharpScript, ResourceFormatLoader)
|
||||
public:
|
||||
virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
|
||||
virtual void get_recognized_extensions(List<String> *p_extensions) const;
|
||||
@@ -406,6 +407,7 @@ public:
|
||||
};
|
||||
|
||||
class ResourceFormatSaverCSharpScript : public ResourceFormatSaver {
|
||||
GDCLASS(ResourceFormatSaverCSharpScript, ResourceFormatSaver)
|
||||
public:
|
||||
virtual Error save(const String &p_path, const RES &p_resource, uint32_t p_flags = 0);
|
||||
virtual void get_recognized_extensions(const RES &p_resource, List<String> *p_extensions) const;
|
||||
|
||||
@@ -35,8 +35,8 @@
|
||||
#include "csharp_script.h"
|
||||
|
||||
CSharpLanguage *script_language_cs = NULL;
|
||||
ResourceFormatLoaderCSharpScript *resource_loader_cs = NULL;
|
||||
ResourceFormatSaverCSharpScript *resource_saver_cs = NULL;
|
||||
Ref<ResourceFormatLoaderCSharpScript> resource_loader_cs;
|
||||
Ref<ResourceFormatSaverCSharpScript> resource_saver_cs;
|
||||
|
||||
_GodotSharp *_godotsharp = NULL;
|
||||
|
||||
@@ -52,9 +52,10 @@ void register_mono_types() {
|
||||
script_language_cs->set_language_index(ScriptServer::get_language_count());
|
||||
ScriptServer::register_language(script_language_cs);
|
||||
|
||||
resource_loader_cs = memnew(ResourceFormatLoaderCSharpScript);
|
||||
resource_loader_cs.instance();
|
||||
ResourceLoader::add_resource_format_loader(resource_loader_cs);
|
||||
resource_saver_cs = memnew(ResourceFormatSaverCSharpScript);
|
||||
|
||||
resource_saver_cs.instance();
|
||||
ResourceSaver::add_resource_format_saver(resource_saver_cs);
|
||||
}
|
||||
|
||||
@@ -63,10 +64,16 @@ void unregister_mono_types() {
|
||||
|
||||
if (script_language_cs)
|
||||
memdelete(script_language_cs);
|
||||
if (resource_loader_cs)
|
||||
memdelete(resource_loader_cs);
|
||||
if (resource_saver_cs)
|
||||
memdelete(resource_saver_cs);
|
||||
|
||||
if (resource_loader_cs.is_valid()) {
|
||||
ResourceLoader::remove_resource_format_loader(resource_loader_cs);
|
||||
resource_loader_cs.unref();
|
||||
}
|
||||
|
||||
if (resource_saver_cs.is_valid()) {
|
||||
ResourceSaver::remove_resource_format_saver(resource_saver_cs);
|
||||
resource_saver_cs.unref();
|
||||
}
|
||||
|
||||
if (_godotsharp)
|
||||
memdelete(_godotsharp);
|
||||
|
||||
@@ -132,6 +132,7 @@ public:
|
||||
};
|
||||
|
||||
class ResourceFormatLoaderAudioStreamOpus : public ResourceFormatLoader {
|
||||
GDCLASS(ResourceFormatLoaderAudioStreamOpus, ResourceFormatLoader)
|
||||
public:
|
||||
virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
|
||||
virtual void get_recognized_extensions(List<String> *p_extensions) const;
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
#include "audio_stream_opus.h"
|
||||
|
||||
static ResourceFormatLoaderAudioStreamOpus *opus_stream_loader = NULL;
|
||||
static Ref<ResourceFormatLoaderAudioStreamOpus> opus_stream_loader;
|
||||
|
||||
void register_opus_types() {
|
||||
// Sorry guys, do not enable this unless you can figure out a way
|
||||
|
||||
@@ -32,15 +32,16 @@
|
||||
|
||||
#include "texture_loader_pvr.h"
|
||||
|
||||
static ResourceFormatPVR *resource_loader_pvr = NULL;
|
||||
static Ref<ResourceFormatPVR> resource_loader_pvr;
|
||||
|
||||
void register_pvr_types() {
|
||||
|
||||
resource_loader_pvr = memnew(ResourceFormatPVR);
|
||||
resource_loader_pvr.instance();
|
||||
ResourceLoader::add_resource_format_loader(resource_loader_pvr);
|
||||
}
|
||||
|
||||
void unregister_pvr_types() {
|
||||
|
||||
memdelete(resource_loader_pvr);
|
||||
ResourceLoader::remove_resource_format_loader(resource_loader_pvr);
|
||||
resource_loader_pvr.unref();
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#include "scene/resources/texture.h"
|
||||
|
||||
class ResourceFormatPVR : public ResourceFormatLoader {
|
||||
GDCLASS(ResourceFormatPVR, ResourceFormatLoader)
|
||||
public:
|
||||
virtual RES load(const String &p_path, const String &p_original_path, Error *r_error = NULL);
|
||||
virtual void get_recognized_extensions(List<String> *p_extensions) const;
|
||||
|
||||
@@ -32,11 +32,11 @@
|
||||
|
||||
#include "video_stream_theora.h"
|
||||
|
||||
static ResourceFormatLoaderTheora *resource_loader_theora = NULL;
|
||||
static Ref<ResourceFormatLoaderTheora> resource_loader_theora;
|
||||
|
||||
void register_theora_types() {
|
||||
|
||||
resource_loader_theora = memnew(ResourceFormatLoaderTheora);
|
||||
resource_loader_theora.instance();
|
||||
ResourceLoader::add_resource_format_loader(resource_loader_theora, true);
|
||||
|
||||
ClassDB::register_class<VideoStreamTheora>();
|
||||
@@ -44,7 +44,9 @@ void register_theora_types() {
|
||||
|
||||
void unregister_theora_types() {
|
||||
|
||||
if (resource_loader_theora) {
|
||||
memdelete(resource_loader_theora);
|
||||
ResourceLoader::remove_resource_format_loader(resource_loader_theora);
|
||||
|
||||
if (resource_loader_theora.is_valid()) {
|
||||
resource_loader_theora.unref();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,6 +186,7 @@ public:
|
||||
};
|
||||
|
||||
class ResourceFormatLoaderTheora : public ResourceFormatLoader {
|
||||
GDCLASS(ResourceFormatLoaderTheora, ResourceFormatLoader)
|
||||
public:
|
||||
virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
|
||||
virtual void get_recognized_extensions(List<String> *p_extensions) const;
|
||||
|
||||
@@ -127,6 +127,7 @@ public:
|
||||
};
|
||||
|
||||
class ResourceFormatLoaderAudioStreamOGGVorbis : public ResourceFormatLoader {
|
||||
GDCLASS(ResourceFormatLoaderAudioStreamOGGVorbis, ResourceFormatLoader)
|
||||
public:
|
||||
virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
|
||||
virtual void get_recognized_extensions(List<String> *p_extensions) const;
|
||||
|
||||
@@ -32,16 +32,17 @@
|
||||
|
||||
#include "audio_stream_ogg_vorbis.h"
|
||||
|
||||
static ResourceFormatLoaderAudioStreamOGGVorbis *vorbis_stream_loader = NULL;
|
||||
static Ref<ResourceFormatLoaderAudioStreamOGGVorbis> vorbis_stream_loader;
|
||||
|
||||
void register_vorbis_types() {
|
||||
|
||||
vorbis_stream_loader = memnew(ResourceFormatLoaderAudioStreamOGGVorbis);
|
||||
vorbis_stream_loader.instance();
|
||||
ResourceLoader::add_resource_format_loader(vorbis_stream_loader);
|
||||
ClassDB::register_class<AudioStreamOGGVorbis>();
|
||||
}
|
||||
|
||||
void unregister_vorbis_types() {
|
||||
|
||||
memdelete(vorbis_stream_loader);
|
||||
ResourceLoader::remove_resource_format_loader(vorbis_stream_loader);
|
||||
vorbis_stream_loader.unref();
|
||||
}
|
||||
|
||||
@@ -32,11 +32,11 @@
|
||||
|
||||
#include "video_stream_webm.h"
|
||||
|
||||
static ResourceFormatLoaderWebm *resource_loader_webm = NULL;
|
||||
static Ref<ResourceFormatLoaderWebm> resource_loader_webm;
|
||||
|
||||
void register_webm_types() {
|
||||
|
||||
resource_loader_webm = memnew(ResourceFormatLoaderWebm);
|
||||
resource_loader_webm.instance();
|
||||
ResourceLoader::add_resource_format_loader(resource_loader_webm, true);
|
||||
|
||||
ClassDB::register_class<VideoStreamWebm>();
|
||||
@@ -44,7 +44,9 @@ void register_webm_types() {
|
||||
|
||||
void unregister_webm_types() {
|
||||
|
||||
if (resource_loader_webm) {
|
||||
memdelete(resource_loader_webm);
|
||||
ResourceLoader::remove_resource_format_loader(resource_loader_webm);
|
||||
|
||||
if (resource_loader_webm.is_valid()) {
|
||||
resource_loader_webm.unref();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,6 +127,7 @@ public:
|
||||
};
|
||||
|
||||
class ResourceFormatLoaderWebm : public ResourceFormatLoader {
|
||||
GDCLASS(ResourceFormatLoaderWebm, ResourceFormatLoader)
|
||||
public:
|
||||
virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
|
||||
virtual void get_recognized_extensions(List<String> *p_extensions) const;
|
||||
|
||||
Reference in New Issue
Block a user