diff options
Diffstat (limited to 'source/blender/depsgraph/intern/depsgraph_type.h')
-rw-r--r-- | source/blender/depsgraph/intern/depsgraph_type.h | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/source/blender/depsgraph/intern/depsgraph_type.h b/source/blender/depsgraph/intern/depsgraph_type.h index 5233b6d018d..d34b6d724cb 100644 --- a/source/blender/depsgraph/intern/depsgraph_type.h +++ b/source/blender/depsgraph/intern/depsgraph_type.h @@ -39,6 +39,8 @@ struct Depsgraph; +struct CustomData_MeshMasks; + namespace DEG { /* Commonly used types. */ @@ -70,4 +72,94 @@ enum eUpdateSource { DEG_UPDATE_SOURCE_VISIBILITY = (1 << 3), }; +/* C++ wrapper around DNA's CustomData_MeshMasks struct. */ +struct DEGCustomDataMeshMasks { + uint64_t vert_mask; + uint64_t edge_mask; + uint64_t face_mask; + uint64_t loop_mask; + uint64_t poly_mask; + + DEGCustomDataMeshMasks() + : vert_mask(0), + edge_mask(0), + face_mask(0), + loop_mask(0), + poly_mask(0) + { + } + + explicit DEGCustomDataMeshMasks(const CustomData_MeshMasks *other); + + DEGCustomDataMeshMasks& operator|=(const DEGCustomDataMeshMasks& other) + { + this->vert_mask |= other.vert_mask; + this->edge_mask |= other.edge_mask; + this->face_mask |= other.face_mask; + this->loop_mask |= other.loop_mask; + this->poly_mask |= other.poly_mask; + return *this; + } + + DEGCustomDataMeshMasks operator|(const DEGCustomDataMeshMasks& other) const + { + DEGCustomDataMeshMasks result; + result.vert_mask = this->vert_mask | other.vert_mask; + result.edge_mask = this->edge_mask | other.edge_mask; + result.face_mask = this->face_mask | other.face_mask; + result.loop_mask = this->loop_mask | other.loop_mask; + result.poly_mask = this->poly_mask | other.poly_mask; + return result; + } + + bool operator==(const DEGCustomDataMeshMasks& other) const + { + return (this->vert_mask == other.vert_mask && + this->edge_mask == other.edge_mask && + this->face_mask == other.face_mask && + this->loop_mask == other.loop_mask && + this->poly_mask == other.poly_mask); + } + + bool operator!=(const DEGCustomDataMeshMasks& other) const + { + return !(*this == other); + } + + static DEGCustomDataMeshMasks MaskVert(const uint64_t vert_mask) + { + DEGCustomDataMeshMasks result; + result.vert_mask = vert_mask; + return result; + } + + static DEGCustomDataMeshMasks MaskEdge(const uint64_t edge_mask) + { + DEGCustomDataMeshMasks result; + result.edge_mask = edge_mask; + return result; + } + + static DEGCustomDataMeshMasks MaskFace(const uint64_t face_mask) + { + DEGCustomDataMeshMasks result; + result.face_mask = face_mask; + return result; + } + + static DEGCustomDataMeshMasks MaskLoop(const uint64_t loop_mask) + { + DEGCustomDataMeshMasks result; + result.loop_mask = loop_mask; + return result; + } + + static DEGCustomDataMeshMasks MaskPoly(const uint64_t poly_mask) + { + DEGCustomDataMeshMasks result; + result.poly_mask = poly_mask; + return result; + } +}; + } // namespace DEG |