mirror of
https://github.com/godotengine/godot.git
synced 2024-11-24 21:22:48 +00:00
-fixed many memory initialization issues
-fixed deadlock on previews thread -fixed compilation errors on unix
This commit is contained in:
parent
14c4c1b568
commit
b524b40fdc
@ -34,6 +34,7 @@
|
|||||||
#include "os/mutex.h"
|
#include "os/mutex.h"
|
||||||
#include "os/memory.h"
|
#include "os/memory.h"
|
||||||
#include "simple_type.h"
|
#include "simple_type.h"
|
||||||
|
#include "print_string.h"
|
||||||
/**
|
/**
|
||||||
@author Juan Linietsky <reduzio@gmail.com>
|
@author Juan Linietsky <reduzio@gmail.com>
|
||||||
*/
|
*/
|
||||||
@ -174,7 +175,7 @@ class CommandQueueMT {
|
|||||||
R* ret;
|
R* ret;
|
||||||
SyncSemaphore *sync;
|
SyncSemaphore *sync;
|
||||||
|
|
||||||
virtual void call() { *ret = (instance->*method)(p1); sync->sem->post(); sync->in_use=false; ; }
|
virtual void call() { *ret = (instance->*method)(p1); sync->sem->post(); print_line("post"); sync->in_use=false; ; }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class T,class M,class P1,class P2,class R>
|
template<class T,class M,class P1,class P2,class R>
|
||||||
@ -675,6 +676,7 @@ public:
|
|||||||
|
|
||||||
if (sync) sync->post();
|
if (sync) sync->post();
|
||||||
ss->sem->wait();
|
ss->sem->wait();
|
||||||
|
print_line("wait");
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T, class M, class P1, class P2,class R>
|
template<class T, class M, class P1, class P2,class R>
|
||||||
|
@ -214,6 +214,7 @@ RES ResourceLoader::load(const String &p_path,const String& p_type_hint,bool p_n
|
|||||||
Ref<ResourceImportMetadata> ResourceLoader::load_import_metadata(const String &p_path) {
|
Ref<ResourceImportMetadata> ResourceLoader::load_import_metadata(const String &p_path) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
String local_path;
|
String local_path;
|
||||||
if (p_path.is_rel_path())
|
if (p_path.is_rel_path())
|
||||||
local_path="res://"+p_path;
|
local_path="res://"+p_path;
|
||||||
|
@ -324,6 +324,7 @@ int MessageQueue::get_max_buffer_usage() const {
|
|||||||
|
|
||||||
void MessageQueue::flush() {
|
void MessageQueue::flush() {
|
||||||
|
|
||||||
|
|
||||||
if (buffer_max_used<buffer_end); {
|
if (buffer_max_used<buffer_end); {
|
||||||
buffer_max_used=buffer_end;
|
buffer_max_used=buffer_end;
|
||||||
//statistics();
|
//statistics();
|
||||||
@ -331,9 +332,14 @@ void MessageQueue::flush() {
|
|||||||
|
|
||||||
uint32_t read_pos=0;
|
uint32_t read_pos=0;
|
||||||
|
|
||||||
while (read_pos < buffer_end ) {
|
//using reverse locking strategy
|
||||||
|
_THREAD_SAFE_LOCK_
|
||||||
|
|
||||||
|
while (read_pos<buffer_end) {
|
||||||
|
|
||||||
|
_THREAD_SAFE_UNLOCK_
|
||||||
|
|
||||||
//lock on each interation, so a call can re-add itself to the message queue
|
//lock on each interation, so a call can re-add itself to the message queue
|
||||||
_THREAD_SAFE_LOCK_
|
|
||||||
|
|
||||||
Message *message = (Message*)&buffer[ read_pos ];
|
Message *message = (Message*)&buffer[ read_pos ];
|
||||||
|
|
||||||
@ -379,16 +385,17 @@ void MessageQueue::flush() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
read_pos+=sizeof(Message);
|
uint32_t advance = sizeof(Message);
|
||||||
if (message->type!=TYPE_NOTIFICATION)
|
if (message->type!=TYPE_NOTIFICATION)
|
||||||
read_pos+=sizeof(Variant)*message->args;
|
advance+=sizeof(Variant)*message->args;
|
||||||
message->~Message();
|
message->~Message();
|
||||||
|
|
||||||
_THREAD_SAFE_UNLOCK_
|
_THREAD_SAFE_LOCK_
|
||||||
|
read_pos+=advance;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_THREAD_SAFE_LOCK_
|
|
||||||
buffer_end=0; // reset buffer
|
buffer_end=0; // reset buffer
|
||||||
_THREAD_SAFE_UNLOCK_
|
_THREAD_SAFE_UNLOCK_
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
template <class T_val>
|
template <class T_val>
|
||||||
int find(T_val& p_val) const;
|
int find(const T_val& p_val) const;
|
||||||
|
|
||||||
void set(int p_index,T p_elem);
|
void set(int p_index,T p_elem);
|
||||||
T get(int p_index) const;
|
T get(int p_index) const;
|
||||||
@ -221,7 +221,7 @@ void Vector<T>::_copy_on_write() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<class T> template<class T_val>
|
template<class T> template<class T_val>
|
||||||
int Vector<T>::find(T_val& p_val) const {
|
int Vector<T>::find(const T_val &p_val) const {
|
||||||
|
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
if (size() == 0)
|
if (size() == 0)
|
||||||
|
@ -1380,6 +1380,8 @@ bool Main::iteration() {
|
|||||||
SpatialSound2DServer::get_singleton()->update( step*time_scale );
|
SpatialSound2DServer::get_singleton()->update( step*time_scale );
|
||||||
|
|
||||||
|
|
||||||
|
VisualServer::get_singleton()->sync(); //sync if still drawing from previous frames.
|
||||||
|
|
||||||
if (OS::get_singleton()->can_draw()) {
|
if (OS::get_singleton()->can_draw()) {
|
||||||
|
|
||||||
if ((!force_redraw_requested) && OS::get_singleton()->is_in_low_processor_usage_mode()) {
|
if ((!force_redraw_requested) && OS::get_singleton()->is_in_low_processor_usage_mode()) {
|
||||||
@ -1392,8 +1394,6 @@ bool Main::iteration() {
|
|||||||
OS::get_singleton()->frames_drawn++;
|
OS::get_singleton()->frames_drawn++;
|
||||||
force_redraw_requested = false;
|
force_redraw_requested = false;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
VisualServer::get_singleton()->flush(); // flush visual commands
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AudioServer::get_singleton())
|
if (AudioServer::get_singleton())
|
||||||
|
@ -3601,6 +3601,10 @@ TextEdit::TextEdit() {
|
|||||||
set_focus_mode(FOCUS_ALL);
|
set_focus_mode(FOCUS_ALL);
|
||||||
_update_caches();
|
_update_caches();
|
||||||
cache.size=Size2(1,1);
|
cache.size=Size2(1,1);
|
||||||
|
cache.row_height=1;
|
||||||
|
cache.line_spacing=1;
|
||||||
|
cache.line_number_w=1;
|
||||||
|
|
||||||
tab_size=4;
|
tab_size=4;
|
||||||
text.set_tab_size(tab_size);
|
text.set_tab_size(tab_size);
|
||||||
text.clear();
|
text.clear();
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
Shader::Mode Shader::get_mode() const {
|
Shader::Mode Shader::get_mode() const {
|
||||||
|
|
||||||
return (Mode)VisualServer::get_singleton()->shader_get_mode(shader);
|
return mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Shader::set_code( const String& p_vertex, const String& p_fragment, const String& p_light,int p_fragment_ofs,int p_light_ofs) {
|
void Shader::set_code( const String& p_vertex, const String& p_fragment, const String& p_light,int p_fragment_ofs,int p_light_ofs) {
|
||||||
@ -203,6 +203,7 @@ void Shader::_bind_methods() {
|
|||||||
|
|
||||||
Shader::Shader(Mode p_mode) {
|
Shader::Shader(Mode p_mode) {
|
||||||
|
|
||||||
|
mode=p_mode;
|
||||||
shader = VisualServer::get_singleton()->shader_create(VS::ShaderMode(p_mode));
|
shader = VisualServer::get_singleton()->shader_create(VS::ShaderMode(p_mode));
|
||||||
params_cache_dirty=true;
|
params_cache_dirty=true;
|
||||||
}
|
}
|
||||||
|
@ -37,8 +37,18 @@ class Shader : public Resource {
|
|||||||
OBJ_TYPE(Shader,Resource);
|
OBJ_TYPE(Shader,Resource);
|
||||||
OBJ_SAVE_TYPE( Shader );
|
OBJ_SAVE_TYPE( Shader );
|
||||||
RES_BASE_EXTENSION("shd");
|
RES_BASE_EXTENSION("shd");
|
||||||
RID shader;
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum Mode {
|
||||||
|
|
||||||
|
MODE_MATERIAL,
|
||||||
|
MODE_CANVAS_ITEM,
|
||||||
|
MODE_POST_PROCESS,
|
||||||
|
MODE_MAX
|
||||||
|
};
|
||||||
|
private:
|
||||||
|
RID shader;
|
||||||
|
Mode mode;
|
||||||
Dictionary _get_code();
|
Dictionary _get_code();
|
||||||
void _set_code(const Dictionary& p_string);
|
void _set_code(const Dictionary& p_string);
|
||||||
|
|
||||||
@ -55,15 +65,10 @@ class Shader : public Resource {
|
|||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
public:
|
public:
|
||||||
enum Mode {
|
|
||||||
|
|
||||||
MODE_MATERIAL,
|
|
||||||
MODE_CANVAS_ITEM,
|
|
||||||
MODE_POST_PROCESS,
|
|
||||||
MODE_MAX
|
|
||||||
};
|
|
||||||
|
|
||||||
//void set_mode(Mode p_mode);
|
//void set_mode(Mode p_mode);
|
||||||
Mode get_mode() const;
|
Mode get_mode() const;
|
||||||
|
@ -7358,7 +7358,7 @@ void VisualServerRaster::_draw_cursors_and_margins() {
|
|||||||
rasterizer->canvas_end_rect();
|
rasterizer->canvas_end_rect();
|
||||||
};
|
};
|
||||||
|
|
||||||
void VisualServerRaster::flush() {
|
void VisualServerRaster::sync() {
|
||||||
//do none
|
//do none
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1237,7 +1237,7 @@ public:
|
|||||||
/* EVENT QUEUING */
|
/* EVENT QUEUING */
|
||||||
|
|
||||||
virtual void draw();
|
virtual void draw();
|
||||||
virtual void flush();
|
virtual void sync();
|
||||||
|
|
||||||
virtual void init();
|
virtual void init();
|
||||||
virtual void finish();
|
virtual void finish();
|
||||||
|
@ -96,16 +96,19 @@ void VisualServerWrapMT::thread_loop() {
|
|||||||
|
|
||||||
/* EVENT QUEUING */
|
/* EVENT QUEUING */
|
||||||
|
|
||||||
void VisualServerWrapMT::flush() {
|
void VisualServerWrapMT::sync() {
|
||||||
|
|
||||||
if (create_thread) {
|
if (create_thread) {
|
||||||
|
|
||||||
|
/* TODO: sync with the thread */
|
||||||
|
|
||||||
|
/*
|
||||||
ERR_FAIL_COND(!draw_mutex);
|
ERR_FAIL_COND(!draw_mutex);
|
||||||
draw_mutex->lock();
|
draw_mutex->lock();
|
||||||
draw_pending++; //cambiar por un saferefcount
|
draw_pending++; //cambiar por un saferefcount
|
||||||
draw_mutex->unlock();
|
draw_mutex->unlock();
|
||||||
|
*/
|
||||||
command_queue.push( this, &VisualServerWrapMT::thread_flush);
|
//command_queue.push( this, &VisualServerWrapMT::thread_flush);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
command_queue.flush_all(); //flush all pending from other threads
|
command_queue.flush_all(); //flush all pending from other threads
|
||||||
@ -118,15 +121,16 @@ void VisualServerWrapMT::draw() {
|
|||||||
|
|
||||||
if (create_thread) {
|
if (create_thread) {
|
||||||
|
|
||||||
|
/* TODO: Make it draw
|
||||||
ERR_FAIL_COND(!draw_mutex);
|
ERR_FAIL_COND(!draw_mutex);
|
||||||
draw_mutex->lock();
|
draw_mutex->lock();
|
||||||
draw_pending++; //cambiar por un saferefcount
|
draw_pending++; //cambiar por un saferefcount
|
||||||
draw_mutex->unlock();
|
draw_mutex->unlock();
|
||||||
|
|
||||||
command_queue.push( this, &VisualServerWrapMT::thread_draw);
|
command_queue.push( this, &VisualServerWrapMT::thread_draw);
|
||||||
|
*/
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
command_queue.flush_all(); //flush all pending from other threads
|
|
||||||
visual_server->draw();
|
visual_server->draw();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -681,7 +681,7 @@ public:
|
|||||||
virtual void init();
|
virtual void init();
|
||||||
virtual void finish();
|
virtual void finish();
|
||||||
virtual void draw();
|
virtual void draw();
|
||||||
virtual void flush();
|
virtual void sync();
|
||||||
FUNC0RC(bool,has_changed);
|
FUNC0RC(bool,has_changed);
|
||||||
|
|
||||||
/* RENDER INFO */
|
/* RENDER INFO */
|
||||||
|
@ -554,7 +554,7 @@ void VisualServer::_bind_methods() {
|
|||||||
ObjectTypeDB::bind_method(_MD("mesh_add_surface_from_planes"),&VisualServer::mesh_add_surface_from_planes);
|
ObjectTypeDB::bind_method(_MD("mesh_add_surface_from_planes"),&VisualServer::mesh_add_surface_from_planes);
|
||||||
|
|
||||||
ObjectTypeDB::bind_method(_MD("draw"),&VisualServer::draw);
|
ObjectTypeDB::bind_method(_MD("draw"),&VisualServer::draw);
|
||||||
ObjectTypeDB::bind_method(_MD("flush"),&VisualServer::flush);
|
ObjectTypeDB::bind_method(_MD("sync"),&VisualServer::sync);
|
||||||
ObjectTypeDB::bind_method(_MD("free"),&VisualServer::free);
|
ObjectTypeDB::bind_method(_MD("free"),&VisualServer::free);
|
||||||
|
|
||||||
ObjectTypeDB::bind_method(_MD("set_default_clear_color"),&VisualServer::set_default_clear_color);
|
ObjectTypeDB::bind_method(_MD("set_default_clear_color"),&VisualServer::set_default_clear_color);
|
||||||
|
@ -1097,7 +1097,7 @@ public:
|
|||||||
/* EVENT QUEUING */
|
/* EVENT QUEUING */
|
||||||
|
|
||||||
virtual void draw()=0;
|
virtual void draw()=0;
|
||||||
virtual void flush()=0;
|
virtual void sync()=0;
|
||||||
virtual bool has_changed() const=0;
|
virtual bool has_changed() const=0;
|
||||||
virtual void init()=0;
|
virtual void init()=0;
|
||||||
virtual void finish()=0;
|
virtual void finish()=0;
|
||||||
|
@ -348,7 +348,6 @@ void EditorFileDialog::_push_history() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorFileDialog::_item_dc_selected(int p_item) {
|
void EditorFileDialog::_item_dc_selected(int p_item) {
|
||||||
|
|
||||||
|
|
||||||
@ -672,7 +671,7 @@ void EditorFileDialog::set_current_dir(const String& p_dir) {
|
|||||||
dir_access->change_dir(p_dir);
|
dir_access->change_dir(p_dir);
|
||||||
update_dir();
|
update_dir();
|
||||||
invalidate();
|
invalidate();
|
||||||
_push_history();
|
//_push_history();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -852,8 +851,8 @@ void EditorFileDialog::_favorite_move_up(){
|
|||||||
if (current>0 && current<favorites->get_item_count()) {
|
if (current>0 && current<favorites->get_item_count()) {
|
||||||
Vector<String> favorited = EditorSettings::get_singleton()->get_favorite_dirs();
|
Vector<String> favorited = EditorSettings::get_singleton()->get_favorite_dirs();
|
||||||
|
|
||||||
int a_idx=favorited.find(favorites->get_item_metadata(current-1));
|
int a_idx=favorited.find(String(favorites->get_item_metadata(current-1)));
|
||||||
int b_idx=favorited.find(favorites->get_item_metadata(current));
|
int b_idx=favorited.find(String(favorites->get_item_metadata(current)));
|
||||||
|
|
||||||
if (a_idx==-1 || b_idx==-1)
|
if (a_idx==-1 || b_idx==-1)
|
||||||
return;
|
return;
|
||||||
@ -873,8 +872,8 @@ void EditorFileDialog::_favorite_move_down(){
|
|||||||
if (current>=0 && current<favorites->get_item_count()-1) {
|
if (current>=0 && current<favorites->get_item_count()-1) {
|
||||||
Vector<String> favorited = EditorSettings::get_singleton()->get_favorite_dirs();
|
Vector<String> favorited = EditorSettings::get_singleton()->get_favorite_dirs();
|
||||||
|
|
||||||
int a_idx=favorited.find(favorites->get_item_metadata(current+1));
|
int a_idx=favorited.find(String(favorites->get_item_metadata(current+1)));
|
||||||
int b_idx=favorited.find(favorites->get_item_metadata(current));
|
int b_idx=favorited.find(String(favorites->get_item_metadata(current)));
|
||||||
|
|
||||||
if (a_idx==-1 || b_idx==-1)
|
if (a_idx==-1 || b_idx==-1)
|
||||||
return;
|
return;
|
||||||
@ -1143,6 +1142,7 @@ EditorFileDialog::EditorFileDialog() {
|
|||||||
|
|
||||||
show_hidden_files=true;
|
show_hidden_files=true;
|
||||||
display_mode=DISPLAY_THUMBNAILS;
|
display_mode=DISPLAY_THUMBNAILS;
|
||||||
|
local_history_pos=0;
|
||||||
|
|
||||||
VBoxContainer *vbc = memnew( VBoxContainer );
|
VBoxContainer *vbc = memnew( VBoxContainer );
|
||||||
add_child(vbc);
|
add_child(vbc);
|
||||||
|
@ -98,7 +98,7 @@ void EditorResourcePreview::_thread() {
|
|||||||
|
|
||||||
if (queue.size()) {
|
if (queue.size()) {
|
||||||
|
|
||||||
//print_line("pop from queue");
|
|
||||||
|
|
||||||
QueueItem item = queue.front()->get();
|
QueueItem item = queue.front()->get();
|
||||||
queue.pop_front();
|
queue.pop_front();
|
||||||
@ -106,6 +106,7 @@ void EditorResourcePreview::_thread() {
|
|||||||
|
|
||||||
Ref<Texture> texture;
|
Ref<Texture> texture;
|
||||||
|
|
||||||
|
//print_line("pop from queue "+item.path);
|
||||||
|
|
||||||
uint64_t modtime = FileAccess::get_modified_time(item.path);
|
uint64_t modtime = FileAccess::get_modified_time(item.path);
|
||||||
int thumbnail_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size");
|
int thumbnail_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size");
|
||||||
@ -206,7 +207,7 @@ void EditorResourcePreview::queue_resource_preview(const String& p_path, Object*
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//print_line("send to thread");
|
//print_line("send to thread "+p_path);
|
||||||
QueueItem item;
|
QueueItem item;
|
||||||
item.function=p_receiver_func;
|
item.function=p_receiver_func;
|
||||||
item.id=p_receiver->get_instance_ID();
|
item.id=p_receiver->get_instance_ID();
|
||||||
|
@ -600,9 +600,9 @@ EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin*
|
|||||||
file_select->set_access(EditorFileDialog::ACCESS_FILESYSTEM);
|
file_select->set_access(EditorFileDialog::ACCESS_FILESYSTEM);
|
||||||
add_child(file_select);
|
add_child(file_select);
|
||||||
if (!large)
|
if (!large)
|
||||||
file_select->set_mode(FileDialog::MODE_OPEN_FILES);
|
file_select->set_mode(EditorFileDialog::MODE_OPEN_FILES);
|
||||||
else
|
else
|
||||||
file_select->set_mode(FileDialog::MODE_OPEN_FILE);
|
file_select->set_mode(EditorFileDialog::MODE_OPEN_FILE);
|
||||||
file_select->connect("files_selected", this,"_choose_files");
|
file_select->connect("files_selected", this,"_choose_files");
|
||||||
file_select->connect("file_selected", this,"_choose_file");
|
file_select->connect("file_selected", this,"_choose_file");
|
||||||
|
|
||||||
|
@ -380,6 +380,7 @@ void CollisionPolygon2DEditor::_bind_methods() {
|
|||||||
|
|
||||||
CollisionPolygon2DEditor::CollisionPolygon2DEditor(EditorNode *p_editor) {
|
CollisionPolygon2DEditor::CollisionPolygon2DEditor(EditorNode *p_editor) {
|
||||||
|
|
||||||
|
node=NULL;
|
||||||
canvas_item_editor=NULL;
|
canvas_item_editor=NULL;
|
||||||
editor=p_editor;
|
editor=p_editor;
|
||||||
undo_redo = editor->get_undo_redo();
|
undo_redo = editor->get_undo_redo();
|
||||||
|
@ -533,6 +533,7 @@ void CollisionPolygonEditor::_bind_methods() {
|
|||||||
CollisionPolygonEditor::CollisionPolygonEditor(EditorNode *p_editor) {
|
CollisionPolygonEditor::CollisionPolygonEditor(EditorNode *p_editor) {
|
||||||
|
|
||||||
|
|
||||||
|
node=NULL;
|
||||||
editor=p_editor;
|
editor=p_editor;
|
||||||
undo_redo = editor->get_undo_redo();
|
undo_redo = editor->get_undo_redo();
|
||||||
|
|
||||||
|
@ -63,14 +63,15 @@ EditorTexturePreviewPlugin::EditorTexturePreviewPlugin() {
|
|||||||
|
|
||||||
Ref<Texture> EditorPackedScenePreviewPlugin::_gen_from_imd(Ref<ResourceImportMetadata> p_imd) {
|
Ref<Texture> EditorPackedScenePreviewPlugin::_gen_from_imd(Ref<ResourceImportMetadata> p_imd) {
|
||||||
|
|
||||||
if (p_imd.is_null())
|
if (p_imd.is_null()) {
|
||||||
return Ref<Texture>();
|
return Ref<Texture>();
|
||||||
|
}
|
||||||
|
|
||||||
if (!p_imd->has_option("thumbnail"))
|
if (!p_imd->has_option("thumbnail"))
|
||||||
return Ref<Texture>();
|
return Ref<Texture>();
|
||||||
|
|
||||||
Variant tn = p_imd->get_option("thumbnail");
|
Variant tn = p_imd->get_option("thumbnail");
|
||||||
print_line(Variant::get_type_name(tn.get_type()));
|
//print_line(Variant::get_type_name(tn.get_type()));
|
||||||
DVector<uint8_t> thumbnail = tn;
|
DVector<uint8_t> thumbnail = tn;
|
||||||
|
|
||||||
int len = thumbnail.size();
|
int len = thumbnail.size();
|
||||||
|
@ -411,6 +411,7 @@ void LightOccluder2DEditor::_bind_methods() {
|
|||||||
|
|
||||||
LightOccluder2DEditor::LightOccluder2DEditor(EditorNode *p_editor) {
|
LightOccluder2DEditor::LightOccluder2DEditor(EditorNode *p_editor) {
|
||||||
|
|
||||||
|
node=NULL;
|
||||||
canvas_item_editor=NULL;
|
canvas_item_editor=NULL;
|
||||||
editor=p_editor;
|
editor=p_editor;
|
||||||
undo_redo = editor->get_undo_redo();
|
undo_redo = editor->get_undo_redo();
|
||||||
|
@ -459,7 +459,7 @@ void NavigationPolygonEditor::_bind_methods() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
NavigationPolygonEditor::NavigationPolygonEditor(EditorNode *p_editor) {
|
NavigationPolygonEditor::NavigationPolygonEditor(EditorNode *p_editor) {
|
||||||
|
node=NULL;
|
||||||
canvas_item_editor=NULL;
|
canvas_item_editor=NULL;
|
||||||
editor=p_editor;
|
editor=p_editor;
|
||||||
undo_redo = editor->get_undo_redo();
|
undo_redo = editor->get_undo_redo();
|
||||||
|
@ -2216,6 +2216,14 @@ void SpatialEditorViewport::reset() {
|
|||||||
|
|
||||||
SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, EditorNode *p_editor, int p_index) {
|
SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, EditorNode *p_editor, int p_index) {
|
||||||
|
|
||||||
|
_edit.mode=TRANSFORM_NONE;
|
||||||
|
_edit.plane=TRANSFORM_VIEW;
|
||||||
|
_edit.edited_gizmo=0;
|
||||||
|
_edit.snap=1;
|
||||||
|
_edit.gizmo_handle=0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
index=p_index;
|
index=p_index;
|
||||||
editor=p_editor;
|
editor=p_editor;
|
||||||
editor_selection=editor->get_editor_selection();;
|
editor_selection=editor->get_editor_selection();;
|
||||||
@ -3615,6 +3623,8 @@ void SpatialEditor::_default_light_angle_input(const InputEvent& p_event) {
|
|||||||
|
|
||||||
SpatialEditor::SpatialEditor(EditorNode *p_editor) {
|
SpatialEditor::SpatialEditor(EditorNode *p_editor) {
|
||||||
|
|
||||||
|
gizmo.visible=true;
|
||||||
|
gizmo.scale=1.0;
|
||||||
|
|
||||||
viewport_environment = Ref<Environment>( memnew( Environment ) );
|
viewport_environment = Ref<Environment>( memnew( Environment ) );
|
||||||
undo_redo=p_editor->get_undo_redo();
|
undo_redo=p_editor->get_undo_redo();
|
||||||
|
Loading…
Reference in New Issue
Block a user