[Bf-blender-cvs] [92111d32a6d] cycles_procedural_api: cleanup, deduplicate logic to set the new data
Kévin Dietrich
noreply at git.blender.org
Sun Dec 6 06:26:29 CET 2020
Commit: 92111d32a6d265f888f09c392b2821d1a3b1886e
Author: Kévin Dietrich
Date: Fri Dec 4 12:46:39 2020 +0100
Branches: cycles_procedural_api
https://developer.blender.org/rB92111d32a6d265f888f09c392b2821d1a3b1886e
cleanup, deduplicate logic to set the new data
===================================================================
M intern/cycles/render/alembic.cpp
M intern/cycles/render/alembic.h
===================================================================
diff --git a/intern/cycles/render/alembic.cpp b/intern/cycles/render/alembic.cpp
index ff1f9390272..33543936b38 100644
--- a/intern/cycles/render/alembic.cpp
+++ b/intern/cycles/render/alembic.cpp
@@ -38,9 +38,6 @@ CCL_NAMESPACE_BEGIN
* least a way to tell which frame data to load, so we do not load the entire archive for a few
* frames. */
-/* TODO(@kevindietrich): arrays are emptied when passed to the sockets, so for now we copy the
- * arrays to avoid reloading the data */
-
static float3 make_float3_from_yup(const V3f &v)
{
return make_float3(v.x, -v.z, v.y);
@@ -1040,17 +1037,12 @@ void AlembicProcedural::read_mesh(Scene *scene,
CachedData &cached_data = abc_object->get_cached_data();
- Transform *tfm = cached_data.transforms.data_for_time(frame_time);
- if (tfm) {
- Object *object = abc_object->get_object();
- object->set_tfm(*tfm);
- }
+ Object *object = abc_object->get_object();
+ cached_data.transforms.copy_to_socket(frame_time, object, object->get_tfm_socket());
- array<float3> *vertices = cached_data.vertices.data_for_time(frame_time);
- if (vertices) {
- array<float3> new_vertices = *vertices;
- mesh->set_verts(new_vertices);
- }
+ cached_data.vertices.copy_to_socket(frame_time, mesh, mesh->get_verts_socket());
+
+ cached_data.shader.copy_to_socket(frame_time, mesh, mesh->get_shader_socket());
array<int3> *triangle_data = cached_data.triangles.data_for_time(frame_time);
if (triangle_data) {
@@ -1072,12 +1064,6 @@ void AlembicProcedural::read_mesh(Scene *scene,
mesh->set_smooth(smooth);
}
- array<int> *shader = cached_data.shader.data_for_time(frame_time);
- if (shader) {
- array<int> new_shader = *shader;
- mesh->set_shader(new_shader);
- }
-
for (CachedData::CachedAttribute &attribute : cached_data.attributes) {
const array<char> *attr_data = attribute.data.data_for_time(frame_time);
@@ -1149,35 +1135,16 @@ void AlembicProcedural::read_curves(Scene *scene,
CachedData &cached_data = abc_object->get_cached_data();
- Transform *tfm = cached_data.transforms.data_for_time(frame_time);
- if (tfm) {
- Object *object = abc_object->get_object();
- object->set_tfm(*tfm);
- }
+ Object *object = abc_object->get_object();
+ cached_data.transforms.copy_to_socket(frame_time, object, object->get_tfm_socket());
- array<float3> *curve_keys = cached_data.curve_keys.data_for_time(frame_time);
- if (curve_keys) {
- array<float3> new_curve_keys = *curve_keys;
- hair->set_curve_keys(new_curve_keys);
- }
+ cached_data.curve_keys.copy_to_socket(frame_time, hair, hair->get_curve_keys_socket());
- array<float> *curve_radius = cached_data.curve_radius.data_for_time(frame_time);
- if (curve_radius) {
- array<float> new_curve_radius = *curve_radius;
- hair->set_curve_radius(new_curve_radius);
- }
+ cached_data.curve_radius.copy_to_socket(frame_time, hair, hair->get_curve_radius_socket());
- array<int> *curve_first_key = cached_data.curve_first_key.data_for_time(frame_time);
- if (curve_first_key) {
- array<int> new_curve_first_key = *curve_first_key;
- hair->set_curve_first_key(new_curve_first_key);
- }
+ cached_data.curve_shader.copy_to_socket(frame_time, hair, hair->get_curve_shader_socket());
- array<int> *curve_shader = cached_data.curve_shader.data_for_time(frame_time);
- if (curve_shader) {
- array<int> new_curve_shader = *curve_shader;
- hair->set_curve_shader(new_curve_shader);
- }
+ cached_data.curve_first_key.copy_to_socket(frame_time, hair, hair->get_curve_first_key_socket());
for (CachedData::CachedAttribute &attribute : cached_data.attributes) {
const array<char> *attr_data = attribute.data.data_for_time(frame_time);
diff --git a/intern/cycles/render/alembic.h b/intern/cycles/render/alembic.h
index e2112e8af10..8aad074579c 100644
--- a/intern/cycles/render/alembic.h
+++ b/intern/cycles/render/alembic.h
@@ -133,6 +133,22 @@ template<typename T> class DataStore {
last_loaded_time = std::numeric_limits<double>::max();
data.clear();
}
+
+ /* Copy the data for the specified time to the node's socket. If there is no
+ * data for this time or it was already loaded, do nothing. */
+ void copy_to_socket(double time, Node *node, const SocketType *socket)
+ {
+ T *data_ = data_for_time(time);
+
+ if (data_ == nullptr) {
+ return;
+ }
+
+ /* TODO(@kevindietrich): arrays are emptied when passed to the sockets, so for now we copy the
+ * arrays to avoid reloading the data */
+ T value = *data_;
+ node->set(*socket, value);
+ }
};
/* Actual cache for the stored data.
More information about the Bf-blender-cvs
mailing list