summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/dds/texture_loader_dds.cpp2
-rw-r--r--modules/etc1/image_etc.cpp19
-rw-r--r--modules/etc1/texture_loader_pkm.cpp2
-rw-r--r--modules/gdnative/config.py2
-rw-r--r--modules/gdnative/gdnative.cpp15
-rw-r--r--modules/gdnative/godot.cpp35
-rw-r--r--modules/gdnative/godot.h7
-rw-r--r--modules/gdnative/godot/godot_variant.cpp16
-rw-r--r--modules/gdnative/godot/godot_variant.h33
-rw-r--r--modules/gdscript/gd_editor.cpp4
-rw-r--r--modules/gdscript/gd_function.cpp18
-rw-r--r--modules/gdscript/gd_function.h2
-rw-r--r--modules/gdscript/gd_parser.cpp22
-rw-r--r--modules/gdscript/gd_parser.h2
-rw-r--r--modules/gdscript/gd_tokenizer.cpp1
-rw-r--r--modules/gridmap/grid_map_editor_plugin.cpp4
-rw-r--r--modules/jpg/image_loader_jpegd.cpp11
-rw-r--r--modules/jpg/image_loader_jpegd.h2
-rw-r--r--modules/multiscript/SCsub7
-rw-r--r--modules/multiscript/config.py8
-rw-r--r--modules/multiscript/multiscript.cpp750
-rw-r--r--modules/multiscript/multiscript.h200
-rw-r--r--modules/multiscript/register_types.cpp51
-rw-r--r--modules/multiscript/register_types.h31
-rw-r--r--modules/pvr/texture_loader_pvr.cpp43
-rw-r--r--modules/theora/video_stream_theora.cpp2
-rw-r--r--modules/visual_script/visual_script_editor.cpp3
-rw-r--r--modules/webm/libvpx/SCsub2
-rw-r--r--modules/webp/image_loader_webp.cpp35
-rw-r--r--modules/webp/image_loader_webp.h2
30 files changed, 183 insertions, 1148 deletions
diff --git a/modules/dds/texture_loader_dds.cpp b/modules/dds/texture_loader_dds.cpp
index d79b7685d1..4448c80387 100644
--- a/modules/dds/texture_loader_dds.cpp
+++ b/modules/dds/texture_loader_dds.cpp
@@ -441,7 +441,7 @@ RES ResourceFormatDDS::load(const String &p_path, const String &p_original_path,
wb = PoolVector<uint8_t>::Write();
}
- Image img(width, height, mipmaps - 1, info.format, src_data);
+ Ref<Image> img = memnew(Image(width, height, mipmaps - 1, info.format, src_data));
Ref<ImageTexture> texture = memnew(ImageTexture);
texture->create_from_image(img);
diff --git a/modules/etc1/image_etc.cpp b/modules/etc1/image_etc.cpp
index 60544594f6..121f50684d 100644
--- a/modules/etc1/image_etc.cpp
+++ b/modules/etc1/image_etc.cpp
@@ -88,25 +88,26 @@ static void _decompress_etc(Image *p_img) {
r = PoolVector<uint8_t>::Read();
//print_line("Re Creating ETC into regular image: w "+itos(p_img->get_width())+" h "+itos(p_img->get_height())+" mm "+itos(p_img->get_mipmaps()));
- *p_img = Image(p_img->get_width(), p_img->get_height(), p_img->has_mipmaps(), Image::FORMAT_RGB8, dst);
- if (p_img->has_mipmaps())
+ bool needs_mipmaps = p_img->has_mipmaps();
+ p_img->create(p_img->get_width(), p_img->get_height(), p_img->has_mipmaps(), Image::FORMAT_RGB8, dst);
+ if (needs_mipmaps)
p_img->generate_mipmaps();
}
static void _compress_etc(Image *p_img) {
- Image img = *p_img;
+ Ref<Image> img = p_img->duplicate();
- int imgw = img.get_width(), imgh = img.get_height();
+ int imgw = img->get_width(), imgh = img->get_height();
ERR_FAIL_COND(nearest_power_of_2(imgw) != imgw || nearest_power_of_2(imgh) != imgh);
- if (img.get_format() != Image::FORMAT_RGB8)
- img.convert(Image::FORMAT_RGB8);
+ if (img->get_format() != Image::FORMAT_RGB8)
+ img->convert(Image::FORMAT_RGB8);
PoolVector<uint8_t> res_data;
PoolVector<uint8_t> dst_data;
- PoolVector<uint8_t>::Read r = img.get_data().read();
+ PoolVector<uint8_t>::Read r = img->get_data().read();
int target_size = Image::get_image_data_size(p_img->get_width(), p_img->get_height(), Image::FORMAT_ETC, p_img->has_mipmaps() ? -1 : 0);
int mmc = p_img->has_mipmaps() ? Image::get_image_required_mipmaps(p_img->get_width(), p_img->get_height(), Image::FORMAT_ETC) : 0;
@@ -122,7 +123,7 @@ static void _compress_etc(Image *p_img) {
int bw = MAX(imgw / 4, 1);
int bh = MAX(imgh / 4, 1);
- const uint8_t *src = &r[img.get_mipmap_offset(i)];
+ const uint8_t *src = &r[img->get_mipmap_offset(i)];
int mmsize = MAX(bw, 1) * MAX(bh, 1) * 8;
uint8_t *dst = &w[ofs];
@@ -171,7 +172,7 @@ static void _compress_etc(Image *p_img) {
mc++;
}
- *p_img = Image(p_img->get_width(), p_img->get_height(), (mc - 1) ? true : false, Image::FORMAT_ETC, dst_data);
+ p_img->create(p_img->get_width(), p_img->get_height(), (mc - 1) ? true : false, Image::FORMAT_ETC, dst_data);
}
void _register_etc1_compress_func() {
diff --git a/modules/etc1/texture_loader_pkm.cpp b/modules/etc1/texture_loader_pkm.cpp
index 9817de3a0f..c04528d2a0 100644
--- a/modules/etc1/texture_loader_pkm.cpp
+++ b/modules/etc1/texture_loader_pkm.cpp
@@ -85,7 +85,7 @@ RES ResourceFormatPKM::load(const String &p_path, const String &p_original_path,
int width = h.origWidth;
int height = h.origHeight;
- Image img(width, height, mipmaps, Image::FORMAT_ETC, src_data);
+ Ref<Image> img = memnew(Image(width, height, mipmaps, Image::FORMAT_ETC, src_data));
Ref<ImageTexture> texture = memnew(ImageTexture);
texture->create_from_image(img);
diff --git a/modules/gdnative/config.py b/modules/gdnative/config.py
index 9f57b9bb74..4f89ca0d4c 100644
--- a/modules/gdnative/config.py
+++ b/modules/gdnative/config.py
@@ -1,7 +1,7 @@
def can_build(platform):
- return True
+ return False
def configure(env):
diff --git a/modules/gdnative/gdnative.cpp b/modules/gdnative/gdnative.cpp
index 09859d95bd..9c8625c1e0 100644
--- a/modules/gdnative/gdnative.cpp
+++ b/modules/gdnative/gdnative.cpp
@@ -99,15 +99,15 @@ Error NativeLibrary::terminate(NativeLibrary *&p_native_lib) {
Error error = OK;
void *library_terminate;
error = OS::get_singleton()->get_dynamic_library_symbol_handle(p_native_lib->handle, GDNativeScriptLanguage::get_terminate_symbol_name(), library_terminate);
- if (error)
- return OK; // no terminate? okay, not that important lol
+ if (!error) {
- void (*library_terminate_pointer)(godot_native_terminate_options *) = (void (*)(godot_native_terminate_options *))library_terminate;
+ void (*library_terminate_pointer)(godot_native_terminate_options *) = (void (*)(godot_native_terminate_options *))library_terminate;
- godot_native_terminate_options options;
- options.in_editor = SceneTree::get_singleton()->is_editor_hint();
+ godot_native_terminate_options options;
+ options.in_editor = SceneTree::get_singleton()->is_editor_hint();
- library_terminate_pointer(&options);
+ library_terminate_pointer(&options);
+ }
GDNativeScriptLanguage::get_singleton()->initialized_libraries.erase(p_native_lib->path);
@@ -515,7 +515,6 @@ static const char *_dl_platforms_info[] = {
"unix|x11|so|X11",
"unix|server|so|Server",
"unix|android|so|Android",
- "unix|blackberry|so|Blackberry 10",
"unix|haiku|so|Haiku", // Right?
"|mac|dynlib|Mac",
"mac|ios|dynlib|iOS",
@@ -615,7 +614,6 @@ Error GDNativeLibrary::_terminate() {
}
Error ret = NativeLibrary::terminate(native_library);
-
native_library->scripts.clear();
return ret;
@@ -1218,6 +1216,7 @@ void GDNativeReloadNode::_notification(int p_what) {
Set<GDNativeScript *> scripts;
for (Set<GDNativeScript *>::Element *S = GDNativeScriptLanguage::get_singleton()->script_list.front(); S; S = S->next()) {
+
if (lib->native_library->scripts.has(S->get()->get_script_name())) {
GDNativeScript *script = S->get();
script->script_data = lib->get_script_data(script->get_script_name());
diff --git a/modules/gdnative/godot.cpp b/modules/gdnative/godot.cpp
index 7477a28db6..bc53eb93f4 100644
--- a/modules/gdnative/godot.cpp
+++ b/modules/gdnative/godot.cpp
@@ -30,6 +30,7 @@
#include "godot.h"
#include "class_db.h"
+#include "error_macros.h"
#include "gdnative.h"
#include "global_config.h"
#include "global_constants.h"
@@ -115,6 +116,28 @@ void GDAPI godot_method_bind_ptrcall(godot_method_bind *p_method_bind, godot_obj
mb->ptrcall(o, p_args, p_ret);
}
+godot_variant GDAPI godot_method_bind_call(godot_method_bind *p_method_bind, godot_object *p_instance, const godot_variant **p_args, const int p_arg_count, godot_variant_call_error *p_call_error) {
+ MethodBind *mb = (MethodBind *)p_method_bind;
+ Object *o = (Object *)p_instance;
+ const Variant **args = (const Variant **)p_args;
+
+ godot_variant ret;
+ godot_variant_new_nil(&ret);
+
+ Variant *ret_val = (Variant *)&ret;
+
+ Variant::CallError r_error;
+ *ret_val = mb->call(o, args, p_arg_count, r_error);
+
+ if (p_call_error) {
+ p_call_error->error = (godot_variant_call_error_error)r_error.error;
+ p_call_error->argument = r_error.argument;
+ p_call_error->expected = (godot_variant_type)r_error.expected;
+ }
+
+ return ret;
+}
+
// @Todo
/*
void GDAPI godot_method_bind_varcall(godot_method_bind *p_method_bind)
@@ -215,6 +238,18 @@ void GDAPI godot_free(void *p_ptr) {
memfree(p_ptr);
}
+void GDAPI godot_print_error(const char *p_description, const char *p_function, const char *p_file, int p_line) {
+ _err_print_error(p_function, p_file, p_line, p_description, ERR_HANDLER_ERROR);
+}
+
+void GDAPI godot_print_warning(const char *p_description, const char *p_function, const char *p_file, int p_line) {
+ _err_print_error(p_function, p_file, p_line, p_description, ERR_HANDLER_WARNING);
+}
+
+void GDAPI godot_print(const godot_string *p_message) {
+ print_line(*(String *)p_message);
+}
+
#ifdef __cplusplus
}
#endif
diff --git a/modules/gdnative/godot.h b/modules/gdnative/godot.h
index b05cafbe50..7214ce62df 100644
--- a/modules/gdnative/godot.h
+++ b/modules/gdnative/godot.h
@@ -228,7 +228,7 @@ typedef struct godot_method_bind {
godot_method_bind GDAPI *godot_method_bind_get_method(const char *p_classname, const char *p_methodname);
void GDAPI godot_method_bind_ptrcall(godot_method_bind *p_method_bind, godot_object *p_instance, const void **p_args, void *p_ret);
-
+godot_variant GDAPI godot_method_bind_call(godot_method_bind *p_method_bind, godot_object *p_instance, const godot_variant **p_args, const int p_arg_count, godot_variant_call_error *p_call_error);
////// Script API
typedef struct godot_native_init_options {
@@ -404,6 +404,11 @@ void GDAPI *godot_alloc(int p_bytes);
void GDAPI *godot_realloc(void *p_ptr, int p_bytes);
void GDAPI godot_free(void *p_ptr);
+//print using Godot's error handler list
+void GDAPI godot_print_error(const char *p_description, const char *p_function, const char *p_file, int p_line);
+void GDAPI godot_print_warning(const char *p_description, const char *p_function, const char *p_file, int p_line);
+void GDAPI godot_print(const godot_string *p_message);
+
#ifdef __cplusplus
}
#endif
diff --git a/modules/gdnative/godot/godot_variant.cpp b/modules/gdnative/godot/godot_variant.cpp
index 2214f85056..e9fa4eb8c6 100644
--- a/modules/gdnative/godot/godot_variant.cpp
+++ b/modules/gdnative/godot/godot_variant.cpp
@@ -457,12 +457,22 @@ godot_pool_color_array GDAPI godot_variant_as_pool_color_array(const godot_varia
return pba;
}
-godot_variant GDAPI godot_variant_call(godot_variant *p_v, const godot_string *p_method, const godot_variant **p_args, const godot_int p_argcount /*, godot_variant_call_error *r_error */) {
+godot_variant GDAPI godot_variant_call(godot_variant *p_v, const godot_string *p_method, const godot_variant **p_args, const godot_int p_argcount, godot_variant_call_error *p_error) {
Variant *v = (Variant *)p_v;
String *method = (String *)p_method;
- Variant **args = (Variant **)p_args;
+ const Variant **args = (const Variant **)p_args;
godot_variant res;
- memnew_placement_custom((Variant *)&res, Variant, Variant(v->call(*method, args, p_argcount)));
+ godot_variant_new_nil(&res);
+
+ Variant *ret_val = (Variant *)&res;
+
+ Variant::CallError r_error;
+ *ret_val = v->call(StringName(*method), args, p_argcount, r_error);
+ if (p_error) {
+ p_error->error = (godot_variant_call_error_error)r_error.error;
+ p_error->argument = r_error.argument;
+ p_error->expected = (godot_variant_type)r_error.expected;
+ }
return res;
}
diff --git a/modules/gdnative/godot/godot_variant.h b/modules/gdnative/godot/godot_variant.h
index 6f98b32363..bf0e2bf64e 100644
--- a/modules/gdnative/godot/godot_variant.h
+++ b/modules/gdnative/godot/godot_variant.h
@@ -45,13 +45,6 @@ typedef struct godot_variant {
struct godot_transform2d;
typedef struct godot_transform2d godot_transform2d;
-#include "godot_array.h"
-#include "godot_dictionary.h"
-#include "godot_input_event.h"
-#include "godot_node_path.h"
-#include "godot_rid.h"
-#include "godot_transform2d.h"
-
typedef enum godot_variant_type {
GODOT_VARIANT_TYPE_NIL,
@@ -69,7 +62,7 @@ typedef enum godot_variant_type {
GODOT_VARIANT_TYPE_TRANSFORM2D,
GODOT_VARIANT_TYPE_PLANE,
GODOT_VARIANT_TYPE_QUAT, // 10
- GODOT_VARIANT_TYPE_RECT3, //sorry naming convention fail :( not like it's used often
+ GODOT_VARIANT_TYPE_RECT3,
GODOT_VARIANT_TYPE_BASIS,
GODOT_VARIANT_TYPE_TRANSFORM,
@@ -93,6 +86,28 @@ typedef enum godot_variant_type {
GODOT_VARIANT_TYPE_POOL_COLOR_ARRAY,
} godot_variant_type;
+typedef enum godot_variant_call_error_error {
+ GODOT_CALL_ERROR_CALL_OK,
+ GODOT_CALL_ERROR_CALL_ERROR_INVALID_METHOD,
+ GODOT_CALL_ERROR_CALL_ERROR_INVALID_ARGUMENT,
+ GODOT_CALL_ERROR_CALL_ERROR_TOO_MANY_ARGUMENTS,
+ GODOT_CALL_ERROR_CALL_ERROR_TOO_FEW_ARGUMENTS,
+ GODOT_CALL_ERROR_CALL_ERROR_INSTANCE_IS_NULL,
+} godot_variant_call_error_error;
+
+typedef struct godot_variant_call_error {
+ godot_variant_call_error_error error;
+ int argument;
+ godot_variant_type expected;
+} godot_variant_call_error;
+
+#include "godot_array.h"
+#include "godot_dictionary.h"
+#include "godot_input_event.h"
+#include "godot_node_path.h"
+#include "godot_rid.h"
+#include "godot_transform2d.h"
+
godot_variant_type GDAPI godot_variant_get_type(const godot_variant *p_v);
void GDAPI godot_variant_copy(godot_variant *p_dest, const godot_variant *p_src);
@@ -159,7 +174,7 @@ godot_pool_vector2_array GDAPI godot_variant_as_pool_vector2_array(const godot_v
godot_pool_vector3_array GDAPI godot_variant_as_pool_vector3_array(const godot_variant *p_v);
godot_pool_color_array GDAPI godot_variant_as_pool_color_array(const godot_variant *p_v);
-godot_variant GDAPI godot_variant_call(godot_variant *p_v, const godot_string *p_method, const godot_variant **p_args, const godot_int p_argcount /*, godot_variant_call_error *r_error */);
+godot_variant GDAPI godot_variant_call(godot_variant *p_v, const godot_string *p_method, const godot_variant **p_args, const godot_int p_argcount, godot_variant_call_error *p_error);
godot_bool GDAPI godot_variant_has_method(godot_variant *p_v, const godot_string *p_method);
diff --git a/modules/gdscript/gd_editor.cpp b/modules/gdscript/gd_editor.cpp
index 4667e541dd..7d5ba08d6c 100644
--- a/modules/gdscript/gd_editor.cpp
+++ b/modules/gdscript/gd_editor.cpp
@@ -1321,7 +1321,7 @@ static void _find_identifiers(GDCompletionContext &context, int p_line, bool p_o
static const char *_type_names[Variant::VARIANT_MAX] = {
"null", "bool", "int", "float", "String", "Vector2", "Rect2", "Vector3", "Transform2D", "Plane", "Quat", "AABB", "Basis", "Transform",
- "Color", "Image", "NodePath", "RID", "Object", "InputEvent", "Dictionary", "Array", "RawArray", "IntArray", "FloatArray", "StringArray",
+ "Color", "NodePath", "RID", "Object", "InputEvent", "Dictionary", "Array", "RawArray", "IntArray", "FloatArray", "StringArray",
"Vector2Array", "Vector3Array", "ColorArray"
};
@@ -2395,7 +2395,7 @@ Error GDScriptLanguage::complete_code(const String &p_code, const String &p_base
}
} break;
- case GDParser::COMPLETION_PRELOAD: {
+ case GDParser::COMPLETION_RESOURCE_PATH: {
if (EditorSettings::get_singleton()->get("text_editor/completion/complete_file_paths"))
get_directory_contents(EditorFileSystem::get_singleton()->get_filesystem(), options);
diff --git a/modules/gdscript/gd_function.cpp b/modules/gdscript/gd_function.cpp
index 608256c88a..fb32d23ad5 100644
--- a/modules/gdscript/gd_function.cpp
+++ b/modules/gdscript/gd_function.cpp
@@ -1433,9 +1433,21 @@ Variant GDFunctionState::_signal_callback(const Variant **p_args, int p_argcount
return ret;
}
-bool GDFunctionState::is_valid() const {
+bool GDFunctionState::is_valid(bool p_extended_check) const {
+
+ if (function == NULL)
+ return false;
+
+ if (p_extended_check) {
+ //class instance gone?
+ if (state.instance_id && !ObjectDB::get_instance(state.instance_id))
+ return false;
+ //script gone?
+ if (state.script_id && !ObjectDB::get_instance(state.script_id))
+ return false;
+ }
- return function != NULL;
+ return true;
}
Variant GDFunctionState::resume(const Variant &p_arg) {
@@ -1464,7 +1476,7 @@ Variant GDFunctionState::resume(const Variant &p_arg) {
void GDFunctionState::_bind_methods() {
ClassDB::bind_method(D_METHOD("resume:Variant", "arg"), &GDFunctionState::resume, DEFVAL(Variant()));
- ClassDB::bind_method(D_METHOD("is_valid"), &GDFunctionState::is_valid);
+ ClassDB::bind_method(D_METHOD("is_valid", "extended_check"), &GDFunctionState::is_valid, DEFVAL(false));
ClassDB::bind_vararg_method(METHOD_FLAGS_DEFAULT, "_signal_callback", &GDFunctionState::_signal_callback, MethodInfo("_signal_callback"));
}
diff --git a/modules/gdscript/gd_function.h b/modules/gdscript/gd_function.h
index f0bf33147b..6d20b19777 100644
--- a/modules/gdscript/gd_function.h
+++ b/modules/gdscript/gd_function.h
@@ -237,7 +237,7 @@ protected:
static void _bind_methods();
public:
- bool is_valid() const;
+ bool is_valid(bool p_extended_check = false) const;
Variant resume(const Variant &p_arg = Variant());
GDFunctionState();
~GDFunctionState();
diff --git a/modules/gdscript/gd_parser.cpp b/modules/gdscript/gd_parser.cpp
index b02d7f713b..4ae62eb1d0 100644
--- a/modules/gdscript/gd_parser.cpp
+++ b/modules/gdscript/gd_parser.cpp
@@ -387,15 +387,21 @@ GDParser::Node *GDParser::_parse_expression(Node *p_parent, bool p_static, bool
_set_error("Expected '(' after 'preload'");
return NULL;
}
- completion_cursor = StringName();
- completion_type = COMPLETION_PRELOAD;
- completion_class = current_class;
- completion_function = current_function;
- completion_line = tokenizer->get_token_line();
- completion_block = current_block;
- completion_found = true;
tokenizer->advance();
+ if (tokenizer->get_token() == GDTokenizer::TK_CURSOR) {
+ completion_cursor = StringName();
+ completion_node = p_parent;
+ completion_type = COMPLETION_RESOURCE_PATH;
+ completion_class = current_class;
+ completion_function = current_function;
+ completion_line = tokenizer->get_token_line();
+ completion_block = current_block;
+ completion_argument = 0;
+ completion_found = true;
+ tokenizer->advance();
+ }
+
String path;
bool found_constant = false;
bool valid = false;
@@ -467,10 +473,10 @@ GDParser::Node *GDParser::_parse_expression(Node *p_parent, bool p_static, bool
_set_error("Expected ')' after 'preload' path");
return NULL;
}
+ tokenizer->advance();
ConstantNode *constant = alloc_node<ConstantNode>();
constant->value = res;
- tokenizer->advance();
expr = constant;
} else if (tokenizer->get_token() == GDTokenizer::TK_PR_YIELD) {
diff --git a/modules/gdscript/gd_parser.h b/modules/gdscript/gd_parser.h
index 4f3ca0dc5f..7e7e19de1b 100644
--- a/modules/gdscript/gd_parser.h
+++ b/modules/gdscript/gd_parser.h
@@ -437,7 +437,7 @@ public:
COMPLETION_PARENT_FUNCTION,
COMPLETION_METHOD,
COMPLETION_CALL_ARGUMENTS,
- COMPLETION_PRELOAD,
+ COMPLETION_RESOURCE_PATH,
COMPLETION_INDEX,
COMPLETION_VIRTUAL_FUNC,
COMPLETION_YIELD,
diff --git a/modules/gdscript/gd_tokenizer.cpp b/modules/gdscript/gd_tokenizer.cpp
index 13674f1f9a..c26ba03a64 100644
--- a/modules/gdscript/gd_tokenizer.cpp
+++ b/modules/gdscript/gd_tokenizer.cpp
@@ -800,7 +800,6 @@ void GDTokenizerText::_advance() {
{ Variant::BASIS, "Basis" },
{ Variant::TRANSFORM, "Transform" },
{ Variant::COLOR, "Color" },
- { Variant::IMAGE, "Image" },
{ Variant::_RID, "RID" },
{ Variant::OBJECT, "Object" },
{ Variant::INPUT_EVENT, "InputEvent" },
diff --git a/modules/gridmap/grid_map_editor_plugin.cpp b/modules/gridmap/grid_map_editor_plugin.cpp
index 39fe0a1675..d8993710a4 100644
--- a/modules/gridmap/grid_map_editor_plugin.cpp
+++ b/modules/gridmap/grid_map_editor_plugin.cpp
@@ -519,12 +519,12 @@ bool GridMapEditor::forward_spatial_input_event(Camera *p_camera, const InputEve
if (p_event.mouse_button.button_index == BUTTON_WHEEL_UP && (p_event.mouse_button.mod.command || p_event.mouse_button.mod.shift)) {
if (p_event.mouse_button.pressed)
- floor->set_value(floor->get_value() + 1);
+ floor->set_value(floor->get_value() + p_event.mouse_button.factor);
return true; //eaten
} else if (p_event.mouse_button.button_index == BUTTON_WHEEL_DOWN && (p_event.mouse_button.mod.command || p_event.mouse_button.mod.shift)) {
if (p_event.mouse_button.pressed)
- floor->set_value(floor->get_value() - 1);
+ floor->set_value(floor->get_value() - p_event.mouse_button.factor);
return true;
}
diff --git a/modules/jpg/image_loader_jpegd.cpp b/modules/jpg/image_loader_jpegd.cpp
index 83685d6446..0741dd198a 100644
--- a/modules/jpg/image_loader_jpegd.cpp
+++ b/modules/jpg/image_loader_jpegd.cpp
@@ -89,7 +89,7 @@ Error jpeg_load_image_from_buffer(Image *p_image, const uint8_t *p_buffer, int p
return OK;
}
-Error ImageLoaderJPG::load_image(Image *p_image, FileAccess *f) {
+Error ImageLoaderJPG::load_image(Ref<Image> p_image, FileAccess *f) {
PoolVector<uint8_t> src_image;
int src_image_len = f->get_len();
@@ -102,7 +102,7 @@ Error ImageLoaderJPG::load_image(Image *p_image, FileAccess *f) {
f->close();
- Error err = jpeg_load_image_from_buffer(p_image, w.ptr(), src_image_len);
+ Error err = jpeg_load_image_from_buffer(p_image.ptr(), w.ptr(), src_image_len);
w = PoolVector<uint8_t>::Write();
@@ -115,10 +115,11 @@ void ImageLoaderJPG::get_recognized_extensions(List<String> *p_extensions) const
p_extensions->push_back("jpeg");
}
-static Image _jpegd_mem_loader_func(const uint8_t *p_png, int p_size) {
+static Ref<Image> _jpegd_mem_loader_func(const uint8_t *p_png, int p_size) {
- Image img;
- Error err = jpeg_load_image_from_buffer(&img, p_png, p_size);
+ Ref<Image> img;
+ img.instance();
+ Error err = jpeg_load_image_from_buffer(img.ptr(), p_png, p_size);
if (err)
ERR_PRINT("Couldn't initialize ImageLoaderJPG with the given resource.");
diff --git a/modules/jpg/image_loader_jpegd.h b/modules/jpg/image_loader_jpegd.h
index d23e8a7d48..57d7a2bb1c 100644
--- a/modules/jpg/image_loader_jpegd.h
+++ b/modules/jpg/image_loader_jpegd.h
@@ -38,7 +38,7 @@
class ImageLoaderJPG : public ImageFormatLoader {
public:
- virtual Error load_image(Image *p_image, FileAccess *f);
+ virtual Error load_image(Ref<Image> p_image, FileAccess *f);
virtual void get_recognized_extensions(List<String> *p_extensions) const;
ImageLoaderJPG();
};
diff --git a/modules/multiscript/SCsub b/modules/multiscript/SCsub
deleted file mode 100644
index 0882406761..0000000000
--- a/modules/multiscript/SCsub
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env python
-
-Import('env')
-
-env.add_source_files(env.modules_sources, "*.cpp")
-
-Export('env')
diff --git a/modules/multiscript/config.py b/modules/multiscript/config.py
deleted file mode 100644
index 5698a37295..0000000000
--- a/modules/multiscript/config.py
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-def can_build(platform):
- return True
-
-
-def configure(env):
- pass
diff --git a/modules/multiscript/multiscript.cpp b/modules/multiscript/multiscript.cpp
deleted file mode 100644
index b2633b7207..0000000000
--- a/modules/multiscript/multiscript.cpp
+++ /dev/null
@@ -1,750 +0,0 @@
-/*************************************************************************/
-/* multiscript.cpp */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2017 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 "multiscript.h"
-
-bool MultiScriptInstance::set(const StringName &p_name, const Variant &p_value) {
-
- ScriptInstance **sarr = instances.ptr();
- int sc = instances.size();
-
- for (int i = 0; i < sc; i++) {
-
- if (!sarr[i])
- continue;
-
- bool found = sarr[i]->set(p_name, p_value);
- if (found)
- return true;
- }
-
- if (String(p_name).begins_with("script_")) {
- bool valid;
- owner->set(p_name, p_value, &valid);
- return valid;
- }
- return false;
-}
-
-bool MultiScriptInstance::get(const StringName &p_name, Variant &r_ret) const {
-
- ScriptInstance **sarr = instances.ptr();
- int sc = instances.size();
-
- for (int i = 0; i < sc; i++) {
-
- if (!sarr[i])
- continue;
-
- bool found = sarr[i]->get(p_name, r_ret);
- if (found)
- return true;
- }
- if (String(p_name).begins_with("script_")) {
- bool valid;
- r_ret = owner->get(p_name, &valid);
- return valid;
- }
- return false;
-}
-void MultiScriptInstance::get_property_list(List<PropertyInfo> *p_properties) const {
-
- ScriptInstance **sarr = instances.ptr();
- int sc = instances.size();
-
- Set<String> existing;
-
- for (int i = 0; i < sc; i++) {
-
- if (!sarr[i])
- continue;
-
- List<PropertyInfo> pl;
- sarr[i]->get_property_list(&pl);
-
- for (List<PropertyInfo>::Element *E = pl.front(); E; E = E->next()) {
-
- if (existing.has(E->get().name))
- continue;
-
- p_properties->push_back(E->get());
- existing.insert(E->get().name);
- }
- }
-
- p_properties->push_back(PropertyInfo(Variant::NIL, "Scripts", PROPERTY_HINT_NONE, String(), PROPERTY_USAGE_CATEGORY));
-
- for (int i = 0; i < owner->scripts.size(); i++) {
-
- p_properties->push_back(PropertyInfo(Variant::OBJECT, "script_" + String::chr('a' + i), PROPERTY_HINT_RESOURCE_TYPE, "Script", PROPERTY_USAGE_EDITOR));
- }
-
- if (owner->scripts.size() < 25) {
-
- p_properties->push_back(PropertyInfo(Variant::OBJECT, "script_" + String::chr('a' + (owner->scripts.size())), PROPERTY_HINT_RESOURCE_TYPE, "Script", PROPERTY_USAGE_EDITOR));
- }
-}
-
-void MultiScriptInstance::get_method_list(List<MethodInfo> *p_list) const {
-
- ScriptInstance **sarr = instances.ptr();
- int sc = instances.size();
-
- Set<StringName> existing;
-
- for (int i = 0; i < sc; i++) {
-
- if (!sarr[i])
- continue;
-
- List<MethodInfo> ml;
- sarr[i]->get_method_list(&ml);
-
- for (List<MethodInfo>::Element *E = ml.front(); E; E = E->next()) {
-
- if (existing.has(E->get().name))
- continue;
-
- p_list->push_back(E->get());
- existing.insert(E->get().name);
- }
- }
-}
-bool MultiScriptInstance::has_method(const StringName &p_method) const {
-
- ScriptInstance **sarr = instances.ptr();
- int sc = instances.size();
-
- for (int i = 0; i < sc; i++) {
-
- if (!sarr[i])
- continue;
-
- if (sarr[i]->has_method(p_method))
- return true;
- }
-
- return false;
-}
-
-Variant MultiScriptInstance::call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error) {
-
- ScriptInstance **sarr = instances.ptr();
- int sc = instances.size();
-
- for (int i = 0; i < sc; i++) {
-
- if (!sarr[i])
- continue;
-
- Variant r = sarr[i]->call(p_method, p_args, p_argcount, r_error);
- if (r_error.error == Variant::CallError::CALL_OK)
- return r;
- else if (r_error.error != Variant::CallError::CALL_ERROR_INVALID_METHOD)
- return r;
- }
-
- r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD;
- return Variant();
-}
-
-void MultiScriptInstance::call_multilevel(const StringName &p_method, const Variant **p_args, int p_argcount) {
-
- ScriptInstance **sarr = instances.ptr();
- int sc = instances.size();
-
- for (int i = 0; i < sc; i++) {
-
- if (!sarr[i])
- continue;
-
- sarr[i]->call_multilevel(p_method, p_args, p_argcount);
- }
-}
-void MultiScriptInstance::notification(int p_notification) {
-
- // ScriptInstance **sarr = instances.ptr();
- int sc = instances.size();
-
- for (int i = 0; i < sc; i++) {
-
- ScriptInstance *instance = instances[i];
-
- if (!instance)
- continue;
-
- instance->notification(p_notification);
- }
-}
-
-Ref<Script> MultiScriptInstance::get_script() const {
-
- return owner;
-}
-
-ScriptLanguage *MultiScriptInstance::get_language() {
-
- return MultiScriptLanguage::get_singleton();
-}
-
-MultiScriptInstance::~MultiScriptInstance() {
-
- owner->remove_instance(object);
-}
-
-Variant::Type MultiScriptInstance::get_property_type(const StringName &p_name, bool *r_is_valid) const {
- bool valid = false;
- Variant::Type type;
-
- ScriptInstance **sarr = instances.ptr();
- int sc = instances.size();
-
- for (int i = 0; i < sc; i++) {
-
- if (!sarr[i])
- continue;
-
- type = sarr[i]->get_property_type(p_name, &valid);
- if (valid) {
- *r_is_valid = valid;
- return type;
- }
- }
- *r_is_valid = false;
- return Variant::NIL;
-}
-
-ScriptInstance::RPCMode MultiScriptInstance::get_rpc_mode(const StringName &p_method) const {
- ScriptInstance **sarr = instances.ptr();
- int sc = instances.size();
-
- for (int i = 0; i < sc; i++) {
-
- if (!sarr[i])
- continue;
- if (sarr[i]->has_method(p_method))
- return sarr[i]->get_rpc_mode(p_method);
- }
- return RPC_MODE_DISABLED;
-}
-
-ScriptInstance::RPCMode MultiScriptInstance::get_rset_mode(const StringName &p_variable) const {
- ScriptInstance **sarr = instances.ptr();
- int sc = instances.size();
-
- for (int i = 0; i < sc; i++) {
-
- if (!sarr[i])
- continue;
-
- List<PropertyInfo> properties;
- sarr[i]->get_property_list(&properties);
-
- for (List<PropertyInfo>::Element *P = properties.front(); P; P = P->next()) {
- if (P->get().name == p_variable) {
- return sarr[i]->get_rset_mode(p_variable);
- }
- }
- }
- return RPC_MODE_DISABLED;
-}
-
-///////////////////
-
-bool MultiScript::is_tool() const {
-
- for (int i = 0; i < scripts.size(); i++) {
-
- if (scripts[i]->is_tool())
- return true;
- }
-
- return false;
-}
-
-bool MultiScript::_set(const StringName &p_name, const Variant &p_value) {
-
- _THREAD_SAFE_METHOD_
-
- String s = String(p_name);
- if (s.begins_with("script_")) {
-
- int idx = s[7];
- if (idx == 0)
- return false;
- idx -= 'a';
-
- ERR_FAIL_COND_V(idx < 0, false);
-
- Ref<Script> s = p_value;
-
- if (idx < scripts.size()) {
-
- if (s.is_null())
- remove_script(idx);
- else
- set_script(idx, s);
- } else if (idx == scripts.size()) {
- if (s.is_null())
- return false;
- add_script(s);
- } else
- return false;
-
- return true;
- }
-
- return false;
-}
-
-bool MultiScript::_get(const StringName &p_name, Variant &r_ret) const {
-
- _THREAD_SAFE_METHOD_
-
- String s = String(p_name);
- if (s.begins_with("script_")) {
-
- int idx = s[7];
- if (idx == 0)
- return false;
- idx -= 'a';
-
- ERR_FAIL_COND_V(idx < 0, false);
-
- if (idx < scripts.size()) {
-
- r_ret = get_script(idx);
- return true;
- } else if (idx == scripts.size()) {
- r_ret = Ref<Script>();
- return true;
- }
- }
-
- return false;
-}
-void MultiScript::_get_property_list(List<PropertyInfo> *p_list) const {
-
- _THREAD_SAFE_METHOD_
-
- for (int i = 0; i < scripts.size(); i++) {
-
- p_list->push_back(PropertyInfo(Variant::OBJECT, "script_" + String::chr('a' + i), PROPERTY_HINT_RESOURCE_TYPE, "Script"));
- }
-
- if (scripts.size() < 25) {
-
- p_list->push_back(PropertyInfo(Variant::OBJECT, "script_" + String::chr('a' + (scripts.size())), PROPERTY_HINT_RESOURCE_TYPE, "Script"));
- }
-}
-
-void MultiScript::set_script(int p_idx, const Ref<Script> &p_script) {
-
- _THREAD_SAFE_METHOD_
-
- ERR_FAIL_INDEX(p_idx, scripts.size());
- ERR_FAIL_COND(p_script.is_null());
-
- scripts[p_idx] = p_script;
- Ref<Script> s = p_script;
-
- for (Map<Object *, MultiScriptInstance *>::Element *E = instances.front(); E; E = E->next()) {
-
- MultiScriptInstance *msi = E->get();
- ScriptInstance *si = msi->instances[p_idx];
- if (si) {
- msi->instances[p_idx] = NULL;
- memdelete(si);
- }
-
- if (p_script->can_instance())
- msi->instances[p_idx] = s->instance_create(msi->object);
- }
-}
-
-Ref<Script> MultiScript::get_script(int p_idx) const {
-
- _THREAD_SAFE_METHOD_
-
- ERR_FAIL_INDEX_V(p_idx, scripts.size(), Ref<Script>());
-
- return scripts[p_idx];
-}
-void MultiScript::add_script(const Ref<Script> &p_script) {
-
- _THREAD_SAFE_METHOD_
- ERR_FAIL_COND(p_script.is_null());
- Multi *script_owner = memnew(Multi);
- script_instances.push_back(script_owner);
- scripts.push_back(p_script);
- Ref<Script> s = p_script;
-
- for (Map<Object *, MultiScriptInstance *>::Element *E = instances.front(); E; E = E->next()) {
-
- MultiScriptInstance *msi = E->get();
-
- if (p_script->can_instance()) {
- script_owner->real_owner = msi->object;
- msi->instances.push_back(s->instance_create(script_owner));
- } else {
- msi->instances.push_back(NULL);
- }
-
- msi->object->_change_notify();
- }
-
- _change_notify();
-}
-
-void MultiScript::remove_script(int p_idx) {
-
- _THREAD_SAFE_METHOD_
-
- ERR_FAIL_INDEX(p_idx, scripts.size());
-
- scripts.remove(p_idx);
- script_instances.remove(p_idx);
-
- for (Map<Object *, MultiScriptInstance *>::Element *E = instances.front(); E; E = E->next()) {
-
- MultiScriptInstance *msi = E->get();
- ScriptInstance *si = msi->instances[p_idx];
- msi->instances.remove(p_idx);
- if (si) {
- memdelete(si);
- }
-
- msi->object->_change_notify();
- }
-}
-
-void MultiScript::remove_instance(Object *p_object) {
-
- _THREAD_SAFE_METHOD_
- instances.erase(p_object);
-}
-
-bool MultiScript::can_instance() const {
-
- return true;
-}
-
-StringName MultiScript::get_instance_base_type() const {
-
- return StringName();
-}
-ScriptInstance *MultiScript::instance_create(Object *p_this) {
-
- _THREAD_SAFE_METHOD_
- MultiScriptInstance *msi = memnew(MultiScriptInstance);
- msi->object = p_this;
- msi->owner = this;
-
- for (int i = 0; i < scripts.size(); i++) {
-
- ScriptInstance *si;
-
- if (scripts[i]->can_instance()) {
- script_instances[i]->real_owner = p_this;
- si = scripts[i]->instance_create(script_instances[i]);
- } else {
- si = NULL;
- }
-
- msi->instances.push_back(si);
- }
-
- instances[p_this] = msi;
- p_this->_change_notify();
- return msi;
-}
-bool MultiScript::instance_has(const Object *p_this) const {
-
- _THREAD_SAFE_METHOD_
- return instances.has((Object *)p_this);
-}
-
-bool MultiScript::has_source_code() const {
-
- return false;
-}
-String MultiScript::get_source_code() const {
-
- return "";
-}
-void MultiScript::set_source_code(const String &p_code) {
-}
-Error MultiScript::reload(bool p_keep_state) {
-
- for (int i = 0; i < scripts.size(); i++)
- scripts[i]->reload(p_keep_state);
-
- return OK;
-}
-
-String MultiScript::get_node_type() const {
-
- return "";
-}
-
-void MultiScript::_bind_methods() {
-}
-
-ScriptLanguage *MultiScript::get_language() const {
-
- return MultiScriptLanguage::get_singleton();
-}
-
-///////////////
-
-MultiScript::MultiScript() {
-}
-
-MultiScript::~MultiScript() {
- for (int i = 0; i < script_instances.size(); i++) {
- memdelete(script_instances[i]);
- }
-
- script_instances.resize(0);
-}
-
-Ref<Script> MultiScript::get_base_script() const {
- Ref<MultiScript> base_script;
- return base_script;
-}
-
-bool MultiScript::has_method(const StringName &p_method) const {
- for (int i = 0; i < scripts.size(); i++) {
- if (scripts[i]->has_method(p_method)) {
- return true;
- }
- }
- return false;
-}
-
-MethodInfo MultiScript::get_method_info(const StringName &p_method) const {
- for (int i = 0; i < scripts.size(); i++) {
- if (scripts[i]->has_method(p_method)) {
- return scripts[i]->get_method_info(p_method);
- }
- }
- return MethodInfo();
-}
-
-bool MultiScript::has_script_signal(const StringName &p_signal) const {
- for (int i = 0; i < scripts.size(); i++) {
- if (scripts[i]->has_script_signal(p_signal)) {
- return true;
- }
- }
- return false;
-}
-
-void MultiScript::get_script_signal_list(List<MethodInfo> *r_signals) const {
- for (int i = 0; i < scripts.size(); i++) {
- scripts[i]->get_script_signal_list(r_signals);
- }
-}
-
-bool MultiScript::get_property_default_value(const StringName &p_property, Variant &r_value) const {
- for (int i = 0; i < scripts.size(); i++) {
-
- if (scripts[i]->get_property_default_value(p_property, r_value)) {
- return true;
- }
- }
- return false;
-}
-
-void MultiScript::get_script_method_list(List<MethodInfo> *p_list) const {
- for (int i = 0; i < scripts.size(); i++) {
- scripts[i]->get_script_method_list(p_list);
- }
-}
-
-void MultiScript::get_script_property_list(List<PropertyInfo> *p_list) const {
- for (int i = 0; i < scripts.size(); i++) {
- scripts[i]->get_script_property_list(p_list);
- }
-}
-
-void MultiScript::update_exports() {
- for (int i = 0; i < scripts.size(); i++) {
- scripts[i]->update_exports();
- }
-}
-
-MultiScriptLanguage *MultiScriptLanguage::singleton = NULL;
-
-MultiScriptLanguage *MultiScriptLanguage::get_singleton() {
- return singleton;
-}
-
-String MultiScriptLanguage::get_name() const {
- return "MultiScript";
-}
-
-void MultiScriptLanguage::init() {}
-
-String MultiScriptLanguage::get_type() const {
- return "MultiScript";
-}
-
-String MultiScriptLanguage::get_extension() const {
- return "";
-}
-
-Error MultiScriptLanguage::execute_file(const String &p_path) {
- return OK;
-}
-
-void MultiScriptLanguage::finish() {}
-
-void MultiScriptLanguage::get_reserved_words(List<String> *p_words) const {}
-
-void MultiScriptLanguage::get_comment_delimiters(List<String> *p_delimiters) const {}
-
-void MultiScriptLanguage::get_string_delimiters(List<String> *p_delimiters) const {}
-
-Ref<Script> MultiScriptLanguage::get_template(const String &p_class_name, const String &p_base_class_name) const {
- MultiScript *s = memnew(MultiScript);
- s->base_class_name = p_base_class_name;
- return Ref<MultiScript>(s);
-}
-
-bool MultiScriptLanguage::validate(const String &p_script, int &r_line_error, int &r_col_error, String &r_test_error, const String &p_path, List<String> *r_fn) const {
- return true;
-}
-
-Script *MultiScriptLanguage::create_script() const {
- return memnew(MultiScript);
-}
-
-bool MultiScriptLanguage::has_named_classes() const {
- return false;
-}
-
-int MultiScriptLanguage::find_function(const String &p_function, const String &p_code) const {
- return -1;
-}
-
-String MultiScriptLanguage::make_function(const String &p_class, const String &p_name, const PoolStringArray &p_args) const {
- return "";
-}
-
-String MultiScriptLanguage::debug_get_error() const {
- return "";
-}
-
-int MultiScriptLanguage::debug_get_stack_level_count() const {
- return 0;
-}
-
-int MultiScriptLanguage::debug_get_stack_level_line(int p_level) const {
- return 0;
-}
-
-String MultiScriptLanguage::debug_get_stack_level_function(int p_level) const {
- return "";
-}
-
-String MultiScriptLanguage::debug_get_stack_level_source(int p_level) const {
- return "";
-}
-
-void MultiScriptLanguage::debug_get_stack_level_locals(int p_level, List<String> *p_locals, List<Variant> *p_values, int p_max_subitems, int p_max_depth) {}
-
-void MultiScriptLanguage::debug_get_stack_level_members(int p_level, List<String> *p_members, List<Variant> *p_values, int p_max_subitems, int p_max_depth) {}
-
-void MultiScriptLanguage::debug_get_globals(List<String> *p_locals, List<Variant> *p_values, int p_max_subitems, int p_max_depth) {}
-
-String MultiScriptLanguage::debug_parse_stack_level_expression(int p_level, const String &p_expression, int p_max_subitems, int p_max_depth) {
- return "";
-}
-
-void MultiScriptLanguage::get_recognized_extensions(List<String> *p_extensions) const {}
-
-void MultiScriptLanguage::get_public_functions(List<MethodInfo> *p_functions) const {}
-
-MultiScriptLanguage::MultiScriptLanguage() {
- singleton = this;
-}
-
-MultiScriptLanguage::~MultiScriptLanguage() {}
-
-void MultiScriptLanguage::auto_indent_code(String &p_code, int p_from_line, int p_to_line) const {
-}
-
-void MultiScriptLanguage::add_global_constant(const StringName &p_variable, const Variant &p_value) {
-}
-
-void MultiScriptLanguage::reload_all_scripts() {
-}
-
-void MultiScriptLanguage::reload_tool_script(const Ref<Script> &p_script, bool p_soft_reload) {
-}
-
-void MultiScriptLanguage::get_public_constants(List<Pair<String, Variant> > *p_constants) const {
-}
-
-void MultiScriptLanguage::profiling_start() {
-}
-
-void MultiScriptLanguage::profiling_stop() {
-}
-
-int MultiScriptLanguage::profiling_get_accumulated_data(ScriptLanguage::ProfilingInfo *p_info_arr, int p_info_max) {
- return 0;
-}
-
-int MultiScriptLanguage::profiling_get_frame_data(ScriptLanguage::ProfilingInfo *p_info_arr, int p_info_max) {
- return 0;
-}
-
-void Multi::_bind_methods() {
- // ClassDB::bind_method("call", &Multi::call);
- // ClassDB::bind_method("call_multilevel", &Multi::call_multilevel);
- // ClassDB::bind_method("call_multilevel_reversed", &Multi::call_multilevel_reversed);
-}
-
-Variant Multi::call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error) {
- if (real_owner)
- return real_owner->call(p_method, p_args, p_argcount, r_error);
- return Variant();
-}
-
-void Multi::call_multilevel(const StringName &p_method, const Variant **p_args, int p_argcount) {
- if (real_owner)
- real_owner->call_multilevel(p_method, p_args, p_argcount);
-}
-
-void Multi::call_multilevel_reversed(const StringName &p_method, const Variant **p_args, int p_argcount) {
- if (real_owner)
- real_owner->call_multilevel_reversed(p_method, p_args, p_argcount);
-}
diff --git a/modules/multiscript/multiscript.h b/modules/multiscript/multiscript.h
deleted file mode 100644
index 7ec1d5402f..0000000000
--- a/modules/multiscript/multiscript.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/*************************************************************************/
-/* multiscript.h */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2017 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. */
-/*************************************************************************/
-#ifndef MULTISCRIPT_H
-#define MULTISCRIPT_H
-
-#include "os/thread_safe.h"
-#include "script_language.h"
-
-class MultiScript;
-
-class Multi : public Object {
- GDCLASS(Multi, Object)
-
- friend class MultiScript;
-
- Object *real_owner;
-
-public:
- static void _bind_methods();
-
- virtual Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error);
- virtual void call_multilevel(const StringName &p_method, const Variant **p_args, int p_argcount);
- virtual void call_multilevel_reversed(const StringName &p_method, const Variant **p_args, int p_argcount);
-};
-
-class MultiScriptInstance : public ScriptInstance {
- friend class MultiScript;
- mutable Vector<ScriptInstance *> instances;
- Object *object;
- mutable MultiScript *owner;
-
-public:
- virtual bool set(const StringName &p_name, const Variant &p_value);
- virtual bool get(const StringName &p_name, Variant &r_ret) const;
- virtual void get_property_list(List<PropertyInfo> *p_properties) const;
-
- virtual void get_method_list(List<MethodInfo> *p_list) const;
- virtual bool has_method(const StringName &p_method) const;
- virtual Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error);
- virtual void call_multilevel(const StringName &p_method, const Variant **p_args, int p_argcount);
- virtual void notification(int p_notification);
-
- virtual Ref<Script> get_script() const;
-
- virtual ScriptLanguage *get_language();
- virtual ~MultiScriptInstance();
-
- // ScriptInstance interface
-public:
- Variant::Type get_property_type(const StringName &p_name, bool *r_is_valid) const;
- RPCMode get_rpc_mode(const StringName &p_method) const;
- RPCMode get_rset_mode(const StringName &p_variable) const;
-};
-
-class MultiScript : public Script {
-
- _THREAD_SAFE_CLASS_
- friend class MultiScriptInstance;
- friend class MultiScriptLanguage;
- GDCLASS(MultiScript, Script)
-
- StringName base_class_name;
-
- Vector<Ref<Script> > scripts;
- Vector<Multi *> script_instances;
-
- Map<Object *, MultiScriptInstance *> instances;
-
-protected:
- bool _set(const StringName &p_name, const Variant &p_value);
- bool _get(const StringName &p_name, Variant &r_ret) const;
- void _get_property_list(List<PropertyInfo> *p_list) const;
-
- static void _bind_methods();
-
-public:
- void remove_instance(Object *p_object);
- virtual bool can_instance() const;
-
- virtual StringName get_instance_base_type() const;
- virtual ScriptInstance *instance_create(Object *p_this);
- virtual bool instance_has(const Object *p_this) const;
-
- virtual bool has_source_code() const;
- virtual String get_source_code() const;
- virtual void set_source_code(const String &p_code);
- virtual Error reload(bool p_keep_state = false);
-
- virtual bool is_tool() const;
-
- virtual String get_node_type() const;
-
- void set_script(int p_idx, const Ref<Script> &p_script);
- Ref<Script> get_script(int p_idx) const;
- void remove_script(int p_idx);
- void add_script(const Ref<Script> &p_script);
-
- virtual ScriptLanguage *get_language() const;
-
- MultiScript();
- ~MultiScript();
-
- virtual Ref<Script> get_base_script() const;
- virtual bool has_method(const StringName &p_method) const;
- virtual MethodInfo get_method_info(const StringName &p_method) const;
- virtual bool has_script_signal(const StringName &p_signal) const;
- virtual void get_script_signal_list(List<MethodInfo> *r_signals) const;
- virtual bool get_property_default_value(const StringName &p_property, Variant &r_value) const;
- virtual void get_script_method_list(List<MethodInfo> *p_list) const;
- virtual void get_script_property_list(List<PropertyInfo> *p_list) const;
- virtual void update_exports();
-};
-
-class MultiScriptLanguage : public ScriptLanguage {
-
- static MultiScriptLanguage *singleton;
-
-public:
- static _FORCE_INLINE_ MultiScriptLanguage *get_singleton();
- virtual String get_name() const;
-
- /* LANGUAGE FUNCTIONS */
- virtual void init();
- virtual String get_type() const;
- virtual String get_extension() const;
- virtual Error execute_file(const String &p_path);
- virtual void finish();
-
- /* EDITOR FUNCTIONS */
- virtual void get_reserved_words(List<String> *p_words) const;
- virtual void get_comment_delimiters(List<String> *p_delimiters) const;
- virtual void get_string_delimiters(List<String> *p_delimiters) const;
- virtual Ref<Script> get_template(const String &p_class_name, const String &p_base_class_name) const;
- virtual bool validate(const String &p_script, int &r_line_error, int &r_col_error, String &r_test_error, const String &p_path = "", List<String> *r_fn = NULL) const;
- virtual Script *create_script() const;
- virtual bool has_named_classes() const;
- virtual int find_function(const String &p_function, const String &p_code) const;
- virtual String make_function(const String &p_class, const String &p_name, const PoolStringArray &p_args) const;
-
- /* DEBUGGER FUNCTIONS */
-
- virtual String debug_get_error() const;
- virtual int debug_get_stack_level_count() const;
- virtual int debug_get_stack_level_line(int p_level) const;
- virtual String debug_get_stack_level_function(int p_level) const;
- virtual String debug_get_stack_level_source(int p_level) const;
- virtual void debug_get_stack_level_locals(int p_level, List<String> *p_locals, List<Variant> *p_values, int p_max_subitems = -1, int p_max_depth = -1);
- virtual void debug_get_stack_level_members(int p_level, List<String> *p_members, List<Variant> *p_values, int p_max_subitems = -1, int p_max_depth = -1);
- virtual void debug_get_globals(List<String> *p_locals, List<Variant> *p_values, int p_max_subitems = -1, int p_max_depth = -1);
- virtual String debug_parse_stack_level_expression(int p_level, const String &p_expression, int p_max_subitems = -1, int p_max_depth = -1);
-
- /* LOADER FUNCTIONS */
-
- virtual void get_recognized_extensions(List<String> *p_extensions) const;
- virtual void get_public_functions(List<MethodInfo> *p_functions) const;
-
- MultiScriptLanguage();
- virtual ~MultiScriptLanguage();
-
- // ScriptLanguage interface
-public:
- void auto_indent_code(String &p_code, int p_from_line, int p_to_line) const;
- void add_global_constant(const StringName &p_variable, const Variant &p_value);
- void reload_all_scripts();
- void reload_tool_script(const Ref<Script> &p_script, bool p_soft_reload);
- void get_public_constants(List<Pair<String, Variant> > *p_constants) const;
- void profiling_start();
- void profiling_stop();
- int profiling_get_accumulated_data(ProfilingInfo *p_info_arr, int p_info_max);
- int profiling_get_frame_data(ProfilingInfo *p_info_arr, int p_info_max);
-};
-
-#endif // MULTISCRIPT_H
diff --git a/modules/multiscript/register_types.cpp b/modules/multiscript/register_types.cpp
deleted file mode 100644
index 8170a2d9c1..0000000000
--- a/modules/multiscript/register_types.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/*************************************************************************/
-/* register_types.cpp */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2017 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 "register_types.h"
-
-#include "multiscript.h"
-
-#include "core/script_language.h"
-
-static MultiScriptLanguage *script_multi_script = NULL;
-
-void register_multiscript_types() {
- script_multi_script = memnew(MultiScriptLanguage);
- ScriptServer::register_language(script_multi_script);
- ClassDB::register_class<MultiScript>();
-
- // ClassDB::register_class<Multi>();
-}
-
-void unregister_multiscript_types() {
- if (script_multi_script) {
- ScriptServer::unregister_language(script_multi_script);
- memdelete(script_multi_script);
- }
-}
diff --git a/modules/multiscript/register_types.h b/modules/multiscript/register_types.h
deleted file mode 100644
index b18d1adff2..0000000000
--- a/modules/multiscript/register_types.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*************************************************************************/
-/* register_types.h */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2017 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. */
-/*************************************************************************/
-void register_multiscript_types();
-void unregister_multiscript_types();
diff --git a/modules/pvr/texture_loader_pvr.cpp b/modules/pvr/texture_loader_pvr.cpp
index 62cbd9cd8d..bdd4779e28 100644
--- a/modules/pvr/texture_loader_pvr.cpp
+++ b/modules/pvr/texture_loader_pvr.cpp
@@ -164,8 +164,8 @@ RES ResourceFormatPVR::load(const String &p_path, const String &p_original_path,
print_line("flip: " + itos(flags & PVR_VFLIP));
- Image image(width, height, mipmaps, format, data);
- ERR_FAIL_COND_V(image.empty(), RES());
+ Ref<Image> image = memnew(Image(width, height, mipmaps, format, data));
+ ERR_FAIL_COND_V(image->empty(), RES());
Ref<ImageTexture> texture = memnew(ImageTexture);
texture->create_from_image(image, tex_flags);
@@ -193,30 +193,32 @@ String ResourceFormatPVR::get_resource_type(const String &p_path) const {
static void _compress_pvrtc4(Image *p_img) {
- Image img = *p_img;
+ Ref<Image> img = p_img->duplicate();
bool make_mipmaps = false;
- if (img.get_width() % 8 || img.get_height() % 8) {
- make_mipmaps = img.has_mipmaps();
- img.resize(img.get_width() + (8 - (img.get_width() % 8)), img.get_height() + (8 - (img.get_height() % 8)));
+ if (img->get_width() % 8 || img->get_height() % 8) {
+ make_mipmaps = img->has_mipmaps();
+ img->resize(img->get_width() + (8 - (img->get_width() % 8)), img->get_height() + (8 - (img->get_height() % 8)));
}
- img.convert(Image::FORMAT_RGBA8);
- if (!img.has_mipmaps() && make_mipmaps)
- img.generate_mipmaps();
+ img->convert(Image::FORMAT_RGBA8);
+ if (!img->has_mipmaps() && make_mipmaps)
+ img->generate_mipmaps();
- bool use_alpha = img.detect_alpha();
+ bool use_alpha = img->detect_alpha();
- Image new_img;
- new_img.create(img.get_width(), img.get_height(), true, use_alpha ? Image::FORMAT_PVRTC4A : Image::FORMAT_PVRTC4);
- PoolVector<uint8_t> data = new_img.get_data();
+ Ref<Image> new_img;
+ new_img.instance();
+ new_img->create(img->get_width(), img->get_height(), true, use_alpha ? Image::FORMAT_PVRTC4A : Image::FORMAT_PVRTC4);
+
+ PoolVector<uint8_t> data = new_img->get_data();
{
PoolVector<uint8_t>::Write wr = data.write();
- PoolVector<uint8_t>::Read r = img.get_data().read();
+ PoolVector<uint8_t>::Read r = img->get_data().read();
- for (int i = 0; i <= new_img.get_mipmap_count(); i++) {
+ 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);
+ img->get_mipmap_offset_size_and_dimensions(i, ofs, size, w, h);
Javelin::RgbaBitmap bm(w, h);
copymem(bm.GetData(), &r[ofs], size);
{
@@ -226,12 +228,12 @@ static void _compress_pvrtc4(Image *p_img) {
}
}
- new_img.get_mipmap_offset_size_and_dimensions(i, ofs, size, w, h);
+ new_img->get_mipmap_offset_size_and_dimensions(i, ofs, size, w, h);
Javelin::PvrTcEncoder::EncodeRgba4Bpp(&wr[ofs], bm);
}
}
- *p_img = Image(new_img.get_width(), new_img.get_height(), new_img.has_mipmaps(), new_img.get_format(), data);
+ p_img->create(new_img->get_width(), new_img->get_height(), new_img->has_mipmaps(), new_img->get_format(), data);
}
ResourceFormatPVR::ResourceFormatPVR() {
@@ -676,8 +678,7 @@ static void _pvrtc_decompress(Image *p_img) {
r = PoolVector<uint8_t>::Read();
bool make_mipmaps = p_img->has_mipmaps();
- Image newimg(p_img->get_width(), p_img->get_height(), false, Image::FORMAT_RGBA8, newdata);
+ p_img->create(p_img->get_width(), p_img->get_height(), false, Image::FORMAT_RGBA8, newdata);
if (make_mipmaps)
- newimg.generate_mipmaps();
- *p_img = newimg;
+ p_img->generate_mipmaps();
}
diff --git a/modules/theora/video_stream_theora.cpp b/modules/theora/video_stream_theora.cpp
index 61112f20b4..d895f60280 100644
--- a/modules/theora/video_stream_theora.cpp
+++ b/modules/theora/video_stream_theora.cpp
@@ -138,7 +138,7 @@ void VideoStreamPlaybackTheora::video_write(void) {
format = Image::FORMAT_RGBA8;
}
- Image img(size.x, size.y, 0, Image::FORMAT_RGBA8, frame_data); //zero copy image creation
+ Ref<Image> img = memnew(Image(size.x, size.y, 0, Image::FORMAT_RGBA8, frame_data)); //zero copy image creation
texture->set_data(img); //zero copy send to visual server
diff --git a/modules/visual_script/visual_script_editor.cpp b/modules/visual_script/visual_script_editor.cpp
index d515f301ce..340e2fe637 100644
--- a/modules/visual_script/visual_script_editor.cpp
+++ b/modules/visual_script/visual_script_editor.cpp
@@ -346,7 +346,6 @@ static Color _color_from_type(Variant::Type p_type) {
case Variant::TRANSFORM: color = Color::html("f6a86e"); break;
case Variant::COLOR: color = Color::html("9dff70"); break;
- case Variant::IMAGE: color = Color::html("93f1b9"); break;
case Variant::NODE_PATH: color = Color::html("6993ec"); break;
case Variant::_RID: color = Color::html("69ec9a"); break;
case Variant::OBJECT: color = Color::html("79f3e8"); break;
@@ -451,7 +450,6 @@ void VisualScriptEditor::_update_graph(int p_only_id) {
Control::get_icon("MiniBasis", "EditorIcons"),
Control::get_icon("MiniTransform", "EditorIcons"),
Control::get_icon("MiniColor", "EditorIcons"),
- Control::get_icon("MiniImage", "EditorIcons"),
Control::get_icon("MiniPath", "EditorIcons"),
Control::get_icon("MiniRid", "EditorIcons"),
Control::get_icon("MiniObject", "EditorIcons"),
@@ -735,7 +733,6 @@ void VisualScriptEditor::_update_members() {
Control::get_icon("MiniMatrix3", "EditorIcons"),
Control::get_icon("MiniTransform", "EditorIcons"),
Control::get_icon("MiniColor", "EditorIcons"),
- Control::get_icon("MiniImage", "EditorIcons"),
Control::get_icon("MiniPath", "EditorIcons"),
Control::get_icon("MiniRid", "EditorIcons"),
Control::get_icon("MiniObject", "EditorIcons"),
diff --git a/modules/webm/libvpx/SCsub b/modules/webm/libvpx/SCsub
index 241d6e30cd..0ee2ed45b8 100644
--- a/modules/webm/libvpx/SCsub
+++ b/modules/webm/libvpx/SCsub
@@ -273,7 +273,7 @@ else:
webm_cpu_x86 = True
else:
webm_cpu_x86 = not is_x11_or_server_arm and (cpu_bits == '32' or cpu_bits == '64') and (env["platform"] == 'windows' or env["platform"] == 'x11' or env["platform"] == 'osx' or env["platform"] == 'haiku' or is_android_x86 or is_ios_x86)
- webm_cpu_arm = is_x11_or_server_arm or (not is_ios_x86 and env["platform"] == 'iphone') or env["platform"] == 'bb10' or (not is_android_x86 and env["platform"] == 'android')
+ webm_cpu_arm = is_x11_or_server_arm or (not is_ios_x86 and env["platform"] == 'iphone') or (not is_android_x86 and env["platform"] == 'android')
if webm_cpu_x86:
import subprocess
diff --git a/modules/webp/image_loader_webp.cpp b/modules/webp/image_loader_webp.cpp
index 889eac71a7..7313cb6c7c 100644
--- a/modules/webp/image_loader_webp.cpp
+++ b/modules/webp/image_loader_webp.cpp
@@ -37,23 +37,23 @@
#include <webp/decode.h>
#include <webp/encode.h>
-static PoolVector<uint8_t> _webp_lossy_pack(const Image &p_image, float p_quality) {
+static PoolVector<uint8_t> _webp_lossy_pack(const Ref<Image> &p_image, float p_quality) {
- ERR_FAIL_COND_V(p_image.empty(), PoolVector<uint8_t>());
+ ERR_FAIL_COND_V(p_image.is_null() || p_image->empty(), PoolVector<uint8_t>());
- Image img = p_image;
- if (img.detect_alpha())
- img.convert(Image::FORMAT_RGBA8);
+ Ref<Image> img = p_image->duplicate();
+ if (img->detect_alpha())
+ img->convert(Image::FORMAT_RGBA8);
else
- img.convert(Image::FORMAT_RGB8);
+ img->convert(Image::FORMAT_RGB8);
- Size2 s(img.get_width(), img.get_height());
- PoolVector<uint8_t> data = img.get_data();
+ Size2 s(img->get_width(), img->get_height());
+ PoolVector<uint8_t> data = img->get_data();
PoolVector<uint8_t>::Read r = data.read();
uint8_t *dst_buff = NULL;
size_t dst_size = 0;
- if (img.get_format() == Image::FORMAT_RGB8) {
+ if (img->get_format() == Image::FORMAT_RGB8) {
dst_size = WebPEncodeRGB(r.ptr(), s.width, s.height, 3 * s.width, CLAMP(p_quality * 100.0, 0, 100.0), &dst_buff);
} else {
@@ -74,17 +74,17 @@ static PoolVector<uint8_t> _webp_lossy_pack(const Image &p_image, float p_qualit
return dst;
}
-static Image _webp_lossy_unpack(const PoolVector<uint8_t> &p_buffer) {
+static Ref<Image> _webp_lossy_unpack(const PoolVector<uint8_t> &p_buffer) {
int size = p_buffer.size() - 4;
- ERR_FAIL_COND_V(size <= 0, Image());
+ ERR_FAIL_COND_V(size <= 0, Ref<Image>());
PoolVector<uint8_t>::Read r = p_buffer.read();
- ERR_FAIL_COND_V(r[0] != 'W' || r[1] != 'E' || r[2] != 'B' || r[3] != 'P', Image());
+ ERR_FAIL_COND_V(r[0] != 'W' || r[1] != 'E' || r[2] != 'B' || r[3] != 'P', Ref<Image>());
WebPBitstreamFeatures features;
if (WebPGetFeatures(&r[4], size, &features) != VP8_STATUS_OK) {
ERR_EXPLAIN("Error unpacking WEBP image:");
- ERR_FAIL_V(Image());
+ ERR_FAIL_V(Ref<Image>());
}
/*
@@ -107,14 +107,15 @@ static Image _webp_lossy_unpack(const PoolVector<uint8_t> &p_buffer) {
}
//ERR_EXPLAIN("Error decoding webp! - "+p_file);
- ERR_FAIL_COND_V(errdec, Image());
+ ERR_FAIL_COND_V(errdec, Ref<Image>());
dst_w = PoolVector<uint8_t>::Write();
- return Image(features.width, features.height, 0, features.has_alpha ? Image::FORMAT_RGBA8 : Image::FORMAT_RGB8, dst_image);
+ Ref<Image> img = memnew(Image(features.width, features.height, 0, features.has_alpha ? Image::FORMAT_RGBA8 : Image::FORMAT_RGB8, dst_image));
+ return img;
}
-Error ImageLoaderWEBP::load_image(Image *p_image, FileAccess *f) {
+Error ImageLoaderWEBP::load_image(Ref<Image> p_image, FileAccess *f) {
uint32_t size = f->get_len();
PoolVector<uint8_t> src_image;
@@ -160,7 +161,7 @@ Error ImageLoaderWEBP::load_image(Image *p_image, FileAccess *f) {
src_r = PoolVector<uint8_t>::Read();
dst_w = PoolVector<uint8_t>::Write();
- *p_image = Image(features.width, features.height, 0, features.has_alpha ? Image::FORMAT_RGBA8 : Image::FORMAT_RGB8, dst_image);
+ p_image->create(features.width, features.height, 0, features.has_alpha ? Image::FORMAT_RGBA8 : Image::FORMAT_RGB8, dst_image);
return OK;
}
diff --git a/modules/webp/image_loader_webp.h b/modules/webp/image_loader_webp.h
index 2d0ac796d3..ba817e0ecd 100644
--- a/modules/webp/image_loader_webp.h
+++ b/modules/webp/image_loader_webp.h
@@ -38,7 +38,7 @@
class ImageLoaderWEBP : public ImageFormatLoader {
public:
- virtual Error load_image(Image *p_image, FileAccess *f);
+ virtual Error load_image(Ref<Image> p_image, FileAccess *f);
virtual void get_recognized_extensions(List<String> *p_extensions) const;
ImageLoaderWEBP();
};