[Bf-blender-cvs] [fea09b0c7c6] cycles_procedural_api: fix function used to detect arrays
Kévin Dietrich
noreply at git.blender.org
Sun Dec 6 06:26:28 CET 2020
Commit: fea09b0c7c6afb809689095f27d2618e602207a5
Author: Kévin Dietrich
Date: Thu Dec 3 15:22:15 2020 +0100
Branches: cycles_procedural_api
https://developer.blender.org/rBfea09b0c7c6afb809689095f27d2618e602207a5
fix function used to detect arrays
===================================================================
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 1f34aeb4b38..1a489d54617 100644
--- a/intern/cycles/render/alembic.cpp
+++ b/intern/cycles/render/alembic.cpp
@@ -655,7 +655,8 @@ void AlembicObject::load_all_data(const ICurvesSchema &schema,
void AlembicObject::setup_transform_cache()
{
if (xform_samples.size() == 0) {
- cached_data.transforms.add_data(transform_identity(), 0.0);
+ Transform tfm = transform_identity();
+ cached_data.transforms.add_data(tfm, 0.0);
}
else {
/* It is possible for a leaf node of the hierarchy to have multiple samples for its transforms
@@ -671,7 +672,8 @@ void AlembicObject::setup_transform_cache()
}
if (!has_animation) {
- cached_data.transforms.add_data(make_transform(first_matrix), 0.0);
+ Transform tfm = make_transform(first_matrix);
+ cached_data.transforms.add_data(tfm, 0.0);
}
else {
for (const std::pair<chrono_t, M44d> pair : xform_samples) {
diff --git a/intern/cycles/render/alembic.h b/intern/cycles/render/alembic.h
index 4014d7322d2..a371d6f53d1 100644
--- a/intern/cycles/render/alembic.h
+++ b/intern/cycles/render/alembic.h
@@ -37,6 +37,13 @@ class Shader;
using MatrixSampleMap = std::map<Alembic::Abc::chrono_t, Alembic::Abc::M44d>;
+/* Helpers to detect if some type is a ccl::array. */
+template<typename> struct is_array : public std::false_type {
+};
+
+template<typename T> struct is_array<array<T>> : public std::true_type {
+};
+
template<typename T> class DataStore {
struct DataTimePair {
double time = 0;
@@ -65,16 +72,16 @@ template<typename T> class DataStore {
return &ptr->data;
}
- void add_data(T data_, double time)
+ void add_data(T &data_, double time)
{
- data.push_back({time, data_});
- }
+ if constexpr (is_array<T>::value) {
+ data.emplace_back();
+ data.back().data.steal_data(data_);
+ data.back().time = time;
+ return;
+ }
- void add_data(array<T> &data_, double time)
- {
- data.emplace_back();
- data.back().data.steal_data(data_);
- data.back().time = time;
+ data.push_back({time, data_});
}
bool is_constant() const
More information about the Bf-blender-cvs
mailing list