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
path: root/source
diff options
context:
space:
mode:
authorSybren A. Stüvel <sybren@blender.org>2020-08-14 17:45:35 +0300
committerSybren A. Stüvel <sybren@blender.org>2020-08-17 18:56:05 +0300
commitfd3086833afea8b414506de6bb9ab6a5beaa7faa (patch)
treef250ce89efd30c4c383ccc6705cf226c9705ff01 /source
parent04ae290024c58f5288644bf3464757de4b56b9e7 (diff)
Cleanup: IO, reduce code duplication in USD and Alembic exporters
Move the object visibility check from Alembic/USD-specific code into the `io/common` module. No functional changes.
Diffstat (limited to 'source')
-rw-r--r--source/blender/io/alembic/exporter/abc_writer_mesh.cc22
-rw-r--r--source/blender/io/common/IO_abstract_hierarchy_iterator.h4
-rw-r--r--source/blender/io/common/intern/abstract_hierarchy_iterator.cc24
-rw-r--r--source/blender/io/usd/intern/usd_writer_mesh.cc22
4 files changed, 30 insertions, 42 deletions
diff --git a/source/blender/io/alembic/exporter/abc_writer_mesh.cc b/source/blender/io/alembic/exporter/abc_writer_mesh.cc
index 89cb76db9a6..5c005164bcc 100644
--- a/source/blender/io/alembic/exporter/abc_writer_mesh.cc
+++ b/source/blender/io/alembic/exporter/abc_writer_mesh.cc
@@ -159,27 +159,7 @@ ModifierData *ABCGenericMeshWriter::get_liquid_sim_modifier(Scene *scene, Object
bool ABCGenericMeshWriter::is_supported(const HierarchyContext *context) const
{
- Object *object = context->object;
- bool is_dupli = context->duplicator != nullptr;
- int base_flag;
-
- if (is_dupli) {
- /* Construct the object's base flags from its dupli-parent, just like is done in
- * deg_objects_dupli_iterator_next(). Without this, the visibility check below will fail. Doing
- * this here, instead of a more suitable location in AbstractHierarchyIterator, prevents
- * copying the Object for every dupli. */
- base_flag = object->base_flag;
- object->base_flag = context->duplicator->base_flag | BASE_FROM_DUPLI;
- }
-
- int visibility = BKE_object_visibility(
- object, DAG_EVAL_RENDER /* TODO(Sybren): add evaluation mode to export options? */);
-
- if (is_dupli) {
- object->base_flag = base_flag;
- }
-
- return (visibility & OB_VISIBLE_SELF) != 0;
+ return context->is_object_visible(DAG_EVAL_RENDER);
}
void ABCGenericMeshWriter::do_write(HierarchyContext &context)
diff --git a/source/blender/io/common/IO_abstract_hierarchy_iterator.h b/source/blender/io/common/IO_abstract_hierarchy_iterator.h
index d0d9d72b880..1d78cc38746 100644
--- a/source/blender/io/common/IO_abstract_hierarchy_iterator.h
+++ b/source/blender/io/common/IO_abstract_hierarchy_iterator.h
@@ -37,6 +37,8 @@
#include "IO_dupli_persistent_id.hh"
+#include "DEG_depsgraph.h"
+
#include <map>
#include <set>
#include <string>
@@ -111,6 +113,8 @@ struct HierarchyContext {
bool is_instance() const;
void mark_as_instance_of(const std::string &reference_export_path);
void mark_as_not_instanced();
+
+ bool is_object_visible(const enum eEvaluationMode evaluation_mode) const;
};
/* Abstract writer for objects. Create concrete subclasses to write to USD, Alembic, etc.
diff --git a/source/blender/io/common/intern/abstract_hierarchy_iterator.cc b/source/blender/io/common/intern/abstract_hierarchy_iterator.cc
index fbefc8c8e7e..93e7e677118 100644
--- a/source/blender/io/common/intern/abstract_hierarchy_iterator.cc
+++ b/source/blender/io/common/intern/abstract_hierarchy_iterator.cc
@@ -28,6 +28,7 @@
#include "BKE_anim_data.h"
#include "BKE_duplilist.h"
#include "BKE_key.h"
+#include "BKE_object.h"
#include "BKE_particle.h"
#include "BLI_assert.h"
@@ -77,6 +78,29 @@ void HierarchyContext::mark_as_not_instanced()
original_export_path.clear();
}
+bool HierarchyContext::is_object_visible(const enum eEvaluationMode evaluation_mode) const
+{
+ bool is_dupli = duplicator != nullptr;
+ int base_flag;
+
+ if (is_dupli) {
+ /* Construct the object's base flags from its dupli-parent, just like is done in
+ * deg_objects_dupli_iterator_next(). Without this, the visibility check below will fail. Doing
+ * this here, instead of a more suitable location in AbstractHierarchyIterator, prevents
+ * copying the Object for every dupli. */
+ base_flag = object->base_flag;
+ object->base_flag = duplicator->base_flag | BASE_FROM_DUPLI;
+ }
+
+ int visibility = BKE_object_visibility(object, evaluation_mode);
+
+ if (is_dupli) {
+ object->base_flag = base_flag;
+ }
+
+ return (visibility & OB_VISIBLE_SELF) != 0;
+}
+
EnsuredWriter::EnsuredWriter() : writer_(nullptr), newly_created_(false)
{
}
diff --git a/source/blender/io/usd/intern/usd_writer_mesh.cc b/source/blender/io/usd/intern/usd_writer_mesh.cc
index bd2c549e729..b27c68a41f6 100644
--- a/source/blender/io/usd/intern/usd_writer_mesh.cc
+++ b/source/blender/io/usd/intern/usd_writer_mesh.cc
@@ -52,27 +52,7 @@ USDGenericMeshWriter::USDGenericMeshWriter(const USDExporterContext &ctx) : USDA
bool USDGenericMeshWriter::is_supported(const HierarchyContext *context) const
{
- Object *object = context->object;
- bool is_dupli = context->duplicator != nullptr;
- int base_flag;
-
- if (is_dupli) {
- /* Construct the object's base flags from its dupli-parent, just like is done in
- * deg_objects_dupli_iterator_next(). Without this, the visibility check below will fail. Doing
- * this here, instead of a more suitable location in AbstractHierarchyIterator, prevents
- * copying the Object for every dupli. */
- base_flag = object->base_flag;
- object->base_flag = context->duplicator->base_flag | BASE_FROM_DUPLI;
- }
-
- int visibility = BKE_object_visibility(object,
- usd_export_context_.export_params.evaluation_mode);
-
- if (is_dupli) {
- object->base_flag = base_flag;
- }
-
- return (visibility & OB_VISIBLE_SELF) != 0;
+ return context->is_object_visible(usd_export_context_.export_params.evaluation_mode);
}
void USDGenericMeshWriter::do_write(HierarchyContext &context)