93 lines
2.2 KiB
C++
93 lines
2.2 KiB
C++
/* SPDX-FileCopyrightText: 2023 Blender Authors
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
#pragma once
|
|
|
|
/** \file
|
|
* \ingroup bke
|
|
* \brief External data structures for PBVH. Does not include data structures internal to the draw
|
|
* code.
|
|
*/
|
|
|
|
#include "BLI_compiler_compat.h"
|
|
#include "BLI_utildefines.h"
|
|
|
|
struct PBVHNode;
|
|
struct BMesh;
|
|
|
|
enum PBVHType {
|
|
PBVH_FACES,
|
|
PBVH_GRIDS,
|
|
PBVH_BMESH,
|
|
};
|
|
|
|
/* #PBVHNodeFlags is needed by `DRW_render.h` and `draw_cache.cc`. */
|
|
enum PBVHNodeFlags {
|
|
PBVH_Leaf = 1 << 0,
|
|
|
|
PBVH_UpdateNormals = 1 << 1,
|
|
PBVH_UpdateBB = 1 << 2,
|
|
PBVH_UpdateOriginalBB = 1 << 3,
|
|
PBVH_UpdateDrawBuffers = 1 << 4,
|
|
PBVH_UpdateRedraw = 1 << 5,
|
|
PBVH_UpdateMask = 1 << 6,
|
|
PBVH_UpdateVisibility = 1 << 8,
|
|
|
|
PBVH_RebuildDrawBuffers = 1 << 9,
|
|
PBVH_FullyHidden = 1 << 10,
|
|
PBVH_FullyMasked = 1 << 11,
|
|
PBVH_FullyUnmasked = 1 << 12,
|
|
|
|
PBVH_UpdateTopology = 1 << 13,
|
|
PBVH_UpdateColor = 1 << 14,
|
|
PBVH_RebuildPixels = 1 << 15,
|
|
PBVH_TexLeaf = 1 << 16,
|
|
/** Used internally by `pbvh_bmesh.cc`. */
|
|
PBVH_TopologyUpdated = 1 << 17,
|
|
};
|
|
ENUM_OPERATORS(PBVHNodeFlags, PBVH_TopologyUpdated);
|
|
|
|
/* A few C++ methods to play nice with sets and maps. */
|
|
#define PBVH_REF_CXX_METHODS(Class) \
|
|
bool operator==(const Class b) const \
|
|
{ \
|
|
return i == b.i; \
|
|
} \
|
|
uint64_t hash() const \
|
|
{ \
|
|
return i; \
|
|
}
|
|
|
|
struct PBVHVertRef {
|
|
intptr_t i;
|
|
|
|
PBVH_REF_CXX_METHODS(PBVHVertRef)
|
|
};
|
|
|
|
#define PBVH_REF_NONE -1LL
|
|
|
|
/* Public members of PBVH, used for inlined functions. */
|
|
struct PBVHPublic {
|
|
PBVHType type;
|
|
BMesh *bm;
|
|
};
|
|
|
|
struct PBVH;
|
|
struct PBVHNode;
|
|
|
|
BLI_INLINE PBVHType BKE_pbvh_type(const PBVH *pbvh)
|
|
{
|
|
return ((const PBVHPublic *)pbvh)->type;
|
|
}
|
|
|
|
/* Needed for the render engines integration. */
|
|
void BKE_pbvh_is_drawing_set(PBVH *pbvh, bool val);
|
|
void BKE_pbvh_draw_debug_cb(PBVH *pbvh,
|
|
void (*draw_fn)(PBVHNode *node,
|
|
void *user_data,
|
|
const float bmin[3],
|
|
const float bmax[3],
|
|
PBVHNodeFlags flag),
|
|
void *user_data);
|