Dyntopo: avoid redundant lookup on original data
This commit is contained in:
parent
50522cba92
commit
e05f719b8b
@ -1086,6 +1086,24 @@ float BM_log_original_mask(BMLog *log, BMVert *v)
|
||||
return lv->mask;
|
||||
}
|
||||
|
||||
void BM_log_original_vert_data(
|
||||
BMLog *log, BMVert *v,
|
||||
const float **r_co, const short **r_no)
|
||||
{
|
||||
BMLogEntry *entry = log->current_entry;
|
||||
const BMLogVert *lv;
|
||||
unsigned v_id = bm_log_vert_id_get(log, v);
|
||||
void *key = SET_UINT_IN_POINTER(v_id);
|
||||
|
||||
BLI_assert(entry);
|
||||
|
||||
BLI_assert(BLI_ghash_haskey(entry->modified_verts, key));
|
||||
|
||||
lv = BLI_ghash_lookup(entry->modified_verts, key);
|
||||
*r_co = lv->co;
|
||||
*r_no = lv->no;
|
||||
}
|
||||
|
||||
/************************ Debugging and Testing ***********************/
|
||||
|
||||
/* For internal use only (unit testing) */
|
||||
|
@ -96,6 +96,11 @@ const short *BM_log_original_vert_no(BMLog *log, BMVert *v);
|
||||
/* Get the logged mask of a vertex */
|
||||
float BM_log_original_mask(BMLog *log, BMVert *v);
|
||||
|
||||
/* Get the logged data of a vertex (avoid multiple lookups) */
|
||||
void BM_log_original_vert_data(
|
||||
BMLog *log, BMVert *v,
|
||||
const float **r_co, const short **r_no);
|
||||
|
||||
/* For internal use only (unit testing) */
|
||||
BMLogEntry *BM_log_current_entry(BMLog *log);
|
||||
struct RangeTreeUInt *BM_log_unused_ids(BMLog *log);
|
||||
|
@ -285,26 +285,22 @@ static void sculpt_orig_vert_data_update(SculptOrigVertData *orig_data,
|
||||
PBVHVertexIter *iter)
|
||||
{
|
||||
if (orig_data->unode->type == SCULPT_UNDO_COORDS) {
|
||||
if (orig_data->coords) {
|
||||
if (orig_data->bm_log) {
|
||||
BM_log_original_vert_data(
|
||||
orig_data->bm_log, iter->bm_vert,
|
||||
&orig_data->co, &orig_data->no);
|
||||
}
|
||||
else {
|
||||
orig_data->co = orig_data->coords[iter->i];
|
||||
}
|
||||
else {
|
||||
orig_data->co = BM_log_original_vert_co(orig_data->bm_log, iter->bm_vert);
|
||||
}
|
||||
|
||||
if (orig_data->normals) {
|
||||
orig_data->no = orig_data->normals[iter->i];
|
||||
}
|
||||
else {
|
||||
orig_data->no = BM_log_original_vert_no(orig_data->bm_log, iter->bm_vert);
|
||||
}
|
||||
}
|
||||
else if (orig_data->unode->type == SCULPT_UNDO_MASK) {
|
||||
if (orig_data->vmasks) {
|
||||
orig_data->mask = orig_data->vmasks[iter->i];
|
||||
if (orig_data->bm_log) {
|
||||
orig_data->mask = BM_log_original_mask(orig_data->bm_log, iter->bm_vert);
|
||||
}
|
||||
else {
|
||||
orig_data->mask = BM_log_original_mask(orig_data->bm_log, iter->bm_vert);
|
||||
orig_data->mask = orig_data->vmasks[iter->i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user