Cleanup: Use references, const, for mesh edit data flag extraction

This commit is contained in:
Hans Goudey
2024-05-27 23:13:34 -04:00
parent fd651da7e5
commit ebbb72187a
7 changed files with 71 additions and 71 deletions

View File

@@ -80,20 +80,20 @@ const MeshExtract *mesh_extract_override_get(const MeshExtract *extractor,
void mesh_render_data_face_flag(const MeshRenderData &mr,
const BMFace *efa,
const BMUVOffsets offsets,
EditLoopData *eattr)
EditLoopData &eattr)
{
if (efa == mr.efa_act) {
eattr->v_flag |= VFLAG_FACE_ACTIVE;
eattr.v_flag |= VFLAG_FACE_ACTIVE;
}
if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) {
eattr->v_flag |= VFLAG_FACE_SELECTED;
eattr.v_flag |= VFLAG_FACE_SELECTED;
}
if (efa == mr.efa_act_uv) {
eattr->v_flag |= VFLAG_FACE_UV_ACTIVE;
eattr.v_flag |= VFLAG_FACE_UV_ACTIVE;
}
if ((offsets.uv != -1) && uvedit_face_select_test_ex(mr.toolsettings, (BMFace *)efa, offsets)) {
eattr->v_flag |= VFLAG_FACE_UV_SELECT;
eattr.v_flag |= VFLAG_FACE_UV_SELECT;
}
#ifdef WITH_FREESTYLE
@@ -101,39 +101,39 @@ void mesh_render_data_face_flag(const MeshRenderData &mr,
const FreestyleFace *ffa = (const FreestyleFace *)BM_ELEM_CD_GET_VOID_P(efa,
mr.freestyle_face_ofs);
if (ffa->flag & FREESTYLE_FACE_MARK) {
eattr->v_flag |= VFLAG_FACE_FREESTYLE;
eattr.v_flag |= VFLAG_FACE_FREESTYLE;
}
}
#endif
}
void mesh_render_data_loop_flag(const MeshRenderData &mr,
BMLoop *l,
const BMLoop *l,
const BMUVOffsets offsets,
EditLoopData *eattr)
EditLoopData &eattr)
{
if (offsets.uv == -1) {
return;
}
if (BM_ELEM_CD_GET_BOOL(l, offsets.pin)) {
eattr->v_flag |= VFLAG_VERT_UV_PINNED;
eattr.v_flag |= VFLAG_VERT_UV_PINNED;
}
if (uvedit_uv_select_test_ex(mr.toolsettings, l, offsets)) {
eattr->v_flag |= VFLAG_VERT_UV_SELECT;
eattr.v_flag |= VFLAG_VERT_UV_SELECT;
}
}
void mesh_render_data_loop_edge_flag(const MeshRenderData &mr,
BMLoop *l,
const BMLoop *l,
const BMUVOffsets offsets,
EditLoopData *eattr)
EditLoopData &eattr)
{
if (offsets.uv == -1) {
return;
}
if (uvedit_edge_select_test_ex(mr.toolsettings, l, offsets)) {
eattr->v_flag |= VFLAG_EDGE_UV_SELECT;
eattr->v_flag |= VFLAG_VERT_UV_SELECT;
eattr.v_flag |= VFLAG_EDGE_UV_SELECT;
eattr.v_flag |= VFLAG_VERT_UV_SELECT;
}
}

View File

@@ -316,15 +316,15 @@ const MeshExtract *mesh_extract_override_get(const MeshExtract *extractor, bool
void mesh_render_data_face_flag(const MeshRenderData &mr,
const BMFace *efa,
BMUVOffsets offsets,
EditLoopData *eattr);
EditLoopData &eattr);
void mesh_render_data_loop_flag(const MeshRenderData &mr,
BMLoop *l,
const BMLoop *l,
BMUVOffsets offsets,
EditLoopData *eattr);
EditLoopData &eattr);
void mesh_render_data_loop_edge_flag(const MeshRenderData &mr,
BMLoop *l,
const BMLoop *l,
BMUVOffsets offsets,
EditLoopData *eattr);
EditLoopData &eattr);
template<typename GPUType> void convert_normals(Span<float3> src, MutableSpan<GPUType> dst);

View File

@@ -22,29 +22,29 @@ namespace blender::draw {
static void mesh_render_data_edge_flag(const MeshRenderData &mr,
const BMEdge *eed,
EditLoopData *eattr)
EditLoopData &eattr)
{
const ToolSettings *ts = mr.toolsettings;
const bool is_vertex_select_mode = (ts != nullptr) && (ts->selectmode & SCE_SELECT_VERTEX) != 0;
const bool is_face_only_select_mode = (ts != nullptr) && (ts->selectmode == SCE_SELECT_FACE);
if (eed == mr.eed_act) {
eattr->e_flag |= VFLAG_EDGE_ACTIVE;
eattr.e_flag |= VFLAG_EDGE_ACTIVE;
}
if (!is_vertex_select_mode && BM_elem_flag_test(eed, BM_ELEM_SELECT)) {
eattr->e_flag |= VFLAG_EDGE_SELECTED;
eattr.e_flag |= VFLAG_EDGE_SELECTED;
}
if (is_vertex_select_mode && BM_elem_flag_test(eed->v1, BM_ELEM_SELECT) &&
BM_elem_flag_test(eed->v2, BM_ELEM_SELECT))
{
eattr->e_flag |= VFLAG_EDGE_SELECTED;
eattr->e_flag |= VFLAG_VERT_SELECTED;
eattr.e_flag |= VFLAG_EDGE_SELECTED;
eattr.e_flag |= VFLAG_VERT_SELECTED;
}
if (BM_elem_flag_test(eed, BM_ELEM_SEAM)) {
eattr->e_flag |= VFLAG_EDGE_SEAM;
eattr.e_flag |= VFLAG_EDGE_SEAM;
}
if (!BM_elem_flag_test(eed, BM_ELEM_SMOOTH)) {
eattr->e_flag |= VFLAG_EDGE_SHARP;
eattr.e_flag |= VFLAG_EDGE_SHARP;
}
/* Use active edge color for active face edges because
@@ -55,7 +55,7 @@ static void mesh_render_data_edge_flag(const MeshRenderData &mr,
if (is_face_only_select_mode) {
if (mr.efa_act != nullptr) {
if (BM_edge_in_face(eed, mr.efa_act)) {
eattr->e_flag |= VFLAG_EDGE_ACTIVE;
eattr.e_flag |= VFLAG_EDGE_ACTIVE;
}
}
}
@@ -64,14 +64,14 @@ static void mesh_render_data_edge_flag(const MeshRenderData &mr,
if (mr.edge_crease_ofs != -1) {
float crease = BM_ELEM_CD_GET_FLOAT(eed, mr.edge_crease_ofs);
if (crease > 0) {
eattr->crease = uchar(ceil(crease * 15.0f));
eattr.crease = uchar(ceil(crease * 15.0f));
}
}
/* Use a byte for value range */
if (mr.bweight_ofs != -1) {
float bweight = BM_ELEM_CD_GET_FLOAT(eed, mr.bweight_ofs);
if (bweight > 0) {
eattr->bweight = uchar(bweight * 255.0f);
eattr.bweight = uchar(bweight * 255.0f);
}
}
#ifdef WITH_FREESTYLE
@@ -79,7 +79,7 @@ static void mesh_render_data_edge_flag(const MeshRenderData &mr,
const FreestyleEdge *fed = (const FreestyleEdge *)BM_ELEM_CD_GET_VOID_P(eed,
mr.freestyle_edge_ofs);
if (fed->flag & FREESTYLE_EDGE_MARK) {
eattr->e_flag |= VFLAG_EDGE_FREESTYLE;
eattr.e_flag |= VFLAG_EDGE_FREESTYLE;
}
}
#endif
@@ -87,19 +87,19 @@ static void mesh_render_data_edge_flag(const MeshRenderData &mr,
static void mesh_render_data_vert_flag(const MeshRenderData &mr,
const BMVert *eve,
EditLoopData *eattr)
EditLoopData &eattr)
{
if (eve == mr.eve_act) {
eattr->e_flag |= VFLAG_VERT_ACTIVE;
eattr.e_flag |= VFLAG_VERT_ACTIVE;
}
if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) {
eattr->e_flag |= VFLAG_VERT_SELECTED;
eattr.e_flag |= VFLAG_VERT_SELECTED;
}
/* Use half a byte for value range */
if (mr.vert_crease_ofs != -1) {
float crease = BM_ELEM_CD_GET_FLOAT(eve, mr.vert_crease_ofs);
if (crease > 0) {
eattr->crease |= uchar(ceil(crease * 15.0f)) << 4;
eattr.crease |= uchar(ceil(crease * 15.0f)) << 4;
}
}
}
@@ -142,9 +142,9 @@ static void extract_edit_data_iter_face_bm(const MeshRenderData &mr,
EditLoopData *data = vbo_data + l_index;
memset(data, 0x0, sizeof(*data));
mesh_render_data_face_flag(mr, f, {-1, -1, -1, -1}, data);
mesh_render_data_edge_flag(mr, l_iter->e, data);
mesh_render_data_vert_flag(mr, l_iter->v, data);
mesh_render_data_face_flag(mr, f, {-1, -1, -1, -1}, *data);
mesh_render_data_edge_flag(mr, l_iter->e, *data);
mesh_render_data_vert_flag(mr, l_iter->v, *data);
} while ((l_iter = l_iter->next) != l_first);
}
@@ -161,13 +161,13 @@ static void extract_edit_data_iter_face_mesh(const MeshRenderData &mr,
BMVert *eve = bm_original_vert_get(mr, mr.corner_verts[corner]);
BMEdge *eed = bm_original_edge_get(mr, mr.corner_edges[corner]);
if (efa) {
mesh_render_data_face_flag(mr, efa, {-1, -1, -1, -1}, data);
mesh_render_data_face_flag(mr, efa, {-1, -1, -1, -1}, *data);
}
if (eed) {
mesh_render_data_edge_flag(mr, eed, data);
mesh_render_data_edge_flag(mr, eed, *data);
}
if (eve) {
mesh_render_data_vert_flag(mr, eve, data);
mesh_render_data_vert_flag(mr, eve, *data);
}
}
}
@@ -180,10 +180,10 @@ static void extract_edit_data_iter_loose_edge_bm(const MeshRenderData &mr,
EditLoopData *vbo_data = *(EditLoopData **)_data;
EditLoopData *data = vbo_data + mr.corners_num + (loose_edge_i * 2);
memset(data, 0x0, sizeof(*data) * 2);
mesh_render_data_edge_flag(mr, eed, &data[0]);
mesh_render_data_edge_flag(mr, eed, data[0]);
data[1] = data[0];
mesh_render_data_vert_flag(mr, eed->v1, &data[0]);
mesh_render_data_vert_flag(mr, eed->v2, &data[1]);
mesh_render_data_vert_flag(mr, eed->v1, data[0]);
mesh_render_data_vert_flag(mr, eed->v2, data[1]);
}
static void extract_edit_data_iter_loose_edge_mesh(const MeshRenderData &mr,
@@ -199,14 +199,14 @@ static void extract_edit_data_iter_loose_edge_mesh(const MeshRenderData &mr,
BMVert *eve1 = bm_original_vert_get(mr, edge[0]);
BMVert *eve2 = bm_original_vert_get(mr, edge[1]);
if (eed) {
mesh_render_data_edge_flag(mr, eed, &data[0]);
mesh_render_data_edge_flag(mr, eed, data[0]);
data[1] = data[0];
}
if (eve1) {
mesh_render_data_vert_flag(mr, eve1, &data[0]);
mesh_render_data_vert_flag(mr, eve1, data[0]);
}
if (eve2) {
mesh_render_data_vert_flag(mr, eve2, &data[1]);
mesh_render_data_vert_flag(mr, eve2, data[1]);
}
}
@@ -219,7 +219,7 @@ static void extract_edit_data_iter_loose_vert_bm(const MeshRenderData &mr,
const int offset = mr.corners_num + (mr.loose_edges_num * 2);
EditLoopData *data = vbo_data + offset + loose_vert_i;
memset(data, 0x0, sizeof(*data));
mesh_render_data_vert_flag(mr, eve, data);
mesh_render_data_vert_flag(mr, eve, *data);
}
static void extract_edit_data_iter_loose_vert_mesh(const MeshRenderData &mr,
@@ -234,7 +234,7 @@ static void extract_edit_data_iter_loose_vert_mesh(const MeshRenderData &mr,
const int v_index = mr.loose_verts[loose_vert_i];
BMVert *eve = bm_original_vert_get(mr, v_index);
if (eve) {
mesh_render_data_vert_flag(mr, eve, data);
mesh_render_data_vert_flag(mr, eve, *data);
}
}
@@ -274,20 +274,20 @@ static void extract_edit_data_iter_subdiv_bm(const DRWSubdivCache &subdiv_cache,
const BMVert *eve = mr.orig_index_vert ? bm_original_vert_get(mr, vert_origindex) :
BM_vert_at_index(mr.bm, vert_origindex);
if (eve) {
mesh_render_data_vert_flag(mr, eve, edit_loop_data);
mesh_render_data_vert_flag(mr, eve, *edit_loop_data);
}
}
if (edge_origindex != -1) {
/* NOTE: #subdiv_loop_edge_index already has the origindex layer baked in. */
const BMEdge *eed = BM_edge_at_index(mr.bm, edge_origindex);
mesh_render_data_edge_flag(mr, eed, edit_loop_data);
mesh_render_data_edge_flag(mr, eed, *edit_loop_data);
}
/* coarse_quad can be null when called by the mesh iteration below. */
if (coarse_quad) {
/* The -1 parameter is for edit_uvs, which we don't do here. */
mesh_render_data_face_flag(mr, coarse_quad, {-1, -1, -1, -1}, edit_loop_data);
mesh_render_data_face_flag(mr, coarse_quad, {-1, -1, -1, -1}, *edit_loop_data);
}
}
}
@@ -327,11 +327,11 @@ static void extract_edit_data_loose_geom_subdiv(const DRWSubdivCache &subdiv_cac
BM_edge_at_index(mr.bm, loose_edges[i]))
{
EditLoopData value{};
mesh_render_data_edge_flag(mr, edge, &value);
mesh_render_data_edge_flag(mr, edge, value);
data.fill(value);
mesh_render_data_vert_flag(mr, edge->v1, &data.first());
mesh_render_data_vert_flag(mr, edge->v2, &data.last());
mesh_render_data_vert_flag(mr, edge->v1, data.first());
mesh_render_data_vert_flag(mr, edge->v2, data.last());
}
else {
data.fill({});
@@ -346,7 +346,7 @@ static void extract_edit_data_loose_geom_subdiv(const DRWSubdivCache &subdiv_cac
if (BMVert *vert = mr.orig_index_vert ? bm_original_vert_get(mr, loose_verts[i]) :
BM_vert_at_index(mr.bm, loose_verts[i]))
{
mesh_render_data_vert_flag(mr, vert, &value);
mesh_render_data_vert_flag(mr, vert, value);
}
vert_data[i] = value;
}

View File

@@ -66,9 +66,9 @@ static void extract_edituv_data_iter_face_bm(const MeshRenderData &mr,
MeshExtract_EditUVData_Data *data = static_cast<MeshExtract_EditUVData_Data *>(_data);
EditLoopData *eldata = &data->vbo_data[l_index];
memset(eldata, 0x0, sizeof(*eldata));
mesh_render_data_loop_flag(mr, l_iter, data->offsets, eldata);
mesh_render_data_face_flag(mr, f, data->offsets, eldata);
mesh_render_data_loop_edge_flag(mr, l_iter, data->offsets, eldata);
mesh_render_data_loop_flag(mr, l_iter, data->offsets, *eldata);
mesh_render_data_face_flag(mr, f, data->offsets, *eldata);
mesh_render_data_loop_edge_flag(mr, l_iter, data->offsets, *eldata);
} while ((l_iter = l_iter->next) != l_first);
}
@@ -88,8 +88,8 @@ static void extract_edituv_data_iter_face_mesh(const MeshRenderData &mr,
if (eed && eve) {
/* Loop on an edge endpoint. */
BMLoop *l = BM_face_edge_share_loop(efa, eed);
mesh_render_data_loop_flag(mr, l, data->offsets, eldata);
mesh_render_data_loop_edge_flag(mr, l, data->offsets, eldata);
mesh_render_data_loop_flag(mr, l, data->offsets, *eldata);
mesh_render_data_loop_edge_flag(mr, l, data->offsets, *eldata);
}
else {
if (eed == nullptr) {
@@ -101,7 +101,7 @@ static void extract_edituv_data_iter_face_mesh(const MeshRenderData &mr,
if (eed) {
/* Mapped points on an edge between two edit verts. */
BMLoop *l = BM_face_edge_share_loop(efa, eed);
mesh_render_data_loop_edge_flag(mr, l, data->offsets, eldata);
mesh_render_data_loop_edge_flag(mr, l, data->offsets, *eldata);
}
}
}
@@ -142,8 +142,8 @@ static void extract_edituv_data_iter_subdiv_bm(const DRWSubdivCache &subdiv_cach
BMEdge *eed = BM_edge_at_index(mr.bm, edge_origindex);
/* Loop on an edge endpoint. */
BMLoop *l = BM_face_edge_share_loop(const_cast<BMFace *>(coarse_quad), eed);
mesh_render_data_loop_flag(mr, l, data->offsets, edit_loop_data);
mesh_render_data_loop_edge_flag(mr, l, data->offsets, edit_loop_data);
mesh_render_data_loop_flag(mr, l, data->offsets, *edit_loop_data);
mesh_render_data_loop_edge_flag(mr, l, data->offsets, *edit_loop_data);
}
else {
if (edge_origindex == -1) {
@@ -156,11 +156,11 @@ static void extract_edituv_data_iter_subdiv_bm(const DRWSubdivCache &subdiv_cach
/* Mapped points on an edge between two edit verts. */
BMEdge *eed = BM_edge_at_index(mr.bm, edge_origindex);
BMLoop *l = BM_face_edge_share_loop(const_cast<BMFace *>(coarse_quad), eed);
mesh_render_data_loop_edge_flag(mr, l, data->offsets, edit_loop_data);
mesh_render_data_loop_edge_flag(mr, l, data->offsets, *edit_loop_data);
}
}
mesh_render_data_face_flag(mr, coarse_quad, data->offsets, edit_loop_data);
mesh_render_data_face_flag(mr, coarse_quad, data->offsets, *edit_loop_data);
}
}

View File

@@ -48,7 +48,7 @@ static void extract_fdots_edituv_data_iter_face_bm(const MeshRenderData &mr,
MeshExtract_EditUVFdotData_Data *data = static_cast<MeshExtract_EditUVFdotData_Data *>(_data);
EditLoopData *eldata = &data->vbo_data[BM_elem_index_get(f)];
memset(eldata, 0x0, sizeof(*eldata));
mesh_render_data_face_flag(mr, f, data->offsets, eldata);
mesh_render_data_face_flag(mr, f, data->offsets,* eldata);
}
static void extract_fdots_edituv_data_iter_face_mesh(const MeshRenderData &mr,
@@ -60,7 +60,7 @@ static void extract_fdots_edituv_data_iter_face_mesh(const MeshRenderData &mr,
memset(eldata, 0x0, sizeof(*eldata));
BMFace *efa = bm_original_face_get(mr, face_index);
if (efa) {
mesh_render_data_face_flag(mr, efa, data->offsets, eldata);
mesh_render_data_face_flag(mr, efa, data->offsets, *eldata);
}
}

View File

@@ -82,8 +82,8 @@ bool ED_uvedit_test(Object *obedit);
bool uvedit_face_visible_test_ex(const ToolSettings *ts, BMFace *efa);
bool uvedit_face_select_test_ex(const ToolSettings *ts, BMFace *efa, BMUVOffsets offsets);
bool uvedit_edge_select_test_ex(const ToolSettings *ts, BMLoop *l, BMUVOffsets offsets);
bool uvedit_uv_select_test_ex(const ToolSettings *ts, BMLoop *l, BMUVOffsets offsets);
bool uvedit_edge_select_test_ex(const ToolSettings *ts, const BMLoop *l, BMUVOffsets offsets);
bool uvedit_uv_select_test_ex(const ToolSettings *ts, const BMLoop *l, BMUVOffsets offsets);
bool uvedit_face_visible_test(const Scene *scene, BMFace *efa);
bool uvedit_face_select_test(const Scene *scene, BMFace *efa, BMUVOffsets offsets);

View File

@@ -388,7 +388,7 @@ void uvedit_face_select_disable(const Scene *scene,
}
}
bool uvedit_edge_select_test_ex(const ToolSettings *ts, BMLoop *l, const BMUVOffsets offsets)
bool uvedit_edge_select_test_ex(const ToolSettings *ts, const BMLoop *l, const BMUVOffsets offsets)
{
BLI_assert(offsets.select_vert >= 0);
BLI_assert(offsets.select_edge >= 0);
@@ -585,7 +585,7 @@ void uvedit_edge_select_disable(const Scene *scene,
}
}
bool uvedit_uv_select_test_ex(const ToolSettings *ts, BMLoop *l, const BMUVOffsets offsets)
bool uvedit_uv_select_test_ex(const ToolSettings *ts, const BMLoop *l, const BMUVOffsets offsets)
{
BLI_assert(offsets.select_vert >= 0);
if (ts->uv_flag & UV_SYNC_SELECTION) {