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:
authorHans Goudey <h.goudey@me.com>2021-04-02 00:23:16 +0300
committerHans Goudey <h.goudey@me.com>2021-04-02 00:23:16 +0300
commitc5d99683921060d1974fc0a5fb35522de9a768b0 (patch)
treea25d0e5e66d36ccbe1e4ca699e5db4c61e84bdab /source/blender/blenkernel/intern/object_dupli.cc
parent3ca1cf2b5197c0c2d5afa44ac28e7b63d401b489 (diff)
Cleanup: Remove unecessary part of instances component C API
Now that object_dupli.cc is a C++ file, we don't have to have a specific function to retrieve the instance data from the geometry set.
Diffstat (limited to 'source/blender/blenkernel/intern/object_dupli.cc')
-rw-r--r--source/blender/blenkernel/intern/object_dupli.cc39
1 files changed, 23 insertions, 16 deletions
diff --git a/source/blender/blenkernel/intern/object_dupli.cc b/source/blender/blenkernel/intern/object_dupli.cc
index 1830870b854..17800b12b12 100644
--- a/source/blender/blenkernel/intern/object_dupli.cc
+++ b/source/blender/blenkernel/intern/object_dupli.cc
@@ -31,8 +31,10 @@
#include "BLI_string_utf8.h"
#include "BLI_alloca.h"
+#include "BLI_float4x4.hh"
#include "BLI_math.h"
#include "BLI_rand.h"
+#include "BLI_span.hh"
#include "DNA_anim_types.h"
#include "DNA_collection_types.h"
@@ -48,6 +50,7 @@
#include "BKE_editmesh_cache.h"
#include "BKE_font.h"
#include "BKE_geometry_set.h"
+#include "BKE_geometry_set.hh"
#include "BKE_global.h"
#include "BKE_idprop.h"
#include "BKE_lattice.h"
@@ -65,6 +68,9 @@
#include "BLI_hash.h"
#include "BLI_strict_flags.h"
+using blender::float4x4;
+using blender::Span;
+
/* -------------------------------------------------------------------- */
/** \name Internal Duplicate Context
* \{ */
@@ -808,39 +814,40 @@ static const DupliGenerator gen_dupli_verts_pointcloud = {
static void make_duplis_instances_component(const DupliContext *ctx)
{
- float(*instance_offset_matrices)[4][4];
- InstancedData *instanced_data;
- const int *almost_unique_ids;
- const int amount = BKE_geometry_set_instances(ctx->object->runtime.geometry_set_eval,
- &instance_offset_matrices,
- &almost_unique_ids,
- &instanced_data);
+ const InstancesComponent *component =
+ ctx->object->runtime.geometry_set_eval->get_component_for_read<InstancesComponent>();
+ if (component == nullptr) {
+ return;
+ }
- for (int i = 0; i < amount; i++) {
- InstancedData *data = &instanced_data[i];
+ Span<float4x4> instance_offset_matrices = component->transforms();
+ Span<int> almost_unique_ids = component->almost_unique_ids();
+ Span<InstancedData> instanced_data = component->instanced_data();
+ for (int i = 0; i < component->instances_amount(); i++) {
+ const InstancedData &data = instanced_data[i];
const int id = almost_unique_ids[i];
- if (data->type == INSTANCE_DATA_TYPE_OBJECT) {
- Object *object = data->data.object;
+ if (data.type == INSTANCE_DATA_TYPE_OBJECT) {
+ Object *object = data.data.object;
if (object != nullptr) {
float matrix[4][4];
- mul_m4_m4m4(matrix, ctx->object->obmat, instance_offset_matrices[i]);
+ mul_m4_m4m4(matrix, ctx->object->obmat, instance_offset_matrices[i].values);
make_dupli(ctx, object, matrix, id);
float space_matrix[4][4];
- mul_m4_m4m4(space_matrix, instance_offset_matrices[i], object->imat);
+ mul_m4_m4m4(space_matrix, instance_offset_matrices[i].values, object->imat);
mul_m4_m4_pre(space_matrix, ctx->object->obmat);
make_recursive_duplis(ctx, object, space_matrix, id);
}
}
- else if (data->type == INSTANCE_DATA_TYPE_COLLECTION) {
- Collection *collection = data->data.collection;
+ else if (data.type == INSTANCE_DATA_TYPE_COLLECTION) {
+ Collection *collection = data.data.collection;
if (collection != nullptr) {
float collection_matrix[4][4];
unit_m4(collection_matrix);
sub_v3_v3(collection_matrix[3], collection->instance_offset);
- mul_m4_m4_pre(collection_matrix, instance_offset_matrices[i]);
+ mul_m4_m4_pre(collection_matrix, instance_offset_matrices[i].values);
mul_m4_m4_pre(collection_matrix, ctx->object->obmat);
eEvaluationMode mode = DEG_get_mode(ctx->depsgraph);