diff options
| author | Juan Linietsky | 2016-05-27 14:18:40 -0300 |
|---|---|---|
| committer | Juan Linietsky | 2016-05-27 14:19:11 -0300 |
| commit | 8be2fabbe5cd846bac5e5a38e55f3fb70e73f2da (patch) | |
| tree | a3e932282cdafdd13c4f02bdf21f72f9846adcbe /servers | |
| parent | eb7227a20b27e91c6e2adfb1ded738f2dd7e453b (diff) | |
| download | godot-8be2fabbe5cd846bac5e5a38e55f3fb70e73f2da.tar.gz godot-8be2fabbe5cd846bac5e5a38e55f3fb70e73f2da.tar.zst godot-8be2fabbe5cd846bac5e5a38e55f3fb70e73f2da.zip | |
Changed import workflow
-Rearrange favorites in fs dock with drag and drop
-Removed import -> sub-scene, moved to scenetree contextual menu
-Removed import -> re-import , moved and integrated to FS dock
-Added ability in FS dock to re-import more than one resource
simultaneously
-Added ability to drag from native filesystem explorer to Godot, only
works on Windows though
-Removed scene reimport merge options, never worked well. Eventually
merging materials should be re-added
-Added ability to set custom root node type when importing scenes
-Re-Import is now automatic, can be configured back to manual in editor
settings
-Added resource previews in property list for many resource types
Diffstat (limited to 'servers')
| -rw-r--r-- | servers/visual/rasterizer.h | 1 | ||||
| -rw-r--r-- | servers/visual/visual_server_raster.cpp | 33 | ||||
| -rw-r--r-- | servers/visual/visual_server_raster.h | 10 | ||||
| -rw-r--r-- | servers/visual/visual_server_wrap_mt.h | 2 | ||||
| -rw-r--r-- | servers/visual_server.h | 2 |
5 files changed, 42 insertions, 6 deletions
diff --git a/servers/visual/rasterizer.h b/servers/visual/rasterizer.h index e3d1b1483..f1ad68587 100644 --- a/servers/visual/rasterizer.h +++ b/servers/visual/rasterizer.h @@ -542,6 +542,7 @@ public: RID skeleton; RID material_override; RID sampled_light; + Vector<RID> materials; Vector<RID> light_instances; Vector<float> morph_values; BakedLightData *baked_light; diff --git a/servers/visual/visual_server_raster.cpp b/servers/visual/visual_server_raster.cpp index 6b5f1ba35..b3721268b 100644 --- a/servers/visual/visual_server_raster.cpp +++ b/servers/visual/visual_server_raster.cpp @@ -398,7 +398,7 @@ void VisualServerRaster::mesh_add_custom_surface(RID p_mesh,const Variant& p_dat void VisualServerRaster::mesh_add_surface(RID p_mesh,PrimitiveType p_primitive,const Array& p_arrays,const Array& p_blend_shapes,bool p_alpha_sort) { VS_CHANGED; - _dependency_queue_update(p_mesh,true); + _dependency_queue_update(p_mesh,true,true); rasterizer->mesh_add_surface(p_mesh,p_primitive,p_arrays,p_blend_shapes,p_alpha_sort); } @@ -452,6 +452,7 @@ VisualServer::PrimitiveType VisualServerRaster::mesh_surface_get_primitive_type( void VisualServerRaster::mesh_remove_surface(RID p_mesh,int p_surface){ rasterizer->mesh_remove_surface(p_mesh,p_surface); + _dependency_queue_update(p_mesh,true,true); } int VisualServerRaster::mesh_get_surface_count(RID p_mesh) const{ @@ -480,6 +481,8 @@ void VisualServerRaster::mesh_clear(RID p_mesh) { while(rasterizer->mesh_get_surface_count(p_mesh)) { rasterizer->mesh_remove_surface(p_mesh,0); } + + _dependency_queue_update(p_mesh,true,true); } @@ -2038,7 +2041,7 @@ Variant VisualServerRaster::environment_fx_get_param(RID p_env,EnvironmentFxPara /* SCENARIO API */ -void VisualServerRaster::_dependency_queue_update(RID p_rid,bool p_update_aabb) { +void VisualServerRaster::_dependency_queue_update(RID p_rid,bool p_update_aabb,bool p_update_materials) { Map< RID, Set<RID> >::Element * E = instance_dependency_map.find( p_rid ); @@ -2051,17 +2054,19 @@ void VisualServerRaster::_dependency_queue_update(RID p_rid,bool p_update_aabb) while(I) { Instance *ins = instance_owner.get( I->get() ); - _instance_queue_update( ins , p_update_aabb ); + _instance_queue_update( ins , p_update_aabb, p_update_materials ); I = I->next(); } } -void VisualServerRaster::_instance_queue_update(Instance *p_instance,bool p_update_aabb) { +void VisualServerRaster::_instance_queue_update(Instance *p_instance,bool p_update_aabb,bool p_update_materials) { if (p_update_aabb) p_instance->update_aabb=true; + if (p_update_materials) + p_instance->update_materials=true; if (p_instance->update) return; @@ -2273,6 +2278,7 @@ void VisualServerRaster::instance_set_base(RID p_instance, RID p_base) { } instance->data.morph_values.clear(); + instance->data.materials.clear(); } @@ -2286,6 +2292,7 @@ void VisualServerRaster::instance_set_base(RID p_instance, RID p_base) { if (rasterizer->is_mesh(p_base)) { instance->base_type=INSTANCE_MESH; instance->data.morph_values.resize( rasterizer->mesh_get_morph_target_count(p_base)); + instance->data.materials.resize( rasterizer->mesh_get_surface_count(p_base)); } else if (rasterizer->is_multimesh(p_base)) { instance->base_type=INSTANCE_MULTIMESH; } else if (rasterizer->is_immediate(p_base)) { @@ -2510,6 +2517,16 @@ float VisualServerRaster::instance_get_morph_target_weight(RID p_instance,int p_ return instance->data.morph_values[p_shape]; } +void VisualServerRaster::instance_set_surface_material(RID p_instance,int p_surface, RID p_material) { + + VS_CHANGED; + Instance *instance = instance_owner.get( p_instance ); + ERR_FAIL_COND( !instance); + ERR_FAIL_INDEX( p_surface, instance->data.materials.size() ); + instance->data.materials[p_surface]=p_material; +} + + void VisualServerRaster::instance_set_transform(RID p_instance, const Transform& p_transform) { VS_CHANGED; Instance *instance = instance_owner.get( p_instance ); @@ -3046,6 +3063,7 @@ void VisualServerRaster::_update_instance(Instance *p_instance) { } + if (p_instance->aabb.has_no_surface()) return; @@ -3301,10 +3319,17 @@ void VisualServerRaster::_update_instances() { if (instance->update_aabb) _update_instance_aabb(instance); + if (instance->update_materials) { + if (instance->base_type==INSTANCE_MESH) { + instance->data.materials.resize(rasterizer->mesh_get_surface_count(instance->base_rid)); + } + } + _update_instance(instance); instance->update=false; instance->update_aabb=false; + instance->update_materials=false; instance->update_next=0; } } diff --git a/servers/visual/visual_server_raster.h b/servers/visual/visual_server_raster.h index 5abad863e..39ea2f55e 100644 --- a/servers/visual/visual_server_raster.h +++ b/servers/visual/visual_server_raster.h @@ -160,6 +160,7 @@ class VisualServerRaster : public VisualServer { Scenario *scenario; bool update; bool update_aabb; + bool update_materials; Instance *update_next; InstanceType base_type; @@ -317,6 +318,8 @@ class VisualServerRaster : public VisualServer { draw_range_end=0; extra_margin=0; visible_in_all_rooms=false; + update_aabb=false; + update_materials=false; baked_light=NULL; baked_light_info=NULL; @@ -583,8 +586,8 @@ class VisualServerRaster : public VisualServer { void _portal_disconnect(Instance *p_portal,bool p_cleanup=false); void _portal_attempt_connect(Instance *p_portal); - void _dependency_queue_update(RID p_rid,bool p_update_aabb=false); - _FORCE_INLINE_ void _instance_queue_update(Instance *p_instance,bool p_update_aabb=false); + void _dependency_queue_update(RID p_rid, bool p_update_aabb=false, bool p_update_materials=false); + _FORCE_INLINE_ void _instance_queue_update(Instance *p_instance,bool p_update_aabb=false,bool p_update_materials=false); void _update_instances(); void _update_instance_aabb(Instance *p_instance); void _update_instance(Instance *p_instance); @@ -1083,6 +1086,9 @@ public: virtual void instance_set_morph_target_weight(RID p_instance,int p_shape, float p_weight); virtual float instance_get_morph_target_weight(RID p_instance,int p_shape) const; + virtual void instance_set_surface_material(RID p_instance,int p_surface, RID p_material); + + virtual void instance_set_transform(RID p_instance, const Transform& p_transform); virtual Transform instance_get_transform(RID p_instance) const; diff --git a/servers/visual/visual_server_wrap_mt.h b/servers/visual/visual_server_wrap_mt.h index 6a42fcc8a..80cf43d57 100644 --- a/servers/visual/visual_server_wrap_mt.h +++ b/servers/visual/visual_server_wrap_mt.h @@ -525,6 +525,8 @@ public: FUNC3(instance_set_morph_target_weight,RID,int, float); FUNC2RC(float,instance_get_morph_target_weight,RID,int); + FUNC3(instance_set_surface_material,RID,int, RID); + FUNC2(instance_set_transform,RID, const Transform&); FUNC1RC(Transform,instance_get_transform,RID); diff --git a/servers/visual_server.h b/servers/visual_server.h index 750c090bb..f32e976b5 100644 --- a/servers/visual_server.h +++ b/servers/visual_server.h @@ -919,6 +919,8 @@ public: virtual void instance_set_morph_target_weight(RID p_instance,int p_shape, float p_weight)=0; virtual float instance_get_morph_target_weight(RID p_instance,int p_shape) const=0; + virtual void instance_set_surface_material(RID p_instance,int p_surface, RID p_material)=0; + virtual void instance_attach_skeleton(RID p_instance,RID p_skeleton)=0; virtual RID instance_get_skeleton(RID p_instance) const=0; |
