sculpt-dev: commit prior to merge
Removed a bunch of debug stuff.
This commit is contained in:
parent
8a58f1f3bb
commit
5761ccbf22
|
@ -1136,7 +1136,7 @@ void BKE_pbvh_set_vemap(PBVH *pbvh, struct MeshElemMap *vemap);
|
|||
void BKE_pbvh_ignore_uvs_set(PBVH *pbvh, bool value);
|
||||
bool BKE_pbvh_cache_is_valid(const struct Object *ob,
|
||||
const struct Mesh *me,
|
||||
const PBVH *old,
|
||||
const PBVH *pbvh,
|
||||
int pbvh_type);
|
||||
bool BKE_pbvh_cache(const struct Mesh *me, PBVH *pbvh);
|
||||
PBVH *BKE_pbvh_get_or_free_cached(struct Object *ob, struct Mesh *me, PBVHType pbvh_type);
|
||||
|
@ -1148,9 +1148,10 @@ SculptPMap *BKE_pbvh_get_pmap(PBVH *pbvh);
|
|||
void BKE_pbvh_cache_remove(PBVH *pbvh);
|
||||
void BKE_pbvh_set_bmesh(PBVH *pbvh, struct BMesh *bm);
|
||||
void BKE_pbvh_free_bmesh(PBVH *pbvh, struct BMesh *bm);
|
||||
void BKE_pbvh_system_init();
|
||||
void BKE_pbvh_system_exit();
|
||||
void BKE_pbvh_system_init(void);
|
||||
void BKE_pbvh_system_exit(void);
|
||||
|
||||
SculptPMap *BKE_pbvh_make_pmap(const struct Mesh *me);
|
||||
void BKE_pbvh_pmap_aquire(SculptPMap *pmap);
|
||||
bool BKE_pbvh_pmap_release(SculptPMap *pmap);
|
||||
void BKE_pbvh_clear_cache(PBVH *preserve);
|
||||
|
|
|
@ -3132,7 +3132,7 @@ typedef struct TraceData {
|
|||
BMEdge *e;
|
||||
} TraceData;
|
||||
|
||||
ATTR_NO_OPT void col_on_vert_kill(BMesh *bm, BMVert *v, void *userdata)
|
||||
void col_on_vert_kill(BMesh *bm, BMVert *v, void *userdata)
|
||||
{
|
||||
TraceData *data = (TraceData *)userdata;
|
||||
PBVH *pbvh = data->pbvh;
|
||||
|
@ -3149,7 +3149,7 @@ ATTR_NO_OPT void col_on_vert_kill(BMesh *bm, BMVert *v, void *userdata)
|
|||
}
|
||||
}
|
||||
|
||||
ATTR_NO_OPT void col_on_edge_kill(BMesh *bm, BMEdge *e, void *userdata)
|
||||
void col_on_edge_kill(BMesh *bm, BMEdge *e, void *userdata)
|
||||
{
|
||||
TraceData *data = (TraceData *)userdata;
|
||||
PBVH *pbvh = data->pbvh;
|
||||
|
@ -3161,7 +3161,7 @@ ATTR_NO_OPT void col_on_edge_kill(BMesh *bm, BMEdge *e, void *userdata)
|
|||
}
|
||||
}
|
||||
|
||||
ATTR_NO_OPT void col_on_face_kill(BMesh *bm, BMFace *f, void *userdata)
|
||||
void col_on_face_kill(BMesh *bm, BMFace *f, void *userdata)
|
||||
{
|
||||
TraceData *data = (TraceData *)userdata;
|
||||
PBVH *pbvh = data->pbvh;
|
||||
|
@ -3176,7 +3176,7 @@ ATTR_NO_OPT void col_on_face_kill(BMesh *bm, BMFace *f, void *userdata)
|
|||
}
|
||||
}
|
||||
|
||||
ATTR_NO_OPT void col_on_vert_add(BMesh *bm, BMVert *v, void *userdata)
|
||||
void col_on_vert_add(BMesh *bm, BMVert *v, void *userdata)
|
||||
{
|
||||
TraceData *data = (TraceData *)userdata;
|
||||
PBVH *pbvh = data->pbvh;
|
||||
|
@ -3187,7 +3187,7 @@ ATTR_NO_OPT void col_on_vert_add(BMesh *bm, BMVert *v, void *userdata)
|
|||
BM_log_vert_topo_post(pbvh->bm_log, v);
|
||||
}
|
||||
|
||||
ATTR_NO_OPT void col_on_edge_add(BMesh *bm, BMEdge *e, void *userdata)
|
||||
void col_on_edge_add(BMesh *bm, BMEdge *e, void *userdata)
|
||||
{
|
||||
TraceData *data = (TraceData *)userdata;
|
||||
PBVH *pbvh = data->pbvh;
|
||||
|
@ -3195,7 +3195,7 @@ ATTR_NO_OPT void col_on_edge_add(BMesh *bm, BMEdge *e, void *userdata)
|
|||
BM_log_edge_topo_post(pbvh->bm_log, e);
|
||||
}
|
||||
|
||||
ATTR_NO_OPT void col_on_face_add(BMesh *bm, BMFace *f, void *userdata)
|
||||
void col_on_face_add(BMesh *bm, BMFace *f, void *userdata)
|
||||
{
|
||||
TraceData *data = (TraceData *)userdata;
|
||||
PBVH *pbvh = data->pbvh;
|
||||
|
@ -3343,12 +3343,12 @@ void vert_ring_do_apply(BMVert *v,
|
|||
const int COLLAPSE_TAG = BM_ELEM_INTERNAL_TAG;
|
||||
const int COLLAPSE_FACE_TAG = BM_ELEM_TAG_ALT;
|
||||
|
||||
ATTR_NO_OPT static void vert_ring_do(BMVert *v,
|
||||
void (*callback)(BMElem *elem, void *userdata),
|
||||
void *userdata,
|
||||
int tag,
|
||||
int facetag,
|
||||
int depth)
|
||||
static void vert_ring_do(BMVert *v,
|
||||
void (*callback)(BMElem *elem, void *userdata),
|
||||
void *userdata,
|
||||
int tag,
|
||||
int facetag,
|
||||
int depth)
|
||||
{
|
||||
if (!v->e) {
|
||||
v->head.hflag &= ~tag;
|
||||
|
@ -3361,12 +3361,12 @@ ATTR_NO_OPT static void vert_ring_do(BMVert *v,
|
|||
vert_ring_do_apply(v, callback, userdata, tag, facetag, depth);
|
||||
}
|
||||
|
||||
ATTR_NO_OPT static void edge_ring_do(BMEdge *e,
|
||||
void (*callback)(BMElem *elem, void *userdata),
|
||||
void *userdata,
|
||||
int tag,
|
||||
int facetag,
|
||||
int depth)
|
||||
static void edge_ring_do(BMEdge *e,
|
||||
void (*callback)(BMElem *elem, void *userdata),
|
||||
void *userdata,
|
||||
int tag,
|
||||
int facetag,
|
||||
int depth)
|
||||
{
|
||||
|
||||
vert_ring_do_tag(e->v1, tag, facetag, depth);
|
||||
|
@ -3449,7 +3449,7 @@ ATTR_NO_OPT static void edge_ring_do(BMEdge *e,
|
|||
}
|
||||
}
|
||||
|
||||
ATTR_NO_OPT static void collapse_ring_callback_pre2(BMElem *elem, void *userdata)
|
||||
static void collapse_ring_callback_pre2(BMElem *elem, void *userdata)
|
||||
{
|
||||
TraceData *data = (TraceData *)userdata;
|
||||
PBVH *pbvh = data->pbvh;
|
||||
|
@ -3470,7 +3470,7 @@ ATTR_NO_OPT static void collapse_ring_callback_pre2(BMElem *elem, void *userdata
|
|||
}
|
||||
}
|
||||
|
||||
ATTR_NO_OPT static void collapse_ring_callback_pre(BMElem *elem, void *userdata)
|
||||
static void collapse_ring_callback_pre(BMElem *elem, void *userdata)
|
||||
{
|
||||
bm_logstack_push();
|
||||
|
||||
|
@ -3537,7 +3537,7 @@ ATTR_NO_OPT static void collapse_ring_callback_pre(BMElem *elem, void *userdata)
|
|||
bm_logstack_pop();
|
||||
}
|
||||
|
||||
ATTR_NO_OPT static void collapse_ring_callback_post(BMElem *elem, void *userdata)
|
||||
static void collapse_ring_callback_post(BMElem *elem, void *userdata)
|
||||
{
|
||||
bm_logstack_push();
|
||||
|
||||
|
@ -3581,13 +3581,13 @@ ATTR_NO_OPT static void collapse_ring_callback_post(BMElem *elem, void *userdata
|
|||
bm_logstack_pop();
|
||||
}
|
||||
|
||||
ATTR_NO_OPT static BMVert *pbvh_bmesh_collapse_edge(PBVH *pbvh,
|
||||
BMEdge *e,
|
||||
BMVert *v1,
|
||||
BMVert *v2,
|
||||
GHash *deleted_verts,
|
||||
BLI_Buffer *deleted_faces,
|
||||
EdgeQueueContext *eq_ctx)
|
||||
static BMVert *pbvh_bmesh_collapse_edge(PBVH *pbvh,
|
||||
BMEdge *e,
|
||||
BMVert *v1,
|
||||
BMVert *v2,
|
||||
GHash *deleted_verts,
|
||||
BLI_Buffer *deleted_faces,
|
||||
EdgeQueueContext *eq_ctx)
|
||||
{
|
||||
bm_logstack_push();
|
||||
|
||||
|
@ -3983,7 +3983,7 @@ cleanup_valence_3_4(EdgeQueueContext *ectx,
|
|||
const bool use_frontface,
|
||||
const bool use_projected)
|
||||
{
|
||||
return false; //XXX not working with local collapse/subdivide mode
|
||||
return false; // XXX not working with local collapse/subdivide mode
|
||||
bool modified = false;
|
||||
|
||||
bm_logstack_push();
|
||||
|
@ -4473,20 +4473,20 @@ float mask_cb_nop(SculptVertRef vertex, void *userdata)
|
|||
}
|
||||
|
||||
/* Collapse short edges, subdivide long edges */
|
||||
ATTR_NO_OPT bool BKE_pbvh_bmesh_update_topology(PBVH *pbvh,
|
||||
PBVHTopologyUpdateMode mode,
|
||||
const float center[3],
|
||||
const float view_normal[3],
|
||||
float radius,
|
||||
const bool use_frontface,
|
||||
const bool use_projected,
|
||||
int sym_axis,
|
||||
bool updatePBVH,
|
||||
DyntopoMaskCB mask_cb,
|
||||
void *mask_cb_data,
|
||||
int custom_max_steps,
|
||||
bool disable_surface_relax,
|
||||
bool is_snake_hook)
|
||||
bool BKE_pbvh_bmesh_update_topology(PBVH *pbvh,
|
||||
PBVHTopologyUpdateMode mode,
|
||||
const float center[3],
|
||||
const float view_normal[3],
|
||||
float radius,
|
||||
const bool use_frontface,
|
||||
const bool use_projected,
|
||||
int sym_axis,
|
||||
bool updatePBVH,
|
||||
DyntopoMaskCB mask_cb,
|
||||
void *mask_cb_data,
|
||||
int custom_max_steps,
|
||||
bool disable_surface_relax,
|
||||
bool is_snake_hook)
|
||||
{
|
||||
/* Disable surface smooth if uv layers are present, to avoid expensive reprojection operation. */
|
||||
if (!is_snake_hook && CustomData_has_layer(&pbvh->bm->ldata, CD_MLOOPUV)) {
|
||||
|
@ -4953,12 +4953,12 @@ static const int splitmap[43][16] = {
|
|||
{6, -1, 3, -1, 5, -1, 1, -1}, // 42
|
||||
};
|
||||
|
||||
ATTR_NO_OPT static void pbvh_split_edges(EdgeQueueContext *eq_ctx,
|
||||
PBVH *pbvh,
|
||||
BMesh *bm,
|
||||
BMEdge **edges1,
|
||||
int totedge,
|
||||
bool ignore_isolated_edges)
|
||||
static void pbvh_split_edges(EdgeQueueContext *eq_ctx,
|
||||
PBVH *pbvh,
|
||||
BMesh *bm,
|
||||
BMEdge **edges1,
|
||||
int totedge,
|
||||
bool ignore_isolated_edges)
|
||||
{
|
||||
bm_logstack_push();
|
||||
|
||||
|
|
|
@ -1859,6 +1859,18 @@ static void sculpt_update_object(Depsgraph *depsgraph,
|
|||
|
||||
for (a = 0; a < me->totvert; a++) {
|
||||
invert_m3(ss->deform_imats[a]);
|
||||
|
||||
float *co = ss->deform_cos[a];
|
||||
float ff = dot_v3v3(co, co);
|
||||
if (isnan(ff) || !isfinite(ff)) {
|
||||
printf("%s: nan1! %.4f %.4f %.4f\n", __func__, co[0], co[1], co[2]);
|
||||
}
|
||||
|
||||
ff = determinant_m3_array(ss->deform_imats[a]);
|
||||
|
||||
if (isnan(ff) || !isfinite(ff)) {
|
||||
printf("%s: nan2!\n", __func__);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2403,7 +2415,7 @@ void BKE_sculpt_ensure_orig_mesh_data(Scene *scene, Object *object)
|
|||
DEG_id_tag_update(&object->id, ID_RECALC_GEOMETRY);
|
||||
}
|
||||
|
||||
ATTR_NO_OPT static PBVH *build_pbvh_for_dynamic_topology(Object *ob, bool update_sculptverts)
|
||||
static PBVH *build_pbvh_for_dynamic_topology(Object *ob, bool update_sculptverts)
|
||||
{
|
||||
Mesh *me = BKE_object_get_original_mesh(ob);
|
||||
|
||||
|
@ -2454,9 +2466,7 @@ ATTR_NO_OPT static PBVH *build_pbvh_for_dynamic_topology(Object *ob, bool update
|
|||
return pbvh;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT static PBVH *build_pbvh_from_regular_mesh(Object *ob,
|
||||
Mesh *me_eval_deform,
|
||||
bool respect_hide)
|
||||
static PBVH *build_pbvh_from_regular_mesh(Object *ob, Mesh *me_eval_deform, bool respect_hide)
|
||||
{
|
||||
SculptSession *ss = ob->sculpt;
|
||||
Mesh *me = BKE_object_get_original_mesh(ob);
|
||||
|
|
|
@ -160,8 +160,8 @@ static void update_node_vb(PBVH *pbvh, PBVHNode *node, int updateflag)
|
|||
BB_reset(&vb);
|
||||
BB_reset(&orig_vb);
|
||||
|
||||
bool do_orig = updateflag | PBVH_UpdateOriginalBB;
|
||||
bool do_normal = updateflag | PBVH_UpdateBB;
|
||||
bool do_orig = updateflag & PBVH_UpdateOriginalBB;
|
||||
bool do_normal = updateflag & PBVH_UpdateBB;
|
||||
|
||||
if (node->flag & PBVH_Leaf) {
|
||||
PBVHVertexIter vd;
|
||||
|
@ -792,7 +792,7 @@ PBVH *BKE_pbvh_new(void)
|
|||
return pbvh;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT void BKE_pbvh_free(PBVH *pbvh)
|
||||
void BKE_pbvh_free(PBVH *pbvh)
|
||||
{
|
||||
BKE_pbvh_cache_remove(pbvh);
|
||||
|
||||
|
@ -958,6 +958,11 @@ static PBVHNode *pbvh_iter_next_occluded(PBVHIter *iter)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
float ff = dot_v3v3(node->vb.bmin, node->vb.bmax);
|
||||
if (isnan(ff) || !isfinite(ff)) {
|
||||
printf("%s: nan!\n", __func__);
|
||||
}
|
||||
|
||||
if (iter->scb && !iter->scb(node, iter->search_data)) {
|
||||
continue; /* don't traverse, outside of search zone */
|
||||
}
|
||||
|
@ -1173,8 +1178,9 @@ static void pbvh_update_normals_clear_task_cb(void *__restrict userdata,
|
|||
}
|
||||
}
|
||||
|
||||
ATTR_NO_OPT static void pbvh_update_normals_accum_task_cb(
|
||||
void *__restrict userdata, const int n, const TaskParallelTLS *__restrict UNUSED(tls))
|
||||
static void pbvh_update_normals_accum_task_cb(void *__restrict userdata,
|
||||
const int n,
|
||||
const TaskParallelTLS *__restrict UNUSED(tls))
|
||||
{
|
||||
PBVHUpdateData *data = userdata;
|
||||
|
||||
|
@ -3737,7 +3743,7 @@ const float (*BKE_pbvh_get_vert_normals(const PBVH *pbvh))[3]
|
|||
void BKE_pbvh_subdiv_ccg_set(PBVH *pbvh, SubdivCCG *subdiv_ccg)
|
||||
{
|
||||
pbvh->subdiv_ccg = subdiv_ccg;
|
||||
pbvh->gridfaces = (void**) subdiv_ccg->grid_faces;
|
||||
pbvh->gridfaces = (void **)subdiv_ccg->grid_faces;
|
||||
pbvh->grid_hidden = subdiv_ccg->grid_hidden;
|
||||
pbvh->grid_flag_mats = subdiv_ccg->grid_flag_mats;
|
||||
pbvh->grids = subdiv_ccg->grids;
|
||||
|
@ -4860,10 +4866,10 @@ static bool customdata_is_same(const CustomData *a, const CustomData *b)
|
|||
return memcmp(a, b, sizeof(CustomData)) == 0;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT bool BKE_pbvh_cache_is_valid(const Object *ob,
|
||||
const Mesh *me,
|
||||
const PBVH *pbvh,
|
||||
PBVHType pbvh_type)
|
||||
bool BKE_pbvh_cache_is_valid(const struct Object *ob,
|
||||
const struct Mesh *me,
|
||||
const PBVH *pbvh,
|
||||
int pbvh_type)
|
||||
{
|
||||
if (pbvh->invalid) {
|
||||
printf("pbvh invalid!\n");
|
||||
|
@ -4980,7 +4986,7 @@ void BKE_pbvh_clear_cache(PBVH *preserve)
|
|||
pbvh_clear_cached_pbvhs(NULL);
|
||||
}
|
||||
|
||||
ATTR_NO_OPT PBVH *BKE_pbvh_get_or_free_cached(Object *ob, Mesh *me, PBVHType pbvh_type)
|
||||
PBVH *BKE_pbvh_get_or_free_cached(Object *ob, Mesh *me, PBVHType pbvh_type)
|
||||
{
|
||||
Object *ob_orig = DEG_get_original_object(ob);
|
||||
|
||||
|
@ -5019,7 +5025,7 @@ ATTR_NO_OPT PBVH *BKE_pbvh_get_or_free_cached(Object *ob, Mesh *me, PBVHType pbv
|
|||
return NULL;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT void BKE_pbvh_set_cached(Object *ob, PBVH *pbvh)
|
||||
void BKE_pbvh_set_cached(Object *ob, PBVH *pbvh)
|
||||
{
|
||||
if (!pbvh) {
|
||||
return;
|
||||
|
@ -5087,7 +5093,7 @@ void BKE_pbvh_set_bmesh(PBVH *pbvh, BMesh *bm)
|
|||
pbvh->bm = bm;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT void BKE_pbvh_free_bmesh(PBVH *pbvh, BMesh *bm)
|
||||
void BKE_pbvh_free_bmesh(PBVH *pbvh, BMesh *bm)
|
||||
{
|
||||
if (pbvh) {
|
||||
pbvh->bm = NULL;
|
||||
|
@ -5159,15 +5165,15 @@ SculptPMap *BKE_pbvh_make_pmap(const struct Mesh *me)
|
|||
SculptPMap *pmap = MEM_callocN(sizeof(*pmap), "SculptPMap");
|
||||
|
||||
BKE_mesh_vert_poly_map_create(&pmap->pmap,
|
||||
&pmap->pmap_mem,
|
||||
me->mvert,
|
||||
me->medge,
|
||||
me->mpoly,
|
||||
me->mloop,
|
||||
me->totvert,
|
||||
me->totpoly,
|
||||
me->totloop,
|
||||
false);
|
||||
&pmap->pmap_mem,
|
||||
me->mvert,
|
||||
me->medge,
|
||||
me->mpoly,
|
||||
me->mloop,
|
||||
me->totvert,
|
||||
me->totpoly,
|
||||
me->totloop,
|
||||
false);
|
||||
|
||||
pmap->refcount = 1;
|
||||
|
||||
|
@ -5197,4 +5203,3 @@ bool BKE_pbvh_pmap_release(SculptPMap *pmap)
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -2559,22 +2559,22 @@ void BKE_pbvh_set_bm_log(PBVH *pbvh, struct BMLog *log)
|
|||
pbvh->bm_log = log;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT bool BKE_pbvh_bmesh_update_topology_nodes(PBVH *pbvh,
|
||||
bool (*searchcb)(PBVHNode *node, void *data),
|
||||
void (*undopush)(PBVHNode *node, void *data),
|
||||
void *searchdata,
|
||||
PBVHTopologyUpdateMode mode,
|
||||
const float center[3],
|
||||
const float view_normal[3],
|
||||
float radius,
|
||||
const bool use_frontface,
|
||||
const bool use_projected,
|
||||
int sym_axis,
|
||||
bool updatePBVH,
|
||||
DyntopoMaskCB mask_cb,
|
||||
void *mask_cb_data,
|
||||
bool disable_surface_relax,
|
||||
bool is_snake_hook)
|
||||
bool BKE_pbvh_bmesh_update_topology_nodes(PBVH *pbvh,
|
||||
bool (*searchcb)(PBVHNode *node, void *data),
|
||||
void (*undopush)(PBVHNode *node, void *data),
|
||||
void *searchdata,
|
||||
PBVHTopologyUpdateMode mode,
|
||||
const float center[3],
|
||||
const float view_normal[3],
|
||||
float radius,
|
||||
const bool use_frontface,
|
||||
const bool use_projected,
|
||||
int sym_axis,
|
||||
bool updatePBVH,
|
||||
DyntopoMaskCB mask_cb,
|
||||
void *mask_cb_data,
|
||||
bool disable_surface_relax,
|
||||
bool is_snake_hook)
|
||||
{
|
||||
bool modified = false;
|
||||
PBVHNode **nodes = NULL;
|
||||
|
|
|
@ -18,7 +18,7 @@ typedef struct MinMaxHeap {
|
|||
int totnode, reserved;
|
||||
} MinMaxHeap;
|
||||
|
||||
ATTR_NO_OPT static void heap_reserve(MinMaxHeap *heap, unsigned int n)
|
||||
static void heap_reserve(MinMaxHeap *heap, unsigned int n)
|
||||
{
|
||||
if (heap->reserved >= n) {
|
||||
return;
|
||||
|
@ -42,7 +42,7 @@ ATTR_NO_OPT static void heap_reserve(MinMaxHeap *heap, unsigned int n)
|
|||
*
|
||||
* \note Use when the size of the heap is known in advance.
|
||||
*/
|
||||
ATTR_NO_OPT MinMaxHeap *BLI_mm_heap_new_ex(unsigned int tot_reserve)
|
||||
MinMaxHeap *BLI_mm_heap_new_ex(unsigned int tot_reserve)
|
||||
{
|
||||
MinMaxHeap *heap = MEM_callocN(sizeof(*heap), __func__);
|
||||
if (tot_reserve) {
|
||||
|
@ -52,7 +52,7 @@ ATTR_NO_OPT MinMaxHeap *BLI_mm_heap_new_ex(unsigned int tot_reserve)
|
|||
return heap;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT MinMaxHeap *BLI_mm_heap_new()
|
||||
MinMaxHeap *BLI_mm_heap_new()
|
||||
{
|
||||
return BLI_mm_heap_new_ex(256);
|
||||
}
|
||||
|
@ -69,13 +69,13 @@ void BLI_mm_heap_clear(MinMaxHeap *heap, MinMaxHeapFreeFP ptrfreefp)
|
|||
heap->totnode = 0;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT void BLI_mm_heap_free(MinMaxHeap *heap, MinMaxHeapFreeFP ptrfreefp)
|
||||
void BLI_mm_heap_free(MinMaxHeap *heap, MinMaxHeapFreeFP ptrfreefp)
|
||||
{
|
||||
BLI_mm_heap_clear(heap, ptrfreefp);
|
||||
MEM_freeN(heap);
|
||||
}
|
||||
|
||||
ATTR_NO_OPT static MinMaxHeapNode *heap_make_node(MinMaxHeap *heap)
|
||||
static MinMaxHeapNode *heap_make_node(MinMaxHeap *heap)
|
||||
{
|
||||
heap_reserve(heap, heap->totnode + 1);
|
||||
|
||||
|
@ -87,8 +87,7 @@ ATTR_NO_OPT static MinMaxHeapNode *heap_make_node(MinMaxHeap *heap)
|
|||
return node;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT static MinMaxHeapNode *heap_descent_min2(MinMaxHeap *heap,
|
||||
MinMaxHeapNode *n)
|
||||
static MinMaxHeapNode *heap_descent_min2(MinMaxHeap *heap, MinMaxHeapNode *n)
|
||||
{
|
||||
if (n->child1 != -1 && n->child2 != -1) {
|
||||
MinMaxHeapNode *n1 = heap->nodes + n->child1;
|
||||
|
@ -107,7 +106,7 @@ ATTR_NO_OPT static MinMaxHeapNode *heap_descent_min2(MinMaxHeap *heap,
|
|||
}
|
||||
|
||||
/* find node grandchild */
|
||||
ATTR_NO_OPT static MinMaxHeapNode *heap_descent_min(MinMaxHeap *heap, MinMaxHeapNode *node)
|
||||
static MinMaxHeapNode *heap_descent_min(MinMaxHeap *heap, MinMaxHeapNode *node)
|
||||
{
|
||||
if (node->child1 != -1 && node->child2 != -1) {
|
||||
MinMaxHeapNode *n1 = heap->nodes + node->child1;
|
||||
|
@ -128,8 +127,7 @@ ATTR_NO_OPT static MinMaxHeapNode *heap_descent_min(MinMaxHeap *heap, MinMaxHeap
|
|||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
ATTR_NO_OPT static MinMaxHeapNode *heap_descent_max2(MinMaxHeap *heap, MinMaxHeapNode *n)
|
||||
static MinMaxHeapNode *heap_descent_max2(MinMaxHeap *heap, MinMaxHeapNode *n)
|
||||
{
|
||||
if (n->child1 != -1 && n->child2 != -1) {
|
||||
MinMaxHeapNode *n1 = heap->nodes + n->child1;
|
||||
|
@ -148,7 +146,7 @@ ATTR_NO_OPT static MinMaxHeapNode *heap_descent_max2(MinMaxHeap *heap, MinMaxHea
|
|||
}
|
||||
|
||||
/* find node grandchild */
|
||||
ATTR_NO_OPT static MinMaxHeapNode *heap_descent_max(MinMaxHeap *heap, MinMaxHeapNode *node)
|
||||
static MinMaxHeapNode *heap_descent_max(MinMaxHeap *heap, MinMaxHeapNode *node)
|
||||
{
|
||||
if (node->child1 != -1 && node->child2 != -1) {
|
||||
MinMaxHeapNode *n1 = heap->nodes + node->child1;
|
||||
|
@ -169,7 +167,7 @@ ATTR_NO_OPT static MinMaxHeapNode *heap_descent_max(MinMaxHeap *heap, MinMaxHeap
|
|||
return NULL;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT static MinMaxHeapNode *heap_push_down_min(MinMaxHeap *heap, MinMaxHeapNode *node)
|
||||
static MinMaxHeapNode *heap_push_down_min(MinMaxHeap *heap, MinMaxHeapNode *node)
|
||||
{
|
||||
MinMaxHeapNode *ret = NULL;
|
||||
|
||||
|
@ -209,7 +207,7 @@ ATTR_NO_OPT static MinMaxHeapNode *heap_push_down_min(MinMaxHeap *heap, MinMaxHe
|
|||
return ret ? ret : node;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT static MinMaxHeapNode *heap_push_down_max(MinMaxHeap *heap, MinMaxHeapNode *node)
|
||||
static MinMaxHeapNode *heap_push_down_max(MinMaxHeap *heap, MinMaxHeapNode *node)
|
||||
{
|
||||
MinMaxHeapNode *ret = NULL;
|
||||
|
||||
|
@ -245,7 +243,7 @@ ATTR_NO_OPT static MinMaxHeapNode *heap_push_down_max(MinMaxHeap *heap, MinMaxHe
|
|||
return ret ? ret : node;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT static int heap_get_level(const MinMaxHeap *heap, const MinMaxHeapNode *node)
|
||||
static int heap_get_level(const MinMaxHeap *heap, const MinMaxHeapNode *node)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
|
@ -257,7 +255,7 @@ ATTR_NO_OPT static int heap_get_level(const MinMaxHeap *heap, const MinMaxHeapNo
|
|||
return i;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT static MinMaxHeapNode *heap_push_down(MinMaxHeap *heap, MinMaxHeapNode *node)
|
||||
static MinMaxHeapNode *heap_push_down(MinMaxHeap *heap, MinMaxHeapNode *node)
|
||||
{
|
||||
int i = heap_get_level(heap, node);
|
||||
|
||||
|
@ -269,7 +267,7 @@ ATTR_NO_OPT static MinMaxHeapNode *heap_push_down(MinMaxHeap *heap, MinMaxHeapNo
|
|||
}
|
||||
}
|
||||
|
||||
ATTR_NO_OPT static MinMaxHeapNode *heap_push_up_min(MinMaxHeap *heap, MinMaxHeapNode *node)
|
||||
static MinMaxHeapNode *heap_push_up_min(MinMaxHeap *heap, MinMaxHeapNode *node)
|
||||
{
|
||||
while (node->parent != -1) {
|
||||
MinMaxHeapNode *parent = heap->nodes + node->parent;
|
||||
|
@ -290,7 +288,7 @@ ATTR_NO_OPT static MinMaxHeapNode *heap_push_up_min(MinMaxHeap *heap, MinMaxHeap
|
|||
return node;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT static MinMaxHeapNode *heap_push_up_max(MinMaxHeap *heap, MinMaxHeapNode *node)
|
||||
static MinMaxHeapNode *heap_push_up_max(MinMaxHeap *heap, MinMaxHeapNode *node)
|
||||
{
|
||||
while (node->parent != -1) {
|
||||
MinMaxHeapNode *parent = heap->nodes + node->parent;
|
||||
|
@ -311,7 +309,7 @@ ATTR_NO_OPT static MinMaxHeapNode *heap_push_up_max(MinMaxHeap *heap, MinMaxHeap
|
|||
return node;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT static MinMaxHeapNode *heap_push_up(MinMaxHeap *heap, MinMaxHeapNode *node)
|
||||
static MinMaxHeapNode *heap_push_up(MinMaxHeap *heap, MinMaxHeapNode *node)
|
||||
{
|
||||
int i = heap_get_level(heap, node);
|
||||
|
||||
|
@ -349,7 +347,7 @@ ATTR_NO_OPT static MinMaxHeapNode *heap_push_up(MinMaxHeap *heap, MinMaxHeapNode
|
|||
* Insert heap node with a value (often a 'cost') and pointer into the heap,
|
||||
* duplicate values are allowed.
|
||||
*/
|
||||
ATTR_NO_OPT MinMaxHeapNode *BLI_mm_heap_insert(MinMaxHeap *heap, float value, void *ptr)
|
||||
MinMaxHeapNode *BLI_mm_heap_insert(MinMaxHeap *heap, float value, void *ptr)
|
||||
{
|
||||
MinMaxHeapNode *node = heap_make_node(heap);
|
||||
|
||||
|
@ -378,10 +376,10 @@ ATTR_NO_OPT MinMaxHeapNode *BLI_mm_heap_insert(MinMaxHeap *heap, float value, vo
|
|||
/**
|
||||
* Convenience function since this is a common pattern.
|
||||
*/
|
||||
ATTR_NO_OPT void BLI_mm_heap_insert_or_update(MinMaxHeap *heap,
|
||||
MinMaxHeapNode **node_p,
|
||||
float value,
|
||||
void *ptr)
|
||||
void BLI_mm_heap_insert_or_update(MinMaxHeap *heap,
|
||||
MinMaxHeapNode **node_p,
|
||||
float value,
|
||||
void *ptr)
|
||||
{
|
||||
MinMaxHeapNode *node = *node_p;
|
||||
|
||||
|
@ -396,27 +394,27 @@ ATTR_NO_OPT void BLI_mm_heap_insert_or_update(MinMaxHeap *heap,
|
|||
*node_p = node;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT bool BLI_mm_heap_is_empty(const MinMaxHeap *heap)
|
||||
bool BLI_mm_heap_is_empty(const MinMaxHeap *heap)
|
||||
{
|
||||
return heap->totnode == 0;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT unsigned int BLI_mm_heap_len(const MinMaxHeap *heap)
|
||||
unsigned int BLI_mm_heap_len(const MinMaxHeap *heap)
|
||||
{
|
||||
return heap->totnode;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT MinMaxHeapNode *BLI_mm_heap_min(const MinMaxHeap *heap)
|
||||
MinMaxHeapNode *BLI_mm_heap_min(const MinMaxHeap *heap)
|
||||
{
|
||||
return heap->nodes;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT float BLI_mm_heap_min_value(const MinMaxHeap *heap)
|
||||
float BLI_mm_heap_min_value(const MinMaxHeap *heap)
|
||||
{
|
||||
return heap->nodes[0].value;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT MinMaxHeapNode *BLI_mm_heap_max(const MinMaxHeap *heap)
|
||||
MinMaxHeapNode *BLI_mm_heap_max(const MinMaxHeap *heap)
|
||||
{
|
||||
if (heap->totnode == 1) {
|
||||
return heap->nodes;
|
||||
|
@ -430,12 +428,12 @@ ATTR_NO_OPT MinMaxHeapNode *BLI_mm_heap_max(const MinMaxHeap *heap)
|
|||
}
|
||||
}
|
||||
|
||||
ATTR_NO_OPT float BLI_mm_heap_max_value(const MinMaxHeap *heap)
|
||||
float BLI_mm_heap_max_value(const MinMaxHeap *heap)
|
||||
{
|
||||
return BLI_mm_heap_max(heap)->value;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT static MinMaxHeapNode *heap_pop_last(MinMaxHeap *heap)
|
||||
static MinMaxHeapNode *heap_pop_last(MinMaxHeap *heap)
|
||||
{
|
||||
MinMaxHeapNode *last = heap->nodes + heap->totnode - 1;
|
||||
|
||||
|
@ -454,7 +452,7 @@ ATTR_NO_OPT static MinMaxHeapNode *heap_pop_last(MinMaxHeap *heap)
|
|||
return last;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT void *BLI_mm_heap_pop_min(MinMaxHeap *heap)
|
||||
void *BLI_mm_heap_pop_min(MinMaxHeap *heap)
|
||||
{
|
||||
void *ret = heap->nodes[0].ptr;
|
||||
|
||||
|
@ -485,7 +483,7 @@ ATTR_NO_OPT void *BLI_mm_heap_pop_min(MinMaxHeap *heap)
|
|||
return ret;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT void *BLI_mm_heap_pop_max(MinMaxHeap *heap)
|
||||
void *BLI_mm_heap_pop_max(MinMaxHeap *heap)
|
||||
{
|
||||
MinMaxHeapNode *node = BLI_mm_heap_max(heap);
|
||||
|
||||
|
@ -535,9 +533,7 @@ ATTR_NO_OPT void *BLI_mm_heap_pop_max(MinMaxHeap *heap)
|
|||
return ret;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT MinMaxHeapNode *BLI_mm_heap_node_value_update(MinMaxHeap *heap,
|
||||
MinMaxHeapNode *node,
|
||||
float value)
|
||||
MinMaxHeapNode *BLI_mm_heap_node_value_update(MinMaxHeap *heap, MinMaxHeapNode *node, float value)
|
||||
{
|
||||
node->value = value;
|
||||
|
||||
|
@ -547,10 +543,10 @@ ATTR_NO_OPT MinMaxHeapNode *BLI_mm_heap_node_value_update(MinMaxHeap *heap,
|
|||
return node;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT MinMaxHeapNode *BLI_mm_heap_node_value_update_ptr(MinMaxHeap *heap,
|
||||
MinMaxHeapNode *node,
|
||||
float value,
|
||||
void *ptr)
|
||||
MinMaxHeapNode *BLI_mm_heap_node_value_update_ptr(MinMaxHeap *heap,
|
||||
MinMaxHeapNode *node,
|
||||
float value,
|
||||
void *ptr)
|
||||
{
|
||||
node->value = value;
|
||||
node->ptr = ptr;
|
||||
|
@ -564,26 +560,26 @@ ATTR_NO_OPT MinMaxHeapNode *BLI_mm_heap_node_value_update_ptr(MinMaxHeap *heap,
|
|||
/**
|
||||
* Return the value or pointer of a heap node.
|
||||
*/
|
||||
ATTR_NO_OPT float BLI_mm_heap_node_value(const MinMaxHeapNode *node)
|
||||
float BLI_mm_heap_node_value(const MinMaxHeapNode *node)
|
||||
{
|
||||
return node->value;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT void *BLI_mm_heap_node_ptr(const MinMaxHeapNode *node)
|
||||
void *BLI_mm_heap_node_ptr(const MinMaxHeapNode *node)
|
||||
{
|
||||
return node->ptr;
|
||||
}
|
||||
/**
|
||||
* Only for checking internal errors (gtest).
|
||||
*/
|
||||
ATTR_NO_OPT bool BLI_mm_heap_is_valid(const MinMaxHeap *heap)
|
||||
bool BLI_mm_heap_is_valid(const MinMaxHeap *heap)
|
||||
{
|
||||
for (int i = 0; i < heap->totnode; i++) {
|
||||
MinMaxHeapNode *node = heap->nodes + i;
|
||||
|
||||
int level = heap_get_level(heap, node);
|
||||
|
||||
if (i > 0 && node->parent < 0 || node->parent >= heap->totnode) {
|
||||
if (i > 0 && (node->parent < 0 || node->parent >= heap->totnode)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -616,7 +612,7 @@ ATTR_NO_OPT bool BLI_mm_heap_is_valid(const MinMaxHeap *heap)
|
|||
|
||||
#include "BLI_rand.h"
|
||||
|
||||
ATTR_NO_OPT void test_mm_heap()
|
||||
void test_mm_heap()
|
||||
{
|
||||
MinMaxHeap *heap = BLI_mm_heap_new();
|
||||
RNG *rng = BLI_rng_new(0);
|
||||
|
|
|
@ -2529,7 +2529,7 @@ void OVERLAY_armature_cache_finish(OVERLAY_Data *vedata)
|
|||
}
|
||||
}
|
||||
|
||||
ATTR_NO_OPT void OVERLAY_armature_draw(OVERLAY_Data *vedata)
|
||||
void OVERLAY_armature_draw(OVERLAY_Data *vedata)
|
||||
{
|
||||
OVERLAY_PassList *psl = vedata->psl;
|
||||
|
||||
|
@ -2537,7 +2537,7 @@ ATTR_NO_OPT void OVERLAY_armature_draw(OVERLAY_Data *vedata)
|
|||
DRW_draw_pass(psl->armature_ps[0]);
|
||||
}
|
||||
|
||||
ATTR_NO_OPT void OVERLAY_armature_in_front_draw(OVERLAY_Data *vedata)
|
||||
void OVERLAY_armature_in_front_draw(OVERLAY_Data *vedata)
|
||||
{
|
||||
OVERLAY_PassList *psl = vedata->psl;
|
||||
|
||||
|
|
|
@ -513,7 +513,7 @@ static void OVERLAY_cache_finish(void *vedata)
|
|||
OVERLAY_image_cache_finish(vedata);
|
||||
}
|
||||
|
||||
ATTR_NO_OPT static void OVERLAY_draw_scene(void *vedata)
|
||||
static void OVERLAY_draw_scene(void *vedata)
|
||||
{
|
||||
OVERLAY_Data *data = vedata;
|
||||
OVERLAY_PrivateData *pd = data->stl->pd;
|
||||
|
|
|
@ -42,6 +42,10 @@ static bool mesh_extract_uv_format_init(GPUVertFormat *format,
|
|||
char attr_name[32], attr_safe_name[GPU_MAX_SAFE_ATTR_NAME];
|
||||
const char *layer_name = CustomData_get_layer_name(cd_ldata, CD_MLOOPUV, i);
|
||||
|
||||
if (!layer_name) {
|
||||
continue;
|
||||
}
|
||||
|
||||
GPU_vertformat_safe_attr_name(layer_name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME);
|
||||
/* UV layer name. */
|
||||
BLI_snprintf(attr_name, sizeof(attr_name), "u%s", attr_safe_name);
|
||||
|
|
|
@ -2896,7 +2896,7 @@ static bool sculpt_tool_needs_original(const char sculpt_tool)
|
|||
|
||||
bool sculpt_tool_is_proxy_used(const char sculpt_tool)
|
||||
{
|
||||
return ELEM(sculpt_tool,
|
||||
return (ELEM(sculpt_tool,
|
||||
SCULPT_TOOL_SMOOTH,
|
||||
SCULPT_TOOL_LAYER,
|
||||
SCULPT_TOOL_FAIRING,
|
||||
|
@ -2910,7 +2910,7 @@ bool sculpt_tool_is_proxy_used(const char sculpt_tool)
|
|||
SCULPT_TOOL_PAINT,
|
||||
SCULPT_TOOL_SMEAR,
|
||||
SCULPT_TOOL_SYMMETRIZE,
|
||||
SCULPT_TOOL_DRAW_FACE_SETS);
|
||||
SCULPT_TOOL_DRAW_FACE_SETS));
|
||||
}
|
||||
|
||||
static bool sculpt_brush_use_topology_rake(const SculptSession *ss, const Brush *brush)
|
||||
|
@ -3550,7 +3550,7 @@ typedef struct AreaNormalCenterTLSData {
|
|||
int count_co[2];
|
||||
} AreaNormalCenterTLSData;
|
||||
|
||||
ATTR_NO_OPT static void calc_area_normal_and_center_task_cb(void *__restrict userdata,
|
||||
static void calc_area_normal_and_center_task_cb(void *__restrict userdata,
|
||||
const int n,
|
||||
const TaskParallelTLS *__restrict tls)
|
||||
{
|
||||
|
@ -3816,7 +3816,7 @@ void SCULPT_calc_area_normal(
|
|||
SCULPT_pbvh_calc_area_normal(brush, ob, nodes, totnode, true, r_area_no);
|
||||
}
|
||||
|
||||
ATTR_NO_OPT bool SCULPT_pbvh_calc_area_normal(const Brush *brush,
|
||||
bool SCULPT_pbvh_calc_area_normal(const Brush *brush,
|
||||
Object *ob,
|
||||
PBVHNode **nodes,
|
||||
int totnode,
|
||||
|
@ -7474,7 +7474,7 @@ float SCULPT_raycast_init(ViewContext *vc,
|
|||
* also updates the active vertex and cursor related data of the SculptSession using the mouse
|
||||
* position
|
||||
*/
|
||||
ATTR_NO_OPT bool SCULPT_cursor_geometry_info_update(bContext *C,
|
||||
bool SCULPT_cursor_geometry_info_update(bContext *C,
|
||||
SculptCursorGeometryInfo *out,
|
||||
const float mouse[2],
|
||||
bool use_sampled_normal,
|
||||
|
@ -8577,7 +8577,10 @@ void ED_object_sculptmode_enter_ex(Main *bmain,
|
|||
reports, RPT_WARNING, "Object has non-uniform scale, sculpting may be unpredictable");
|
||||
}
|
||||
else if (is_negative_m4(ob->obmat)) {
|
||||
BKE_report(reports, RPT_ERROR, "Object has negative scale. \nSculpting may be unpredictable.\nApply scale in object mode with Ctrl A->Scale.");
|
||||
BKE_report(reports,
|
||||
RPT_ERROR,
|
||||
"Object has negative scale. \nSculpting may be unpredictable.\nApply scale in "
|
||||
"object mode with Ctrl A->Scale.");
|
||||
}
|
||||
|
||||
Paint *paint = BKE_paint_get_active_from_paintmode(scene, PAINT_MODE_SCULPT);
|
||||
|
|
Loading…
Reference in New Issue