[Bf-blender-cvs] [46a27e3e953] refactor-mesh-corners-generic: Merge branch 'master' into refactor-mesh-corners-generic
Hans Goudey
noreply at git.blender.org
Mon Feb 6 23:17:44 CET 2023
Commit: 46a27e3e95374bc37522e71fdfbe730f1dc20555
Author: Hans Goudey
Date: Mon Feb 6 17:04:43 2023 -0500
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rB46a27e3e95374bc37522e71fdfbe730f1dc20555
Merge branch 'master' into refactor-mesh-corners-generic
===================================================================
===================================================================
diff --cc source/blender/blenkernel/intern/mesh_boolean_convert.cc
index 2d11929219c,60ca6e865dd..d9c2b95e536
--- a/source/blender/blenkernel/intern/mesh_boolean_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_boolean_convert.cc
@@@ -563,10 -562,10 +562,10 @@@ static void get_poly2d_cos(const Mesh *
reinterpret_cast<const float(*)[3]>(positions.data()),
axis_dominant);
axis_dominant_v3_to_m3(r_axis_mat, axis_dominant);
- for (const int i : poly_loops.index_range()) {
- float3 co = positions[poly_loops[i].v];
+ for (const int i : poly_verts.index_range()) {
+ float3 co = positions[poly_verts[i]];
- co = trans_mat * co;
- mul_v2_m3v3(cos_2d[i], r_axis_mat, co);
+ co = math::transform_point(trans_mat, co);
+ *reinterpret_cast<float2 *>(&cos_2d[i]) = (float3x3(r_axis_mat) * co).xy();
}
}
diff --cc source/blender/blenkernel/intern/mesh_iterators.cc
index d6f739b898f,45ad8f2b626..6413d9fd3be
--- a/source/blender/blenkernel/intern/mesh_iterators.cc
+++ b/source/blender/blenkernel/intern/mesh_iterators.cc
@@@ -323,26 -324,26 +322,26 @@@ void BKE_mesh_foreach_mapped_subdiv_fac
if (orig == ORIGINDEX_NONE) {
continue;
}
- ml = &loops[mp->loopstart];
- for (int j = 0; j < mp->totloop; j++, ml++) {
- if (facedot_tags[ml->v]) {
+ for (int j = 0; j < mp->totloop; j++) {
+ const int vert = corner_verts[mp->loopstart + j];
- if (BLI_BITMAP_TEST(facedot_tags, vert)) {
++ if (facedot_tags[vert]) {
func(userData,
orig,
- positions[ml->v],
- (flag & MESH_FOREACH_USE_NORMAL) ? vert_normals[ml->v] : nullptr);
+ positions[vert],
+ (flag & MESH_FOREACH_USE_NORMAL) ? vert_normals[vert] : nullptr);
}
}
}
}
else {
for (int i = 0; i < mesh->totpoly; i++, mp++) {
- ml = &loops[mp->loopstart];
- for (int j = 0; j < mp->totloop; j++, ml++) {
- if (facedot_tags[ml->v]) {
+ for (int j = 0; j < mp->totloop; j++) {
+ const int vert = corner_verts[mp->loopstart + j];
- if (BLI_BITMAP_TEST(facedot_tags, vert)) {
++ if (facedot_tags[vert]) {
func(userData,
i,
- positions[ml->v],
- (flag & MESH_FOREACH_USE_NORMAL) ? vert_normals[ml->v] : nullptr);
+ positions[vert],
+ (flag & MESH_FOREACH_USE_NORMAL) ? vert_normals[vert] : nullptr);
}
}
}
diff --cc source/blender/blenkernel/intern/pbvh.cc
index ddfe4f52606,7c829d32a82..991fbd03be4
--- a/source/blender/blenkernel/intern/pbvh.cc
+++ b/source/blender/blenkernel/intern/pbvh.cc
@@@ -677,8 -677,7 +677,8 @@@ static void pbvh_draw_args_init(PBVH *p
args->face_sets_color_default = pbvh->face_sets_color_default;
args->face_sets_color_seed = pbvh->face_sets_color_seed;
args->vert_positions = pbvh->vert_positions;
- args->corner_verts = pbvh->corner_verts;
- args->corner_edges = pbvh->mesh ? BKE_mesh_corner_edges(pbvh->mesh) : NULL;
- args->mloop = pbvh->mloop;
++ args->corner_verts = {pbvh->corner_verts, pbvh->mesh->totloop};
++ args->corner_edges = pbvh->mesh ? pbvh->mesh->corner_edges() : blender::Span<int>();
args->mpoly = pbvh->mpoly;
args->mlooptri = pbvh->looptri;
diff --cc source/blender/draw/DRW_pbvh.hh
index 00000000000,74cf1f93594..1d17b2392a3
mode 000000,100644..100644
--- a/source/blender/draw/DRW_pbvh.hh
+++ b/source/blender/draw/DRW_pbvh.hh
@@@ -1,0 -1,89 +1,91 @@@
+ /* SPDX-License-Identifier: GPL-2.0-or-later
+ * Copyright 2022 Blender Foundation. */
+
+ /** \file
+ * \ingroup draw
+ */
+
+ #pragma once
+
+ /* Needed for BKE_ccg.h. */
+ #include "BLI_assert.h"
+ #include "BLI_bitmap.h"
++#include "BLI_span.hh"
+
+ #include "BKE_ccg.h"
+
+ struct PBVHAttrReq;
+ struct GPUBatch;
+ struct PBVHNode;
+ struct PBVHBatches;
+ struct PBVHGPUFormat;
+ struct GSet;
+ struct DMFlagMat;
+ struct Mesh;
+ struct MLoopTri;
+ struct CustomData;
+ struct MLoop;
+ struct MPoly;
+ struct SubdivCCG;
+ struct BMesh;
+
+ struct PBVH_GPU_Args {
+ int pbvh_type;
+
+ BMesh *bm;
+ const Mesh *me;
+ const float (*vert_positions)[3];
- const MLoop *mloop;
++ blender::Span<int> corner_verts;
++ blender::Span<int> corner_edges;
+ const MPoly *mpoly;
+ int mesh_verts_num, mesh_faces_num, mesh_grids_num;
+ CustomData *vdata, *ldata, *pdata;
+ const float (*vert_normals)[3];
+
+ const char *active_color;
+ const char *render_color;
+
+ int face_sets_color_seed, face_sets_color_default;
+ int *face_sets; /* for PBVH_FACES and PBVH_GRIDS */
+
+ SubdivCCG *subdiv_ccg;
+ const DMFlagMat *grid_flag_mats;
+ const int *grid_indices;
+ CCGKey ccg_key;
+ CCGElem **grids;
+ void **gridfaces;
+ BLI_bitmap **grid_hidden;
+
+ int *prim_indices;
+ int totprim;
+
+ const bool *hide_poly;
+
+ int node_verts_num;
+
+ const MLoopTri *mlooptri;
+ PBVHNode *node;
+
+ /* BMesh. */
+ GSet *bm_unique_vert, *bm_other_verts, *bm_faces;
+ int cd_mask_layer;
+ };
+
+ void DRW_pbvh_node_update(PBVHBatches *batches, PBVH_GPU_Args *args);
+ void DRW_pbvh_update_pre(PBVHBatches *batches, PBVH_GPU_Args *args);
+
+ void DRW_pbvh_node_gpu_flush(PBVHBatches *batches);
+ PBVHBatches *DRW_pbvh_node_create(PBVH_GPU_Args *args);
+ void DRW_pbvh_node_free(PBVHBatches *batches);
+ GPUBatch *DRW_pbvh_tris_get(PBVHBatches *batches,
+ PBVHAttrReq *attrs,
+ int attrs_num,
+ PBVH_GPU_Args *args,
+ int *r_prim_count,
+ bool do_coarse_grids);
+ GPUBatch *DRW_pbvh_lines_get(PBVHBatches *batches,
+ PBVHAttrReq *attrs,
+ int attrs_num,
+ PBVH_GPU_Args *args,
+ int *r_prim_count,
+ bool do_coarse_grids);
diff --cc source/blender/draw/intern/draw_pbvh.cc
index 47433517d65,04d985be71e..638f8a517dc
--- a/source/blender/draw/intern/draw_pbvh.cc
+++ b/source/blender/draw/intern/draw_pbvh.cc
@@@ -549,10 -548,10 +549,10 @@@ struct PBVHBatches
void fill_vbo_faces(PBVHVbo &vbo, PBVH_GPU_Args *args)
{
++ const blender::Span<int> corner_verts = args->corner_verts;
auto foreach_faces =
[&](std::function<void(int buffer_i, int tri_i, int vertex_i, const MLoopTri *tri)> func) {
int buffer_i = 0;
- const int *corner_verts = args->corner_verts;
- const MLoop *mloop = args->mloop;
for (int i : IndexRange(args->totprim)) {
int face_index = args->mlooptri[args->prim_indices[i]].poly;
@@@ -993,8 -992,7 +993,8 @@@
}
int r_edges[3];
- BKE_mesh_looptri_get_real_edges(edges.data(), args->mloop, lt, r_edges);
+ BKE_mesh_looptri_get_real_edges(
- edges.data(), args->corner_verts, args->corner_edges, lt, r_edges);
++ edges.data(), args->corner_verts.data(), args->corner_edges.data(), lt, r_edges);
if (r_edges[0] != -1) {
edge_count++;
@@@ -1019,8 -1017,7 +1019,8 @@@
}
int r_edges[3];
- BKE_mesh_looptri_get_real_edges(edges.data(), args->mloop, lt, r_edges);
+ BKE_mesh_looptri_get_real_edges(
- edges.data(), args->corner_verts, args->corner_edges, lt, r_edges);
++ edges.data(), args->corner_verts.data(), args->corner_edges.data(), lt, r_edges);
if (r_edges[0] != -1) {
GPU_indexbuf_add_line_verts(&elb_lines, vertex_i, vertex_i + 1);
diff --cc source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
index f661e5fb956,233241ad776..eba70ed8850
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
@@@ -555,14 -557,15 +555,14 @@@ static void extract_edituv_fdots_iter_p
const bool mp_select = (efa) ? BM_elem_flag_test_bool(efa, BM_ELEM_SELECT) : false;
if (mr->use_subsurf_fdots) {
- const BLI_bitmap *facedot_tags = mr->me->runtime->subsurf_face_dot_tags;
+ const BitVector<> &facedot_tags = mr->me->runtime->subsurf_face_dot_tags;
- const MLoop *mloop = mr->mloop;
const int ml_index_end = mp->loopstart + mp->totloop;
for (int ml_index = mp->loopstart; ml_index < ml_index_end; ml_index += 1) {
- const int vert_i = mr->corner_verts[ml_index];
- const MLoop *ml = &mloop[ml_index];
++ const int vert = mr->corner_verts[ml_index];
const bool real_fdot = !mr->p_origindex || (mr->p_origindex[mp_index] != ORIGINDEX_NONE);
- const bool subd_fdot = BLI_BITMAP_TEST(facedot_tags, vert_i);
- const bool subd_fdot = facedot_tags[ml->v];
++ const bool subd_fdot = facedot_tags[vert];
edituv_facedot_add(data, mp_hidden || !real_fdot || !subd_fdot, mp_select, mp_index);
}
}
diff --cc source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc
index b99dfe1721a,bd04f6dbb03..3785fff3245
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc
@@@ -46,12 -46,13 +46,12 @@@ static void extract_fdots_iter_poly_mes
GPUIndexBufBuilder *elb = static_cast<GPUIndexBufBuilder *>(_userdata);
if (mr->use_subsurf_fdots) {
- const BLI_bitmap *facedot_tags = mr->me->runtime->subsurf_face_dot_tags;
+ const BitVector<> &facedot_tags = mr->me->runtime->subsurf_face_dot_tags;
- const MLoop *mloop = mr->mloop;
const int ml_index_end = mp->loopstart + mp->totloop;
for (int ml_index = mp->loopstart; ml_index < ml_index_end; ml_index += 1) {
- const int vert_i = mr->corner_verts[ml_index];
- if (BLI_BITMAP_TEST(facedot_tags, vert_i) && !hidden) {
- const MLoop *ml = &mloop[ml_index];
- if (facedot_tags[ml->v] && !hidden) {
++ const int vert = mr->corner_verts[ml_index];
++ if (facedot_tags[vert] && !hidden) {
GPU_indexbuf_s
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list