[Bf-blender-cvs] [8d80613e628] cycles_procedural_api: split logic for reading points and triangles into separate functions
Kévin Dietrich
noreply at git.blender.org
Sun Dec 6 06:26:26 CET 2020
Commit: 8d80613e628a94e5a55c77bfca7c6d3867148503
Author: Kévin Dietrich
Date: Wed Dec 2 15:39:45 2020 +0100
Branches: cycles_procedural_api
https://developer.blender.org/rB8d80613e628a94e5a55c77bfca7c6d3867148503
split logic for reading points and triangles into separate functions
===================================================================
M intern/cycles/render/alembic.cpp
===================================================================
diff --git a/intern/cycles/render/alembic.cpp b/intern/cycles/render/alembic.cpp
index 294987a5836..031031647e0 100644
--- a/intern/cycles/render/alembic.cpp
+++ b/intern/cycles/render/alembic.cpp
@@ -342,6 +342,62 @@ static void read_default_normals(const IN3fGeomParam &normals, CachedData &cache
}
}
+static void add_positions(const P3fArraySamplePtr positions, double time, CachedData &cached_data)
+{
+ if (!positions) {
+ return;
+ }
+
+ array<float3> vertices;
+ vertices.reserve(positions->size());
+
+ for (size_t i = 0; i < positions->size(); i++) {
+ Imath::Vec3<float> f = positions->get()[i];
+ vertices.push_back_reserved(make_float3_from_yup(f));
+ }
+
+ cached_data.vertices.add_data(vertices, time);
+}
+
+static void add_triangles(const Int32ArraySamplePtr face_counts, const Int32ArraySamplePtr face_indices, double time, CachedData &cached_data)
+{
+ if (!face_counts || !face_indices) {
+ return;
+ }
+
+ const size_t num_faces = face_counts->size();
+ const int *face_counts_array = face_counts->get();
+ const int *face_indices_array = face_indices->get();
+
+ size_t num_triangles = 0;
+ for (size_t i = 0; i < face_counts->size(); i++) {
+ num_triangles += face_counts_array[i] - 2;
+ }
+
+ array<int3> triangles;
+ array<int3> triangles_loops;
+ triangles.reserve(num_triangles);
+ triangles_loops.reserve(num_triangles);
+ int index_offset = 0;
+
+ for (size_t i = 0; i < num_faces; i++) {
+ for (int j = 0; j < face_counts_array[i] - 2; j++) {
+ int v0 = face_indices_array[index_offset];
+ int v1 = face_indices_array[index_offset + j + 1];
+ int v2 = face_indices_array[index_offset + j + 2];
+
+ triangles.push_back_reserved(make_int3(v0, v1, v2));
+ triangles_loops.push_back_reserved(
+ make_int3(index_offset, index_offset + j + 1, index_offset + j + 2));
+ }
+
+ index_offset += face_counts_array[i];
+ }
+
+ cached_data.triangles.add_data(triangles, time);
+ cached_data.triangles_loops.add_data(triangles_loops, time);
+}
+
NODE_DEFINE(AlembicObject)
{
NodeType *type = NodeType::add("alembic_object", create);
@@ -392,58 +448,11 @@ void AlembicObject::load_all_data(const IPolyMeshSchema &schema, Progress &progr
const ISampleSelector iss = ISampleSelector(static_cast<index_t>(i));
const IPolyMeshSchema::Sample sample = schema.getValue(iss);
- const P3fArraySamplePtr positions = sample.getPositions();
-
const double time = schema.getTimeSampling()->getSampleTime(static_cast<index_t>(i));
- if (positions) {
- array<float3> vertices;
- vertices.reserve(positions->size());
-
- for (int i = 0; i < positions->size(); i++) {
- Imath::Vec3<float> f = positions->get()[i];
- vertices.push_back_reserved(make_float3_from_yup(f));
- }
-
- cached_data.vertices.add_data(vertices, time);
- }
-
- Int32ArraySamplePtr face_counts = sample.getFaceCounts();
- Int32ArraySamplePtr face_indices = sample.getFaceIndices();
-
- if (face_counts && face_indices) {
- const size_t num_faces = face_counts->size();
- const int *face_counts_array = face_counts->get();
- const int *face_indices_array = face_indices->get();
+ add_positions(sample.getPositions(), time, cached_data);
- size_t num_triangles = 0;
- for (size_t i = 0; i < face_counts->size(); i++) {
- num_triangles += face_counts_array[i] - 2;
- }
-
- array<int3> triangles;
- array<int3> triangles_loops;
- triangles.reserve(num_triangles);
- triangles_loops.reserve(num_triangles);
- int index_offset = 0;
-
- for (size_t i = 0; i < num_faces; i++) {
- for (int j = 0; j < face_counts_array[i] - 2; j++) {
- int v0 = face_indices_array[index_offset];
- int v1 = face_indices_array[index_offset + j + 1];
- int v2 = face_indices_array[index_offset + j + 2];
-
- triangles.push_back_reserved(make_int3(v0, v1, v2));
- triangles_loops.push_back_reserved(
- make_int3(index_offset, index_offset + j + 1, index_offset + j + 2));
- }
-
- index_offset += face_counts_array[i];
- }
-
- cached_data.triangles.add_data(triangles, time);
- cached_data.triangles_loops.add_data(triangles_loops, time);
- }
+ add_triangles(sample.getFaceCounts(), sample.getFaceIndices(), time, cached_data);
foreach (const AttributeRequest &attr, requested_attributes.requests) {
read_attribute(schema.getArbGeomParams(), iss, attr.name);
More information about the Bf-blender-cvs
mailing list