diff options
-rw-r--r-- | doc/base/classes.xml | 604 | ||||
-rw-r--r-- | drivers/gles3/rasterizer_storage_gles3.cpp | 19 | ||||
-rw-r--r-- | drivers/gles3/rasterizer_storage_gles3.h | 3 | ||||
-rw-r--r-- | modules/etc/image_etc.cpp | 2 | ||||
-rw-r--r-- | scene/resources/primitive_meshes.cpp | 45 | ||||
-rw-r--r-- | servers/visual/rasterizer.h | 3 | ||||
-rw-r--r-- | servers/visual/visual_server_scene.cpp | 30 |
7 files changed, 569 insertions, 137 deletions
diff --git a/doc/base/classes.xml b/doc/base/classes.xml index f740f7fe90..2331d49c1f 100644 --- a/doc/base/classes.xml +++ b/doc/base/classes.xml @@ -8884,6 +8884,74 @@ <constants> </constants> </class> +<class name="CapsuleMesh" inherits="PrimitiveMesh" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_mid_height" qualifiers="const"> + <return type="float"> + </return> + <description> + </description> + </method> + <method name="get_radial_segments" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_radius" qualifiers="const"> + <return type="float"> + </return> + <description> + </description> + </method> + <method name="get_rings" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="set_mid_height"> + <argument index="0" name="mid_height" type="float"> + </argument> + <description> + </description> + </method> + <method name="set_radial_segments"> + <argument index="0" name="segments" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_radius"> + <argument index="0" name="radius" type="float"> + </argument> + <description> + </description> + </method> + <method name="set_rings"> + <argument index="0" name="rings" type="int"> + </argument> + <description> + </description> + </method> + </methods> + <members> + <member name="mid_height" type="float" setter="set_mid_height" getter="get_mid_height" brief=""> + </member> + <member name="radial_segments" type="int" setter="set_radial_segments" getter="get_radial_segments" brief=""> + </member> + <member name="radius" type="float" setter="set_radius" getter="get_radius" brief=""> + </member> + <member name="rings" type="int" setter="set_rings" getter="get_rings" brief=""> + </member> + </members> + <constants> + </constants> +</class> <class name="CapsuleShape" inherits="Shape" category="Core"> <brief_description> Capsule shape resource. @@ -11560,6 +11628,74 @@ </constant> </constants> </class> +<class name="CubeMesh" inherits="PrimitiveMesh" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_size" qualifiers="const"> + <return type="Vector3"> + </return> + <description> + </description> + </method> + <method name="get_subdivide_depth" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_subdivide_height" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_subdivide_width" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="set_size"> + <argument index="0" name="size" type="Vector3"> + </argument> + <description> + </description> + </method> + <method name="set_subdivide_depth"> + <argument index="0" name="divisions" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_subdivide_height"> + <argument index="0" name="divisions" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_subdivide_width"> + <argument index="0" name="subdivide" type="int"> + </argument> + <description> + </description> + </method> + </methods> + <members> + <member name="size" type="Vector2" setter="set_size" getter="get_size" brief=""> + </member> + <member name="subdivide_depth" type="int" setter="set_subdivide_depth" getter="get_subdivide_depth" brief=""> + </member> + <member name="subdivide_height" type="int" setter="set_subdivide_height" getter="get_subdivide_height" brief=""> + </member> + <member name="subdivide_width" type="int" setter="set_subdivide_width" getter="get_subdivide_width" brief=""> + </member> + </members> + <constants> + </constants> +</class> <class name="Curve2D" inherits="Resource" category="Core"> <brief_description> Describes a Bezier curve in 2D space. @@ -12010,6 +12146,88 @@ <constants> </constants> </class> +<class name="CylinderMesh" inherits="PrimitiveMesh" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_bottom_radius" qualifiers="const"> + <return type="float"> + </return> + <description> + </description> + </method> + <method name="get_height" qualifiers="const"> + <return type="float"> + </return> + <description> + </description> + </method> + <method name="get_radial_segments" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_rings" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_top_radius" qualifiers="const"> + <return type="float"> + </return> + <description> + </description> + </method> + <method name="set_bottom_radius"> + <argument index="0" name="radius" type="float"> + </argument> + <description> + </description> + </method> + <method name="set_height"> + <argument index="0" name="height" type="float"> + </argument> + <description> + </description> + </method> + <method name="set_radial_segments"> + <argument index="0" name="segments" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_rings"> + <argument index="0" name="rings" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_top_radius"> + <argument index="0" name="radius" type="float"> + </argument> + <description> + </description> + </method> + </methods> + <members> + <member name="bottom_radius" type="float" setter="set_bottom_radius" getter="get_bottom_radius" brief=""> + </member> + <member name="height" type="float" setter="set_height" getter="get_height" brief=""> + </member> + <member name="radial_segments" type="int" setter="set_radial_segments" getter="get_radial_segments" brief=""> + </member> + <member name="rings" type="int" setter="set_rings" getter="get_rings" brief=""> + </member> + <member name="top_radius" type="float" setter="set_top_radius" getter="get_top_radius" brief=""> + </member> + </members> + <constants> + </constants> +</class> <class name="DampedSpringJoint2D" inherits="Joint2D" category="Core"> <brief_description> Damped spring constraint for 2D physics. @@ -14108,19 +14326,19 @@ <description> </description> </method> - <method name="get_ssr_accel" qualifiers="const"> + <method name="get_ssr_depth_tolerance" qualifiers="const"> <return type="float"> </return> <description> </description> </method> - <method name="get_ssr_depth_tolerance" qualifiers="const"> + <method name="get_ssr_fade_in" qualifiers="const"> <return type="float"> </return> <description> </description> </method> - <method name="get_ssr_fade" qualifiers="const"> + <method name="get_ssr_fade_out" qualifiers="const"> <return type="float"> </return> <description> @@ -14266,12 +14484,6 @@ <description> </description> </method> - <method name="is_ssr_smooth" qualifiers="const"> - <return type="bool"> - </return> - <description> - </description> - </method> <method name="set_adjustment_brightness"> <argument index="0" name="brightness" type="float"> </argument> @@ -14604,12 +14816,6 @@ <description> </description> </method> - <method name="set_ssr_accel"> - <argument index="0" name="accel" type="float"> - </argument> - <description> - </description> - </method> <method name="set_ssr_depth_tolerance"> <argument index="0" name="depth_tolerance" type="float"> </argument> @@ -14622,26 +14828,26 @@ <description> </description> </method> - <method name="set_ssr_fade"> - <argument index="0" name="fade" type="float"> + <method name="set_ssr_fade_in"> + <argument index="0" name="fade_in" type="float"> </argument> <description> </description> </method> - <method name="set_ssr_max_steps"> - <argument index="0" name="max_steps" type="int"> + <method name="set_ssr_fade_out"> + <argument index="0" name="fade_out" type="float"> </argument> <description> </description> </method> - <method name="set_ssr_rough"> - <argument index="0" name="rough" type="bool"> + <method name="set_ssr_max_steps"> + <argument index="0" name="max_steps" type="int"> </argument> <description> </description> </method> - <method name="set_ssr_smooth"> - <argument index="0" name="smooth" type="bool"> + <method name="set_ssr_rough"> + <argument index="0" name="rough" type="bool"> </argument> <description> </description> @@ -14810,15 +15016,13 @@ </member> <member name="glow_strength" type="float" setter="set_glow_strength" getter="get_glow_strength" brief=""> </member> - <member name="ss_reflections_accel" type="float" setter="set_ssr_accel" getter="get_ssr_accel" brief=""> - </member> - <member name="ss_reflections_accel_smooth" type="bool" setter="set_ssr_smooth" getter="is_ssr_smooth" brief=""> - </member> <member name="ss_reflections_depth_tolerance" type="float" setter="set_ssr_depth_tolerance" getter="get_ssr_depth_tolerance" brief=""> </member> <member name="ss_reflections_enabled" type="bool" setter="set_ssr_enabled" getter="is_ssr_enabled" brief=""> </member> - <member name="ss_reflections_fade" type="float" setter="set_ssr_fade" getter="get_ssr_fade" brief=""> + <member name="ss_reflections_fade_in" type="float" setter="set_ssr_fade_in" getter="get_ssr_fade_in" brief=""> + </member> + <member name="ss_reflections_fade_out" type="float" setter="set_ssr_fade_out" getter="get_ssr_fade_out" brief=""> </member> <member name="ss_reflections_max_steps" type="int" setter="set_ssr_max_steps" getter="get_ssr_max_steps" brief=""> </member> @@ -18765,7 +18969,7 @@ </return> <argument index="0" name="mode" type="int"> </argument> - <argument index="1" name="arg1" type="bool"> + <argument index="1" name="arg1" type="int"> </argument> <argument index="2" name="arg2" type="float"> </argument> @@ -18882,7 +19086,7 @@ <description> </description> </method> - <method name="get_pixel"> + <method name="get_pixel" qualifiers="const"> <return type="Color"> </return> <argument index="0" name="x" type="int"> @@ -19111,6 +19315,12 @@ </constant> <constant name="COMPRESS_ETC2" value="4"> </constant> + <constant name="COMPRESS_SOURCE_GENERIC" value="0"> + </constant> + <constant name="COMPRESS_SOURCE_SRGB" value="1"> + </constant> + <constant name="COMPRESS_SOURCE_NORMAL" value="2"> + </constant> </constants> </class> <class name="ImageTexture" inherits="Texture" category="Core"> @@ -33142,6 +33352,60 @@ <constants> </constants> </class> +<class name="PlaneMesh" inherits="PrimitiveMesh" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_size" qualifiers="const"> + <return type="Vector2"> + </return> + <description> + </description> + </method> + <method name="get_subdivide_depth" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_subdivide_width" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="set_size"> + <argument index="0" name="size" type="Vector2"> + </argument> + <description> + </description> + </method> + <method name="set_subdivide_depth"> + <argument index="0" name="subdivide" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_subdivide_width"> + <argument index="0" name="subdivide" type="int"> + </argument> + <description> + </description> + </method> + </methods> + <members> + <member name="size" type="Vector2" setter="set_size" getter="get_size" brief=""> + </member> + <member name="subdivide_depth" type="int" setter="set_subdivide_depth" getter="get_subdivide_depth" brief=""> + </member> + <member name="subdivide_width" type="int" setter="set_subdivide_width" getter="get_subdivide_width" brief=""> + </member> + </members> + <constants> + </constants> +</class> <class name="PlaneShape" inherits="Shape" category="Core"> <brief_description> </brief_description> @@ -34729,6 +34993,114 @@ <constants> </constants> </class> +<class name="PrimitiveMesh" inherits="Mesh" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_material" qualifiers="const"> + <return type="Material"> + </return> + <description> + </description> + </method> + <method name="set_material"> + <argument index="0" name="material" type="Material"> + </argument> + <description> + </description> + </method> + </methods> + <members> + <member name="material" type="Material" setter="set_material" getter="get_material" brief=""> + </member> + </members> + <constants> + </constants> +</class> +<class name="PrismMesh" inherits="PrimitiveMesh" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_left_to_right" qualifiers="const"> + <return type="float"> + </return> + <description> + </description> + </method> + <method name="get_size" qualifiers="const"> + <return type="Vector3"> + </return> + <description> + </description> + </method> + <method name="get_subdivide_depth" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_subdivide_height" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_subdivide_width" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="set_left_to_right"> + <argument index="0" name="left_to_right" type="float"> + </argument> + <description> + </description> + </method> + <method name="set_size"> + <argument index="0" name="size" type="Vector3"> + </argument> + <description> + </description> + </method> + <method name="set_subdivide_depth"> + <argument index="0" name="segments" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_subdivide_height"> + <argument index="0" name="segments" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_subdivide_width"> + <argument index="0" name="segments" type="int"> + </argument> + <description> + </description> + </method> + </methods> + <members> + <member name="left_to_right" type="float" setter="set_left_to_right" getter="get_left_to_right" brief=""> + </member> + <member name="size" type="Vector2" setter="set_size" getter="get_size" brief=""> + </member> + <member name="subdivide_depth" type="int" setter="set_subdivide_depth" getter="get_subdivide_depth" brief=""> + </member> + <member name="subdivide_height" type="int" setter="set_subdivide_height" getter="get_subdivide_height" brief=""> + </member> + <member name="subdivide_width" type="int" setter="set_subdivide_width" getter="get_subdivide_width" brief=""> + </member> + </members> + <constants> + </constants> +</class> <class name="ProceduralSky" inherits="Sky" category="Core"> <brief_description> </brief_description> @@ -35063,71 +35435,13 @@ <constants> </constants> </class> -<class name="Quad" inherits="GeometryInstance" category="Core"> +<class name="QuadMesh" inherits="PrimitiveMesh" category="Core"> <brief_description> </brief_description> <description> </description> <methods> - <method name="get_axis" qualifiers="const"> - <return type="int"> - </return> - <description> - </description> - </method> - <method name="get_offset" qualifiers="const"> - <return type="Vector2"> - </return> - <description> - </description> - </method> - <method name="get_size" qualifiers="const"> - <return type="Vector2"> - </return> - <description> - </description> - </method> - <method name="is_centered" qualifiers="const"> - <return type="bool"> - </return> - <description> - </description> - </method> - <method name="set_axis"> - <argument index="0" name="axis" type="int"> - </argument> - <description> - </description> - </method> - <method name="set_centered"> - <argument index="0" name="centered" type="bool"> - </argument> - <description> - </description> - </method> - <method name="set_offset"> - <argument index="0" name="offset" type="Vector2"> - </argument> - <description> - </description> - </method> - <method name="set_size"> - <argument index="0" name="size" type="Vector2"> - </argument> - <description> - </description> - </method> </methods> - <members> - <member name="axis" type="int" setter="set_axis" getter="get_axis" brief=""> - </member> - <member name="centered" type="bool" setter="set_centered" getter="is_centered" brief=""> - </member> - <member name="offset" type="Vector2" setter="set_offset" getter="get_offset" brief=""> - </member> - <member name="size" type="Vector2" setter="set_size" getter="get_size" brief=""> - </member> - </members> <constants> </constants> </class> @@ -40689,6 +41003,88 @@ </constant> </constants> </class> +<class name="SphereMesh" inherits="PrimitiveMesh" category="Core"> + <brief_description> + </brief_description> + <description> + </description> + <methods> + <method name="get_height" qualifiers="const"> + <return type="float"> + </return> + <description> + </description> + </method> + <method name="get_is_hemisphere" qualifiers="const"> + <return type="bool"> + </return> + <description> + </description> + </method> + <method name="get_radial_segments" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_radius" qualifiers="const"> + <return type="float"> + </return> + <description> + </description> + </method> + <method name="get_rings" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="set_height"> + <argument index="0" name="height" type="float"> + </argument> + <description> + </description> + </method> + <method name="set_is_hemisphere"> + <argument index="0" name="is_hemisphere" type="bool"> + </argument> + <description> + </description> + </method> + <method name="set_radial_segments"> + <argument index="0" name="radial_segments" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_radius"> + <argument index="0" name="radius" type="float"> + </argument> + <description> + </description> + </method> + <method name="set_rings"> + <argument index="0" name="rings" type="int"> + </argument> + <description> + </description> + </method> + </methods> + <members> + <member name="height" type="float" setter="set_height" getter="get_height" brief=""> + </member> + <member name="is_hemisphere" type="bool" setter="set_is_hemisphere" getter="get_is_hemisphere" brief=""> + </member> + <member name="radial_segments" type="int" setter="set_radial_segments" getter="get_radial_segments" brief=""> + </member> + <member name="radius" type="float" setter="set_radius" getter="get_radius" brief=""> + </member> + <member name="rings" type="int" setter="set_rings" getter="get_rings" brief=""> + </member> + </members> + <constants> + </constants> +</class> <class name="SphereShape" inherits="Shape" category="Core"> <brief_description> </brief_description> @@ -43686,6 +44082,12 @@ <description> </description> </signal> + <signal name="tab_hover"> + <argument index="0" name="tab" type="int"> + </argument> + <description> + </description> + </signal> </signals> <constants> <constant name="ALIGN_LEFT" value="0"> @@ -43740,18 +44142,6 @@ </theme_item> </theme_items> </class> -<class name="TestCube" inherits="GeometryInstance" category="Core"> - <brief_description> - A simple cube used for testing in 3D. - </brief_description> - <description> - The TestCube is a simple 2x2x2 cube with a basic texture. It can be used as a placeholder, to verify how the lighting looks, to test shaders, or any other task you may need a textured model to test with. - </description> - <methods> - </methods> - <constants> - </constants> -</class> <class name="TextEdit" inherits="Control" category="Core"> <brief_description> Multiline text editing control. @@ -49092,13 +49482,6 @@ do_property]. <description> </description> </method> - <method name="get_screen_capture" qualifiers="const"> - <return type="Object"> - </return> - <description> - Return the captured screenshot after [method queue_screen_capture]. You might need to check more than one frame until the right image is returned. - </description> - </method> <method name="get_shadow_atlas_quadrant_subdiv" qualifiers="const"> <return type="int"> </return> @@ -49257,11 +49640,6 @@ do_property]. Return whether the viewport is using a world separate from the parent viewport's world. </description> </method> - <method name="queue_screen_capture"> - <description> - Queue a multithreaded screenshot, you can retrive it at a later frame via [method get_screen_capture]. - </description> - </method> <method name="set_as_audio_listener"> <argument index="0" name="enable" type="bool"> </argument> diff --git a/drivers/gles3/rasterizer_storage_gles3.cpp b/drivers/gles3/rasterizer_storage_gles3.cpp index 0da9e38769..509b14a22e 100644 --- a/drivers/gles3/rasterizer_storage_gles3.cpp +++ b/drivers/gles3/rasterizer_storage_gles3.cpp @@ -5258,6 +5258,23 @@ void RasterizerStorageGLES3::particles_set_emission_transform(RID p_particles, c particles->emission_transform = p_transform; } +int RasterizerStorageGLES3::particles_get_draw_passes(RID p_particles) const { + + const Particles *particles = particles_owner.getornull(p_particles); + ERR_FAIL_COND_V(!particles, 0); + + return particles->draw_passes.size(); +} + +RID RasterizerStorageGLES3::particles_get_draw_pass_mesh(RID p_particles, int p_pass) const { + + const Particles *particles = particles_owner.getornull(p_particles); + ERR_FAIL_COND_V(!particles, RID()); + ERR_FAIL_INDEX_V(p_pass, particles->draw_passes.size(), RID()); + + return particles->draw_passes[p_pass]; +} + void RasterizerStorageGLES3::_particles_process(Particles *particles, float p_delta) { float new_phase = Math::fmod((float)particles->phase + (p_delta / particles->lifetime) * particles->speed_scale, (float)1.0); @@ -5452,6 +5469,8 @@ void RasterizerStorageGLES3::update_particles() { particles->particle_valid_histories[0] = true; } + + particles->instance_change_notify(); //make sure shadows are updated } glDisable(GL_RASTERIZER_DISCARD); diff --git a/drivers/gles3/rasterizer_storage_gles3.h b/drivers/gles3/rasterizer_storage_gles3.h index 643554e55d..a53c3d7dd2 100644 --- a/drivers/gles3/rasterizer_storage_gles3.h +++ b/drivers/gles3/rasterizer_storage_gles3.h @@ -1149,6 +1149,9 @@ public: virtual void particles_set_emission_transform(RID p_particles, const Transform &p_transform); void _particles_process(Particles *p_particles, float p_delta); + virtual int particles_get_draw_passes(RID p_particles) const; + virtual RID particles_get_draw_pass_mesh(RID p_particles, int p_pass) const; + /* INSTANCE */ virtual void instance_add_skeleton(RID p_skeleton, RasterizerScene::InstanceBase *p_instance); diff --git a/modules/etc/image_etc.cpp b/modules/etc/image_etc.cpp index 948f50b782..d9daffc59e 100644 --- a/modules/etc/image_etc.cpp +++ b/modules/etc/image_etc.cpp @@ -138,7 +138,7 @@ static void _compress_etc(Image *p_img, float p_lossy_quality, bool force_etc1_f PoolVector<uint8_t>::Write w = dst_data.write(); // prepare parameters to be passed to etc2comp - int num_cpus = OS::get_singleton()->get_processor_count() * 2; //generally some cpus have 2 threads + int num_cpus = OS::get_singleton()->get_processor_count(); int encoding_time = 0; float effort = 0.0; //default, reasonable time diff --git a/scene/resources/primitive_meshes.cpp b/scene/resources/primitive_meshes.cpp index 4064981f44..d4221dcb3f 100644 --- a/scene/resources/primitive_meshes.cpp +++ b/scene/resources/primitive_meshes.cpp @@ -50,7 +50,6 @@ void PrimitiveMesh::_update() { cache_is_dirty = false; _clear_triangle_mesh(); - _change_notify(); emit_changed(); } @@ -316,10 +315,10 @@ void CapsuleMesh::_bind_methods() { ClassDB::bind_method(D_METHOD("set_rings", "rings"), &CapsuleMesh::set_rings); ClassDB::bind_method(D_METHOD("get_rings"), &CapsuleMesh::get_rings); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "radius", PROPERTY_HINT_RANGE, "0.1,4096.0,0.1"), "set_radius", "get_radius"); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "mid_height", PROPERTY_HINT_RANGE, "0.1,4096.0,0.1"), "set_mid_height", "get_mid_height"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "radial_segments", PROPERTY_HINT_RANGE, "1,128,1"), "set_radial_segments", "get_radial_segments"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "rings", PROPERTY_HINT_RANGE, "1,128,1"), "set_rings", "get_rings"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "radius", PROPERTY_HINT_RANGE, "0.1,100.0,0.1"), "set_radius", "get_radius"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "mid_height", PROPERTY_HINT_RANGE, "0.1,100.0,0.1"), "set_mid_height", "get_mid_height"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "radial_segments", PROPERTY_HINT_RANGE, "1,100,1"), "set_radial_segments", "get_radial_segments"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "rings", PROPERTY_HINT_RANGE, "1,100,1"), "set_rings", "get_rings"); } void CapsuleMesh::set_radius(const float p_radius) { @@ -575,9 +574,9 @@ void CubeMesh::_bind_methods() { ClassDB::bind_method(D_METHOD("get_subdivide_depth"), &CubeMesh::get_subdivide_depth); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "size"), "set_size", "get_size"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_width", PROPERTY_HINT_RANGE, "0,128,1"), "set_subdivide_width", "get_subdivide_width"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_height", PROPERTY_HINT_RANGE, "0,128,1"), "set_subdivide_height", "get_subdivide_height"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_depth", PROPERTY_HINT_RANGE, "0,128,1"), "set_subdivide_depth", "get_subdivide_depth"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_width", PROPERTY_HINT_RANGE, "0,100,1"), "set_subdivide_width", "get_subdivide_width"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_height", PROPERTY_HINT_RANGE, "0,100,1"), "set_subdivide_height", "get_subdivide_height"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_depth", PROPERTY_HINT_RANGE, "0,100,1"), "set_subdivide_depth", "get_subdivide_depth"); } void CubeMesh::set_size(const Vector3 &p_size) { @@ -781,11 +780,11 @@ void CylinderMesh::_bind_methods() { ClassDB::bind_method(D_METHOD("set_rings", "rings"), &CylinderMesh::set_rings); ClassDB::bind_method(D_METHOD("get_rings"), &CylinderMesh::get_rings); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "top_radius", PROPERTY_HINT_RANGE, "0.1,4096.0,0.1"), "set_top_radius", "get_top_radius"); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "bottom_radius", PROPERTY_HINT_RANGE, "0.1,4096.0,0.1"), "set_bottom_radius", "get_bottom_radius"); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "height", PROPERTY_HINT_RANGE, "0.1,4096.0,0.1"), "set_height", "get_height"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "radial_segments", PROPERTY_HINT_RANGE, "1,128,1"), "set_radial_segments", "get_radial_segments"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "rings", PROPERTY_HINT_RANGE, "1,128,1"), "set_rings", "get_rings"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "top_radius", PROPERTY_HINT_RANGE, "0.1,100.0,0.1"), "set_top_radius", "get_top_radius"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "bottom_radius", PROPERTY_HINT_RANGE, "0.1,100.0,0.1"), "set_bottom_radius", "get_bottom_radius"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "height", PROPERTY_HINT_RANGE, "0.1,100.0,0.1"), "set_height", "get_height"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "radial_segments", PROPERTY_HINT_RANGE, "1,100,1"), "set_radial_segments", "get_radial_segments"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "rings", PROPERTY_HINT_RANGE, "1,100,1"), "set_rings", "get_rings"); } void CylinderMesh::set_top_radius(const float p_radius) { @@ -919,8 +918,8 @@ void PlaneMesh::_bind_methods() { ClassDB::bind_method(D_METHOD("get_subdivide_depth"), &PlaneMesh::get_subdivide_depth); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "size"), "set_size", "get_size"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_width", PROPERTY_HINT_RANGE, "0,128,1"), "set_subdivide_width", "get_subdivide_width"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_depth", PROPERTY_HINT_RANGE, "0,128,1"), "set_subdivide_depth", "get_subdivide_depth"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_width", PROPERTY_HINT_RANGE, "0,100,1"), "set_subdivide_width", "get_subdivide_width"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_depth", PROPERTY_HINT_RANGE, "0,100,1"), "set_subdivide_depth", "get_subdivide_depth"); } void PlaneMesh::set_size(const Size2 &p_size) { @@ -1189,10 +1188,10 @@ void PrismMesh::_bind_methods() { ClassDB::bind_method(D_METHOD("get_subdivide_depth"), &PrismMesh::get_subdivide_depth); ADD_PROPERTY(PropertyInfo(Variant::REAL, "left_to_right", PROPERTY_HINT_RANGE, "-2.0,2.0,0.1"), "set_left_to_right", "get_left_to_right"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "size", PROPERTY_HINT_RANGE, "0.1,4096.0,0.1"), "set_size", "get_size"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_width", PROPERTY_HINT_RANGE, "0,128,1"), "set_subdivide_width", "get_subdivide_width"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_height", PROPERTY_HINT_RANGE, "0,128,1"), "set_subdivide_height", "get_subdivide_height"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_depth", PROPERTY_HINT_RANGE, "0,128,1"), "set_subdivide_depth", "get_subdivide_depth"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "size", PROPERTY_HINT_RANGE, "0.1,100.0,0.1"), "set_size", "get_size"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_width", PROPERTY_HINT_RANGE, "0,100,1"), "set_subdivide_width", "get_subdivide_width"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_height", PROPERTY_HINT_RANGE, "0,100,1"), "set_subdivide_height", "get_subdivide_height"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_depth", PROPERTY_HINT_RANGE, "0,100,1"), "set_subdivide_depth", "get_subdivide_depth"); } void PrismMesh::set_left_to_right(const float p_left_to_right) { @@ -1393,10 +1392,10 @@ void SphereMesh::_bind_methods() { ClassDB::bind_method(D_METHOD("set_is_hemisphere", "is_hemisphere"), &SphereMesh::set_is_hemisphere); ClassDB::bind_method(D_METHOD("get_is_hemisphere"), &SphereMesh::get_is_hemisphere); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "radius", PROPERTY_HINT_RANGE, "0.1,4096.0,0.1"), "set_radius", "get_radius"); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "height", PROPERTY_HINT_RANGE, "0.1,4096.0,0.1"), "set_height", "get_height"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "radial_segments", PROPERTY_HINT_RANGE, "1,128,1"), "set_radial_segments", "get_radial_segments"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "rings", PROPERTY_HINT_RANGE, "1,128,1"), "set_rings", "get_rings"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "radius", PROPERTY_HINT_RANGE, "0.1,100.0,0.1"), "set_radius", "get_radius"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "height", PROPERTY_HINT_RANGE, "0.1,100.0,0.1"), "set_height", "get_height"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "radial_segments", PROPERTY_HINT_RANGE, "1,100,1"), "set_radial_segments", "get_radial_segments"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "rings", PROPERTY_HINT_RANGE, "1,100,1"), "set_rings", "get_rings"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "is_hemisphere"), "set_is_hemisphere", "get_is_hemisphere"); } diff --git a/servers/visual/rasterizer.h b/servers/visual/rasterizer.h index 44cfbf74ce..75434c5fc5 100644 --- a/servers/visual/rasterizer.h +++ b/servers/visual/rasterizer.h @@ -465,6 +465,9 @@ public: virtual void particles_set_emission_transform(RID p_particles, const Transform &p_transform) = 0; + virtual int particles_get_draw_passes(RID p_particles) const = 0; + virtual RID particles_get_draw_pass_mesh(RID p_particles, int p_pass) const = 0; + /* RENDER TARGET */ enum RenderTargetFlags { diff --git a/servers/visual/visual_server_scene.cpp b/servers/visual/visual_server_scene.cpp index 352daa9655..6d1f698a5c 100644 --- a/servers/visual/visual_server_scene.cpp +++ b/servers/visual/visual_server_scene.cpp @@ -3323,6 +3323,36 @@ void VisualServerScene::_update_dirty_instance(Instance *p_instance) { } else { can_cast_shadows = false; } + } else if (p_instance->base_type == VS::INSTANCE_PARTICLES) { + + bool cast_shadows = false; + + int dp = VSG::storage->particles_get_draw_passes(p_instance->base); + + for (int i = 0; i < dp; i++) { + + RID mesh = VSG::storage->particles_get_draw_pass_mesh(p_instance->base, i); + + int sc = VSG::storage->mesh_get_surface_count(mesh); + for (int j = 0; j < sc; j++) { + + RID mat = VSG::storage->mesh_surface_get_material(mesh, j); + + if (!mat.is_valid()) { + cast_shadows = true; + break; + } + + if (VSG::storage->material_casts_shadows(mat)) { + cast_shadows = true; + break; + } + } + } + + if (!cast_shadows) { + can_cast_shadows = false; + } } } |