[Bf-blender-cvs] [9b8c82e2ed5] temp_bmesh_multires: Sculpt dyntopo: fix mem cache test function, how did this ever work
Joseph Eagar
noreply at git.blender.org
Mon Aug 23 11:28:40 CEST 2021
Commit: 9b8c82e2ed5946e9d42932d5c7a217e8115dacba
Author: Joseph Eagar
Date: Mon Aug 23 02:28:19 2021 -0700
Branches: temp_bmesh_multires
https://developer.blender.org/rB9b8c82e2ed5946e9d42932d5c7a217e8115dacba
Sculpt dyntopo: fix mem cache test function, how did this
ever work
===================================================================
M source/blender/blenkernel/intern/pbvh_bmesh.c
===================================================================
diff --git a/source/blender/blenkernel/intern/pbvh_bmesh.c b/source/blender/blenkernel/intern/pbvh_bmesh.c
index 41c88db4d72..0cd1de68e56 100644
--- a/source/blender/blenkernel/intern/pbvh_bmesh.c
+++ b/source/blender/blenkernel/intern/pbvh_bmesh.c
@@ -3439,9 +3439,9 @@ static void *hashco(float fx, float fy, float fz, float fdimen)
double x = (double)fx;
double y = (double)fy;
double z = (double)fz;
- double dimen = (double)dimen;
+ double dimen = (double)fdimen;
- return (void *)((intptr_t)(z * dimen * dimen + y * dimen + x));
+ return (void *)((intptr_t)(z * dimen * dimen * dimen + y * dimen * dimen + x * dimen));
}
typedef struct MeshTest {
@@ -3914,7 +3914,7 @@ void pbvh_bmesh_cache_test(CacheParams *params, BMesh **r_bm, PBVH **r_pbvh_out)
printf("== Starting Test ==\n");
- printf("building test mesh. . .");
+ printf("building test mesh. . .\n");
BMAllocTemplate templ = {0, 0, 0, 0};
@@ -3930,32 +3930,38 @@ void pbvh_bmesh_cache_test(CacheParams *params, BMesh **r_bm, PBVH **r_pbvh_out)
BLI_mempool_destroy(bm->fpool);
bm->vpool = BLI_mempool_create(sizeof(BMVert), 0, (int)params->vchunk, BLI_MEMPOOL_ALLOW_ITER);
- bm->epool = BLI_mempool_create(sizeof(BMEdge), 0, (int)params->vchunk, BLI_MEMPOOL_ALLOW_ITER);
- bm->lpool = BLI_mempool_create(sizeof(BMLoop), 0, (int)params->vchunk, BLI_MEMPOOL_ALLOW_ITER);
- bm->fpool = BLI_mempool_create(sizeof(BMFace), 0, (int)params->vchunk, BLI_MEMPOOL_ALLOW_ITER);
+ bm->epool = BLI_mempool_create(sizeof(BMEdge), 0, (int)params->echunk, BLI_MEMPOOL_ALLOW_ITER);
+ bm->lpool = BLI_mempool_create(sizeof(BMLoop), 0, (int)params->lchunk, BLI_MEMPOOL_ALLOW_ITER);
+ bm->fpool = BLI_mempool_create(sizeof(BMFace), 0, (int)params->pchunk, BLI_MEMPOOL_ALLOW_ITER);
GHash *vhash = BLI_ghash_ptr_new("vhash");
float df = 1.0f / (float)steps;
- float u, v;
int hashdimen = steps * 8;
BMVert **grid = MEM_malloc_arrayN(steps * steps, sizeof(*grid), "bmvert grid");
BM_data_layer_add_named(bm, &bm->vdata, CD_PROP_INT32, "__dyntopo_vert_node");
- BM_data_layer_add_named(bm, &bm->vdata, CD_PROP_INT32, "__dyntopo_face_node");
- BM_data_layer_add(bm, &bm->vdata, CD_SCULPT_FACE_SETS);
+ BM_data_layer_add_named(bm, &bm->pdata, CD_PROP_INT32, "__dyntopo_face_node");
+ BM_data_layer_add(bm, &bm->pdata, CD_SCULPT_FACE_SETS);
+
BM_data_layer_add(bm, &bm->vdata, CD_PAINT_MASK);
BM_data_layer_add(bm, &bm->vdata, CD_DYNTOPO_VERT);
BM_data_layer_add(bm, &bm->vdata, CD_PROP_COLOR);
for (int side = 0; side < 6; side++) {
- int axis = side > 3 ? side - 3 : side;
- float sign = side > 3 ? -1.0f : 1.0f;
+ int axis = side >= 3 ? side - 3 : side;
+ float sign = side >= 3 ? -1.0f : 1.0f;
+
+ printf("AXIS: %d\n", axis);
+
+ float u = 0.0f;
+
+ for (int i = 0; i < steps; i++, u += df) {
+ float v = 0.0f;
- for (int i = 0, u = 0; i < steps; i++, u += df) {
- for (int j = 0, v = 0; j < steps; j++, v += df) {
+ for (int j = 0; j < steps; j++, v += df) {
float co[3];
co[axis] = u;
@@ -3966,18 +3972,32 @@ void pbvh_bmesh_cache_test(CacheParams *params, BMesh **r_bm, PBVH **r_pbvh_out)
normalize_v3(co);
void *key = hashco(co[0], co[1], co[2], hashdimen);
+
+#if 0
+ printf("%.3f %.3f %.3f, key: %p i: %d j: %d df: %f, u: %f v: %f\n",
+ co[0],
+ co[1],
+ co[2],
+ key,
+ i,
+ j,
+ df,
+ u,
+ v);
+#endif
+
void **val = NULL;
if (!BLI_ghash_ensure_p(vhash, key, &val)) {
- BMVert *v = BM_vert_create(bm, co, NULL, BM_CREATE_NOP);
+ BMVert *v2 = BM_vert_create(bm, co, NULL, BM_CREATE_NOP);
- *val = (void *)v;
+ *val = (void *)v2;
}
- BMVert *v = (BMVert *)*val;
+ BMVert *v2 = (BMVert *)*val;
int idx = j * steps + i;
- grid[idx] = v;
+ grid[idx] = v2;
}
}
@@ -3993,6 +4013,11 @@ void pbvh_bmesh_cache_test(CacheParams *params, BMesh **r_bm, PBVH **r_pbvh_out)
BMVert *v3 = grid[idx3];
BMVert *v4 = grid[idx4];
+ if (v1 == v2 || v1 == v3 || v1 == v4 || v2 == v3 || v2 == v4 || v3 == v4) {
+ printf("ERROR!\n");
+ continue;
+ }
+
if (sign < 0) {
BMVert *vs[4] = {v4, v3, v2, v1};
BM_face_create_verts(bm, vs, 4, NULL, BM_CREATE_NOP, true);
@@ -4039,12 +4064,12 @@ void pbvh_bmesh_cache_test(CacheParams *params, BMesh **r_bm, PBVH **r_pbvh_out)
int cd_vert_node = CustomData_get_named_layer_index(
&bm->vdata, CD_PROP_INT32, "__dyntopo_vert_node");
int cd_face_node = CustomData_get_named_layer_index(
- &bm->vdata, CD_PROP_INT32, "__dyntopo_face_node");
+ &bm->pdata, CD_PROP_INT32, "__dyntopo_face_node");
cd_vert_node = bm->vdata.layers[cd_vert_node].offset;
- cd_face_node = bm->vdata.layers[cd_face_node].offset;
+ cd_face_node = bm->pdata.layers[cd_face_node].offset;
- const int cd_fset = CustomData_get_offset(&bm->vdata, CD_SCULPT_FACE_SETS);
+ const int cd_fset = CustomData_get_offset(&bm->pdata, CD_SCULPT_FACE_SETS);
const int cd_dyn_vert = CustomData_get_offset(&bm->vdata, CD_DYNTOPO_VERT);
const int cd_mask = CustomData_get_offset(&bm->vdata, CD_PAINT_MASK);
const int cd_vcol = CustomData_get_offset(&bm->vdata, CD_PROP_COLOR);
@@ -4052,13 +4077,13 @@ void pbvh_bmesh_cache_test(CacheParams *params, BMesh **r_bm, PBVH **r_pbvh_out)
PBVH *pbvh = BKE_pbvh_new();
- BKE_pbvh_build_bmesh(pbvh, bm, false, bmlog, cd_vert_node, cd_face_node, cd_dyn_vert, false);
-
bm->elem_table_dirty |= BM_VERT | BM_EDGE | BM_FACE;
bm->elem_index_dirty |= BM_VERT | BM_EDGE | BM_FACE;
BM_mesh_elem_table_ensure(bm, BM_VERT | BM_FACE);
BM_mesh_elem_index_ensure(bm, BM_VERT | BM_EDGE | BM_FACE);
+ BKE_pbvh_build_bmesh(pbvh, bm, false, bmlog, cd_vert_node, cd_face_node, cd_dyn_vert, false);
+
int loop_size = sizeof(BMLoop) - sizeof(void *) * 4;
size_t s1 = 0, s2 = 0, s3 = 0;
@@ -4082,7 +4107,7 @@ void pbvh_bmesh_cache_test(CacheParams *params, BMesh **r_bm, PBVH **r_pbvh_out)
s1 += cd_overhead;
s2 += cd_overhead;
- printf(" bmesh mem size: %.2fmb %.2mb\n",
+ printf(" bmesh mem size: %.2fmb %.2fmb\n",
(float)s1 / 1024.0f / 1024.0f,
(float)s3 / 1024.0f / 1024.0f);
printf("meshtest2 mem size: %.2fmb\n", (float)s2 / 1024.0f / 1024.0f);
More information about the Bf-blender-cvs
mailing list