summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/base/classes.xml604
-rw-r--r--drivers/gles3/rasterizer_storage_gles3.cpp19
-rw-r--r--drivers/gles3/rasterizer_storage_gles3.h3
-rw-r--r--modules/etc/image_etc.cpp2
-rw-r--r--scene/resources/primitive_meshes.cpp45
-rw-r--r--servers/visual/rasterizer.h3
-rw-r--r--servers/visual/visual_server_scene.cpp30
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;
+ }
}
}