COde cleanup

This commit is contained in:
Joseph Eagar 2020-10-18 16:12:02 -07:00
parent 64c7bad391
commit 49f57d8de8
6 changed files with 57 additions and 139 deletions

View File

@ -1016,7 +1016,6 @@ Mesh *BKE_mesh_copy_for_eval(struct Mesh *source, bool reference)
}
BMesh *BKE_mesh_to_bmesh_ex(const Mesh *me,
const Object *ob,
const struct BMeshCreateParams *create_params,
const struct BMeshFromMeshParams *convert_params)
{
@ -1024,7 +1023,7 @@ BMesh *BKE_mesh_to_bmesh_ex(const Mesh *me,
const BMAllocTemplate allocsize = BMALLOC_TEMPLATE_FROM_ME(me);
bm = BM_mesh_create(&allocsize, create_params);
BM_mesh_bm_from_me(ob, bm, me, convert_params);
BM_mesh_bm_from_me(NULL, bm, me, convert_params);
return bm;
}
@ -1035,7 +1034,6 @@ BMesh *BKE_mesh_to_bmesh(Mesh *me,
const struct BMeshCreateParams *params)
{
return BKE_mesh_to_bmesh_ex(me,
ob,
params,
&(struct BMeshFromMeshParams){
.calc_face_normal = false,

View File

@ -39,12 +39,12 @@
#include "BLI_utildefines.h"
#include "BKE_ccg.h"
#include "BKE_collection.h"
#include "BKE_layer.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_collection.h"
#include "BKE_context.h"
#include "BKE_editmesh.h"
#include "BKE_global.h"
#include "BKE_layer.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_mesh_mapping.h"
@ -997,7 +997,6 @@ static void grid_tangent(const CCGKey *key, int x, int y, int axis, CCGElem *gri
}
}
/* Construct 3x3 tangent-space matrix in 'mat' */
static void grid_tangent_matrix(float mat[3][3], const CCGKey *key, int x, int y, CCGElem *grid)
{
@ -1023,22 +1022,23 @@ typedef struct MultiresThreadedData {
MDisps *mdisps;
GridPaintMask *grid_paint_mask;
int *gridOffset;
int cd_mdisps_off;
int cd_mdisps_off, cd_mask_off;
int gridSize, dGridSize, dSkip;
float (*smat)[3];
bool has_grid_mask;
} MultiresThreadedData;
Object *multires_dump_grids_bmesh(BMesh *bm)
Object *multires_dump_grids_bmesh(Object *bmob, BMesh *bm)
{
if (!CustomData_has_layer(&bm->ldata, CD_MDISPS)) {
printf("multires_dump_grids_bmesh: error: no multires grids\n");
return;
return NULL;
}
bool spaceset = false;
if (bm->multiresSpace != MULTIRES_SPACE_ABSOLUTE) {
BKE_multires_bmesh_space_set(NULL, bm, MULTIRES_SPACE_ABSOLUTE);
BKE_multires_bmesh_space_set(bmob, bm, MULTIRES_SPACE_ABSOLUTE);
spaceset = true;
}
@ -1050,16 +1050,14 @@ Object *multires_dump_grids_bmesh(BMesh *bm)
CTX_wm_manager_set(ctx, G.main->wm.first);
CTX_data_scene_set(ctx, G.main->scenes.first);
Scene *scene = CTX_data_scene(ctx);
ViewLayer *view_layer = CTX_data_view_layer(ctx);
Object *ob = BKE_object_add_only_object(bmain, OB_MESH, name);
Base *base;
LayerCollection *layer_collection;
ob->data = BKE_object_obdata_add_from_type(bmain, OB_MESH, name);
DEG_id_tag_update_ex(
bmain, &ob->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_ANIMATION);
//DEG_id_tag_update_ex(
// DEG_id_tag_update_ex(
// bmain, &ob->data, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_ANIMATION);
layer_collection = BKE_layer_collection_get_active(view_layer);
@ -1079,8 +1077,6 @@ Object *multires_dump_grids_bmesh(BMesh *bm)
Mesh *me = ob->data;
BMIter iter;
BMVert *v;
BMEdge *e;
BMFace *f;
int cd_mdisp_off = CustomData_get_offset(&bm->ldata, CD_MDISPS);
@ -1095,7 +1091,7 @@ Object *multires_dump_grids_bmesh(BMesh *bm)
if (!dimen) {
printf("multires_dump_grids_bmesh: error: corrupted multires data\n");
return;
return NULL;
}
int totvert = bm->totloop * dimen * dimen;
@ -1161,9 +1157,9 @@ Object *multires_dump_grids_bmesh(BMesh *bm)
copy_v3_v3(mv->co, co);
}
}
for (int i = 0; i < dimen-1; i++) {
for (int j = 0; j < dimen-1; j++) {
for (int i = 0; i < dimen - 1; i++) {
for (int j = 0; j < dimen - 1; j++) {
// do face
int fidx = loopi * (dimen - 1) * (dimen - 1) + (j * (dimen - 1) + i);
MPoly *mp = mpoly + fidx;
@ -1178,12 +1174,12 @@ Object *multires_dump_grids_bmesh(BMesh *bm)
ml[2].v = VINDEX(i + 1, j + 1);
ml[3].v = VINDEX(i + 1, j);
for (int i2=0; i2<4; i2++) {
int a = ml[i2].v, b = ml[(i2+1) % 4].v;
for (int i2 = 0; i2 < 4; i2++) {
int a = ml[i2].v, b = ml[(i2 + 1) % 4].v;
int e;
if (!BLI_edgehash_haskey(eh, a, b)) {
BLI_edgehash_insert(eh, a, b, (void*)medi);
BLI_edgehash_insert(eh, a, b, (void *)medi);
e = medi;
MEdge *med = medge + medi;
@ -1192,7 +1188,8 @@ Object *multires_dump_grids_bmesh(BMesh *bm)
med->v2 = b;
medi++;
} else {
}
else {
e = (int)BLI_edgehash_lookup(eh, a, b);
}
@ -1208,21 +1205,24 @@ Object *multires_dump_grids_bmesh(BMesh *bm)
} while (l != f->l_first);
}
for (int i=0; i<me->totpoly; i++) {
for (int i = 0; i < me->totpoly; i++) {
if (!mpoly[i].totloop) {
printf("error 1! %d %d\n", i, me->totpoly);
}
if (mpoly[i].loopstart >= me->totloop) {
printf("error 2! %d %d l: %d totl: %d\n", i, me->totpoly, mpoly[i].loopstart, mpoly[i].totloop);
printf(
"error 2! %d %d l: %d totl: %d\n", i, me->totpoly, mpoly[i].loopstart, mpoly[i].totloop);
}
}
if (spaceset) {
BKE_multires_bmesh_space_set(NULL, bm, MULTIRES_SPACE_TANGENT);
BKE_multires_bmesh_space_set(bmob, bm, MULTIRES_SPACE_TANGENT);
}
BKE_mesh_calc_normals(me);
BKE_mesh_tessface_calc(me);
return ob;
}
static void multires_bmesh_space_set_cb(void *__restrict userdata,
@ -1232,27 +1232,20 @@ static void multires_bmesh_space_set_cb(void *__restrict userdata,
MultiresThreadedData *tdata = userdata;
int cd_mdisps_off = tdata->cd_mdisps_off;
// int cd_mask_off = tdata->cd_mask_off;
BMesh *bm = tdata->bm;
MultiResSpace op = tdata->bmop;
CCGElem **gridData = tdata->gridData;
CCGElem **subGridData = tdata->subGridData;
CCGKey *key = tdata->key;
BMFace *f = bm->ftable[pidx];
MDisps *mdisps = tdata->mdisps;
GridPaintMask *grid_paint_mask = tdata->grid_paint_mask;
int *gridOffset = tdata->gridOffset;
int gridSize = tdata->gridSize;
int dGridSize = tdata->dGridSize;
int dSkip = tdata->dSkip;
int S, x, y, gIndex = gridOffset[pidx];
int S, x, y;
BMLoop *l = f->l_first;
float cent[3];
int tot = 0;
// get face center to calculate maximum allowable displacement length
zero_v3(cent);
do {
add_v3_v3(cent, l->v->co);
tot++;
@ -1261,47 +1254,33 @@ static void multires_bmesh_space_set_cb(void *__restrict userdata,
mul_v3_fl(cent, 1.0f / (float)tot);
float simplemat[3][3];
// bool has_grid_mask = tdata->has_grid_mask;
l = f->l_first;
S = 0;
do {
// for (S = 0; S < numVerts; S++, gIndex++) {
GridPaintMask *gpm = grid_paint_mask ? &grid_paint_mask[gIndex] : NULL;
MDisps *mdisp = BM_ELEM_CD_GET_VOID_P(l, cd_mdisps_off); //&mdisps[mpoly[pidx].loopstart + S];
CCGElem *grid = gridData[gIndex];
CCGElem *subgrid = subGridData[gIndex];
// GridPaintMask *gpm = has_grid_mask ? BM_ELEM_CD_GET_VOID_P(l, cd_mask_off) : NULL;
MDisps *mdisp = BM_ELEM_CD_GET_VOID_P(l, cd_mdisps_off);
float(*dispgrid)[3] = NULL;
dispgrid = mdisp->disps;
float quad[4][3];
// copy_v3_v3(quad[0], cent);
// interp_v3_v3v3(quad[1], l->v->co, l->next->v->co, 0.5);
// copy_v3_v3(quad[2], l->v->co);
// interp_v3_v3v3(quad[3], l->v->co, l->prev->v->co, 0.5);
float maxlen = len_v3v3(l->v->co, cent) * 15.0f;
maxlen = MAX2(maxlen, 0.00001f);
for (y = 0; y < gridSize; y++) {
for (x = 0; x < gridSize; x++) {
// float *sco = CCG_grid_elem_co(key, grid, x, y);
// float *sco = CCG_grid_elem_co(key, subgrid, x, y);
float sco[8], udv[3], vdv[3];
float *data = dispgrid[dGridSize * y * dSkip + x * dSkip];
float mat[3][3], disp[3], d[3], mask;
// float baseco[3];
float *data = dispgrid[gridSize * y + x];
float mat[3][3], disp[3];
float grid_u = (float)x / (float)(dGridSize - 1);
float grid_v = (float)y / (float)(dGridSize - 1);
float grid_u = (float)x / (float)(gridSize - 1);
float grid_v = (float)y / (float)(gridSize - 1);
float u, v;
int corner = S;
if (f->len == 4) {
BKE_subdiv_rotate_grid_to_quad(corner, grid_u, grid_v, &u, &v);
// continue;
}
else {
u = 1.0 - grid_v;
@ -1319,7 +1298,6 @@ static void multires_bmesh_space_set_cb(void *__restrict userdata,
* and add to grid points */
mul_v3_m3v3(disp, mat, data);
add_v3_v3v3(data, disp, sco);
//copy_v3_v3(data, sco);
break;
case MULTIRES_SPACE_TANGENT:
/* Calculate displacement between new and old
@ -1329,17 +1307,20 @@ static void multires_bmesh_space_set_cb(void *__restrict userdata,
sub_v3_v3v3(disp, data, sco);
mul_v3_m3v3(data, mat, disp);
// float len = len_v3(data);
// if (len > maxlen) {
// mul_v3_fl(data, maxlen/len);
//}
// try to prevent errors
float len = len_v3(data);
/*
if (len > maxlen) {
mul_v3_fl(data, maxlen/len);
} else if (isnan(len)) {
zero_v3(data);
}*/
break;
}
}
}
S++;
gIndex++;
l = l->next;
} while (l != f->l_first);
}
@ -1376,14 +1357,7 @@ void BKE_multires_bmesh_space_set(Object *ob, BMesh *bm, int mode)
// CustomData_MeshMasks extra = {0};
BM_mesh_bm_to_me_for_eval(bm, me, &extra);
DerivedMesh *cddm = CDDM_from_mesh(me);
// cddm->dm.
SubdivSettings settings2;
// cddm ignores MDISPS layer. this turns out to be a good thing.
// CustomData_reset(&cddm->loopData);
// CustomData_merge(&me->ldata, &cddm->loopData, CD_MASK_MESH.lmask & ~CD_MASK_MDISPS,
// CD_REFERENCE, me->totloop);
// ensure we control the level
MultiresModifierData mmdcpy = *mmd;
@ -1404,49 +1378,17 @@ void BKE_multires_bmesh_space_set(Object *ob, BMesh *bm, int mode)
BLI_addtail(&fakeob.modifiers, &mmdcpy);
}
// MULTIRES_USE_LOCAL_MMD
// CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) multires_make_derived_from_derived(cddm, &mmdcpy,
// NULL, &fakeob, MULTIRES_IGNORE_SIMPLIFY|MULTIRES_USE_LOCAL_MMD);
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *)subsurf_dm_create_local(NULL,
&fakeob,
cddm,
mmd->totlvl,
mmd->simple,
0,
mmd->uv_smooth ==
SUBSURF_UV_SMOOTH_NONE,
false,
false,
0);
CCGElem **gridData, **subGridData;
CCGKey key;
GridPaintMask *grid_paint_mask = NULL;
int *gridOffset;
int i, gridSize, dGridSize, dSkip;
int totpoly = bm->totface;
// paranoia recalc of indices/tables
bm->elem_index_dirty |= BM_FACE | BM_VERT;
bm->elem_table_dirty |= BM_FACE | BM_VERT;
// paranoia recalc of indices/lookup tables
bm->elem_index_dirty |= BM_FACE;
bm->elem_table_dirty |= BM_FACE;
BM_mesh_elem_index_ensure(bm, BM_FACE | BM_VERT);
BM_mesh_elem_table_ensure(bm, BM_FACE | BM_VERT);
BM_mesh_elem_index_ensure(bm, BM_FACE);
BM_mesh_elem_table_ensure(bm, BM_FACE);
/*numGrids = dm->getNumGrids(dm);*/ /*UNUSED*/
gridSize = ccgdm->dm.getGridSize(&ccgdm->dm);
gridData = ccgdm->dm.getGridData(&ccgdm->dm);
gridOffset = ccgdm->dm.getGridOffset(&ccgdm->dm);
ccgdm->dm.getGridKey(&ccgdm->dm, &key);
subGridData = gridData;
dGridSize = multires_side_tot[mmd->totlvl];
dSkip = (dGridSize - 1) / (gridSize - 1);
/* multires paint masks */
if (key.has_mask) {
grid_paint_mask = CustomData_get_layer(&me->ldata, CD_GRID_PAINT_MASK);
}
gridSize = multires_side_tot[mmd->totlvl];
/* when adding new faces in edit mode, need to allocate disps */
int cd_disp_off = CustomData_get_offset(&bm->ldata, CD_MDISPS);
@ -1454,7 +1396,6 @@ void BKE_multires_bmesh_space_set(Object *ob, BMesh *bm, int mode)
BMFace *f;
BMIter iter;
i = 0;
int i2 = 0;
BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) {
BMIter iter2;
BMLoop *l;
@ -1483,20 +1424,17 @@ void BKE_multires_bmesh_space_set(Object *ob, BMesh *bm, int mode)
BLI_parallel_range_settings_defaults(&settings);
settings.min_iter_per_thread = CCG_TASK_LIMIT;
bool has_grid_mask = CustomData_has_layer(&me->ldata, CD_GRID_PAINT_MASK);
MultiresThreadedData data = {
.bmop = mode,
.sd = sd,
.gridData = gridData,
.subGridData = subGridData,
.key = &key,
.lvl = mmd->totlvl,
.bm = bm,
.cd_mdisps_off = cd_disp_off,
.grid_paint_mask = grid_paint_mask,
.gridOffset = gridOffset,
.cd_mask_off = has_grid_mask ? CustomData_get_offset(&bm->ldata, CD_GRID_PAINT_MASK) : -1,
.has_grid_mask = has_grid_mask,
.gridSize = gridSize,
.dGridSize = dGridSize,
.dSkip = dSkip,
};
BLI_task_parallel_range(0, totpoly, &data, multires_bmesh_space_set_cb, &settings);
@ -1507,8 +1445,6 @@ void BKE_multires_bmesh_space_set(Object *ob, BMesh *bm, int mode)
// ccgSubSurf_updateNormals(ccgdm->ss, NULL, 0);
//}
ccgdm->dm.release(&ccgdm->dm);
DM_release(cddm);
BKE_mesh_free(me);
BKE_subdiv_free(sd);
}
@ -1517,7 +1453,6 @@ static void multires_disp_run_cb(void *__restrict userdata,
const int pidx,
const TaskParallelTLS *__restrict UNUSED(tls))
{
return;
MultiresThreadedData *tdata = userdata;
DispOp op = tdata->op;
@ -1689,8 +1624,8 @@ static void multiresModifier_disp_run(
BLI_task_parallel_range(0, totpoly, &data, multires_disp_run_cb, &settings);
if (op == APPLY_DISPLACEMENTS) {
// ccgSubSurf_stitchFaces(ccgdm->ss, 0, NULL, 0);
// ccgSubSurf_updateNormals(ccgdm->ss, NULL, 0);
ccgSubSurf_stitchFaces(ccgdm->ss, 0, NULL, 0);
ccgSubSurf_updateNormals(ccgdm->ss, NULL, 0);
}
}
@ -1855,7 +1790,6 @@ void multires_modifier_update_hidden(DerivedMesh *dm)
void multires_stitch_grids(Object *ob)
{
return; // XXX
if (ob == NULL) {
return;
}

View File

@ -49,7 +49,7 @@
#include <limits.h>
#define LEAF_LIMIT 10000
#define LEAF_LIMIT 700
//#define PERFCNTRS

View File

@ -986,7 +986,6 @@ static void subdiv_ccg_average_inner_face_grids(SubdivCCG *subdiv_ccg,
CCGKey *key,
SubdivCCGFace *face)
{
return; //XXX
CCGElem **grids = subdiv_ccg->grids;
const int num_face_grids = face->num_grids;
const int grid_size = subdiv_ccg->grid_size;
@ -1044,7 +1043,6 @@ static void subdiv_ccg_average_grids_boundary(SubdivCCG *subdiv_ccg,
SubdivCCGAdjacentEdge *adjacent_edge,
AverageGridsBoundariesTLSData *tls)
{
return; //XXXX
const int num_adjacent_faces = adjacent_edge->num_adjacent_faces;
const int grid_size2 = subdiv_ccg->grid_size * 2;
if (num_adjacent_faces == 1) {
@ -1108,7 +1106,6 @@ static void subdiv_ccg_average_grids_corners(SubdivCCG *subdiv_ccg,
CCGKey *key,
SubdivCCGAdjacentVertex *adjacent_vertex)
{
return;
const int num_adjacent_faces = adjacent_vertex->num_adjacent_faces;
if (num_adjacent_faces == 1) {
/* Nothing to average with. */
@ -1134,7 +1131,6 @@ static void subdiv_ccg_average_grids_corners_task(void *__restrict userdata_v,
const int adjacent_vertex_index,
const TaskParallelTLS *__restrict UNUSED(tls_v))
{
return;
AverageGridsCornerData *data = userdata_v;
SubdivCCG *subdiv_ccg = data->subdiv_ccg;
CCGKey *key = data->key;
@ -1144,7 +1140,6 @@ static void subdiv_ccg_average_grids_corners_task(void *__restrict userdata_v,
static void subdiv_ccg_average_all_boundaries(SubdivCCG *subdiv_ccg, CCGKey *key)
{
return;
TaskParallelSettings parallel_range_settings;
BLI_parallel_range_settings_defaults(&parallel_range_settings);
AverageGridsBoundariesData boundaries_data = {
@ -1164,7 +1159,6 @@ static void subdiv_ccg_average_all_boundaries(SubdivCCG *subdiv_ccg, CCGKey *key
static void subdiv_ccg_average_all_corners(SubdivCCG *subdiv_ccg, CCGKey *key)
{
return;
TaskParallelSettings parallel_range_settings;
BLI_parallel_range_settings_defaults(&parallel_range_settings);
AverageGridsCornerData corner_data = {
@ -1180,14 +1174,12 @@ static void subdiv_ccg_average_all_corners(SubdivCCG *subdiv_ccg, CCGKey *key)
static void subdiv_ccg_average_all_boundaries_and_corners(SubdivCCG *subdiv_ccg, CCGKey *key)
{
return;
subdiv_ccg_average_all_boundaries(subdiv_ccg, key);
subdiv_ccg_average_all_corners(subdiv_ccg, key);
}
void BKE_subdiv_ccg_average_grids(SubdivCCG *subdiv_ccg)
{
return;
CCGKey key;
BKE_subdiv_ccg_key_top_level(&key, subdiv_ccg);
TaskParallelSettings parallel_range_settings;
@ -1198,7 +1190,6 @@ void BKE_subdiv_ccg_average_grids(SubdivCCG *subdiv_ccg)
.subdiv_ccg = subdiv_ccg,
.key = &key,
};
return;
BLI_task_parallel_range(0,
subdiv_ccg->num_faces,
&inner_data,
@ -1218,7 +1209,6 @@ static void subdiv_ccg_stitch_face_inner_grids_task(
const int face_index,
const TaskParallelTLS *__restrict UNUSED(tls_v))
{
return; //XXXX
StitchFacesInnerGridsData *data = userdata_v;
SubdivCCG *subdiv_ccg = data->subdiv_ccg;
CCGKey *key = data->key;
@ -1232,7 +1222,6 @@ void BKE_subdiv_ccg_average_stitch_faces(SubdivCCG *subdiv_ccg,
struct CCGFace **effected_faces,
int num_effected_faces)
{
return; //XXX
CCGKey key;
BKE_subdiv_ccg_key_top_level(&key, subdiv_ccg);
StitchFacesInnerGridsData data = {

View File

@ -186,7 +186,6 @@ static void average_read_displacement_object(MultiresDisplacementData *data,
const int corner_index,
float r_D[3])
{
return;
const PolyCornerIndex *poly_corner = &data->ptex_poly_corner[ptex_face_index];
const MPoly *poly = &data->mpoly[poly_corner->poly_index];
/* Get (u, v) coordinate within the other ptex face which corresponds to
@ -232,7 +231,6 @@ static void average_with_other(SubdivDisplacement *displacement,
const int corner_delta,
float r_D[3])
{
return;
MultiresDisplacementData *data = displacement->user_data;
const MDisps *other_displacement_grid = displacement_get_other_grid(
displacement, ptex_face_index, corner, corner_delta);
@ -297,7 +295,6 @@ static void average_displacement(SubdivDisplacement *displacement,
const float grid_v,
float r_D[3])
{
return;
switch (average_with) {
case AVERAGE_WITH_ALL:
average_with_all(displacement, ptex_face_index, corner, grid_u, grid_v, r_D);

View File

@ -5735,7 +5735,7 @@ static int edbm_mres_test_exec(bContext *C, wmOperator *op)
}
extern Object *multires_dump_grids_bmesh(BMesh *bm);
extern Object *multires_dump_grids_bmesh(Object *bmob, BMesh *bm);
static int edbm_dump_mres_grids_exec(bContext *C, wmOperator *op)
{
@ -5751,7 +5751,7 @@ static int edbm_dump_mres_grids_exec(bContext *C, wmOperator *op)
Object *obedit = objects[ob_index];
BMEditMesh *em = BKE_editmesh_from_object(obedit);
multires_dump_grids_bmesh(em->bm);
multires_dump_grids_bmesh(obedit, em->bm);
}
WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, CTX_data_scene(C));