Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Gavrilov <angavrilov@gmail.com>2020-10-31 19:21:07 +0300
committerAlexander Gavrilov <angavrilov@gmail.com>2020-11-03 16:35:43 +0300
commit91d320edc3cfb30443af4adbcb09bc3d7a609e1d (patch)
tree5fa112217c986e516ff30e3ba95556bc2b94d7ce /intern/cycles/render
parent9bc177d8ded4ba498762813a0d5106005fef0e67 (diff)
Cycles: immediately store the used_shader list in Blender interface.
Uniform attributes require immediate access to the shader list in object update code, so setting the field can't be deferred to a background task. This required adding a parameter to the clear method of Geometry. Ref D2057
Diffstat (limited to 'intern/cycles/render')
-rw-r--r--intern/cycles/render/geometry.cpp6
-rw-r--r--intern/cycles/render/geometry.h2
-rw-r--r--intern/cycles/render/hair.cpp4
-rw-r--r--intern/cycles/render/hair.h2
-rw-r--r--intern/cycles/render/mesh.cpp8
-rw-r--r--intern/cycles/render/mesh.h6
-rw-r--r--intern/cycles/render/volume.cpp4
-rw-r--r--intern/cycles/render/volume.h2
8 files changed, 19 insertions, 15 deletions
diff --git a/intern/cycles/render/geometry.cpp b/intern/cycles/render/geometry.cpp
index 9457d5e0205..7b410a0c5ea 100644
--- a/intern/cycles/render/geometry.cpp
+++ b/intern/cycles/render/geometry.cpp
@@ -81,9 +81,11 @@ Geometry::~Geometry()
delete bvh;
}
-void Geometry::clear()
+void Geometry::clear(bool preserve_shaders)
{
- used_shaders.clear();
+ if (!preserve_shaders)
+ used_shaders.clear();
+
transform_applied = false;
transform_negative_scaled = false;
transform_normal = transform_identity();
diff --git a/intern/cycles/render/geometry.h b/intern/cycles/render/geometry.h
index 9367c4a9de7..6d4364a6454 100644
--- a/intern/cycles/render/geometry.h
+++ b/intern/cycles/render/geometry.h
@@ -99,7 +99,7 @@ class Geometry : public Node {
virtual ~Geometry();
/* Geometry */
- virtual void clear();
+ virtual void clear(bool preserve_shaders = false);
virtual void compute_bounds() = 0;
virtual void apply_transform(const Transform &tfm, const bool apply_to_motion) = 0;
diff --git a/intern/cycles/render/hair.cpp b/intern/cycles/render/hair.cpp
index 816c15cf4ef..3853604f78a 100644
--- a/intern/cycles/render/hair.cpp
+++ b/intern/cycles/render/hair.cpp
@@ -321,9 +321,9 @@ void Hair::reserve_curves(int numcurves, int numkeys)
attributes.resize(true);
}
-void Hair::clear()
+void Hair::clear(bool preserve_shaders)
{
- Geometry::clear();
+ Geometry::clear(preserve_shaders);
curve_keys.clear();
curve_radius.clear();
diff --git a/intern/cycles/render/hair.h b/intern/cycles/render/hair.h
index 39d6a34d799..bb6fa7fa4d8 100644
--- a/intern/cycles/render/hair.h
+++ b/intern/cycles/render/hair.h
@@ -103,7 +103,7 @@ class Hair : public Geometry {
~Hair();
/* Geometry */
- void clear() override;
+ void clear(bool preserve_shaders = false) override;
void resize_curves(int numcurves, int numkeys);
void reserve_curves(int numcurves, int numkeys);
diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp
index 3015ac5e569..49a737f5b1f 100644
--- a/intern/cycles/render/mesh.cpp
+++ b/intern/cycles/render/mesh.cpp
@@ -213,9 +213,9 @@ void Mesh::reserve_subd_faces(int numfaces, int num_ngons_, int numcorners)
subd_attributes.resize(true);
}
-void Mesh::clear(bool preserve_voxel_data)
+void Mesh::clear(bool preserve_shaders, bool preserve_voxel_data)
{
- Geometry::clear();
+ Geometry::clear(preserve_shaders);
/* clear all verts and triangles */
verts.clear();
@@ -243,9 +243,9 @@ void Mesh::clear(bool preserve_voxel_data)
patch_table = NULL;
}
-void Mesh::clear()
+void Mesh::clear(bool preserve_shaders)
{
- clear(false);
+ clear(preserve_shaders, false);
}
void Mesh::add_vertex(float3 P)
diff --git a/intern/cycles/render/mesh.h b/intern/cycles/render/mesh.h
index c8286a01e2c..b03b826cd9f 100644
--- a/intern/cycles/render/mesh.h
+++ b/intern/cycles/render/mesh.h
@@ -174,8 +174,7 @@ class Mesh : public Geometry {
void reserve_mesh(int numverts, int numfaces);
void resize_subd_faces(int numfaces, int num_ngons, int numcorners);
void reserve_subd_faces(int numfaces, int num_ngons, int numcorners);
- void clear(bool preserve_voxel_data);
- void clear() override;
+ void clear(bool preserve_shaders = false) override;
void add_vertex(float3 P);
void add_vertex_slow(float3 P);
void add_triangle(int v0, int v1, int v2, int shader, bool smooth);
@@ -202,6 +201,9 @@ class Mesh : public Geometry {
void pack_patches(uint *patch_data, uint vert_offset, uint face_offset, uint corner_offset);
void tessellate(DiagSplit *split);
+
+ protected:
+ void clear(bool preserve_shaders, bool preserve_voxel_data);
};
CCL_NAMESPACE_END
diff --git a/intern/cycles/render/volume.cpp b/intern/cycles/render/volume.cpp
index a8edc04f8a9..6d5e9126955 100644
--- a/intern/cycles/render/volume.cpp
+++ b/intern/cycles/render/volume.cpp
@@ -56,9 +56,9 @@ Volume::Volume() : Mesh(node_type, Geometry::VOLUME)
object_space = false;
}
-void Volume::clear()
+void Volume::clear(bool preserve_shaders)
{
- Mesh::clear(true);
+ Mesh::clear(preserve_shaders, true);
}
struct QuadData {
diff --git a/intern/cycles/render/volume.h b/intern/cycles/render/volume.h
index 05157eb948f..21568e8e852 100644
--- a/intern/cycles/render/volume.h
+++ b/intern/cycles/render/volume.h
@@ -32,7 +32,7 @@ class Volume : public Mesh {
float step_size;
bool object_space;
- virtual void clear() override;
+ virtual void clear(bool preserve_shaders = false) override;
};
CCL_NAMESPACE_END