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:
Diffstat (limited to 'intern/cycles/blender/blender_geometry.cpp')
-rw-r--r--intern/cycles/blender/blender_geometry.cpp33
1 files changed, 24 insertions, 9 deletions
diff --git a/intern/cycles/blender/blender_geometry.cpp b/intern/cycles/blender/blender_geometry.cpp
index f7e4623024d..002f5e0fdb7 100644
--- a/intern/cycles/blender/blender_geometry.cpp
+++ b/intern/cycles/blender/blender_geometry.cpp
@@ -19,6 +19,7 @@
#include "render/hair.h"
#include "render/mesh.h"
#include "render/object.h"
+#include "render/volume.h"
#include "blender/blender_sync.h"
#include "blender/blender_util.h"
@@ -27,6 +28,19 @@
CCL_NAMESPACE_BEGIN
+static Geometry::Type determine_geom_type(BL::Object &b_ob, bool use_particle_hair)
+{
+ if (b_ob.type() == BL::Object::type_HAIR || use_particle_hair) {
+ return Geometry::HAIR;
+ }
+
+ if (b_ob.type() == BL::Object::type_VOLUME || object_fluid_gas_domain_find(b_ob)) {
+ return Geometry::VOLUME;
+ }
+
+ return Geometry::MESH;
+}
+
Geometry *BlenderSync::sync_geometry(BL::Depsgraph &b_depsgraph,
BL::Object &b_ob,
BL::Object &b_ob_instance,
@@ -40,9 +54,7 @@ Geometry *BlenderSync::sync_geometry(BL::Depsgraph &b_depsgraph,
BL::Material material_override = view_layer.material_override;
Shader *default_shader = (b_ob.type() == BL::Object::type_VOLUME) ? scene->default_volume :
scene->default_surface;
- Geometry::Type geom_type = (b_ob.type() == BL::Object::type_HAIR || use_particle_hair) ?
- Geometry::HAIR :
- Geometry::MESH;
+ Geometry::Type geom_type = determine_geom_type(b_ob, use_particle_hair);
/* Find shader indices. */
vector<Shader *> used_shaders;
@@ -71,10 +83,13 @@ Geometry *BlenderSync::sync_geometry(BL::Depsgraph &b_depsgraph,
if (geom == NULL) {
/* Add new geometry if it did not exist yet. */
if (geom_type == Geometry::HAIR) {
- geom = new Hair();
+ geom = scene->create_node<Hair>();
+ }
+ else if (geom_type == Geometry::VOLUME) {
+ geom = scene->create_node<Volume>();
}
else {
- geom = new Mesh();
+ geom = scene->create_node<Mesh>();
}
geometry_map.add(key, geom);
}
@@ -121,13 +136,13 @@ Geometry *BlenderSync::sync_geometry(BL::Depsgraph &b_depsgraph,
geom->name = ustring(b_ob_data.name().c_str());
- if (b_ob.type() == BL::Object::type_HAIR || use_particle_hair) {
+ if (geom_type == Geometry::HAIR) {
Hair *hair = static_cast<Hair *>(geom);
sync_hair(b_depsgraph, b_ob, hair, used_shaders);
}
- else if (b_ob.type() == BL::Object::type_VOLUME || object_fluid_gas_domain_find(b_ob)) {
- Mesh *mesh = static_cast<Mesh *>(geom);
- sync_volume(b_ob, mesh, used_shaders);
+ else if (geom_type == Geometry::VOLUME) {
+ Volume *volume = static_cast<Volume *>(geom);
+ sync_volume(b_ob, volume, used_shaders);
}
else {
Mesh *mesh = static_cast<Mesh *>(geom);