[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