[Bf-blender-cvs] [765e17100c3] refactor-mesh-face-generic: Merge branch 'refactor-mesh-sharp-face-generic' into refactor-mesh-face-generic

2023-02-06 Thread Hans Goudey
Commit: 765e17100c31e30d99f03527f653c5616eeea48c
Author: Hans Goudey
Date:   Mon Feb 6 18:00:45 2023 -0500
Branches: refactor-mesh-face-generic
https://developer.blender.org/rB765e17100c31e30d99f03527f653c5616eeea48c

Merge branch 'refactor-mesh-sharp-face-generic' into refactor-mesh-face-generic

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [f1bc7326eb1] refactor-mesh-face-generic: Add allocation API, switch to offsets in more places

2023-02-06 Thread Hans Goudey
Commit: f1bc7326eb1c021ef224ce1603fc5af1583df2e7
Author: Hans Goudey
Date:   Mon Feb 6 18:00:38 2023 -0500
Branches: refactor-mesh-face-generic
https://developer.blender.org/rBf1bc7326eb1c021ef224ce1603fc5af1583df2e7

Add allocation API, switch to offsets in more places

===

M   intern/cycles/blender/mesh.cpp
M   source/blender/blenkernel/BKE_mesh.h
M   source/blender/blenkernel/intern/customdata.cc
M   source/blender/blenkernel/intern/mesh.cc
M   source/blender/blenkernel/intern/mesh_boolean_convert.cc
M   source/blender/blenkernel/intern/mesh_legacy_convert.cc
M   source/blender/blenkernel/intern/pbvh.cc
M   source/blender/blenkernel/intern/subsurf_ccg.cc
M   source/blender/bmesh/intern/bmesh_mesh_convert.cc
M   source/blender/draw/DRW_pbvh.hh
M   source/blender/draw/intern/draw_pbvh.cc
M   source/blender/editors/mesh/mesh_data.cc
M   source/blender/editors/mesh/meshtools.cc
M   source/blender/editors/sculpt_paint/sculpt_face_set.cc
M   source/blender/editors/uvedit/uvedit_unwrap_ops.cc
M   
source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
M   source/blender/io/collada/MeshImporter.cpp
M   source/blender/io/stl/importer/stl_import_mesh.cc
M   source/blender/makesdna/DNA_customdata_types.h

===

diff --git a/intern/cycles/blender/mesh.cpp b/intern/cycles/blender/mesh.cpp
index 3cd762bbf05..72d4750c7db 100644
--- a/intern/cycles/blender/mesh.cpp
+++ b/intern/cycles/blender/mesh.cpp
@@ -246,11 +246,12 @@ static void fill_generic_attribute(BL::Mesh &b_mesh,
 if (polys_num == 0) {
   return;
 }
-const MPoly *polys = static_cast(b_mesh.polygons[0].ptr.data);
+const int *poly_offsets = static_cast(b_mesh.polygons[0].ptr.data);
 for (int i = 0; i < polys_num; i++) {
-  const MPoly &b_poly = polys[i];
-  for (int j = 0; j < b_poly.totloop; j++) {
-*data = get_value_at_index(b_poly.loopstart + j);
+  const int poly_start = poly_offsets[i];
+  const int poly_size = poly_offsets[i + 1] - poly_start;
+  for (int j = 0; j < poly_size; j++) {
+*data = get_value_at_index(poly_start + j);
 data++;
   }
 }
@@ -578,7 +579,7 @@ static void attr_create_subd_uv_map(Scene *scene, Mesh 
*mesh, BL::Mesh &b_mesh,
   if (polys_num == 0) {
 return;
   }
-  const MPoly *polys = static_cast(b_mesh.polygons[0].ptr.data);
+  const int *poly_offsets = static_cast(b_mesh.polygons[0].ptr.data);
 
   if (!b_mesh.uv_layers.empty()) {
 BL::Mesh::uv_layers_iterator l;
@@ -614,9 +615,10 @@ static void attr_create_subd_uv_map(Scene *scene, Mesh 
*mesh, BL::Mesh &b_mesh,
 float2 *fdata = uv_attr->data_float2();
 
 for (int i = 0; i < polys_num; i++) {
-  const MPoly &b_poly = polys[i];
-  for (int j = 0; j < b_poly.totloop; j++) {
-*(fdata++) = get_float2(l->data[b_poly.loopstart + j].uv());
+  const int poly_start = poly_offsets[i];
+  const int poly_size = poly_offsets[i + 1] - poly_start;
+  for (int j = 0; j < poly_size; j++) {
+*(fdata++) = get_float2(l->data[poly_start + j].uv());
   }
 }
   }
@@ -880,11 +882,12 @@ static void attr_create_random_per_island(Scene *scene,
   }
   else {
 if (polys_num != 0) {
-  const MPoly *polys = static_cast(b_mesh.polygons[0].ptr.data);
+  const int *poly_offsets = static_cast(b_mesh.polygons[0].ptr.data);
   BL::IntAttribute corner_verts = *find_corner_vert_attribute(b_mesh);
   for (int i = 0; i < polys_num; i++) {
-const MPoly &b_poly = polys[i];
-const int vert = corner_verts.data[b_poly.loopstart].value();
+const int poly_start = poly_offsets[i];
+const int poly_size = poly_offsets[i + 1] - poly_start;
+const int vert = corner_verts.data[poly_start].value();
 data[i] = hash_uint_to_float(vertices_sets.find(vert));
   }
 }
@@ -957,11 +960,12 @@ static void create_mesh(Scene *scene,
 numtris = numfaces;
   }
   else {
-const MPoly *polys = static_cast(b_mesh.polygons[0].ptr.data);
+const int *poly_offsets = static_cast(b_mesh.polygons[0].ptr.data);
 for (int i = 0; i < polys_num; i++) {
-  const MPoly &b_poly = polys[i];
-  numngons += (b_poly.totloop == 4) ? 0 : 1;
-  numcorners += b_poly.totloop;
+  const int poly_start = poly_offsets[i];
+  const int poly_size = poly_offsets[i + 1] - poly_start;
+  numngons += (poly_size == 4) ? 0 : 1;
+  numcorners += poly_size;
 }
   }
 
@@ -1052,23 +1056,23 @@ static void create_mesh(Scene *scene,
   else {
 vector vi;
 
-const MPoly *polys = static_cast(b_mesh.polygons[0].ptr.data);
+cons

[Bf-blender-cvs] [709ec5ea3a6] refactor-mesh-face-generic: Merge branch 'refactor-mesh-corners-generic' into refactor-mesh-face-generic

2023-02-06 Thread Hans Goudey
Commit: 709ec5ea3a6d5b9e251e42aca156a71b1d8697c0
Author: Hans Goudey
Date:   Mon Feb 6 17:21:34 2023 -0500
Branches: refactor-mesh-face-generic
https://developer.blender.org/rB709ec5ea3a6d5b9e251e42aca156a71b1d8697c0

Merge branch 'refactor-mesh-corners-generic' into refactor-mesh-face-generic

===



===

diff --cc source/blender/blenkernel/intern/mesh.cc
index 1ff8f918c61,08183e85ad2..53c8a777db5
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@@ -273,9 -271,7 +273,8 @@@ static void mesh_blend_write(BlendWrite
BKE_mesh_legacy_convert_hide_layers_to_flags(mesh);
BKE_mesh_legacy_convert_selection_layers_to_flags(mesh);
BKE_mesh_legacy_convert_material_indices_to_mpoly(mesh);
 +  BKE_mesh_legacy_sharp_faces_to_flags(mesh);
BKE_mesh_legacy_bevel_weight_from_layers(mesh);
-   BKE_mesh_legacy_face_set_from_generic(mesh, poly_layers);
BKE_mesh_legacy_edge_crease_from_layers(mesh);
BKE_mesh_legacy_sharp_edges_to_flags(mesh);
BKE_mesh_legacy_attribute_strings_to_flags(mesh);
diff --cc source/blender/blenkernel/intern/mesh_boolean_convert.cc
index 32163f8bbfc,d9c2b95e536..751d2844104
--- a/source/blender/blenkernel/intern/mesh_boolean_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_boolean_convert.cc
@@@ -280,13 -280,13 +279,13 @@@ static IMesh meshes_to_imesh(Spanmesh_vert_offset[mi] = v;
diff --cc source/blender/blenkernel/intern/mesh_iterators.cc
index 0dd0677cd43,6413d9fd3be..dfdfb9ec423
--- a/source/blender/blenkernel/intern/mesh_iterators.cc
+++ b/source/blender/blenkernel/intern/mesh_iterators.cc
@@@ -306,23 -308,23 +306,22 @@@ void BKE_mesh_foreach_mapped_subdiv_fac
  MeshForeachFlag flag)
  {
const float(*positions)[3] = BKE_mesh_vert_positions(mesh);
-   const OffsetIndices polys = mesh->polys();
 -  const MPoly *mp = BKE_mesh_polys(mesh);
++  const blender::OffsetIndices polys = mesh->polys();
const blender::Span corner_verts = mesh->corner_verts();
const float(*vert_normals)[3] = (flag & MESH_FOREACH_USE_NORMAL) ?
BKE_mesh_vertex_normals_ensure(mesh) :
nullptr;
const int *index = static_cast(CustomData_get_layer(&mesh->pdata, CD_ORIGINDEX));
-   const BLI_bitmap *facedot_tags = mesh->runtime->subsurf_face_dot_tags;
-   BLI_assert(facedot_tags != nullptr);
+   const blender::BitVector<> &facedot_tags = 
mesh->runtime->subsurf_face_dot_tags;
  
if (index) {
- for (int i = 0; i < mesh->totpoly; i++) {
 -for (int i = 0; i < mesh->totpoly; i++, mp++) {
++for (const int i : polys.index_range()) {
const int orig = *index++;
if (orig == ORIGINDEX_NONE) {
  continue;
}
 -  for (int j = 0; j < mp->totloop; j++) {
 -const int vert = corner_verts[mp->loopstart + j];
 +  for (const int vert : corner_verts.slice(polys[i])) {
- if (BLI_BITMAP_TEST(facedot_tags, vert)) {
+ if (facedot_tags[vert]) {
func(userData,
 orig,
 positions[vert],
@@@ -332,9 -334,10 +331,9 @@@
  }
}
else {
- for (int i = 0; i < mesh->totpoly; i++) {
 -for (int i = 0; i < mesh->totpoly; i++, mp++) {
 -  for (int j = 0; j < mp->totloop; j++) {
 -const int vert = corner_verts[mp->loopstart + j];
++for (const int i : polys.index_range()) {
 +  for (const int vert : corner_verts.slice(polys[i])) {
- if (BLI_BITMAP_TEST(facedot_tags, vert)) {
+ if (facedot_tags[vert]) {
func(userData,
 i,
 positions[vert],
diff --cc source/blender/blenkernel/intern/mesh_mirror.cc
index 4e898983bbc,e605d3d9785..58ffd46eaf2
--- a/source/blender/blenkernel/intern/mesh_mirror.cc
+++ b/source/blender/blenkernel/intern/mesh_mirror.cc
@@@ -201,8 -202,8 +201,8 @@@ Mesh *BKE_mesh_mirror_apply_mirror_on_a
CustomData_copy_data(&mesh->pdata, &result->pdata, 0, 0, maxPolys);
  
/* Subdivision-surface for eg won't have mesh data in the custom-data 
arrays.
 -   * Now add position/#MEdge/#MPoly layers. */
 +   * Now add position/#MEdge layers. */
-   if (BKE_mesh_vert_positions(mesh) != NULL) {
+   if (BKE_mesh_vert_positions(mesh) != nullptr) {
  memcpy(BKE_mesh_vert_positions_for_write(result),
 BKE_mesh_vert_positions(mesh),
 sizeof(float[3]) * mesh->totvert);
diff --cc source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
index 4da16a73259,eba70ed8850..5bf2d507b85
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
@@@ -550,13 -555,14 +550,13 @@@ s

[Bf-blender-cvs] [46a27e3e953] refactor-mesh-corners-generic: Merge branch 'master' into refactor-mesh-corners-generic

2023-02-06 Thread Hans Goudey
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(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(&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();
args->mpoly = pbvh->mpoly;
args->mlooptri = pbvh->looptri;
  
diff --cc source/blender/draw/DRW_pbvh.hh
index 000,74cf1f93594..1d17b2392a3
mode 00,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 corner_verts;
++  blender::Span cor

[Bf-blender-cvs] [6212d6231ee] refactor-mesh-sharp-face-generic: Merge branch 'master' into refactor-mesh-sharp-face-generic

2023-02-06 Thread Hans Goudey
Commit: 6212d6231eefd6eb93e6c4ce52cbae79bccc32e2
Author: Hans Goudey
Date:   Mon Feb 6 16:57:25 2023 -0500
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rB6212d6231eefd6eb93e6c4ce52cbae79bccc32e2

Merge branch 'master' into refactor-mesh-sharp-face-generic

===



===

diff --cc source/blender/blenkernel/intern/mesh.cc
index 9de9d829562,f588bfb1326..076d8cbc166
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@@ -269,9 -269,7 +269,8 @@@ static void mesh_blend_write(BlendWrite
BKE_mesh_legacy_convert_hide_layers_to_flags(mesh);
BKE_mesh_legacy_convert_selection_layers_to_flags(mesh);
BKE_mesh_legacy_convert_material_indices_to_mpoly(mesh);
 +  BKE_mesh_legacy_sharp_faces_to_flags(mesh);
BKE_mesh_legacy_bevel_weight_from_layers(mesh);
-   BKE_mesh_legacy_face_set_from_generic(mesh, poly_layers);
BKE_mesh_legacy_edge_crease_from_layers(mesh);
BKE_mesh_legacy_sharp_edges_to_flags(mesh);
BKE_mesh_legacy_attribute_strings_to_flags(mesh);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [d3500c482fa] master: Cleanup: Move DRW_pbvh.h header to C++

2023-02-06 Thread Hans Goudey
Commit: d3500c482fae55497abc5c02c7ccf9e5e7d22020
Author: Hans Goudey
Date:   Mon Feb 6 16:52:02 2023 -0500
Branches: master
https://developer.blender.org/rBd3500c482fae55497abc5c02c7ccf9e5e7d22020

Cleanup: Move DRW_pbvh.h header to C++

For continued refactoring of the Mesh data structure. See T103343.

===

M   source/blender/blenkernel/intern/pbvh.cc
M   source/blender/blenkernel/intern/pbvh_bmesh.cc
M   source/blender/draw/CMakeLists.txt
D   source/blender/draw/DRW_pbvh.h
A   source/blender/draw/DRW_pbvh.hh
M   source/blender/draw/intern/draw_manager_data.cc
M   source/blender/draw/intern/draw_pbvh.cc

===

diff --git a/source/blender/blenkernel/intern/pbvh.cc 
b/source/blender/blenkernel/intern/pbvh.cc
index b45a136f28c..7c829d32a82 100644
--- a/source/blender/blenkernel/intern/pbvh.cc
+++ b/source/blender/blenkernel/intern/pbvh.cc
@@ -26,7 +26,7 @@
 #include "BKE_pbvh.h"
 #include "BKE_subdiv_ccg.h"
 
-#include "DRW_pbvh.h"
+#include "DRW_pbvh.hh"
 
 #include "PIL_time.h"
 
diff --git a/source/blender/blenkernel/intern/pbvh_bmesh.cc 
b/source/blender/blenkernel/intern/pbvh_bmesh.cc
index f8d4bdc88da..ec09f254ff4 100644
--- a/source/blender/blenkernel/intern/pbvh_bmesh.cc
+++ b/source/blender/blenkernel/intern/pbvh_bmesh.cc
@@ -17,7 +17,7 @@
 #include "BKE_ccg.h"
 #include "BKE_pbvh.h"
 
-#include "DRW_pbvh.h"
+#include "DRW_pbvh.hh"
 
 #include "bmesh.h"
 #include "pbvh_intern.hh"
diff --git a/source/blender/draw/CMakeLists.txt 
b/source/blender/draw/CMakeLists.txt
index d2835639686..19bd2267db5 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -220,7 +220,7 @@ set(SRC
   engines/overlay/overlay_wireframe.cc
 
   DRW_engine.h
-  DRW_pbvh.h
+  DRW_pbvh.hh
   DRW_select_buffer.h
   intern/DRW_gpu_wrapper.hh
   intern/DRW_render.h
diff --git a/source/blender/draw/DRW_pbvh.h b/source/blender/draw/DRW_pbvh.h
deleted file mode 100644
index 00c76b641ee..000
--- a/source/blender/draw/DRW_pbvh.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/* 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 "BKE_ccg.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct PBVHAttrReq;
-struct GPUBatch;
-struct PBVHNode;
-struct GSet;
-struct DMFlagMat;
-struct Mesh;
-struct MLoopTri;
-struct CustomData;
-struct MLoop;
-struct MPoly;
-struct SubdivCCG;
-struct BMesh;
-
-typedef struct PBVHBatches PBVHBatches;
-
-typedef struct PBVH_GPU_Args {
-  int pbvh_type;
-
-  struct BMesh *bm;
-  const struct Mesh *me;
-  const float (*vert_positions)[3];
-  const struct MLoop *mloop;
-  const struct MPoly *mpoly;
-  int mesh_verts_num, mesh_faces_num, mesh_grids_num;
-  struct 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 */
-
-  struct SubdivCCG *subdiv_ccg;
-  const struct 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 struct MLoopTri *mlooptri;
-  struct PBVHNode *node;
-
-  /* BMesh. */
-  struct GSet *bm_unique_vert, *bm_other_verts, *bm_faces;
-  int cd_mask_layer;
-} PBVH_GPU_Args;
-
-typedef struct PBVHGPUFormat PBVHGPUFormat;
-
-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);
-struct PBVHBatches *DRW_pbvh_node_create(PBVH_GPU_Args *args);
-void DRW_pbvh_node_free(PBVHBatches *batches);
-struct GPUBatch *DRW_pbvh_tris_get(PBVHBatches *batches,
-   struct PBVHAttrReq *attrs,
-   int attrs_num,
-   PBVH_GPU_Args *args,
-   int *r_prim_count,
-   bool do_coarse_grids);
-struct GPUBatch *DRW_pbvh_lines_get(struct PBVHBatches *batches,
-struct PBVHAttrReq *attrs,
-int attrs_num,
-PBVH_GPU_Args *args,
-int *r_prim_count,
-bool do_coarse_grids);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/source/blender/draw/DRW_pbvh.hh b/source/blender/draw/DRW_pbvh.hh
new

[Bf-blender-cvs] [3a1583972a1] master: Fix T104256: Curve to points node skips curve domain attributes

2023-02-06 Thread Hans Goudey
Commit: 3a1583972a1ccf24b543cad8f9fa7df4e6509938
Author: Hans Goudey
Date:   Mon Feb 6 16:15:35 2023 -0500
Branches: master
https://developer.blender.org/rB3a1583972a1ccf24b543cad8f9fa7df4e6509938

Fix T104256: Curve to points node skips curve domain attributes

7536abbe16bd8672ca38e2b8 forgot to port the curve domain attributes.

===

M   source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc

===

diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc 
b/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc
index 42f93c31384..075ed8a6ce4 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc
@@ -79,6 +79,25 @@ static void fill_rotation_attribute(const Span 
tangents,
   });
 }
 
+static void copy_curve_domain_attributes(const AttributeAccessor 
curve_attributes,
+ MutableAttributeAccessor 
point_attributes)
+{
+  curve_attributes.for_all([&](const bke::AttributeIDRef &id,
+   const bke::AttributeMetaData &meta_data) {
+if (curve_attributes.is_builtin(id)) {
+  return true;
+}
+if (meta_data.domain != ATTR_DOMAIN_CURVE) {
+  return true;
+}
+point_attributes.add(id,
+ ATTR_DOMAIN_POINT,
+ meta_data.data_type,
+ bke::AttributeInitVArray(curve_attributes.lookup(id, 
ATTR_DOMAIN_POINT)));
+return true;
+  });
+}
+
 static PointCloud *pointcloud_from_curves(bke::CurvesGeometry curves,
   const AttributeIDRef &tangent_id,
   const AttributeIDRef &normal_id,
@@ -102,6 +121,8 @@ static PointCloud 
*pointcloud_from_curves(bke::CurvesGeometry curves,
   pointcloud->pdata = curves.point_data;
   CustomData_reset(&curves.point_data);
 
+  copy_curve_domain_attributes(curves.attributes(), 
pointcloud->attributes_for_write());
+
   return pointcloud;
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [d20f9923224] master: Mesh: Avoid copying positions in object mode modifier stack

2023-02-06 Thread Hans Goudey
Commit: d20f9923224d2637374dd4390ae84c5041e3f9d3
Author: Hans Goudey
Date:   Mon Feb 6 14:34:16 2023 -0500
Branches: master
https://developer.blender.org/rBd20f9923224d2637374dd4390ae84c5041e3f9d3

Mesh: Avoid copying positions in object mode modifier stack

Remove the use of a separate contiguous positions array now that
they are stored that way in the first place. This allows removing the
complexity of tracking whether it is allocated and deformed in the
mesh modifier stack.

Instead of deferring the creation of the final mesh until after the
positions have been copied and deformed, create the final mesh
first and then deform its positions.

Since vertex and face normals are calculated lazily, we can rely on
individual modifiers to calculate them as necessary and simplify
the modifier stack. This was hard to change before because of the
separate array of deformed positions.

Differential Revision: https://developer.blender.org/D16971

===

M   source/blender/blenkernel/intern/DerivedMesh.cc
M   source/blender/blenkernel/intern/modifier.cc

===

diff --git a/source/blender/blenkernel/intern/DerivedMesh.cc 
b/source/blender/blenkernel/intern/DerivedMesh.cc
index c3d535a3e9d..bd0fdadec5c 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.cc
+++ b/source/blender/blenkernel/intern/DerivedMesh.cc
@@ -661,23 +661,17 @@ static void mesh_calc_modifiers(struct Depsgraph 
*depsgraph,
 GeometrySet **r_geometry_set)
 {
   using namespace blender::bke;
-  /* Input and final mesh. Final mesh is only created the moment the first
-   * constructive modifier is executed, or a deform modifier needs normals
-   * or certain data layers. */
+  /* Input mesh shouldn't be modified. */
   Mesh *mesh_input = (Mesh *)ob->data;
+  /* The final mesh is the result of calculating all enabled modifiers. */
   Mesh *mesh_final = nullptr;
+  /* The result of calculating all leading deform modifiers. */
   Mesh *mesh_deform = nullptr;
   /* This geometry set contains the non-mesh data that might be generated by 
modifiers. */
   GeometrySet geometry_set_final;
 
   BLI_assert((mesh_input->id.tag & LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT) == 0);
 
-  /* TODO: Remove use of `deformed_verts` in mesh modifier stack
-   * since mesh positions are now stored in a contiguous array. */
-  float(*deformed_verts)[3] = nullptr;
-  int num_deformed_verts = mesh_input->totvert;
-  bool isPrevDeform = false;
-
   /* Mesh with constructive modifiers but no deformation applied. Tracked
* along with final mesh if undeformed / orco coordinates are requested
* for texturing. */
@@ -761,20 +755,15 @@ static void mesh_calc_modifiers(struct Depsgraph 
*depsgraph,
 
   if (mti->type == eModifierTypeType_OnlyDeform && !sculpt_dyntopo) {
 blender::bke::ScopedModifierTimer modifier_timer{*md};
-if (!deformed_verts) {
-  deformed_verts = BKE_mesh_vert_coords_alloc(mesh_input, 
&num_deformed_verts);
-}
-else if (isPrevDeform && mti->dependsOnNormals && 
mti->dependsOnNormals(md)) {
-  if (mesh_final == nullptr) {
-mesh_final = BKE_mesh_copy_for_eval(mesh_input, true);
-ASSERT_IS_VALID_MESH(mesh_final);
-  }
-  BKE_mesh_vert_coords_apply(mesh_final, deformed_verts);
+if (!mesh_final) {
+  mesh_final = BKE_mesh_copy_for_eval(mesh_input, true);
+  ASSERT_IS_VALID_MESH(mesh_final);
 }
-
-BKE_modifier_deform_verts(md, &mectx, mesh_final, deformed_verts, 
num_deformed_verts);
-
-isPrevDeform = true;
+BKE_modifier_deform_verts(md,
+  &mectx,
+  mesh_final,
+  
BKE_mesh_vert_positions_for_write(mesh_final),
+  mesh_final->totvert);
   }
   else {
 break;
@@ -786,10 +775,6 @@ static void mesh_calc_modifiers(struct Depsgraph 
*depsgraph,
  * coordinates (like vertex paint). */
 if (r_deform) {
   mesh_deform = BKE_mesh_copy_for_eval(mesh_input, true);
-
-  if (deformed_verts) {
-BKE_mesh_vert_coords_apply(mesh_deform, deformed_verts);
-  }
 }
   }
 
@@ -858,36 +843,19 @@ static void mesh_calc_modifiers(struct Depsgraph 
*depsgraph,
   }
 }
 
-/* How to apply modifier depends on (a) what we already have as
- * a result of previous modifiers (could be a Mesh or just
- * deformed vertices) and (b) what type the modifier is. */
 if (mti->type == eModifierTypeType_OnlyDeform) {
-  /* No existing verts to deform, need to build them. */
-  if (!deformed_verts) {
-if (mesh_final) {
-  /* Deforming a mesh, read the vertex locations
-   * out of the mesh and deform t

[Bf-blender-cvs] [75db4c082ba] master: Cleanup: Use BitVector instead of BLI_bitmap for subsurf face dot tags

2023-02-06 Thread Hans Goudey
Commit: 75db4c082ba7bd3d311bd0f65b75934109199ee6
Author: Hans Goudey
Date:   Mon Feb 6 13:24:40 2023 -0500
Branches: master
https://developer.blender.org/rB75db4c082ba7bd3d311bd0f65b75934109199ee6

Cleanup: Use BitVector instead of BLI_bitmap for subsurf face dot tags

For better type safety and more automatic memory management.

===

M   source/blender/blenkernel/BKE_mesh_types.h
M   source/blender/blenkernel/intern/mesh.cc
M   source/blender/blenkernel/intern/mesh_iterators.cc
M   source/blender/blenkernel/intern/mesh_runtime.cc
M   source/blender/blenkernel/intern/subdiv_mesh.cc
M   source/blender/blenlib/BLI_bit_vector.hh
M   source/blender/draw/intern/draw_cache_extract_mesh.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_pos.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_uv.cc
M   source/blender/editors/space_view3d/view3d_iterators.cc

===

diff --git a/source/blender/blenkernel/BKE_mesh_types.h 
b/source/blender/blenkernel/BKE_mesh_types.h
index 0e0bced37ec..c9992a5e3d7 100644
--- a/source/blender/blenkernel/BKE_mesh_types.h
+++ b/source/blender/blenkernel/BKE_mesh_types.h
@@ -25,6 +25,7 @@
 
 struct BVHCache;
 struct EditMeshData;
+struct Mesh;
 struct MLoopTri;
 struct ShrinkwrapBoundaryData;
 struct SubdivCCG;
@@ -167,10 +168,11 @@ struct MeshRuntime {
   SharedCache loose_edges_cache;
 
   /**
-   * A #BLI_bitmap containing tags for the center vertices of subdivided 
polygons, set by the
-   * subdivision surface modifier and used by drawing code instead of polygon 
center face dots.
+   * A bit vector the size of the number of vertices, set to true for the 
center vertices of
+   * subdivided polygons. The values are set by the subdivision surface 
modifier and used by
+   * drawing code instead of polygon center face dots. Otherwise this will be 
empty.
*/
-  uint32_t *subsurf_face_dot_tags = nullptr;
+  BitVector<> subsurf_face_dot_tags;
 
   MeshRuntime() = default;
   ~MeshRuntime();
diff --git a/source/blender/blenkernel/intern/mesh.cc 
b/source/blender/blenkernel/intern/mesh.cc
index dfdad20cc48..f588bfb1326 100644
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@ -107,10 +107,10 @@ static void mesh_copy_data(Main *bmain, ID *id_dst, const 
ID *id_src, const int
   mesh_dst->runtime->wrapper_type_finalize = 
mesh_src->runtime->wrapper_type_finalize;
   mesh_dst->runtime->subsurf_runtime_data = 
mesh_src->runtime->subsurf_runtime_data;
   mesh_dst->runtime->cd_mask_extra = mesh_src->runtime->cd_mask_extra;
-  /* Copy face dot tags, since meshes may be duplicated after a subsurf 
modifier
-   * or node, but we still need to be able to draw face center vertices. */
-  mesh_dst->runtime->subsurf_face_dot_tags = static_cast(
-  MEM_dupallocN(mesh_src->runtime->subsurf_face_dot_tags));
+  /* Copy face dot tags, since meshes may be duplicated after a subsurf 
modifier or node, but we
+   * still need to be able to draw face center vertices. The tags may be 
cleared explicitly when
+   * the topology is changed. */
+  mesh_dst->runtime->subsurf_face_dot_tags = 
mesh_src->runtime->subsurf_face_dot_tags;
   if ((mesh_src->id.tag & LIB_TAG_NO_MAIN) == 0) {
 /* This is a direct copy of a main mesh, so for now it has the same 
topology. */
 mesh_dst->runtime->deformed_only = true;
diff --git a/source/blender/blenkernel/intern/mesh_iterators.cc 
b/source/blender/blenkernel/intern/mesh_iterators.cc
index b1aa4dcec53..45ad8f2b626 100644
--- a/source/blender/blenkernel/intern/mesh_iterators.cc
+++ b/source/blender/blenkernel/intern/mesh_iterators.cc
@@ -316,8 +316,7 @@ void BKE_mesh_foreach_mapped_subdiv_face_center(
   BKE_mesh_vertex_normals_ensure(mesh) :
   nullptr;
   const int *index = static_cast(CustomData_get_layer(&mesh->pdata, CD_ORIGINDEX));
-  const BLI_bitmap *facedot_tags = mesh->runtime->subsurf_face_dot_tags;
-  BLI_assert(facedot_tags != nullptr);
+  const blender::BitVector<> &facedot_tags = 
mesh->runtime->subsurf_face_dot_tags;
 
   if (index) {
 for (int i = 0; i < mesh->totpoly; i++, mp++) {
@@ -327,7 +326,7 @@ void BKE_mesh_foreach_mapped_subdiv_face_center(
   }
   ml = &loops[mp->loopstart];
   for (int j = 0; j < mp->totloop; j++, ml++) {
-if (BLI_BITMAP_TEST(facedot_tags, ml->v)) {
+if (facedot_tags[ml->v]) {
   func(userData,
orig,
positions[ml->v],
@@ -340,7 +339,7 @

[Bf-blender-cvs] [c7b601c79e3] master: Cleanup: Subdiv: Use index instead of pointer

2023-02-06 Thread Hans Goudey
Commit: c7b601c79e323dfb75cce07e4f0c25613252
Author: Hans Goudey
Date:   Mon Feb 6 12:28:40 2023 -0500
Branches: master
https://developer.blender.org/rBc7b601c79e323dfb75cce07e4f0c25613252

Cleanup: Subdiv: Use index instead of pointer

The edge pointer was retrieved from the index and then just
used to calculate the index again. Remove the edge pointer
and only use the index.

===

M   source/blender/blenkernel/intern/subdiv_mesh.cc

===

diff --git a/source/blender/blenkernel/intern/subdiv_mesh.cc 
b/source/blender/blenkernel/intern/subdiv_mesh.cc
index dbeefcb1e7b..e0ca6a12c4e 100644
--- a/source/blender/blenkernel/intern/subdiv_mesh.cc
+++ b/source/blender/blenkernel/intern/subdiv_mesh.cc
@@ -786,10 +786,10 @@ static void subdiv_mesh_vertex_inner(const 
SubdivForeachContext *foreach_context
 
 static void subdiv_copy_edge_data(SubdivMeshContext *ctx,
   MEdge *subdiv_edge,
-  const MEdge *coarse_edge)
+  const int coarse_edge_index)
 {
   const int subdiv_edge_index = subdiv_edge - ctx->subdiv_edges;
-  if (coarse_edge == nullptr) {
+  if (coarse_edge_index == ORIGINDEX_NONE) {
 subdiv_edge->flag = 0;
 if (!ctx->settings->use_optimal_display) {
   subdiv_edge->flag |= ME_EDGEDRAW;
@@ -799,7 +799,6 @@ static void subdiv_copy_edge_data(SubdivMeshContext *ctx,
 }
 return;
   }
-  const int coarse_edge_index = coarse_edge - ctx->coarse_edges;
   CustomData_copy_data(
   &ctx->coarse_mesh->edata, &ctx->subdiv_mesh->edata, coarse_edge_index, 
subdiv_edge_index, 1);
   subdiv_edge->flag |= ME_EDGEDRAW;
@@ -816,12 +815,7 @@ static void subdiv_mesh_edge(const SubdivForeachContext 
*foreach_context,
   SubdivMeshContext *ctx = static_cast(foreach_context->user_data);
   MEdge *subdiv_medge = ctx->subdiv_edges;
   MEdge *subdiv_edge = &subdiv_medge[subdiv_edge_index];
-  const MEdge *coarse_edge = nullptr;
-  if (coarse_edge_index != ORIGINDEX_NONE) {
-const MEdge *coarse_medge = ctx->coarse_edges;
-coarse_edge = &coarse_medge[coarse_edge_index];
-  }
-  subdiv_copy_edge_data(ctx, subdiv_edge, coarse_edge);
+  subdiv_copy_edge_data(ctx, subdiv_edge, coarse_edge_index);
   subdiv_edge->v1 = subdiv_v1;
   subdiv_edge->v2 = subdiv_v2;
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [997ad445baf] refactor-mesh-face-generic: Move some PBVH code to use offset indices for polygons

2023-02-06 Thread Hans Goudey
Commit: 997ad445baf64cb19c1432c53ab7d98e7d1d79b4
Author: Hans Goudey
Date:   Mon Feb 6 08:39:42 2023 -0500
Branches: refactor-mesh-face-generic
https://developer.blender.org/rB997ad445baf64cb19c1432c53ab7d98e7d1d79b4

Move some PBVH code to use offset indices for polygons

===

M   source/blender/blenkernel/BKE_pbvh.h
M   source/blender/blenkernel/intern/paint.cc
M   source/blender/blenkernel/intern/pbvh.cc
M   source/blender/blenkernel/intern/pbvh_intern.hh

===

diff --git a/source/blender/blenkernel/BKE_pbvh.h 
b/source/blender/blenkernel/BKE_pbvh.h
index 9d4f8290dfe..b19fa025b00 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -278,6 +278,9 @@ typedef void (*BKE_pbvh_SearchNearestCallback)(PBVHNode 
*node, void *data, float
 /* Building */
 
 PBVH *BKE_pbvh_new(PBVHType type);
+
+#ifdef __cplusplus
+
 /**
  * Do a full rebuild with on Mesh data structure.
  *
@@ -286,7 +289,7 @@ PBVH *BKE_pbvh_new(PBVHType type);
  */
 void BKE_pbvh_build_mesh(PBVH *pbvh,
  struct Mesh *mesh,
- const int *poly_offsets,
+ blender::OffsetIndices polys,
  const int *corner_verts,
  float (*vert_positions)[3],
  int totvert,
@@ -295,6 +298,9 @@ void BKE_pbvh_build_mesh(PBVH *pbvh,
  struct CustomData *pdata,
  const struct MLoopTri *looptri,
  int looptri_num);
+
+#endif
+
 /**
  * Do a full rebuild with on Grids data structure.
  */
@@ -307,6 +313,7 @@ void BKE_pbvh_build_grids(PBVH *pbvh,
   unsigned int **grid_hidden,
   struct Mesh *me,
   struct SubdivCCG *subdiv_ccg);
+
 /**
  * Build a PBVH from a BMesh.
  */
diff --git a/source/blender/blenkernel/intern/paint.cc 
b/source/blender/blenkernel/intern/paint.cc
index f16659ce43e..3b1c24a6e66 100644
--- a/source/blender/blenkernel/intern/paint.cc
+++ b/source/blender/blenkernel/intern/paint.cc
@@ -2180,7 +2180,7 @@ static PBVH *build_pbvh_from_regular_mesh(Object *ob, 
Mesh *me_eval_deform, bool
   BKE_pbvh_respect_hide_set(pbvh, respect_hide);
 
   MutableSpan positions = me->vert_positions_for_write();
-  const OffsetIndices polys = me->polys();
+  const blender::OffsetIndices polys = me->polys();
   const Span corner_verts = me->corner_verts();
 
   MLoopTri *looptri = static_cast(
@@ -2195,7 +2195,7 @@ static PBVH *build_pbvh_from_regular_mesh(Object *ob, 
Mesh *me_eval_deform, bool
 
   BKE_pbvh_build_mesh(pbvh,
   me,
-  polys.data(),
+  polys,
   corner_verts.data(),
   reinterpret_cast(positions.data()),
   me->totvert,
diff --git a/source/blender/blenkernel/intern/pbvh.cc 
b/source/blender/blenkernel/intern/pbvh.cc
index ca0e5a09d83..5f615127267 100644
--- a/source/blender/blenkernel/intern/pbvh.cc
+++ b/source/blender/blenkernel/intern/pbvh.cc
@@ -823,7 +823,7 @@ static void pbvh_validate_node_prims(PBVH *pbvh)
 
 void BKE_pbvh_build_mesh(PBVH *pbvh,
  Mesh *mesh,
- const int *poly_offsets,
+ const blender::OffsetIndices polys,
  const int *corner_verts,
  float (*vert_positions)[3],
  int totvert,
@@ -838,7 +838,7 @@ void BKE_pbvh_build_mesh(PBVH *pbvh,
 
   pbvh->mesh = mesh;
   pbvh->header.type = PBVH_FACES;
-  pbvh->poly_offsets = poly_offsets;
+  pbvh->polys = polys;
   pbvh->hide_poly = static_cast(CustomData_get_layer_named_for_write(
   &mesh->pdata, CD_PROP_BOOL, ".hide_poly", mesh->totpoly));
   pbvh->material_indices = static_cast(
@@ -938,10 +938,10 @@ void BKE_pbvh_build_grids(PBVH *pbvh,
 
   /* Find maximum number of grids per face. */
   int max_grids = 1;
-  const int *poly_offsets = BKE_mesh_poly_offsets(me);
+  const blender::OffsetIndices polys = me->polys();
 
   for (int i = 0; i < me->totpoly; i++) {
-max_grids = max_ii(max_grids, poly_offsets[i].totloop);
+max_grids = max_ii(max_grids, polys[i].size());
   }
 
   /* Ensure leaf limit is at least 4 so there's room
@@ -955,7 +955,7 @@ void BKE_pbvh_build_grids(PBVH *pbvh,
   pbvh->ldata = &me->ldata;
   pbvh->pdata = &me->pdata;
 
-  pbvh->poly_offsets = poly_offsets;
+  pbvh->polys = polys;
   pbvh->corner_verts = BKE_mesh_corner_verts(me);
 
   /* We also need the base mesh for PBVH draw. */
@@ -1427,9 +1427,9 @@ static void pbvh_update_normals_accum_task_cb(void 
*__restrict userdata,
 
   /* Face normal and mask */
   if (lt->poly != 

[Bf-blender-cvs] [91964f04693] refactor-mesh-face-generic: Merge branch 'refactor-mesh-corners-generic' into refactor-mesh-face-generic

2023-02-06 Thread Hans Goudey
Commit: 91964f046930b388c02afd56a47ef63b379075de
Author: Hans Goudey
Date:   Sun Feb 5 22:49:01 2023 -0500
Branches: refactor-mesh-face-generic
https://developer.blender.org/rB91964f046930b388c02afd56a47ef63b379075de

Merge branch 'refactor-mesh-corners-generic' into refactor-mesh-face-generic

===



===

diff --cc source/blender/blenkernel/intern/pbvh.cc
index 061dabea61f,ddfe4f52606..ca0e5a09d83
--- a/source/blender/blenkernel/intern/pbvh.cc
+++ b/source/blender/blenkernel/intern/pbvh.cc
@@@ -623,18 -615,16 +624,18 @@@ static void build_sub(PBVH *pbvh
  
/* Build children */
build_sub(pbvh,
 +sharp_faces,
  pbvh->nodes[node_index].children_offset,
- NULL,
+ nullptr,
  prim_bbc,
  offset,
  end - offset,
  prim_scratch,
  depth + 1);
build_sub(pbvh,
 +sharp_faces,
  pbvh->nodes[node_index].children_offset + 1,
- NULL,
+ nullptr,
  prim_bbc,
  end,
  offset + count - end,
@@@ -668,7 -659,7 +670,7 @@@ static void pbvh_build(PBVH *pbvh, cons
}
  
pbvh->totnode = 1;
-   build_sub(pbvh, sharp_faces, 0, cb, prim_bbc, 0, totprim, NULL, 0);
 -  build_sub(pbvh, 0, cb, prim_bbc, 0, totprim, nullptr, 0);
++  build_sub(pbvh, sharp_faces, 0, cb, prim_bbc, 0, totprim, nullptr, 0);
  }
  
  static void pbvh_draw_args_init(PBVH *pbvh, PBVH_GPU_Args *args, PBVHNode 
*node)
@@@ -836,11 -827,11 +838,11 @@@ void BKE_pbvh_build_mesh(PBVH *pbvh
  
pbvh->mesh = mesh;
pbvh->header.type = PBVH_FACES;
 -  pbvh->mpoly = mpoly;
 +  pbvh->poly_offsets = poly_offsets;
-   pbvh->hide_poly = (bool *)CustomData_get_layer_named_for_write(
-   &mesh->pdata, CD_PROP_BOOL, ".hide_poly", mesh->totpoly);
-   pbvh->material_indices = (const int *)CustomData_get_layer_named(
-   &mesh->pdata, CD_PROP_INT32, "material_index");
+   pbvh->hide_poly = static_cast(CustomData_get_layer_named_for_write(
+   &mesh->pdata, CD_PROP_BOOL, ".hide_poly", mesh->totpoly));
+   pbvh->material_indices = static_cast(
+   CustomData_get_layer_named(&mesh->pdata, CD_PROP_INT32, 
"material_index"));
pbvh->corner_verts = corner_verts;
pbvh->looptri = looptri;
pbvh->vert_positions = vert_positions;
@@@ -3844,11 -3847,11 +3862,11 @@@ void BKE_pbvh_sync_visibility_from_vert
break;
  }
  case PBVH_GRIDS: {
 -  const MPoly *mp = BKE_mesh_polys(mesh);
 +  const MPoly *mp = BKE_mesh_poly_offsets(mesh);
CCGKey key = pbvh->gridkey;
  
-   bool *hide_poly = (bool *)CustomData_get_layer_named_for_write(
-   &mesh->pdata, CD_PROP_BOOL, ".hide_poly", mesh->totpoly);
+   bool *hide_poly = static_cast(CustomData_get_layer_named_for_write(
+   &mesh->pdata, CD_PROP_BOOL, ".hide_poly", mesh->totpoly));
  
bool delete_hide_poly = true;
for (int face_index = 0; face_index < mesh->totpoly; face_index++, 
mp++) {
diff --cc source/blender/blenkernel/intern/pbvh_intern.hh
index 822df9842d2,7757275f6de..882b5592a42
--- a/source/blender/blenkernel/intern/pbvh_intern.hh
+++ b/source/blender/blenkernel/intern/pbvh_intern.hh
@@@ -8,23 -6,20 +6,19 @@@
   * \ingroup bke
   */
  
- #ifdef __cplusplus
- extern "C" {
- #endif
- 
+ struct PBVHGPUFormat;
  struct MLoopTri;
 -struct MPoly;
+ struct MeshElemMap;
  
  /* Axis-aligned bounding box */
- typedef struct {
+ struct BB {
float bmin[3], bmax[3];
- } BB;
+ };
  
  /* Axis-aligned bounding box with centroid */
- typedef struct {
+ struct BBC {
float bmin[3], bmax[3], bcentroid[3];
- } BBC;
- 
- struct MeshElemMap;
+ };
  
  /* NOTE: this structure is getting large, might want to split it into
   * union'd structs */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [b642dc7bc7d] master: Fix: Incorrect forward-compatible saving of face sets

2023-02-05 Thread Hans Goudey
Commit: b642dc7bc7d8db7a2fc3f6c8c58d69429c57d338
Author: Hans Goudey
Date:   Sun Feb 5 18:09:22 2023 -0500
Branches: master
https://developer.blender.org/rBb642dc7bc7d8db7a2fc3f6c8c58d69429c57d338

Fix: Incorrect forward-compatible saving of face sets

There were two errors with the function used to convert face sets
to the legacy mesh format for keeping forward compatibility:
- It was moved before `CustomData_blend_write_prepare` so it
  operated on an empty span.
- It modified the mesh when it's only supposed to change the copy
  of the layers written to the file.

Differential Revision: https://developer.blender.org/D17210

===

M   source/blender/blenkernel/BKE_mesh_legacy_convert.h
M   source/blender/blenkernel/intern/mesh.cc
M   source/blender/blenkernel/intern/mesh_legacy_convert.cc

===

diff --git a/source/blender/blenkernel/BKE_mesh_legacy_convert.h 
b/source/blender/blenkernel/BKE_mesh_legacy_convert.h
index 5b72d85a433..ee33d535179 100644
--- a/source/blender/blenkernel/BKE_mesh_legacy_convert.h
+++ b/source/blender/blenkernel/BKE_mesh_legacy_convert.h
@@ -36,7 +36,7 @@ void BKE_mesh_legacy_convert_uvs_to_generic(Mesh *mesh);
  * Move face sets to the legacy type from a generic type.
  */
 void BKE_mesh_legacy_face_set_from_generic(
-Mesh *mesh, blender::MutableSpan poly_layers_to_write);
+ blender::MutableSpan poly_layers_to_write);
 /**
  * Copy face sets to the generic data type from the legacy type.
  */
diff --git a/source/blender/blenkernel/intern/mesh.cc 
b/source/blender/blenkernel/intern/mesh.cc
index 71275444028..dfdad20cc48 100644
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@ -270,7 +270,6 @@ static void mesh_blend_write(BlendWriter *writer, ID *id, 
const void *id_address
   BKE_mesh_legacy_convert_selection_layers_to_flags(mesh);
   BKE_mesh_legacy_convert_material_indices_to_mpoly(mesh);
   BKE_mesh_legacy_bevel_weight_from_layers(mesh);
-  BKE_mesh_legacy_face_set_from_generic(mesh, poly_layers);
   BKE_mesh_legacy_edge_crease_from_layers(mesh);
   BKE_mesh_legacy_sharp_edges_to_flags(mesh);
   BKE_mesh_legacy_attribute_strings_to_flags(mesh);
@@ -292,6 +291,7 @@ static void mesh_blend_write(BlendWriter *writer, ID *id, 
const void *id_address
 
 if (!BLO_write_is_undo(writer)) {
   BKE_mesh_legacy_convert_uvs_to_struct(mesh, 
temp_arrays_for_legacy_format, loop_layers);
+  BKE_mesh_legacy_face_set_from_generic(poly_layers);
 }
   }
 
diff --git a/source/blender/blenkernel/intern/mesh_legacy_convert.cc 
b/source/blender/blenkernel/intern/mesh_legacy_convert.cc
index c380a61dce2..b789fbcc0a0 100644
--- a/source/blender/blenkernel/intern/mesh_legacy_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_legacy_convert.cc
@@ -1224,23 +1224,26 @@ void BKE_mesh_tessface_ensure(struct Mesh *mesh)
 /** \name Face Set Conversion
  * \{ */
 
-void BKE_mesh_legacy_face_set_from_generic(Mesh *mesh,
-   
blender::MutableSpan poly_layers)
+void 
BKE_mesh_legacy_face_set_from_generic(blender::MutableSpan 
poly_layers)
 {
   using namespace blender;
-  void *faceset_data = nullptr;
+  bool changed = false;
   for (CustomDataLayer &layer : poly_layers) {
 if (StringRef(layer.name) == ".sculpt_face_set") {
-  faceset_data = layer.data;
-  layer.data = nullptr;
-  CustomData_free_layer_named(&mesh->pdata, ".sculpt_face_set", 
mesh->totpoly);
+  layer.type = CD_SCULPT_FACE_SETS;
+  layer.name[0] = '\0';
+  changed = true;
   break;
 }
   }
-  if (faceset_data != nullptr) {
-CustomData_add_layer(
-&mesh->pdata, CD_SCULPT_FACE_SETS, CD_ASSIGN, faceset_data, 
mesh->totpoly);
+  if (!changed) {
+return;
   }
+  /* #CustomData expects the layers to be sorted in increasing order based on 
type. */
+  std::stable_sort(
+  poly_layers.begin(),
+  poly_layers.end(),
+  [](const CustomDataLayer &a, const CustomDataLayer &b) { return a.type < 
b.type; });
 }
 
 void BKE_mesh_legacy_face_set_to_generic(Mesh *mesh)

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [07ea01767f7] refactor-mesh-sharp-face-generic: Merge branch 'master' into refactor-mesh-sharp-face-generic

2023-02-05 Thread Hans Goudey
Commit: 07ea01767f78e464951d23738ace5fef047c78f5
Author: Hans Goudey
Date:   Sun Feb 5 17:45:10 2023 -0500
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rB07ea01767f78e464951d23738ace5fef047c78f5

Merge branch 'master' into refactor-mesh-sharp-face-generic

===



===

diff --cc source/blender/blenkernel/intern/pbvh.cc
index 209b8c40872,1f3583a7f7e..9c87d2a1ef7
--- a/source/blender/blenkernel/intern/pbvh.cc
+++ b/source/blender/blenkernel/intern/pbvh.cc
@@@ -623,18 -615,16 +624,18 @@@ static void build_sub(PBVH *pbvh
  
/* Build children */
build_sub(pbvh,
 +sharp_faces,
  pbvh->nodes[node_index].children_offset,
- NULL,
+ nullptr,
  prim_bbc,
  offset,
  end - offset,
  prim_scratch,
  depth + 1);
build_sub(pbvh,
 +sharp_faces,
  pbvh->nodes[node_index].children_offset + 1,
- NULL,
+ nullptr,
  prim_bbc,
  end,
  offset + count - end,
@@@ -668,7 -659,7 +670,7 @@@ static void pbvh_build(PBVH *pbvh, cons
}
  
pbvh->totnode = 1;
-   build_sub(pbvh, sharp_faces, 0, cb, prim_bbc, 0, totprim, NULL, 0);
 -  build_sub(pbvh, 0, cb, prim_bbc, 0, totprim, nullptr, 0);
++  build_sub(pbvh, sharp_faces, 0, cb, prim_bbc, 0, totprim, nullptr, 0);
  }
  
  static void pbvh_draw_args_init(PBVH *pbvh, PBVH_GPU_Args *args, PBVHNode 
*node)

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [d5cfe4383e7] refactor-mesh-corners-generic: Merge branch 'master' into refactor-mesh-corners-generic

2023-02-05 Thread Hans Goudey
Commit: d5cfe4383e7868e454dc54a9dec70185d61c9848
Author: Hans Goudey
Date:   Sun Feb 5 17:44:29 2023 -0500
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rBd5cfe4383e7868e454dc54a9dec70185d61c9848

Merge branch 'master' into refactor-mesh-corners-generic

===



===

diff --cc source/blender/blenkernel/intern/pbvh.cc
index c2bdfec8094,1f3583a7f7e..ddfe4f52606
--- a/source/blender/blenkernel/intern/pbvh.cc
+++ b/source/blender/blenkernel/intern/pbvh.cc
@@@ -811,12 -812,12 +813,12 @@@ static void pbvh_validate_node_prims(PB
  void BKE_pbvh_build_mesh(PBVH *pbvh,
   Mesh *mesh,
   const MPoly *mpoly,
 - const MLoop *mloop,
 + const int *corner_verts,
   float (*vert_positions)[3],
   int totvert,
-  struct CustomData *vdata,
-  struct CustomData *ldata,
-  struct CustomData *pdata,
+  CustomData *vdata,
+  CustomData *ldata,
+  CustomData *pdata,
   const MLoopTri *looptri,
   int looptri_num)
  {
@@@ -826,11 -827,11 +828,11 @@@
pbvh->mesh = mesh;
pbvh->header.type = PBVH_FACES;
pbvh->mpoly = mpoly;
-   pbvh->hide_poly = (bool *)CustomData_get_layer_named_for_write(
-   &mesh->pdata, CD_PROP_BOOL, ".hide_poly", mesh->totpoly);
-   pbvh->material_indices = (const int *)CustomData_get_layer_named(
-   &mesh->pdata, CD_PROP_INT32, "material_index");
+   pbvh->hide_poly = static_cast(CustomData_get_layer_named_for_write(
+   &mesh->pdata, CD_PROP_BOOL, ".hide_poly", mesh->totpoly));
+   pbvh->material_indices = static_cast(
+   CustomData_get_layer_named(&mesh->pdata, CD_PROP_INT32, 
"material_index"));
 -  pbvh->mloop = mloop;
 +  pbvh->corner_verts = corner_verts;
pbvh->looptri = looptri;
pbvh->vert_positions = vert_positions;
BKE_mesh_vertex_normals_ensure(mesh);
diff --cc source/blender/blenkernel/intern/pbvh_intern.hh
index 892a3abee32,d41eeb0b70b..7757275f6de
--- a/source/blender/blenkernel/intern/pbvh_intern.hh
+++ b/source/blender/blenkernel/intern/pbvh_intern.hh
@@@ -8,24 -6,21 +6,20 @@@
   * \ingroup bke
   */
  
- #ifdef __cplusplus
- extern "C" {
- #endif
- 
+ struct PBVHGPUFormat;
 -struct MLoop;
  struct MLoopTri;
  struct MPoly;
+ struct MeshElemMap;
  
  /* Axis-aligned bounding box */
- typedef struct {
+ struct BB {
float bmin[3], bmax[3];
- } BB;
+ };
  
  /* Axis-aligned bounding box with centroid */
- typedef struct {
+ struct BBC {
float bmin[3], bmax[3], bcentroid[3];
- } BBC;
- 
- struct MeshElemMap;
+ };
  
  /* NOTE: this structure is getting large, might want to split it into
   * union'd structs */
@@@ -163,8 -161,8 +160,8 @@@ struct PBVH 
bool *hide_poly;
/** Material indices. Only valid for polygon meshes. */
const int *material_indices;
 -  const MLoop *mloop;
 +  const int *corner_verts;
-   const struct MLoopTri *looptri;
+   const MLoopTri *looptri;
CustomData *vdata;
CustomData *ldata;
CustomData *pdata;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [501352ef05c] master: Cleanup: Move PBVH files to C++

2023-02-05 Thread Hans Goudey
Commit: 501352ef05ca3ca262e0eaf3e1b0753376cf1d1a
Author: Hans Goudey
Date:   Sun Feb 5 16:56:37 2023 -0500
Branches: master
https://developer.blender.org/rB501352ef05ca3ca262e0eaf3e1b0753376cf1d1a

Cleanup: Move PBVH files to C++

For continued refactoring of the Mesh data structure. See T103343.

===

M   source/blender/blenkernel/BKE_pbvh.h
M   source/blender/blenkernel/CMakeLists.txt
R091source/blender/blenkernel/intern/pbvh.c 
source/blender/blenkernel/intern/pbvh.cc
R092source/blender/blenkernel/intern/pbvh_bmesh.c   
source/blender/blenkernel/intern/pbvh_bmesh.cc
M   source/blender/blenkernel/intern/pbvh_colors.cc
R091source/blender/blenkernel/intern/pbvh_intern.h  
source/blender/blenkernel/intern/pbvh_intern.hh
M   source/blender/blenkernel/intern/pbvh_pixels.cc

===

diff --git a/source/blender/blenkernel/BKE_pbvh.h 
b/source/blender/blenkernel/BKE_pbvh.h
index 7153f05c0c3..367dc9a3035 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -167,6 +167,7 @@ typedef enum {
   PBVH_TopologyUpdated = 1 << 17, /* Used internally by pbvh_bmesh.c */
 
 } PBVHNodeFlags;
+ENUM_OPERATORS(PBVHNodeFlags, PBVH_TopologyUpdated);
 
 typedef struct PBVHFrustumPlanes {
   float (*planes)[4];
diff --git a/source/blender/blenkernel/CMakeLists.txt 
b/source/blender/blenkernel/CMakeLists.txt
index c5d3f6eb3ab..850c55de7e9 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -248,9 +248,9 @@ set(SRC
   intern/particle_child.c
   intern/particle_distribute.c
   intern/particle_system.c
-  intern/pbvh.c
+  intern/pbvh.cc
   intern/pbvh_colors.cc
-  intern/pbvh_bmesh.c
+  intern/pbvh_bmesh.cc
   intern/pbvh_pixels.cc
   intern/pbvh_uv_islands.cc
   intern/pointcache.c
@@ -505,7 +505,7 @@ set(SRC
   intern/multires_reshape.hh
   intern/multires_unsubdivide.h
   intern/ocean_intern.h
-  intern/pbvh_intern.h
+  intern/pbvh_intern.hh
   intern/pbvh_uv_islands.hh
   intern/subdiv_converter.h
   intern/subdiv_inline.h
diff --git a/source/blender/blenkernel/intern/pbvh.c 
b/source/blender/blenkernel/intern/pbvh.cc
similarity index 91%
rename from source/blender/blenkernel/intern/pbvh.c
rename to source/blender/blenkernel/intern/pbvh.cc
index 6b21568ba38..1f3583a7f7e 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.cc
@@ -6,13 +6,14 @@
 
 #include "MEM_guardedalloc.h"
 
-#include "BLI_utildefines.h"
+#include 
 
 #include "BLI_bitmap.h"
 #include "BLI_ghash.h"
 #include "BLI_math.h"
 #include "BLI_rand.h"
 #include "BLI_task.h"
+#include "BLI_utildefines.h"
 
 #include "DNA_mesh_types.h"
 #include "DNA_meshdata_types.h"
@@ -33,9 +34,7 @@
 
 #include "atomic_ops.h"
 
-#include "pbvh_intern.h"
-
-#include 
+#include "pbvh_intern.hh"
 
 #define LEAF_LIMIT 1
 
@@ -50,12 +49,12 @@
 //#define PERFCNTRS
 #define STACK_FIXED_DEPTH 100
 
-typedef struct PBVHStack {
+struct PBVHStack {
   PBVHNode *node;
   bool revisiting;
-} PBVHStack;
+};
 
-typedef struct PBVHIter {
+struct PBVHIter {
   PBVH *pbvh;
   BKE_pbvh_SearchCallback scb;
   void *search_data;
@@ -65,7 +64,7 @@ typedef struct PBVHIter {
 
   PBVHStack stackfixed[STACK_FIXED_DEPTH];
   int stackspace;
-} PBVHIter;
+};
 
 void BB_reset(BB *bb)
 {
@@ -273,7 +272,8 @@ void pbvh_grow_nodes(PBVH *pbvh, int totnode)
 if (pbvh->node_mem_count < totnode) {
   pbvh->node_mem_count = totnode;
 }
-pbvh->nodes = MEM_recallocN(pbvh->nodes, sizeof(PBVHNode) * 
pbvh->node_mem_count);
+pbvh->nodes = static_cast(
+MEM_recallocN(pbvh->nodes, sizeof(PBVHNode) * pbvh->node_mem_count));
   }
 
   pbvh->totnode = totnode;
@@ -315,7 +315,8 @@ static void build_mesh_leaf_node(PBVH *pbvh, PBVHNode *node)
   /* reserve size is rough guess */
   GHash *map = BLI_ghash_int_new_ex("build_mesh_leaf_node gh", 2 * totface);
 
-  int(*face_vert_indices)[3] = MEM_mallocN(sizeof(int[3]) * totface, "bvh node 
face vert indices");
+  int(*face_vert_indices)[3] = static_cast(
+  MEM_mallocN(sizeof(int[3]) * totface, __func__));
 
   node->face_vert_indices = (const int(*)[3])face_vert_indices;
 
@@ -337,8 +338,8 @@ static void build_mesh_leaf_node(PBVH *pbvh, PBVHNode *node)
 }
   }
 
-  int *vert_indices = MEM_callocN(sizeof(int) * (node->uniq_verts + 
node->face_verts),
-  "bvh node vert indices");
+  int *vert_indices = static_cast(
+  MEM_callocN(sizeof(int) * (node->uniq_verts + node->face_verts), 
__func__));
   node->vert_indices = vert_indices;
 
   /* Build the vertex list, unique verts first */
@@ -368,7 +369,7 @@ static void

[Bf-blender-cvs] [1f4aa3c40f1] refactor-mesh-face-generic: 83 remaining uses of MPoly

2023-02-04 Thread Hans Goudey
Commit: 1f4aa3c40f19a01464927963a13c32014782b9e7
Author: Hans Goudey
Date:   Sat Feb 4 22:58:45 2023 -0500
Branches: refactor-mesh-face-generic
https://developer.blender.org/rB1f4aa3c40f19a01464927963a13c32014782b9e7

83 remaining uses of MPoly

===

M   source/blender/blenkernel/BKE_DerivedMesh.h
M   source/blender/blenkernel/BKE_mesh.h
M   source/blender/blenkernel/BKE_multires.h
M   source/blender/blenkernel/BKE_subdiv_ccg.h
M   source/blender/blenkernel/intern/DerivedMesh.cc
M   source/blender/blenkernel/intern/cdderivedmesh.cc
M   source/blender/blenkernel/intern/mesh.cc
M   source/blender/blenkernel/intern/mesh_boolean_convert.cc
M   source/blender/blenkernel/intern/mesh_evaluate.cc
M   source/blender/blenkernel/intern/mesh_mirror.cc
M   source/blender/blenkernel/intern/mesh_remap.cc
M   source/blender/blenkernel/intern/mesh_validate.cc
M   source/blender/blenkernel/intern/mesh_wrapper.cc
M   source/blender/blenkernel/intern/multires.cc
M   source/blender/blenkernel/intern/multires_reshape.hh
M   source/blender/blenkernel/intern/multires_reshape_apply_base.cc
M   source/blender/blenkernel/intern/multires_reshape_smooth.cc
M   source/blender/blenkernel/intern/multires_reshape_subdivide.cc
M   source/blender/blenkernel/intern/multires_reshape_util.cc
M   source/blender/blenkernel/intern/multires_reshape_vertcos.cc
M   source/blender/blenkernel/intern/multires_unsubdivide.cc
M   source/blender/blenkernel/intern/subdiv_ccg.cc
M   source/blender/blenkernel/intern/subdiv_displacement_multires.cc
M   source/blender/blenkernel/intern/subdiv_foreach.cc
M   source/blender/bmesh/intern/bmesh_mesh_convert.cc
M   source/blender/editors/armature/meshlaplacian.cc
M   source/blender/editors/mesh/meshtools.cc
M   source/blender/editors/object/object_bake_api.cc
M   source/blender/editors/sculpt_paint/paint_vertex_weight_ops.cc
M   source/blender/editors/sculpt_paint/sculpt.cc
M   source/blender/modifiers/intern/MOD_particleinstance.cc
M   source/blender/modifiers/intern/MOD_solidify_extrude.cc
M   source/blender/modifiers/intern/MOD_solidify_nonmanifold.cc
M   source/blender/render/intern/multires_bake.cc

===

diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h 
b/source/blender/blenkernel/BKE_DerivedMesh.h
index 7daf65375e3..418fb6524b6 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -90,6 +90,8 @@ struct DerivedMesh {
   int needsFree;/* checked on ->release, is set to 0 for cached results */
   int deformedOnly; /* set by modifier stack if only deformed from original */
   DerivedMeshType type;
+  /* Owned data. */
+  int *poly_offsets;
 
   /**
* \warning Typical access is done via #getLoopTriArray, #getNumLoopTri.
diff --git a/source/blender/blenkernel/BKE_mesh.h 
b/source/blender/blenkernel/BKE_mesh.h
index 4c5bd8eac23..5eabf3c62fd 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -920,7 +920,7 @@ bool BKE_mesh_validate_arrays(struct Mesh *me,
   int *corner_verts,
   int *corner_edges,
   unsigned int totloop,
-  const int *poly_offsets,
+  int *poly_offsets,
   unsigned int totpoly,
   struct MDeformVert *dverts, /* assume totvert 
length */
   bool do_verbose,
diff --git a/source/blender/blenkernel/BKE_multires.h 
b/source/blender/blenkernel/BKE_multires.h
index 7a91d9fe5c7..db6d594cd64 100644
--- a/source/blender/blenkernel/BKE_multires.h
+++ b/source/blender/blenkernel/BKE_multires.h
@@ -153,8 +153,7 @@ void old_mdisps_bilinear(float out[3], float (*disps)[3], 
int st, float u, float
 /**
  * Find per-corner coordinate with given per-face UV coord.
  */
-int mdisp_rot_face_to_crn(
-struct MPoly *mpoly, int face_side, float u, float v, float *x, float *y);
+int mdisp_rot_face_to_crn(int face_size, int face_side, float u, float v, 
float *x, float *y);
 
 /* Reshaping, define in multires_reshape.cc */
 
diff --git a/source/blender/blenkernel/BKE_subdiv_ccg.h 
b/source/blender/blenkernel/BKE_subdiv_ccg.h
index ddb9d8e462f..3ad5a0d89be 100644
--- a/source/blender/blenkernel/BKE_subdiv_ccg.h
+++ b/source/blender/blenkernel/BKE_subdiv_ccg.h
@@ -303,15 +303,20 @@ typedef enum SubdivCCGAdjacencyType {
   SUBDIV_CCG_ADJACENT_EDGE,
 } SubdivCCGAdjacencyType;
 
+#ifdef __cplusplus
+
 /* Returns if a grid coordinates is adjacent to a coarse mesh edge, vertex or 
nothing. If it is
  * adjacent to an edge, r_v1 and r_v2 will be set to the two vertices of that 
edge. If it is
  * adjacent to a vertex, r_v1 and r

[Bf-blender-cvs] [9af30e3611c] refactor-mesh-face-generic: Merge branch 'refactor-mesh-sharp-face-generic' into refactor-mesh-face-generic

2023-02-04 Thread Hans Goudey
Commit: 9af30e3611c73a8366effd7283316ffd59431c3f
Author: Hans Goudey
Date:   Fri Feb 3 22:25:52 2023 -0500
Branches: refactor-mesh-face-generic
https://developer.blender.org/rB9af30e3611c73a8366effd7283316ffd59431c3f

Merge branch 'refactor-mesh-sharp-face-generic' into refactor-mesh-face-generic

===



===

diff --cc source/blender/blenkernel/BKE_mesh_mapping.h
index d1fea1fe2d6,97c7ce6b2b0..2bd5b40862c
--- a/source/blender/blenkernel/BKE_mesh_mapping.h
+++ b/source/blender/blenkernel/BKE_mesh_mapping.h
@@@ -97,13 -99,12 +97,14 @@@ typedef struct MeshElemMap 
int count;
  } MeshElemMap;
  
 +#ifdef __cplusplus
 +
  /* mapping */
+ 
 -UvVertMap *BKE_mesh_uv_vert_map_create(const struct MPoly *mpoly,
 +UvVertMap *BKE_mesh_uv_vert_map_create(blender::OffsetIndices polys,
 const bool *hide_poly,
 const bool *select_poly,
 -   const struct MLoop *mloop,
 +   const int *corner_verts,
 const float (*mloopuv)[2],
 unsigned int totpoly,
 unsigned int totvert,
diff --cc source/blender/blenkernel/intern/mesh_mapping.cc
index 02983a7eb81,d7eed3863d6..689cfd5cb3a
--- a/source/blender/blenkernel/intern/mesh_mapping.cc
+++ b/source/blender/blenkernel/intern/mesh_mapping.cc
@@@ -30,20 -29,22 +30,21 @@@
  /** \name Mesh Connectivity Mapping
   * \{ */
  
- /* ngon version wip, based on BM_uv_vert_map_create */
 -UvVertMap *BKE_mesh_uv_vert_map_create(const MPoly *mpoly,
 -   const bool *hide_poly,
 -   const bool *select_poly,
 -   const MLoop *mloop,
 -   const float (*mloopuv)[2],
 -   uint totpoly,
 -   uint totvert,
 -   const float limit[2],
 -   const bool selected,
 -   const bool use_winding)
 +UvVertMap *BKE_mesh_uv_vert_map_createconst(blender::OffsetIndices polys,
 +const bool *hide_poly,
 +const bool *select_poly,
 +const int *corner_verts,
 +const float (*mloopuv)[2],
 +uint totpoly,
 +uint totvert,
 +const float limit[2],
 +const bool selected,
 +const bool use_winding)
  {
+   /* NOTE: N-gon version WIP, based on #BM_uv_vert_map_create. */
+ 
UvVertMap *vmap;
UvMapVert *buf;
 -  const MPoly *mp;
uint a;
int i, totuv, nverts;
  
@@@ -75,7 -73,13 +72,12 @@@
  return nullptr;
}
  
+   bool *winding = nullptr;
+   if (use_winding) {
+ winding = static_cast(MEM_callocN(sizeof(*winding) * totpoly, 
"winding"));
+   }
+ 
 -  mp = mpoly;
 -  for (a = 0; a < totpoly; a++, mp++) {
 +  for (a = 0; a < totpoly; a++) {
  if (!selected || (!(hide_poly && hide_poly[a]) && (select_poly && 
select_poly[a]))) {
float(*tf_uv)[2] = nullptr;
  
diff --cc source/blender/blenkernel/intern/multires_reshape.hh
index 01beb6dc04c,8e112f18d7b..417944b7d89
--- a/source/blender/blenkernel/intern/multires_reshape.hh
+++ b/source/blender/blenkernel/intern/multires_reshape.hh
@@@ -31,12 -32,11 +31,12 @@@ struct MultiresReshapeContext 
  
/* Base mesh from original object.
 * NOTE: Does NOT include any leading modifiers in it. */
-   struct Mesh *base_mesh;
+   Mesh *base_mesh;
const float (*base_positions)[3];
-   const struct MEdge *base_edges;
-   const struct MPoly *base_polys;
+   const MEdge *base_edges;
+   const MPoly *base_polys;
 -  const MLoop *base_loops;
 +  const int *base_corner_verts;
 +  const int *base_corner_edges;
  
/* Subdivision surface created for multires modifier.
 *
diff --cc source/blender/bmesh/intern/bmesh_mesh_convert.cc
index ced5178c58c,97b33a72d77..1b63da4925a
--- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc
+++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
@@@ -111,10 -111,21 +111,22 @@@ using blender::MutableSpan
  using blender::Span;
  using blender::StringRef;
  
+ static char bm_edge_flag_from_mflag(const short mflag)
+ {
+   return ((mflag & ME_SEAM) ? BM_ELEM_SEAM : 0) | ((mflag & ME_EDGEDRAW) ? 
BM_ELEM_DRAW : 0);
+ }
+ 
+ static short bm_edge_flag_to_mflag

[Bf-blender-cvs] [e49eaf4ffbb] refactor-mesh-face-generic: Merge branch 'refactor-mesh-corners-generic' into refactor-mesh-face-generic

2023-02-04 Thread Hans Goudey
Commit: e49eaf4ffbbf4f395f5bbdd0ea104a53a454b437
Author: Hans Goudey
Date:   Fri Feb 3 22:26:23 2023 -0500
Branches: refactor-mesh-face-generic
https://developer.blender.org/rBe49eaf4ffbbf4f395f5bbdd0ea104a53a454b437

Merge branch 'refactor-mesh-corners-generic' into refactor-mesh-face-generic

===



===

diff --cc source/blender/bmesh/intern/bmesh_mesh_convert.cc
index 1b63da4925a,0f4c6b69c17..f040027601a
--- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc
+++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
@@@ -1543,8 -1535,15 +1543,14 @@@ void BM_mesh_bm_to_me_for_eval(BMesh *b
  &me->vdata, CD_PROP_FLOAT3, CD_CONSTRUCT, nullptr, bm->totvert, 
"position");
}
CustomData_add_layer(&me->edata, CD_MEDGE, CD_CONSTRUCT, nullptr, 
bm->totedge);
-   CustomData_add_layer(&me->ldata, CD_MLOOP, CD_CONSTRUCT, nullptr, 
bm->totloop);
--  CustomData_add_layer(&me->pdata, CD_MPOLY, CD_CONSTRUCT, nullptr, 
bm->totface);
+   if (!CustomData_get_layer_named(&me->ldata, CD_PROP_INT32, ".corner_vert")) 
{
+ CustomData_add_layer_named(
+ &me->ldata, CD_PROP_INT32, CD_CONSTRUCT, nullptr, bm->totloop, 
".corner_vert");
+   }
+   if (!CustomData_get_layer_named(&me->ldata, CD_PROP_INT32, ".corner_edge")) 
{
+ CustomData_add_layer_named(
+ &me->ldata, CD_PROP_INT32, CD_CONSTRUCT, nullptr, bm->totloop, 
".corner_edge");
+   }
  
/* Don't process shape-keys, we only feed them through the modifier stack 
as needed,
 * e.g. for applying modifiers or the like. */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [9dc28d73fb1] refactor-mesh-corners-generic: Merge branch 'master' into refactor-mesh-corners-generic

2023-02-03 Thread Hans Goudey
Commit: 9dc28d73fb1f684ebc0f985ef0e0bc4a1b801cd6
Author: Hans Goudey
Date:   Fri Feb 3 22:10:48 2023 -0500
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rB9dc28d73fb1f684ebc0f985ef0e0bc4a1b801cd6

Merge branch 'master' into refactor-mesh-corners-generic

===



===

diff --cc source/blender/blenkernel/intern/multires_reshape.hh
index 01beb6dc04c,8e112f18d7b..417944b7d89
--- a/source/blender/blenkernel/intern/multires_reshape.hh
+++ b/source/blender/blenkernel/intern/multires_reshape.hh
@@@ -31,12 -32,11 +31,12 @@@ struct MultiresReshapeContext 
  
/* Base mesh from original object.
 * NOTE: Does NOT include any leading modifiers in it. */
-   struct Mesh *base_mesh;
+   Mesh *base_mesh;
const float (*base_positions)[3];
-   const struct MEdge *base_edges;
-   const struct MPoly *base_polys;
+   const MEdge *base_edges;
+   const MPoly *base_polys;
 -  const MLoop *base_loops;
 +  const int *base_corner_verts;
 +  const int *base_corner_edges;
  
/* Subdivision surface created for multires modifier.
 *
diff --cc source/blender/bmesh/intern/bmesh_mesh_convert.cc
index 55602d2f130,d58337400a2..ec75c8e828c
--- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc
+++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
@@@ -111,10 -111,31 +111,32 @@@ using blender::MutableSpan
  using blender::Span;
  using blender::StringRef;
  
+ static char bm_edge_flag_from_mflag(const short mflag)
+ {
+   return ((mflag & ME_SEAM) ? BM_ELEM_SEAM : 0) | ((mflag & ME_EDGEDRAW) ? 
BM_ELEM_DRAW : 0);
+ }
+ static char bm_face_flag_from_mflag(const char mflag)
+ {
+   return ((mflag & ME_SMOOTH) ? BM_ELEM_SMOOTH : 0);
+ }
+ 
+ static short bm_edge_flag_to_mflag(const BMEdge *e)
+ {
+   const char hflag = e->head.hflag;
+ 
+   return ((hflag & BM_ELEM_SEAM) ? ME_SEAM : 0) | ((hflag & BM_ELEM_DRAW) ? 
ME_EDGEDRAW : 0);
+ }
+ static char bm_face_flag_to_mflag(const BMFace *f)
+ {
+   const char hflag = f->head.hflag;
+ 
+   return ((hflag & BM_ELEM_SMOOTH) ? ME_SMOOTH : 0);
+ }
+ 
  /* Static function for alloc (duplicate in modifiers_bmesh.c) */
  static BMFace *bm_face_create_from_mpoly(BMesh &bm,
 - Span loops,
 + Span poly_verts,
 + Span poly_edges,
   Span vtable,
   Span etable)
  {
@@@ -1299,6 -1309,197 +1321,197 @@@ void BM_mesh_bm_to_me(Main *bmain, BMes
multires_topology_changed(me);
  }
  
+ namespace blender {
+ 
+ static void bm_vert_table_build(BMesh &bm,
+ MutableSpan table,
+ bool &need_select_vert,
+ bool &need_hide_vert)
+ {
+   char hflag = 0;
+   BMIter iter;
+   int i;
+   BMVert *vert;
+   BM_ITER_MESH_INDEX (vert, &iter, &bm, BM_VERTS_OF_MESH, i) {
+ BM_elem_index_set(vert, i); /* set_inline */
+ table[i] = vert;
+ hflag |= vert->head.hflag;
+   }
+   need_select_vert = (hflag & BM_ELEM_SELECT) != 0;
+   need_hide_vert = (hflag & BM_ELEM_HIDDEN) != 0;
+ }
+ 
+ static void bm_edge_table_build(BMesh &bm,
+ MutableSpan table,
+ bool &need_select_edge,
+ bool &need_hide_edge,
+ bool &need_sharp_edge)
+ {
+   char hflag = 0;
+   BMIter iter;
+   int i;
+   BMEdge *edge;
+   BM_ITER_MESH_INDEX (edge, &iter, &bm, BM_EDGES_OF_MESH, i) {
+ BM_elem_index_set(edge, i); /* set_inline */
+ table[i] = edge;
+ hflag |= edge->head.hflag;
+   }
+   need_select_edge = (hflag & BM_ELEM_SELECT) != 0;
+   need_hide_edge = (hflag & BM_ELEM_HIDDEN) != 0;
+   need_sharp_edge = (hflag & BM_ELEM_SMOOTH) != 0;
+ }
+ 
+ static void bm_face_loop_table_build(BMesh &bm,
+  MutableSpan face_table,
+  MutableSpan loop_table,
+  bool &need_select_poly,
+  bool &need_hide_poly,
+  bool &need_material_index)
+ {
+   char hflag = 0;
+   BMIter iter;
+   int face_i = 0;
+   int loop_i = 0;
+   BMFace *face;
+   BM_ITER_MESH_INDEX (face, &iter, &bm, BM_FACES_OF_MESH, face_i) {
+ BM_elem_index_set(face, face_i); /* set_inline */
+ face_table[face_i] = face;
+ hflag |= face->head.hflag;
+ need_material_index |= face->mat_nr != 0;
+ 
+ BMLoop *loop = BM_FACE_FIRST_LOOP(face);
+ for ([[maybe_unused]] const int i : IndexRange(face->len)) {
+   BM_elem_index_set(loop, loop_i); /* set_inline */

[Bf-blender-cvs] [2d49e08eac1] refactor-mesh-corners-generic: Fix BMesh to Mesh conversion

2023-02-03 Thread Hans Goudey
Commit: 2d49e08eac1246639bc07ecd9effe8b96e9e263c
Author: Hans Goudey
Date:   Fri Feb 3 22:22:46 2023 -0500
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rB2d49e08eac1246639bc07ecd9effe8b96e9e263c

Fix BMesh to Mesh conversion

===

M   source/blender/bmesh/intern/bmesh_mesh_convert.cc

===

diff --git a/source/blender/bmesh/intern/bmesh_mesh_convert.cc 
b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
index ec75c8e828c..0f4c6b69c17 100644
--- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc
+++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
@@ -1535,7 +1535,7 @@ void BM_mesh_bm_to_me_for_eval(BMesh *bm, Mesh *me, const 
CustomData_MeshMasks *
 &me->vdata, CD_PROP_FLOAT3, CD_CONSTRUCT, nullptr, bm->totvert, 
"position");
   }
   CustomData_add_layer(&me->edata, CD_MEDGE, CD_CONSTRUCT, nullptr, 
bm->totedge);
-  CustomData_add_layer(&me->ldata, CD_MLOOP, CD_CONSTRUCT, nullptr, 
bm->totloop);
+  CustomData_add_layer(&me->pdata, CD_MPOLY, CD_CONSTRUCT, nullptr, 
bm->totface);
   if (!CustomData_get_layer_named(&me->ldata, CD_PROP_INT32, ".corner_vert")) {
 CustomData_add_layer_named(
 &me->ldata, CD_PROP_INT32, CD_CONSTRUCT, nullptr, bm->totloop, 
".corner_vert");

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [2c5ac4c09dd] refactor-mesh-sharp-face-generic: Fix BMesh to Mesh conversion

2023-02-03 Thread Hans Goudey
Commit: 2c5ac4c09dd7609143d9238648f2baf049b8e033
Author: Hans Goudey
Date:   Fri Feb 3 22:08:37 2023 -0500
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rB2c5ac4c09dd7609143d9238648f2baf049b8e033

Fix BMesh to Mesh conversion

===

M   source/blender/bmesh/intern/bmesh_mesh_convert.cc

===

diff --git a/source/blender/bmesh/intern/bmesh_mesh_convert.cc 
b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
index 33f11286de3..97b33a72d77 100644
--- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc
+++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
@@ -1358,8 +1358,8 @@ static void bm_face_loop_table_build(BMesh &bm,
  MutableSpan loop_table,
  bool &need_select_poly,
  bool &need_hide_poly,
- bool &need_material_index,
- bool &need_sharp_face)
+ bool &need_sharp_face,
+ bool &need_material_index)
 {
   char hflag = 0;
   BMIter iter;
@@ -1370,6 +1370,7 @@ static void bm_face_loop_table_build(BMesh &bm,
 BM_elem_index_set(face, face_i); /* set_inline */
 face_table[face_i] = face;
 hflag |= face->head.hflag;
+need_sharp_face |= (face->head.hflag & BM_ELEM_SMOOTH) == 0;
 need_material_index |= face->mat_nr != 0;
 
 BMLoop *loop = BM_FACE_FIRST_LOOP(face);
@@ -1382,7 +1383,6 @@ static void bm_face_loop_table_build(BMesh &bm,
   }
   need_select_poly = (hflag & BM_ELEM_SELECT) != 0;
   need_hide_poly = (hflag & BM_ELEM_HIDDEN) != 0;
-  need_sharp_face = (hflag & BM_ELEM_SMOOTH);
 }
 
 static void bm_to_mesh_verts(const BMesh &bm,
@@ -1585,8 +1585,8 @@ void BM_mesh_bm_to_me_for_eval(BMesh *bm, Mesh *me, const 
CustomData_MeshMasks *
  loop_table,
  need_select_poly,
  need_hide_poly,
- need_material_index,
- need_sharp_face);
+ need_sharp_face,
+ need_material_index);
   });
   bm->elem_index_dirty &= ~(BM_VERT | BM_EDGE | BM_FACE | BM_LOOP);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [6f135dc0a0c] refactor-mesh-sharp-face-generic: Merge branch 'master' into refactor-mesh-sharp-face-generic

2023-02-03 Thread Hans Goudey
Commit: 6f135dc0a0cc112f7bc57c920e5c54c2c519424e
Author: Hans Goudey
Date:   Fri Feb 3 22:03:43 2023 -0500
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rB6f135dc0a0cc112f7bc57c920e5c54c2c519424e

Merge branch 'master' into refactor-mesh-sharp-face-generic

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [3ab2f6242aa] refactor-mesh-sharp-face-generic: Merge branch 'master' into refactor-mesh-sharp-face-generic

2023-02-03 Thread Hans Goudey
Commit: 3ab2f6242aaab5cda6057da0e5bca4467ca1b3b2
Author: Hans Goudey
Date:   Fri Feb 3 21:57:19 2023 -0500
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rB3ab2f6242aaab5cda6057da0e5bca4467ca1b3b2

Merge branch 'master' into refactor-mesh-sharp-face-generic

===



===

diff --cc source/blender/blenkernel/intern/pbvh.c
index e9f5a50f2cc,6b21568ba38..209b8c40872
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@@ -563,9 -554,9 +563,9 @@@ static void build_sub(PBVH *pbvh
}
  
/* Decide whether this is a leaf or not */
-   const bool below_leaf_limit = count <= pbvh->leaf_limit || depth == 
STACK_FIXED_DEPTH - 1;
+   const bool below_leaf_limit = count <= pbvh->leaf_limit || depth >= 
STACK_FIXED_DEPTH - 1;
if (below_leaf_limit) {
 -if (!leaf_needs_material_split(pbvh, offset, count)) {
 +if (!leaf_needs_material_split(pbvh, sharp_faces, offset, count)) {
build_leaf(pbvh, node_index, prim_bbc, offset, count);
  
if (node_index == 0) {
diff --cc source/blender/bmesh/intern/bmesh_construct.h
index 1a74d492a8d,0b85abdaa92..036605e6b67
--- a/source/blender/bmesh/intern/bmesh_construct.h
+++ b/source/blender/bmesh/intern/bmesh_construct.h
@@@ -170,10 -170,7 +170,6 @@@ void BM_mesh_copy_init_customdata_all_l
   const struct BMAllocTemplate 
*allocsize);
  BMesh *BM_mesh_copy(BMesh *bm_old);
  
- char BM_edge_flag_from_mflag(short mflag);
- /* ME -> BM */
- short BM_edge_flag_to_mflag(BMEdge *e);
--
  #ifdef __cplusplus
  }
  #endif
diff --cc source/blender/bmesh/intern/bmesh_mesh_convert.cc
index 40021a4e0ab,d58337400a2..33f11286de3
--- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc
+++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
@@@ -111,6 -111,28 +111,18 @@@ using blender::MutableSpan
  using blender::Span;
  using blender::StringRef;
  
+ static char bm_edge_flag_from_mflag(const short mflag)
+ {
+   return ((mflag & ME_SEAM) ? BM_ELEM_SEAM : 0) | ((mflag & ME_EDGEDRAW) ? 
BM_ELEM_DRAW : 0);
+ }
 -static char bm_face_flag_from_mflag(const char mflag)
 -{
 -  return ((mflag & ME_SMOOTH) ? BM_ELEM_SMOOTH : 0);
 -}
+ 
+ static short bm_edge_flag_to_mflag(const BMEdge *e)
+ {
+   const char hflag = e->head.hflag;
+ 
+   return ((hflag & BM_ELEM_SEAM) ? ME_SEAM : 0) | ((hflag & BM_ELEM_DRAW) ? 
ME_EDGEDRAW : 0);
+ }
 -static char bm_face_flag_to_mflag(const BMFace *f)
 -{
 -  const char hflag = f->head.hflag;
 -
 -  return ((hflag & BM_ELEM_SMOOTH) ? ME_SMOOTH : 0);
 -}
+ 
  /* Static function for alloc (duplicate in modifiers_bmesh.c) */
  static BMFace *bm_face_create_from_mpoly(BMesh &bm,
   Span loops,
@@@ -1301,6 -1309,197 +1313,204 @@@ void BM_mesh_bm_to_me(Main *bmain, BMes
multires_topology_changed(me);
  }
  
+ namespace blender {
+ 
+ static void bm_vert_table_build(BMesh &bm,
+ MutableSpan table,
+ bool &need_select_vert,
+ bool &need_hide_vert)
+ {
+   char hflag = 0;
+   BMIter iter;
+   int i;
+   BMVert *vert;
+   BM_ITER_MESH_INDEX (vert, &iter, &bm, BM_VERTS_OF_MESH, i) {
+ BM_elem_index_set(vert, i); /* set_inline */
+ table[i] = vert;
+ hflag |= vert->head.hflag;
+   }
+   need_select_vert = (hflag & BM_ELEM_SELECT) != 0;
+   need_hide_vert = (hflag & BM_ELEM_HIDDEN) != 0;
+ }
+ 
+ static void bm_edge_table_build(BMesh &bm,
+ MutableSpan table,
+ bool &need_select_edge,
+ bool &need_hide_edge,
+ bool &need_sharp_edge)
+ {
+   char hflag = 0;
+   BMIter iter;
+   int i;
+   BMEdge *edge;
+   BM_ITER_MESH_INDEX (edge, &iter, &bm, BM_EDGES_OF_MESH, i) {
+ BM_elem_index_set(edge, i); /* set_inline */
+ table[i] = edge;
+ hflag |= edge->head.hflag;
+   }
+   need_select_edge = (hflag & BM_ELEM_SELECT) != 0;
+   need_hide_edge = (hflag & BM_ELEM_HIDDEN) != 0;
+   need_sharp_edge = (hflag & BM_ELEM_SMOOTH) != 0;
+ }
+ 
+ static void bm_face_loop_table_build(BMesh &bm,
+  MutableSpan face_table,
+  MutableSpan loop_table,
+  bool &need_select_poly,
+  bool &need_hide_poly,
 - bool &need_material_index)
++ bool &need_material_index,
++ bool &need_sharp_face)
+ {
+   char hflag = 0;
+   BMIter iter;
+   int face_i = 0;
+   

[Bf-blender-cvs] [789e549dbae] master: Geometry Nodes: Tweak menu location of sample nodes

2023-02-03 Thread Hans Goudey
Commit: 789e549dbae8e07213e87b8881d6d964cdb5c8ae
Author: Hans Goudey
Date:   Fri Feb 3 16:26:30 2023 -0500
Branches: master
https://developer.blender.org/rB789e549dbae8e07213e87b8881d6d964cdb5c8ae

Geometry Nodes: Tweak menu location of sample nodes

There was an inconsistency between geometry sample nodes and mesh/curve
sample nodes, where the latter didn't have a special "Sample" category,
and we categorized as "Operations", which they were not. Also put the
sample category between "Read" and "Write" since the verb name is
more consistent and sampling is an advanced form of reading.

===

M   release/scripts/startup/bl_ui/node_add_menu_geometry.py

===

diff --git a/release/scripts/startup/bl_ui/node_add_menu_geometry.py 
b/release/scripts/startup/bl_ui/node_add_menu_geometry.py
index cdbd05b74a3..b829795a232 100644
--- a/release/scripts/startup/bl_ui/node_add_menu_geometry.py
+++ b/release/scripts/startup/bl_ui/node_add_menu_geometry.py
@@ -46,6 +46,7 @@ class NODE_MT_geometry_node_GEO_CURVE(Menu):
 def draw(self, _context):
 layout = self.layout
 layout.menu("NODE_MT_geometry_node_GEO_CURVE_READ")
+layout.menu("NODE_MT_geometry_node_GEO_CURVE_SAMPLE")
 layout.menu("NODE_MT_geometry_node_GEO_CURVE_WRITE")
 layout.separator()
 layout.menu("NODE_MT_geometry_node_GEO_CURVE_OPERATIONS")
@@ -73,6 +74,16 @@ class NODE_MT_geometry_node_GEO_CURVE_READ(Menu):
 node_add_menu.draw_assets_for_catalog(layout, self.bl_label)
 
 
+class NODE_MT_geometry_node_GEO_CURVE_SAMPLE(Menu):
+bl_idname = "NODE_MT_geometry_node_GEO_CURVE_SAMPLE"
+bl_label = "Sample"
+
+def draw(self, _context):
+layout = self.layout
+node_add_menu.add_node_type(layout, "GeometryNodeSampleCurve")
+node_add_menu.draw_assets_for_catalog(layout, self.bl_label)
+
+
 class NODE_MT_geometry_node_GEO_CURVE_WRITE(Menu):
 bl_idname = "NODE_MT_geometry_node_GEO_CURVE_WRITE"
 bl_label = "Write"
@@ -104,7 +115,6 @@ class NODE_MT_geometry_node_GEO_CURVE_OPERATIONS(Menu):
 node_add_menu.add_node_type(layout, "GeometryNodeInterpolateCurves")
 node_add_menu.add_node_type(layout, "GeometryNodeResampleCurve")
 node_add_menu.add_node_type(layout, "GeometryNodeReverseCurve")
-node_add_menu.add_node_type(layout, "GeometryNodeSampleCurve")
 node_add_menu.add_node_type(layout, "GeometryNodeSubdivideCurve")
 node_add_menu.add_node_type(layout, "GeometryNodeTrimCurve")
 node_add_menu.draw_assets_for_catalog(layout, self.bl_label)
@@ -146,10 +156,10 @@ class NODE_MT_geometry_node_GEO_GEOMETRY(Menu):
 def draw(self, _context):
 layout = self.layout
 layout.menu("NODE_MT_geometry_node_GEO_GEOMETRY_READ")
+layout.menu("NODE_MT_geometry_node_GEO_GEOMETRY_SAMPLE")
 layout.menu("NODE_MT_geometry_node_GEO_GEOMETRY_WRITE")
 layout.separator()
 layout.menu("NODE_MT_geometry_node_GEO_GEOMETRY_OPERATIONS")
-layout.menu("NODE_MT_geometry_node_GEO_GEOMETRY_SAMPLE")
 layout.separator()
 node_add_menu.add_node_type(layout, "GeometryNodeJoinGeometry")
 node_add_menu.add_node_type(layout, "GeometryNodeGeometryToInstance")
@@ -309,6 +319,7 @@ class NODE_MT_geometry_node_GEO_MESH(Menu):
 def draw(self, _context):
 layout = self.layout
 layout.menu("NODE_MT_geometry_node_GEO_MESH_READ")
+layout.menu("NODE_MT_geometry_node_GEO_MESH_SAMPLE")
 layout.menu("NODE_MT_geometry_node_GEO_MESH_WRITE")
 layout.separator()
 layout.menu("NODE_MT_geometry_node_GEO_MESH_OPERATIONS")
@@ -338,6 +349,17 @@ class NODE_MT_geometry_node_GEO_MESH_READ(Menu):
 node_add_menu.draw_assets_for_catalog(layout, self.bl_label)
 
 
+class NODE_MT_geometry_node_GEO_MESH_SAMPLE(Menu):
+bl_idname = "NODE_MT_geometry_node_GEO_MESH_SAMPLE"
+bl_label = "Sample"
+
+def draw(self, _context):
+layout = self.layout
+node_add_menu.add_node_type(layout, "GeometryNodeSampleNearestSurface")
+node_add_menu.add_node_type(layout, "GeometryNodeSampleUVSurface")
+node_add_menu.draw_assets_for_catalog(layout, self.bl_label)
+
+
 class NODE_MT_geometry_node_GEO_MESH_WRITE(Menu):
 bl_idname = "NODE_MT_geometry_node_GEO_MESH_WRITE"
 bl_label = "Write"
@@ -363,8 +385,6 @@ class NODE_MT_geometry_node_GEO_MESH_OPERATIONS(Menu):
 node_add_menu.add_node_type(layout, "GeometryNodeMeshToCurve")

[Bf-blender-cvs] [7f958217ada] master: Curves: Use shared caches for evaluated data

2023-02-03 Thread Hans Goudey
Commit: 7f958217ada294a3aa19116aebb7bef832b9c648
Author: Hans Goudey
Date:   Fri Feb 3 12:14:15 2023 -0500
Branches: master
https://developer.blender.org/rB7f958217ada294a3aa19116aebb7bef832b9c648

Curves: Use shared caches for evaluated data

Use the `SharedCache` concept introduced in D16204 to share lazily
calculated evaluated data between original and multiple evaluated
curves data-blocks. Combined with D14139, this should basically remove
most costs associated with copying large curves data-blocks (though
they add slightly higher constant overhead). The caches should
interact well with undo steps, limiting recalculations on undo/redo.

Options for avoiding the new overhead associated with the shared
caches are described in T104327 and can be addressed separately.

Simple situations affected by this change are using any of the following data
on an evaluated curves data-block without first invalidating it:
- Evaluated offsets (size of evaluated curves)
- Evaluated positions
- Evaluated tangents
- Evaluated normals
- Evaluated lengths (spline parameter node)
- Internal Bezier and NURBS caches

In a test with 4m points and 170k curves, using curve normals in a
procedural setup that didn't change positions procedurally gave 5x
faster playback speeds. Avoiding recalculating the offsets on every
update saved about 3 ms for every sculpt update for brushes that don't
change topology.

Differential Revision: https://developer.blender.org/D17134

===

M   source/blender/blenkernel/BKE_curves.hh
M   source/blender/blenkernel/intern/curves.cc
M   source/blender/blenkernel/intern/curves_geometry.cc

===

diff --git a/source/blender/blenkernel/BKE_curves.hh 
b/source/blender/blenkernel/BKE_curves.hh
index 8e4a83a1135..04898f6d2d6 100644
--- a/source/blender/blenkernel/BKE_curves.hh
+++ b/source/blender/blenkernel/BKE_curves.hh
@@ -69,21 +69,24 @@ class CurvesGeometryRuntime {
* Cache of offsets into the evaluated array for each curve, accounting for 
all previous
* evaluated points, Bezier curve vector segments, different resolutions per 
curve, etc.
*/
-  mutable Vector evaluated_offsets_cache;
-  mutable Vector all_bezier_evaluated_offsets;
-  mutable CacheMutex offsets_cache_mutex;
+  struct EvaluatedOffsets {
+Vector evaluated_offsets;
+Vector all_bezier_offsets;
+  };
+  mutable SharedCache evaluated_offsets_cache;
 
-  mutable Vector nurbs_basis_cache;
-  mutable CacheMutex nurbs_basis_cache_mutex;
+  mutable SharedCache> nurbs_basis_cache;
 
   /** Cache of evaluated positions. */
-  mutable Vector evaluated_position_cache;
-  mutable CacheMutex position_cache_mutex;
-  /**
-   * The evaluated positions result, using a separate span in case all curves 
are poly curves,
-   * in which case a separate array of evaluated positions is unnecessary.
-   */
-  mutable Span evaluated_positions_span;
+  struct EvaluatedPositions {
+Vector vector;
+/**
+ * The evaluated positions result, using a separate span in case all 
curves are poly curves,
+ * in which case a separate array of evaluated positions is unnecessary.
+ */
+Span span;
+  };
+  mutable SharedCache evaluated_position_cache;
 
   /**
* A cache of bounds shared between data-blocks with unchanged positions and 
radii.
@@ -97,16 +100,13 @@ class CurvesGeometryRuntime {
* cyclic, it needs one more length value to correspond to the last segment, 
so in order to
* make slicing this array for a curve fast, an extra float is stored for 
every curve.
*/
-  mutable Vector evaluated_length_cache;
-  mutable CacheMutex length_cache_mutex;
+  mutable SharedCache> evaluated_length_cache;
 
   /** Direction of the curve at each evaluated point. */
-  mutable Vector evaluated_tangent_cache;
-  mutable CacheMutex tangent_cache_mutex;
+  mutable SharedCache> evaluated_tangent_cache;
 
   /** Normal direction vectors for each evaluated point. */
-  mutable Vector evaluated_normal_cache;
-  mutable CacheMutex normal_cache_mutex;
+  mutable SharedCache> evaluated_normal_cache;
 };
 
 /**
@@ -866,7 +866,8 @@ inline Span 
CurvesGeometry::bezier_evaluated_offsets_for_curve(const int cu
   const OffsetIndices points_by_curve = this->points_by_curve();
   const IndexRange points = points_by_curve[curve_index];
   const IndexRange range = curves::per_curve_point_offsets_range(points, 
curve_index);
-  return this->runtime->all_bezier_evaluated_offsets.as_span().slice(range);
+  const Span offsets = 
this->runtime->evaluated_offsets_cache.data().all_bezier_offsets;
+  return offsets.slice(range);
 }
 
 inline IndexRange CurvesGeometry::lengths_range_for_curve(const int 
curve_index,
@@ -881,9 +882,8 @@ inline IndexRange 
CurvesGeometry::lengths_range_for_curve(const int curve_index,
 inline Span CurvesGeometry::evaluated_len

[Bf-blender-cvs] [1195933ada4] master: Fix: Compile error after BMesh conversion commit

2023-02-03 Thread Hans Goudey
Commit: 1195933ada4e31efb18b6c605390d04ab40cfefb
Author: Hans Goudey
Date:   Fri Feb 3 11:09:11 2023 -0500
Branches: master
https://developer.blender.org/rB1195933ada4e31efb18b6c605390d04ab40cfefb

Fix: Compile error after BMesh conversion commit

===

M   source/blender/bmesh/intern/bmesh_mesh_convert.cc

===

diff --git a/source/blender/bmesh/intern/bmesh_mesh_convert.cc 
b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
index 7fd8dbe44bf..d58337400a2 100644
--- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc
+++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
@@ -1325,8 +1325,8 @@ static void bm_vert_table_build(BMesh &bm,
 table[i] = vert;
 hflag |= vert->head.hflag;
   }
-  need_select_vert |= (hflag & BM_ELEM_SELECT);
-  need_hide_vert |= (hflag & BM_ELEM_HIDDEN);
+  need_select_vert = (hflag & BM_ELEM_SELECT) != 0;
+  need_hide_vert = (hflag & BM_ELEM_HIDDEN) != 0;
 }
 
 static void bm_edge_table_build(BMesh &bm,
@@ -1344,9 +1344,9 @@ static void bm_edge_table_build(BMesh &bm,
 table[i] = edge;
 hflag |= edge->head.hflag;
   }
-  need_select_edge |= (hflag & BM_ELEM_SELECT);
-  need_hide_edge |= (hflag & BM_ELEM_HIDDEN);
-  need_sharp_edge |= (hflag & BM_ELEM_SMOOTH);
+  need_select_edge = (hflag & BM_ELEM_SELECT) != 0;
+  need_hide_edge = (hflag & BM_ELEM_HIDDEN) != 0;
+  need_sharp_edge = (hflag & BM_ELEM_SMOOTH) != 0;
 }
 
 static void bm_face_loop_table_build(BMesh &bm,
@@ -1375,8 +1375,8 @@ static void bm_face_loop_table_build(BMesh &bm,
   loop_i++;
 }
   }
-  need_select_poly |= (hflag & BM_ELEM_SELECT);
-  need_hide_poly |= (hflag & BM_ELEM_HIDDEN);
+  need_select_poly = (hflag & BM_ELEM_SELECT) != 0;
+  need_hide_poly = (hflag & BM_ELEM_HIDDEN) != 0;
 }
 
 static void bm_to_mesh_verts(const BMesh &bm,

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [ebe8f8ce719] master: BMesh: Parallelize BMesh to evaluated Mesh conversion

2023-02-03 Thread Hans Goudey
Commit: ebe8f8ce719729eef402119f4d0edd29e746abf3
Author: Hans Goudey
Date:   Fri Feb 3 10:19:19 2023 -0500
Branches: master
https://developer.blender.org/rBebe8f8ce719729eef402119f4d0edd29e746abf3

BMesh: Parallelize BMesh to evaluated Mesh conversion

Currently this conversion (which happens when using modifiers in edit
mode, for example) is completely single threaded. It's harder than some
other areas to multithread because BMesh elements don't always know
their indices (and vise versa), and because the dynamic AoS format
used by BMesh makes some typical solutions not helpful.

This patch proposes to split the operation into two steps. The first
updates the indices of BMesh elements and builds tables for easy
iteration later. It also checks if some optional mesh attributes
should be added. The second uses parallel loops over all elements,
copying attribute values and building the Mesh topology.

Both steps process different domains in separate threads (though the
first has to combine faces and loops). Though this isn't proper data
parallelism, it's quite helpful because each domain doesn't affect the
others.

**Timings**
I tested this on a Ryzen 7950x with a 1 million face grid, with no
extra attributes and then with several color attributes and vertex
groups.

| File | Before | After |
| Simple | 101.6 ms | 59.6 ms |
| More Attributes | 149.2 ms | 65.6 ms |

The optimization scales better with more attributes on the BMesh. The
speedup isn't as linear as multithreading other operations, indicating
added overhead. I think this is worth it though, because the user is
usually actively interacting with a mesh in edit mode.

See the differential revision for more timing information.

Differential Revision: https://developer.blender.org/D16249

===

M   source/blender/bmesh/intern/bmesh_construct.c
M   source/blender/bmesh/intern/bmesh_construct.h
M   source/blender/bmesh/intern/bmesh_mesh_convert.cc

===

diff --git a/source/blender/bmesh/intern/bmesh_construct.c 
b/source/blender/bmesh/intern/bmesh_construct.c
index 0c05e7bb83d..b549580f354 100644
--- a/source/blender/bmesh/intern/bmesh_construct.c
+++ b/source/blender/bmesh/intern/bmesh_construct.c
@@ -715,25 +715,3 @@ BMesh *BM_mesh_copy(BMesh *bm_old)
 
   return bm_new;
 }
-
-char BM_edge_flag_from_mflag(const short mflag)
-{
-  return (((mflag & ME_SEAM) ? BM_ELEM_SEAM : 0) | ((mflag & ME_EDGEDRAW) ? 
BM_ELEM_DRAW : 0));
-}
-char BM_face_flag_from_mflag(const char mflag)
-{
-  return ((mflag & ME_SMOOTH) ? BM_ELEM_SMOOTH : 0);
-}
-
-short BM_edge_flag_to_mflag(BMEdge *e)
-{
-  const char hflag = e->head.hflag;
-
-  return (((hflag & BM_ELEM_SEAM) ? ME_SEAM : 0) | ((hflag & BM_ELEM_DRAW) ? 
ME_EDGEDRAW : 0));
-}
-char BM_face_flag_to_mflag(BMFace *f)
-{
-  const char hflag = f->head.hflag;
-
-  return ((hflag & BM_ELEM_SMOOTH) ? ME_SMOOTH : 0);
-}
diff --git a/source/blender/bmesh/intern/bmesh_construct.h 
b/source/blender/bmesh/intern/bmesh_construct.h
index 635198b9346..0b85abdaa92 100644
--- a/source/blender/bmesh/intern/bmesh_construct.h
+++ b/source/blender/bmesh/intern/bmesh_construct.h
@@ -170,11 +170,6 @@ void BM_mesh_copy_init_customdata_all_layers(BMesh *bm_dst,
  const struct BMAllocTemplate 
*allocsize);
 BMesh *BM_mesh_copy(BMesh *bm_old);
 
-char BM_face_flag_from_mflag(char mflag);
-char BM_edge_flag_from_mflag(short mflag);
-/* ME -> BM */
-char BM_face_flag_to_mflag(BMFace *f);
-short BM_edge_flag_to_mflag(BMEdge *e);
 
 #ifdef __cplusplus
 }
diff --git a/source/blender/bmesh/intern/bmesh_mesh_convert.cc 
b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
index c795fd1138a..7fd8dbe44bf 100644
--- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc
+++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
@@ -111,6 +111,28 @@ using blender::MutableSpan;
 using blender::Span;
 using blender::StringRef;
 
+static char bm_edge_flag_from_mflag(const short mflag)
+{
+  return ((mflag & ME_SEAM) ? BM_ELEM_SEAM : 0) | ((mflag & ME_EDGEDRAW) ? 
BM_ELEM_DRAW : 0);
+}
+static char bm_face_flag_from_mflag(const char mflag)
+{
+  return ((mflag & ME_SMOOTH) ? BM_ELEM_SMOOTH : 0);
+}
+
+static short bm_edge_flag_to_mflag(const BMEdge *e)
+{
+  const char hflag = e->head.hflag;
+
+  return ((hflag & BM_ELEM_SEAM) ? ME_SEAM : 0) | ((hflag & BM_ELEM_DRAW) ? 
ME_EDGEDRAW : 0);
+}
+static char bm_face_flag_to_mflag(const BMFace *f)
+{
+  const char hflag = f->head.hflag;
+
+  return ((hflag & BM_ELEM_SMOOTH) ? ME_SMOOTH : 0);
+}
+
 /* Static function for alloc (duplicate in modifiers_bmesh.c) */
 static BMFace *bm_face_create_from_mpoly(BMesh &bm,
  Span loops,
@@ -385,7 +407,7 @@ void BM_mesh_bm_from_me(BMesh *bm, const Mesh *me, c

[Bf-blender-cvs] [af0d378177c] master: Cleanup: Move multires reshape header to C++

2023-02-03 Thread Hans Goudey
Commit: af0d378177c0c8c5d9d2dc5c8f8b21abf13347dc
Author: Hans Goudey
Date:   Fri Feb 3 08:48:00 2023 -0500
Branches: master
https://developer.blender.org/rBaf0d378177c0c8c5d9d2dc5c8f8b21abf13347dc

Cleanup: Move multires reshape header to C++

For continued refactoring of the Mesh data structure. See T103343.

===

M   source/blender/blenkernel/CMakeLists.txt
M   source/blender/blenkernel/intern/multires.cc
M   source/blender/blenkernel/intern/multires_reshape.cc
R085source/blender/blenkernel/intern/multires_reshape.h 
source/blender/blenkernel/intern/multires_reshape.hh
M   source/blender/blenkernel/intern/multires_reshape_apply_base.cc
M   source/blender/blenkernel/intern/multires_reshape_ccg.cc
M   source/blender/blenkernel/intern/multires_reshape_smooth.cc
M   source/blender/blenkernel/intern/multires_reshape_subdivide.cc
M   source/blender/blenkernel/intern/multires_reshape_util.cc
M   source/blender/blenkernel/intern/multires_reshape_vertcos.cc
M   source/blender/blenkernel/intern/multires_unsubdivide.cc
M   source/blender/blenkernel/intern/multires_versioning.cc

===

diff --git a/source/blender/blenkernel/CMakeLists.txt 
b/source/blender/blenkernel/CMakeLists.txt
index 7052f362fc4..c5d3f6eb3ab 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -502,7 +502,7 @@ set(SRC
   intern/data_transfer_intern.h
   intern/lib_intern.h
   intern/multires_inline.h
-  intern/multires_reshape.h
+  intern/multires_reshape.hh
   intern/multires_unsubdivide.h
   intern/ocean_intern.h
   intern/pbvh_intern.h
diff --git a/source/blender/blenkernel/intern/multires.cc 
b/source/blender/blenkernel/intern/multires.cc
index 2c5c7ba72ee..aaa35e02747 100644
--- a/source/blender/blenkernel/intern/multires.cc
+++ b/source/blender/blenkernel/intern/multires.cc
@@ -41,7 +41,7 @@
 
 #include "DEG_depsgraph_query.h"
 
-#include "multires_reshape.h"
+#include "multires_reshape.hh"
 
 #include 
 #include 
diff --git a/source/blender/blenkernel/intern/multires_reshape.cc 
b/source/blender/blenkernel/intern/multires_reshape.cc
index 536dade7463..d4e842dc10c 100644
--- a/source/blender/blenkernel/intern/multires_reshape.cc
+++ b/source/blender/blenkernel/intern/multires_reshape.cc
@@ -24,7 +24,7 @@
 
 #include "DEG_depsgraph_query.h"
 
-#include "multires_reshape.h"
+#include "multires_reshape.hh"
 
 /*  */
 /** \name Reshape from object
diff --git a/source/blender/blenkernel/intern/multires_reshape.h 
b/source/blender/blenkernel/intern/multires_reshape.hh
similarity index 85%
rename from source/blender/blenkernel/intern/multires_reshape.h
rename to source/blender/blenkernel/intern/multires_reshape.hh
index 1aa20cb7f48..8e112f18d7b 100644
--- a/source/blender/blenkernel/intern/multires_reshape.h
+++ b/source/blender/blenkernel/intern/multires_reshape.hh
@@ -23,26 +23,26 @@ struct Object;
 struct Subdiv;
 struct SubdivCCG;
 
-typedef struct MultiresReshapeContext {
+struct MultiresReshapeContext {
   /* NOTE: Only available when context is initialized from object. */
-  struct Depsgraph *depsgraph;
-  struct Object *object;
+  Depsgraph *depsgraph;
+  Object *object;
 
-  struct MultiresModifierData *mmd;
+  MultiresModifierData *mmd;
 
   /* Base mesh from original object.
* NOTE: Does NOT include any leading modifiers in it. */
-  struct Mesh *base_mesh;
+  Mesh *base_mesh;
   const float (*base_positions)[3];
-  const struct MEdge *base_edges;
-  const struct MPoly *base_polys;
-  const struct MLoop *base_loops;
+  const MEdge *base_edges;
+  const MPoly *base_polys;
+  const MLoop *base_loops;
 
   /* Subdivision surface created for multires modifier.
*
* The coarse mesh of this subdivision surface is a base mesh with all 
deformation modifiers
* leading multires applied on it. */
-  struct Subdiv *subdiv;
+  Subdiv *subdiv;
   bool need_free_subdiv;
 
   struct {
@@ -65,8 +65,8 @@ typedef struct MultiresReshapeContext {
 
   struct {
 /* Copy of original displacement and painting masks. */
-struct MDisps *mdisps;
-struct GridPaintMask *grid_paint_masks;
+MDisps *mdisps;
+GridPaintMask *grid_paint_masks;
   } orig;
 
   /* Number of grids which are required for base_mesh. */
@@ -74,8 +74,8 @@ typedef struct MultiresReshapeContext {
 
   /* Destination displacement and mask.
* Points to a custom data on a destination mesh. */
-  struct MDisps *mdisps;
-  struct GridPaintMask *grid_paint_masks;
+  MDisps *mdisps;
+  GridPaintMask *grid_paint_masks;
 
   /* Indexed by face index, gives first grid index of the face. */
   int *face_start_grid_index;
@@ -102,38 +102,38 @@ typedef struct MultiresReshapeContext {
   const float *cd_vertex_

[Bf-blender-cvs] [96e37affe58] master: Cleanup: Remove unused image paint function

2023-02-03 Thread Hans Goudey
Commit: 96e37affe587193d51a1e3d95b5d219ad802186d
Author: Hans Goudey
Date:   Fri Feb 3 08:18:41 2023 -0500
Branches: master
https://developer.blender.org/rB96e37affe587193d51a1e3d95b5d219ad802186d

Cleanup: Remove unused image paint function

===

M   source/blender/editors/sculpt_paint/paint_image_proj.cc

===

diff --git a/source/blender/editors/sculpt_paint/paint_image_proj.cc 
b/source/blender/editors/sculpt_paint/paint_image_proj.cc
index 6544b1f2bda..db16931d6fb 100644
--- a/source/blender/editors/sculpt_paint/paint_image_proj.cc
+++ b/source/blender/editors/sculpt_paint/paint_image_proj.cc
@@ -508,11 +508,6 @@ struct VertSeam {
 /** \name MLoopTri accessor functions.
  * \{ */
 
-BLI_INLINE const MPoly *ps_tri_index_to_mpoly(const ProjPaintState *ps, int 
tri_index)
-{
-  return &ps->mpoly_eval[ps->mlooptri_eval[tri_index].poly];
-}
-
 #define PS_LOOPTRI_AS_VERT_INDEX_3(ps, lt) \
   int(ps->mloop_eval[lt->tri[0]].v), int(ps->mloop_eval[lt->tri[1]].v), \
   int(ps->mloop_eval[lt->tri[2]].v),

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [0f2adbe2e9f] refactor-mesh-corners-generic: Merge branch 'master' into refactor-mesh-corners-generic

2023-02-01 Thread Hans Goudey
Commit: 0f2adbe2e9faadb61ee0f7f0f2b5b60452f35498
Author: Hans Goudey
Date:   Wed Feb 1 14:15:10 2023 -0500
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rB0f2adbe2e9faadb61ee0f7f0f2b5b60452f35498

Merge branch 'master' into refactor-mesh-corners-generic

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [c94f259fe4c] refactor-mesh-face-generic: Start refactor of MPoly

2023-01-28 Thread Hans Goudey
Commit: c94f259fe4c33da6b69cca59880317c1b67ecbba
Author: Hans Goudey
Date:   Sat Jan 28 12:57:50 2023 -0600
Branches: refactor-mesh-face-generic
https://developer.blender.org/rBc94f259fe4c33da6b69cca59880317c1b67ecbba

Start refactor of MPoly

TODO:
- multires_reshape.h to C++
- `MeshRenderData` nontrivial
- BKE_mesh_tangent.h to C++
- Remove `ps_tri_index_to_mpoly`
- Remove `BKE_mesh_polys_flip`
- All sculpt and pbvh files to C++ (SculptSession) (PBVH)

===

M   source/blender/blenkernel/BKE_DerivedMesh.h
M   source/blender/blenkernel/BKE_deform.h
M   source/blender/blenkernel/BKE_mesh.h
M   source/blender/blenkernel/BKE_mesh_mapping.h
M   source/blender/blenkernel/BKE_mesh_remap.h
M   source/blender/blenkernel/BKE_mesh_tangent.h
M   source/blender/blenkernel/BKE_multires.h
M   source/blender/blenkernel/BKE_paint.h
M   source/blender/blenkernel/BKE_particle.h
M   source/blender/blenkernel/BKE_pbvh.h
M   source/blender/blenkernel/BKE_shrinkwrap.h
M   source/blender/blenkernel/BKE_subdiv_ccg.h
M   source/blender/blenkernel/BKE_volume_to_mesh.hh
M   source/blender/blenkernel/intern/DerivedMesh.cc
M   source/blender/blenkernel/intern/bvhutils.cc
M   source/blender/blenkernel/intern/cdderivedmesh.cc
M   source/blender/blenkernel/intern/cloth.cc
M   source/blender/blenkernel/intern/crazyspace.cc
M   source/blender/blenkernel/intern/curve_to_mesh_convert.cc
M   source/blender/blenkernel/intern/data_transfer.cc
M   source/blender/blenkernel/intern/deform.cc
M   source/blender/blenkernel/intern/dynamicpaint.cc
M   source/blender/blenkernel/intern/fluid.cc
M   source/blender/blenkernel/intern/geometry_component_mesh.cc
M   source/blender/blenkernel/intern/gpencil_geom.cc
M   source/blender/blenkernel/intern/key.cc
M   source/blender/blenkernel/intern/mball_tessellate.cc
M   source/blender/blenkernel/intern/mesh.cc
M   source/blender/blenkernel/intern/mesh_boolean_convert.cc
M   source/blender/blenkernel/intern/mesh_calc_edges.cc
M   source/blender/blenkernel/intern/mesh_convert.cc
M   source/blender/blenkernel/intern/mesh_evaluate.cc
M   source/blender/blenkernel/intern/mesh_fair.cc
M   source/blender/blenkernel/intern/mesh_iterators.cc
M   source/blender/blenkernel/intern/mesh_legacy_convert.cc
M   source/blender/blenkernel/intern/mesh_mapping.cc
M   source/blender/blenkernel/intern/mesh_merge.c
M   source/blender/blenkernel/intern/mesh_merge_customdata.cc
M   source/blender/blenkernel/intern/mesh_mirror.cc
M   source/blender/blenkernel/intern/mesh_normals.cc
M   source/blender/blenkernel/intern/mesh_remap.cc
M   source/blender/blenkernel/intern/mesh_remesh_voxel.cc
M   source/blender/blenkernel/intern/mesh_runtime.cc
M   source/blender/blenkernel/intern/mesh_tangent.cc
M   source/blender/blenkernel/intern/mesh_tessellate.cc
M   source/blender/blenkernel/intern/mesh_validate.cc
M   source/blender/blenkernel/intern/multires.cc
M   source/blender/blenkernel/intern/multires_reshape_subdivide.cc
M   source/blender/blenkernel/intern/multires_reshape_util.cc
M   source/blender/blenkernel/intern/multires_unsubdivide.cc
M   source/blender/blenkernel/intern/object_dupli.cc
M   source/blender/blenkernel/intern/paint.cc
M   source/blender/blenkernel/intern/pbvh.c
M   source/blender/blenkernel/intern/pbvh_colors.cc
M   source/blender/blenkernel/intern/pbvh_intern.h
M   source/blender/blenkernel/intern/shrinkwrap.cc
M   source/blender/blenkernel/intern/softbody.c
M   source/blender/blenkernel/intern/subdiv_ccg_mask.cc
M   source/blender/blenkernel/intern/subdiv_converter_mesh.cc
M   source/blender/blenkernel/intern/subdiv_displacement_multires.cc
M   source/blender/blenkernel/intern/subdiv_eval.cc
M   source/blender/blenkernel/intern/subdiv_foreach.cc
M   source/blender/blenkernel/intern/subdiv_mesh.cc
M   source/blender/blenkernel/intern/volume_to_mesh.cc
M   source/blender/blenlib/BLI_offset_indices.hh
M   source/blender/blenloader/intern/versioning_290.cc
M   source/blender/bmesh/intern/bmesh_mesh_convert.cc
M   source/blender/draw/DRW_pbvh.h
M   source/blender/draw/intern/draw_cache_extract_mesh.cc
M   source/blender/draw/intern/draw_cache_extract_mesh_render_data.cc
M   source/blender/draw/intern/draw_cache_impl_subdivision.cc
M   source/blender/draw/intern/draw_pbvh.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh.hh
M   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc
M   
source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc
M   
source/blender

[Bf-blender-cvs] [1b41cf95db5] refactor-mesh-face-generic: Merge branch 'refactor-mesh-corners-generic' into refactor-mesh-face-generic

2023-01-28 Thread Hans Goudey
Commit: 1b41cf95db5ee54346a62a0718fbac10f0c1bd33
Author: Hans Goudey
Date:   Fri Jan 27 15:49:26 2023 -0600
Branches: refactor-mesh-face-generic
https://developer.blender.org/rB1b41cf95db5ee54346a62a0718fbac10f0c1bd33

Merge branch 'refactor-mesh-corners-generic' into refactor-mesh-face-generic

===



===

diff --cc intern/cycles/blender/mesh.cpp
index 847c7358f7a,69926f68994..3cd762bbf05
--- a/intern/cycles/blender/mesh.cpp
+++ b/intern/cycles/blender/mesh.cpp
@@@ -1035,8 -1029,7 +1052,8 @@@ static void create_mesh(Scene *scene
else {
  vector vi;
  
 +const MPoly *polys = static_cast(b_mesh.polygons[0].ptr.data);
- const MLoop *loops = static_cast(b_mesh.loops[0].ptr.data);
+ std::optional corner_verts = 
find_corner_vert_attribute(b_mesh);
  
  for (int i = 0; i < numfaces; i++) {
const MPoly &b_poly = polys[i];
diff --cc source/blender/blenkernel/BKE_mesh.h
index 9d15688b43c,653a2407887..0611cc46aa6
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@@ -472,15 -472,13 +472,16 @@@ void BKE_mesh_ensure_normals_for_displa
   *
   * Used when defining an empty custom loop normals data layer,
   * to keep same shading as with auto-smooth!
 + *
 + * \param sharp_faces: Optional array used to mark specific faces for sharp 
shading.
   */
  void BKE_edges_sharp_from_angle_set(int numEdges,
- const struct MLoop *mloops,
- int numLoops,
+ const int *corner_verts,
+ const int *corner_edges,
+ int corners_num,
  const struct MPoly *mpolys,
  const float (*poly_normals)[3],
 +const bool *sharp_faces,
  int numPolys,
  float split_angle,
  bool *sharp_edges);
@@@ -639,11 -636,11 +642,12 @@@ void BKE_mesh_normals_loop_custom_from_
   int numVerts,
   const struct MEdge *medges,
   int numEdges,
-  const struct MLoop *mloops,
-  int numLoops,
+  const int *corner_verts,
+  const int *corner_edges,
+  int corners_num,
   const struct MPoly *mpolys,
   const float 
(*poly_normals)[3],
 + const bool *sharp_faces,
   int numPolys,
   bool *sharp_edges,
   short (*r_clnors_data)[2]);
diff --cc source/blender/blenkernel/BKE_mesh_mapping.h
index c8561372e30,a5b70fc8a28..12d8794743d
--- a/source/blender/blenkernel/BKE_mesh_mapping.h
+++ b/source/blender/blenkernel/BKE_mesh_mapping.h
@@@ -320,10 -322,9 +322,10 @@@ int *BKE_mesh_calc_smoothgroups(const s
  int totedge,
  const struct MPoly *mpoly,
  int totpoly,
- const struct MLoop *mloop,
+ const int *corner_edges,
  int totloop,
  const bool *sharp_edges,
 +const bool *sharp_faces,
  int *r_totgroup,
  bool use_bitflags);
  
diff --cc source/blender/blenkernel/BKE_mesh_tangent.h
index b04a8d1ab98,1b767278d12..6d5b077f1f1
--- a/source/blender/blenkernel/BKE_mesh_tangent.h
+++ b/source/blender/blenkernel/BKE_mesh_tangent.h
@@@ -44,10 -44,9 +44,10 @@@ void BKE_mesh_calc_loop_tangent_single(
  void BKE_mesh_calc_loop_tangent_ex(const float (*vert_positions)[3],
 const struct MPoly *mpoly,
 uint mpoly_len,
-const struct MLoop *mloop,
+const int *corner_verts,
 const struct MLoopTri *looptri,
 uint looptri_len,
 +   const bool *sharp_faces,
  
 struct CustomData *loopdata,
 bool calc_active_t

[Bf-blender-cvs] [73626cf6561] refactor-mesh-face-generic: Merge branch 'refactor-mesh-sharp-face-generic' into refactor-mesh-face-generic

2023-01-28 Thread Hans Goudey
Commit: 73626cf65613bd00590758f344114cfc73d4b6d4
Author: Hans Goudey
Date:   Fri Jan 27 15:41:04 2023 -0600
Branches: refactor-mesh-face-generic
https://developer.blender.org/rB73626cf65613bd00590758f344114cfc73d4b6d4

Merge branch 'refactor-mesh-sharp-face-generic' into refactor-mesh-face-generic

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [9facc5067af] master: Cleanup: Simplify mesh and point cloud conversion

2023-01-27 Thread Hans Goudey
Commit: 9facc5067af9975f923d17993de15ddebbb5458a
Author: Hans Goudey
Date:   Fri Jan 27 14:07:48 2023 -0600
Branches: master
https://developer.blender.org/rB9facc5067af9975f923d17993de15ddebbb5458a

Cleanup: Simplify mesh and point cloud conversion

Since mesh positions are stored as a generic attribute,
the attribute doesn't need special handling here.

===

M   source/blender/blenkernel/BKE_mesh.h
M   source/blender/blenkernel/intern/mesh_convert.cc

===

diff --git a/source/blender/blenkernel/BKE_mesh.h 
b/source/blender/blenkernel/BKE_mesh.h
index 557b70b8a11..c9928b9c4d6 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -212,7 +212,7 @@ void BKE_mesh_to_curve(struct Main *bmain,
struct Depsgraph *depsgraph,
struct Scene *scene,
struct Object *ob);
-void BKE_pointcloud_from_mesh(struct Mesh *me, struct PointCloud *pointcloud);
+void BKE_pointcloud_from_mesh(const struct Mesh *me, struct PointCloud 
*pointcloud);
 void BKE_mesh_to_pointcloud(struct Main *bmain,
 struct Depsgraph *depsgraph,
 struct Scene *scene,
diff --git a/source/blender/blenkernel/intern/mesh_convert.cc 
b/source/blender/blenkernel/intern/mesh_convert.cc
index ffc3365b908..d9a84e98326 100644
--- a/source/blender/blenkernel/intern/mesh_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_convert.cc
@@ -627,29 +627,11 @@ void BKE_mesh_to_curve(Main *bmain, Depsgraph *depsgraph, 
Scene * /*scene*/, Obj
   }
 }
 
-void BKE_pointcloud_from_mesh(Mesh *me, PointCloud *pointcloud)
+void BKE_pointcloud_from_mesh(const Mesh *me, PointCloud *pointcloud)
 {
-  using namespace blender;
-
-  BLI_assert(me != nullptr);
-  /* The pointcloud should only contain the position attribute, otherwise more 
attributes would
-   * need to be initialized below. */
-  BLI_assert(pointcloud->attributes().all_ids().size() == 1);
-  CustomData_realloc(&pointcloud->pdata, pointcloud->totpoint, me->totvert);
+  CustomData_free(&pointcloud->pdata, pointcloud->totpoint);
   pointcloud->totpoint = me->totvert;
-
-  /* Copy over all attributes. */
   CustomData_merge(&me->vdata, &pointcloud->pdata, CD_MASK_PROP_ALL, 
CD_DUPLICATE, me->totvert);
-
-  bke::AttributeAccessor mesh_attributes = me->attributes();
-  bke::MutableAttributeAccessor point_attributes = 
pointcloud->attributes_for_write();
-
-  const VArray vert_positions = 
mesh_attributes.lookup_or_default(
-  "position", ATTR_DOMAIN_POINT, float3(0));
-  bke::SpanAttributeWriter point_positions =
-  point_attributes.lookup_or_add_for_write_only_span("position", 
ATTR_DOMAIN_POINT);
-  vert_positions.materialize(point_positions.span);
-  point_positions.finish();
 }
 
 void BKE_mesh_to_pointcloud(Main *bmain, Depsgraph *depsgraph, Scene * 
/*scene*/, Object *ob)
@@ -675,10 +657,7 @@ void BKE_mesh_to_pointcloud(Main *bmain, Depsgraph 
*depsgraph, Scene * /*scene*/
 
 void BKE_mesh_from_pointcloud(const PointCloud *pointcloud, Mesh *me)
 {
-  BLI_assert(pointcloud != nullptr);
-
   me->totvert = pointcloud->totpoint;
-
   CustomData_merge(
   &pointcloud->pdata, &me->vdata, CD_MASK_PROP_ALL, CD_DUPLICATE, 
pointcloud->totpoint);
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [f5e76aa39e3] master: Cleanup: Array types, const, math API in workbench code

2023-01-27 Thread Hans Goudey
Commit: f5e76aa39e3ff40a4c85e79ff70e8e6b02fcfaa7
Author: Hans Goudey
Date:   Fri Jan 27 11:33:40 2023 -0600
Branches: master
https://developer.blender.org/rBf5e76aa39e3ff40a4c85e79ff70e8e6b02fcfaa7

Cleanup: Array types, const, math API in workbench code

Some miscellaneous cleanups left over from a fix/cleanup combo:
- Use const variables
- Use the C++ `math` namespace functions
- Use `std::array` for arrays with size known at compile time
- Use `MutableSpan` instead of reference to array

Differential Revision: https://developer.blender.org/D17094

===

M   source/blender/draw/engines/workbench/workbench_effect_antialiasing.cc

===

diff --git 
a/source/blender/draw/engines/workbench/workbench_effect_antialiasing.cc 
b/source/blender/draw/engines/workbench/workbench_effect_antialiasing.cc
index 75be8279037..e00d67d4d0f 100644
--- a/source/blender/draw/engines/workbench/workbench_effect_antialiasing.cc
+++ b/source/blender/draw/engines/workbench/workbench_effect_antialiasing.cc
@@ -8,25 +8,23 @@
 namespace blender::workbench {
 
 class TaaSamples {
-  void init_samples(Array &samples, const int size)
+  void init_samples(MutableSpan samples)
   {
-samples = Array(size);
-BLI_jitter_init((float(*)[2])samples.begin(), size);
+BLI_jitter_init(reinterpret_cast(samples.data()), 
samples.size());
 
 /* Find closest element to center */
 int closest_index = 0;
 float closest_squared_distance = 1.0f;
-
 for (int i : samples.index_range()) {
-  float2 sample = samples[i];
-  const float squared_dist = len_squared_v2(sample);
+  const float2 sample = samples[i];
+  const float squared_dist = math::length_squared(sample);
   if (squared_dist < closest_squared_distance) {
 closest_squared_distance = squared_dist;
 closest_index = i;
   }
 }
 
-float2 closest_sample = samples[closest_index];
+const float2 closest_sample = samples[closest_index];
 
 for (float2 &sample : samples) {
   /* Move jitter samples so that closest sample is in center */
@@ -43,11 +41,11 @@ class TaaSamples {
 }
 
 /* Sort list based on farthest distance with previous. */
-for (int i = 0; i < size - 2; i++) {
+for (int i = 0; i < samples.size() - 2; i++) {
   float squared_dist = 0.0;
   int index = i;
-  for (int j = i + 1; j < size; j++) {
-const float _squared_dist = len_squared_v2(samples[i] - samples[j]);
+  for (int j = i + 1; j < samples.size(); j++) {
+const float _squared_dist = math::length_squared(samples[i] - 
samples[j]);
 if (_squared_dist > squared_dist) {
   squared_dist = _squared_dist;
   index = j;
@@ -58,19 +56,19 @@ class TaaSamples {
   }
 
  public:
-  Array x5;
-  Array x8;
-  Array x11;
-  Array x16;
-  Array x32;
+  std::array x5;
+  std::array x8;
+  std::array x11;
+  std::array x16;
+  std::array x32;
 
   TaaSamples()
   {
-init_samples(x5, 5);
-init_samples(x8, 8);
-init_samples(x11, 11);
-init_samples(x16, 16);
-init_samples(x32, 32);
+init_samples(x5);
+init_samples(x8);
+init_samples(x11);
+init_samples(x16);
+init_samples(x32);
   }
 };

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [8343e841fd5] master: Cleanup: Quiet unused variable warning in non-debug builds

2023-01-27 Thread Hans Goudey
Commit: 8343e841fd5ef48a5a8ac85e74e67bf8acefd7ee
Author: Hans Goudey
Date:   Fri Jan 27 09:59:38 2023 -0600
Branches: master
https://developer.blender.org/rB8343e841fd5ef48a5a8ac85e74e67bf8acefd7ee

Cleanup: Quiet unused variable warning in non-debug builds

===

M   source/blender/blenloader/intern/readfile.cc

===

diff --git a/source/blender/blenloader/intern/readfile.cc 
b/source/blender/blenloader/intern/readfile.cc
index a007daa0e82..f773f17dc2b 100644
--- a/source/blender/blenloader/intern/readfile.cc
+++ b/source/blender/blenloader/intern/readfile.cc
@@ -3793,6 +3793,7 @@ static void blo_read_file_checks(Main *bmain)
 }
   }
 #endif
+  UNUSED_VARS_NDEBUG(bmain);
 }
 
 BlendFileData *blo_read_file_internal(FileData *fd, const char *filepath)

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [179605bd2da] master: Fix T104168: No active UV when reading auto-save files

2023-01-27 Thread Hans Goudey
Commit: 179605bd2dab1df3339ef6b625fd38f8bee84914
Author: Hans Goudey
Date:   Fri Jan 27 09:56:14 2023 -0600
Branches: master
https://developer.blender.org/rB179605bd2dab1df3339ef6b625fd38f8bee84914

Fix T104168: No active UV when reading auto-save files

Similar to 6d12d43a054898bbffb, we should skip the
legacy to generic conversion if there's nothing to convert.

===

M   source/blender/blenkernel/intern/mesh_legacy_convert.cc

===

diff --git a/source/blender/blenkernel/intern/mesh_legacy_convert.cc 
b/source/blender/blenkernel/intern/mesh_legacy_convert.cc
index a60dfa3a19c..4926be66d27 100644
--- a/source/blender/blenkernel/intern/mesh_legacy_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_legacy_convert.cc
@@ -1608,6 +1608,9 @@ void BKE_mesh_legacy_convert_uvs_to_generic(Mesh *mesh)
 {
   using namespace blender;
   using namespace blender::bke;
+  if (!CustomData_has_layer(&mesh->ldata, CD_MLOOPUV)) {
+return;
+  }
 
   /* Store layer names since they will be removed, used to set the active 
status of new layers.
* Use intermediate #StringRef because the names can be null. */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [000e722c7d9] master: Geometry Nodes: Optimize start point case of Points of Curve node

2023-01-27 Thread Hans Goudey
Commit: 000e722c7d99320ce51d1487147a2f275ae44b16
Author: Hans Goudey
Date:   Fri Jan 27 09:44:30 2023 -0600
Branches: master
https://developer.blender.org/rB000e722c7d99320ce51d1487147a2f275ae44b16

Geometry Nodes: Optimize start point case of Points of Curve node

In the node groups for T103730, the "Points of Curve" node is often used to
retrieve the root point of every curve. Since the curve point offsets array
already contains that data directly, we can detect this as a special case and
avoid all the other work.

Differential Revision: https://developer.blender.org/D17128

===

M   
source/blender/nodes/geometry/nodes/node_geo_curve_topology_points_of_curve.cc

===

diff --git 
a/source/blender/nodes/geometry/nodes/node_geo_curve_topology_points_of_curve.cc
 
b/source/blender/nodes/geometry/nodes/node_geo_curve_topology_points_of_curve.cc
index 8d9e4a07a76..820fa4856a4 100644
--- 
a/source/blender/nodes/geometry/nodes/node_geo_curve_topology_points_of_curve.cc
+++ 
b/source/blender/nodes/geometry/nodes/node_geo_curve_topology_points_of_curve.cc
@@ -174,6 +174,57 @@ class CurvePointCountInput final : public 
bke::CurvesFieldInput {
   }
 };
 
+/**
+ * The node is often used to retrieve the root point of the curve. If the 
curve indices are in
+ * order, the sort weights have no effect, and the sort index is the first 
point, then we can just
+ * return the curve offsets as a span directly.
+ */
+static bool use_start_point_special_case(const Field &curve_index,
+ const Field &sort_index,
+ const Field &sort_weights)
+{
+  if (!dynamic_cast(&curve_index.node())) {
+return false;
+  }
+  if (sort_index.node().depends_on_input() || 
sort_weights.node().depends_on_input()) {
+return false;
+  }
+  return fn::evaluate_constant_field(sort_index) == 0;
+}
+
+class CurveStartPointInput final : public bke::CurvesFieldInput {
+ public:
+  CurveStartPointInput() : bke::CurvesFieldInput(CPPType::get(), "Point 
of Curve")
+  {
+category_ = Category::Generated;
+  }
+
+  GVArray get_varray_for_context(const bke::CurvesGeometry &curves,
+ const eAttrDomain /*domain*/,
+ const IndexMask /*mask*/) const final
+  {
+return VArray::ForSpan(curves.offsets());
+  }
+
+  uint64_t hash() const final
+  {
+return 2938459815345;
+  }
+
+  bool is_equal_to(const fn::FieldNode &other) const final
+  {
+if (dynamic_cast(&other)) {
+  return true;
+}
+return false;
+  }
+
+  std::optional preferred_domain(const bke::CurvesGeometry & 
/*curves*/)
+  {
+return ATTR_DOMAIN_CURVE;
+  }
+};
+
 static void node_geo_exec(GeoNodeExecParams params)
 {
   const Field curve_index = params.extract_input>("Curve 
Index");
@@ -185,11 +236,16 @@ static void node_geo_exec(GeoNodeExecParams params)
   ATTR_DOMAIN_CURVE)));
   }
   if (params.output_is_required("Point Index")) {
-params.set_output("Point Index",
-  Field(std::make_shared(
-  curve_index,
-  params.extract_input>("Sort Index"),
-  params.extract_input>("Weights";
+Field sort_index = params.extract_input>("Sort Index");
+Field sort_weight = params.extract_input>("Weights");
+if (use_start_point_special_case(curve_index, sort_index, sort_weight)) {
+  params.set_output("Point Index", 
Field(std::make_shared()));
+}
+else {
+  params.set_output("Point Index",
+Field(std::make_shared(
+curve_index, std::move(sort_index), 
std::move(sort_weight;
+}
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [5ce6c617bbe] refactor-mesh-sharp-face-generic: Merge branch 'master' into refactor-mesh-sharp-face-generic

2023-01-26 Thread Hans Goudey
Commit: 5ce6c617bbe9a3b2cd95e84020e5b3b5b2c8aff2
Author: Hans Goudey
Date:   Thu Jan 26 16:14:50 2023 -0600
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rB5ce6c617bbe9a3b2cd95e84020e5b3b5b2c8aff2

Merge branch 'master' into refactor-mesh-sharp-face-generic

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [7ea1b5a5e45] refactor-mesh-corners-generic: Merge branch 'master' into refactor-mesh-corners-generic

2023-01-26 Thread Hans Goudey
Commit: 7ea1b5a5e453ecde1eceb6010f7bd5cde4dc825a
Author: Hans Goudey
Date:   Thu Jan 26 15:52:23 2023 -0600
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rB7ea1b5a5e453ecde1eceb6010f7bd5cde4dc825a

Merge branch 'master' into refactor-mesh-corners-generic

===



===

diff --cc source/blender/blenkernel/intern/cdderivedmesh.cc
index 720c78d283e,9cf5f7ecedf..580cd6966d8
--- a/source/blender/blenkernel/intern/cdderivedmesh.cc
+++ b/source/blender/blenkernel/intern/cdderivedmesh.cc
@@@ -234,12 -223,12 +231,14 @@@ static DerivedMesh *cdDM_from_mesh_ex(M
/* Though this may be an unnecessary calculation, simply retrieving the 
layer may return nothing
 * or dirty normals. */
cddm->vert_normals = BKE_mesh_vertex_normals_ensure(mesh);
-   cddm->medge = CustomData_get_layer_for_write(&dm->edgeData, CD_MEDGE, 
mesh->totedge);
-   cddm->corner_verts = CustomData_get_layer_named_for_write(
-   &dm->loopData, CD_PROP_INT32, ".corner_vert", mesh->totloop);
-   cddm->corner_edges = CustomData_get_layer_named_for_write(
-   &dm->loopData, CD_PROP_INT32, ".corner_edge", mesh->totloop);
-   cddm->mpoly = CustomData_get_layer_for_write(&dm->polyData, CD_MPOLY, 
mesh->totpoly);
+   cddm->medge = static_cast(
+   CustomData_get_layer_for_write(&dm->edgeData, CD_MEDGE, mesh->totedge));
 -  cddm->mloop = static_cast(
 -  CustomData_get_layer_for_write(&dm->loopData, CD_MLOOP, mesh->totloop));
++  cddm->corner_verts = static_cast(CustomData_get_layer_named_for_write(
++  &dm->loopData, CD_PROP_INT32, ".corner_vert", mesh->totloop));
++  cddm->corner_edges = static_cast(CustomData_get_layer_named_for_write(
++  &dm->loopData, CD_PROP_INT32, ".corner_edge", mesh->totloop));
+   cddm->mpoly = static_cast(
+   CustomData_get_layer_for_write(&dm->polyData, CD_MPOLY, mesh->totpoly));
  #if 0
cddm->mface = CustomData_get_layer(&dm->faceData, CD_MFACE);
  #else
diff --cc source/blender/blenkernel/intern/deform.cc
index 103f5afdb98,dda4d098126..988a757b126
--- a/source/blender/blenkernel/intern/deform.cc
+++ b/source/blender/blenkernel/intern/deform.cc
@@@ -1106,8 -1103,8 +1101,8 @@@ void BKE_defvert_extract_vgroup_to_loop
  void BKE_defvert_extract_vgroup_to_polyweights(const MDeformVert *dvert,
 const int defgroup,
 const int verts_num,
 -   const MLoop *loops,
 +   const int *corner_verts,
-const int UNUSED(loops_num),
+const int /*loops_num*/,
 const MPoly *polys,
 const int polys_num,
 const bool invert_vgroup,
@@@ -1126,10 -1124,10 +1122,10 @@@
int j = mp->totloop;
float w = 0.0f;
  
 -  for (; j--; ml++) {
 -w += tmp_weights[ml->v];
 +  for (; j--; corner_vert++) {
 +w += tmp_weights[*corner_vert];
}
-   r_weights[i] = w / (float)mp->totloop;
+   r_weights[i] = w / float(mp->totloop);
  }
  
  MEM_freeN(tmp_weights);
diff --cc source/blender/blenkernel/intern/dynamicpaint.cc
index 79a8db6648b,9b30d34aabb..f4a8a2baf2f
--- a/source/blender/blenkernel/intern/dynamicpaint.cc
+++ b/source/blender/blenkernel/intern/dynamicpaint.cc
@@@ -1464,10 -1476,10 +1476,10 @@@ static void dynamicPaint_initAdjacencyD
MEM_freeN(temp_data);
  }
  
- typedef struct DynamicPaintSetInitColorData {
+ struct DynamicPaintSetInitColorData {
const DynamicPaintSurface *surface;
  
 -  const MLoop *mloop;
 +  const int *corner_verts;
const float (*mloopuv)[2];
const MLoopTri *mlooptri;
const MLoopCol *mloopcol;
@@@ -1484,10 -1497,10 +1497,10 @@@ static void dynamic_paint_set_init_colo
const PaintSurfaceData *sData = data->surface->data;
PaintPoint *pPoint = (PaintPoint *)sData->type_data;
  
 -  const MLoop *mloop = data->mloop;
 +  const int *corner_verts = data->corner_verts;
const MLoopTri *mlooptri = data->mlooptri;
const float(*mloopuv)[2] = data->mloopuv;
-   struct ImagePool *pool = data->pool;
+   ImagePool *pool = data->pool;
Tex *tex = data->surface->init_texture;
  
const bool scene_color_manage = data->scene_color_manage;
@@@ -1627,14 -1642,14 +1642,14 @@@ static void dynamicPaint_setInitialColo
  if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX) {
struct ImagePool *pool = BKE_

[Bf-blender-cvs] [95915484f2b] refactor-mesh-corners-generic: Cleanup: Use C++ accessor functions

2023-01-26 Thread Hans Goudey
Commit: 95915484f2b1be03bb5829c2abcca474431defb7
Author: Hans Goudey
Date:   Thu Jan 26 16:09:58 2023 -0600
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rB95915484f2b1be03bb5829c2abcca474431defb7

Cleanup: Use C++ accessor functions

===

M   source/blender/blenkernel/intern/dynamicpaint.cc
M   source/blender/blenkernel/intern/fluid.cc
M   source/blender/blenloader/intern/versioning_290.cc
M   source/blender/editors/armature/meshlaplacian.cc
M   source/blender/editors/object/object_bake_api.cc
M   source/blender/editors/space_view3d/drawobject.cc
M   source/blender/editors/uvedit/uvedit_unwrap_ops.cc

===

diff --git a/source/blender/blenkernel/intern/dynamicpaint.cc 
b/source/blender/blenkernel/intern/dynamicpaint.cc
index f4a8a2baf2f..2d98c0e86f7 100644
--- a/source/blender/blenkernel/intern/dynamicpaint.cc
+++ b/source/blender/blenkernel/intern/dynamicpaint.cc
@@ -1416,7 +1416,7 @@ static void 
dynamicPaint_initAdjacencyData(DynamicPaintSurface *surface, const b
 int numOfPolys = mesh->totpoly;
 const MEdge *edges = BKE_mesh_edges(mesh);
 const MPoly *polys = BKE_mesh_polys(mesh);
-const int *corner_verts = BKE_mesh_corner_verts(mesh);
+const blender::Span corner_verts = mesh->corner_verts();
 
 /* count number of edges per vertex */
 for (int i = 0; i < numOfEdges; i++) {
@@ -1618,7 +1618,7 @@ static void dynamicPaint_setInitialColor(const Scene 
*scene, DynamicPaintSurface
   else if (surface->init_color_type == MOD_DPAINT_INITIAL_TEXTURE) {
 Tex *tex = surface->init_texture;
 
-const int *corner_verts = BKE_mesh_corner_verts(mesh);
+const blender::Span corner_verts = mesh->corner_verts();
 const MLoopTri *mlooptri = BKE_mesh_runtime_looptri_ensure(mesh);
 const int tottri = BKE_mesh_runtime_looptri_len(mesh);
 
@@ -1644,7 +1644,7 @@ static void dynamicPaint_setInitialColor(const Scene 
*scene, DynamicPaintSurface
 
   DynamicPaintSetInitColorData data{};
   data.surface = surface;
-  data.corner_verts = corner_verts;
+  data.corner_verts = corner_verts.data();
   data.mlooptri = mlooptri;
   data.mloopuv = mloopuv;
   data.pool = pool;
@@ -1676,7 +1676,7 @@ static void dynamicPaint_setInitialColor(const Scene 
*scene, DynamicPaintSurface
 
 /* For vertex surface, just copy colors from #MLoopCol. */
 if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX) {
-  const int *corner_verts = BKE_mesh_corner_verts(mesh);
+  const blender::Span corner_verts = mesh->corner_verts();
   const int totloop = mesh->totloop;
   const MLoopCol *col = static_cast(
   CustomData_get_layer_named(&mesh->ldata, CD_PROP_BYTE_COLOR, 
surface->init_layername));
@@ -1930,7 +1930,7 @@ static Mesh 
*dynamicPaint_Modifier_apply(DynamicPaintModifierData *pmd, Object *
 
   /* vertex color paint */
   if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
-const int *corner_verts = BKE_mesh_corner_verts(result);
+const blender::Span corner_verts = mesh->corner_verts();
 const int totloop = result->totloop;
 const MPoly *mpoly = BKE_mesh_polys(result);
 const int totpoly = result->totpoly;
@@ -1982,7 +1982,7 @@ static Mesh 
*dynamicPaint_Modifier_apply(DynamicPaintModifierData *pmd, Object *
 }
 
 data.ob = ob;
-data.corner_verts = corner_verts;
+data.corner_verts = corner_verts.data();
 data.mpoly = mpoly;
 data.mloopcol = mloopcol;
 data.mloopcol_wet = mloopcol_wet;
@@ -2837,7 +2837,7 @@ int dynamicPaint_createUVSurface(Scene *scene,
 return setError(canvas, N_("Cannot bake non-'image sequence' formats"));
   }
 
-  const int *corner_verts = BKE_mesh_corner_verts(mesh);
+  const blender::Span corner_verts = mesh->corner_verts();
   mlooptri = BKE_mesh_runtime_looptri_ensure(mesh);
   const int tottri = BKE_mesh_runtime_looptri_len(mesh);
 
@@ -2925,7 +2925,7 @@ int dynamicPaint_createUVSurface(Scene *scene,
 data.tempWeights = tempWeights;
 data.mlooptri = mlooptri;
 data.mloopuv = mloopuv;
-data.corner_verts = corner_verts;
+data.corner_verts = corner_verts.data();
 data.tottri = tottri;
 data.faceBB = faceBB;
 
@@ -2984,7 +2984,7 @@ int dynamicPaint_createUVSurface(Scene *scene,
  mesh->totvert,
  mlooptri,
  tottri,
- corner_verts,
+ corner_verts.data(),
  mesh->totloop);
 
 int total_border = 0;
@@ -4298,7 +4298,7 @@ sta

[Bf-blender-cvs] [d6c9cd445cb] master: Geometry Nodes: Skip sorting in topology nodes if possible

2023-01-26 Thread Hans Goudey
Commit: d6c9cd445cb41480b40fc7a7c29bbf982a2a6446
Author: Hans Goudey
Date:   Thu Jan 26 12:34:28 2023 -0600
Branches: master
https://developer.blender.org/rBd6c9cd445cb41480b40fc7a7c29bbf982a2a6446

Geometry Nodes: Skip sorting in topology nodes if possible

When the sort weights are a single value, they have no effect,
so sorting the relevant indices for the element will be wasted work.
The sorting is expensive compared to the rest of the node. In my
simple test of the points of curve node, it became 6 times faster
when the weights are a single value.

===

M   
source/blender/nodes/geometry/nodes/node_geo_curve_topology_points_of_curve.cc
M   
source/blender/nodes/geometry/nodes/node_geo_mesh_topology_corners_of_face.cc
M   
source/blender/nodes/geometry/nodes/node_geo_mesh_topology_corners_of_vertex.cc
M   
source/blender/nodes/geometry/nodes/node_geo_mesh_topology_edges_of_vertex.cc

===

diff --git 
a/source/blender/nodes/geometry/nodes/node_geo_curve_topology_points_of_curve.cc
 
b/source/blender/nodes/geometry/nodes/node_geo_curve_topology_points_of_curve.cc
index 0f9c14b0fee..8d9e4a07a76 100644
--- 
a/source/blender/nodes/geometry/nodes/node_geo_curve_topology_points_of_curve.cc
+++ 
b/source/blender/nodes/geometry/nodes/node_geo_curve_topology_points_of_curve.cc
@@ -49,6 +49,8 @@ class PointsOfCurveInput final : public bke::CurvesFieldInput 
{
  const eAttrDomain domain,
  const IndexMask mask) const final
   {
+const OffsetIndices points_by_curve = curves.points_by_curve();
+
 const bke::CurvesFieldContext context{curves, domain};
 fn::FieldEvaluator evaluator{context, &mask};
 evaluator.add(curve_index_);
@@ -62,7 +64,7 @@ class PointsOfCurveInput final : public bke::CurvesFieldInput 
{
 point_evaluator.add(sort_weight_);
 point_evaluator.evaluate();
 const VArray all_sort_weights = 
point_evaluator.get_evaluated(0);
-const OffsetIndices points_by_curve = curves.points_by_curve();
+const bool use_sorting = !all_sort_weights.is_single();
 
 Array point_of_curve(mask.min_array_size());
 threading::parallel_for(mask.index_range(), 256, [&](const IndexRange 
range) {
@@ -77,25 +79,29 @@ class PointsOfCurveInput final : public 
bke::CurvesFieldInput {
   point_of_curve[selection_i] = 0;
   continue;
 }
-
 const IndexRange points = points_by_curve[curve_i];
 
-/* Retrieve the weights for each point. */
-sort_weights.reinitialize(points.size());
-all_sort_weights.materialize_compressed(IndexMask(points), 
sort_weights.as_mutable_span());
-
-/* Sort a separate array of compressed indices corresponding to the 
compressed weights.
- * This allows using `materialize_compressed` to avoid virtual 
function call overhead
- * when accessing values in the sort weights. However, it means a 
separate array of
- * indices within the compressed array is necessary for sorting. */
-sort_indices.reinitialize(points.size());
-std::iota(sort_indices.begin(), sort_indices.end(), 0);
-std::stable_sort(sort_indices.begin(), sort_indices.end(), [&](int a, 
int b) {
-  return sort_weights[a] < sort_weights[b];
-});
-
 const int index_in_sort_wrapped = mod_i(index_in_sort, points.size());
-point_of_curve[selection_i] = 
points[sort_indices[index_in_sort_wrapped]];
+if (use_sorting) {
+  /* Retrieve the weights for each point. */
+  sort_weights.reinitialize(points.size());
+  all_sort_weights.materialize_compressed(IndexMask(points),
+  
sort_weights.as_mutable_span());
+
+  /* Sort a separate array of compressed indices corresponding to the 
compressed weights.
+   * This allows using `materialize_compressed` to avoid virtual 
function call overhead
+   * when accessing values in the sort weights. However, it means a 
separate array of
+   * indices within the compressed array is necessary for sorting. */
+  sort_indices.reinitialize(points.size());
+  std::iota(sort_indices.begin(), sort_indices.end(), 0);
+  std::stable_sort(sort_indices.begin(), sort_indices.end(), [&](int 
a, int b) {
+return sort_weights[a] < sort_weights[b];
+  });
+  point_of_curve[selection_i] = 
points[sort_indices[index_in_sort_wrapped]];
+}
+else {
+  point_of_curve[selection_i] = points[index_in_sort_wrapped];
+}
   }
 });
 
diff --git 
a/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_corners_of_face.cc 
b/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_corners_of_face.cc
index d5b4b4869c1..55c70095236 100644

[Bf-blender-cvs] [6e0d58a68a8] master: Cleanup: Edit Mesh: Decrease variable scope, use bool instead of int

2023-01-25 Thread Hans Goudey
Commit: 6e0d58a68a866d632a6427d51f7ad41002566248
Author: Hans Goudey
Date:   Wed Jan 25 12:56:05 2023 -0600
Branches: master
https://developer.blender.org/rB6e0d58a68a866d632a6427d51f7ad41002566248

Cleanup: Edit Mesh: Decrease variable scope, use bool instead of int

===

M   source/blender/editors/mesh/editmesh_utils.c

===

diff --git a/source/blender/editors/mesh/editmesh_utils.c 
b/source/blender/editors/mesh/editmesh_utils.c
index f54284ef81a..c0815257afa 100644
--- a/source/blender/editors/mesh/editmesh_utils.c
+++ b/source/blender/editors/mesh/editmesh_utils.c
@@ -63,10 +63,8 @@ BMBackup EDBM_redo_state_store(BMEditMesh *em)
 
 void EDBM_redo_state_restore(BMBackup *backup, BMEditMesh *em, bool 
recalc_looptri)
 {
-  BMesh *tmpbm;
-
   BM_mesh_data_free(em->bm);
-  tmpbm = BM_mesh_copy(backup->bmcopy);
+  BMesh *tmpbm = BM_mesh_copy(backup->bmcopy);
   *em->bm = *tmpbm;
   MEM_freeN(tmpbm);
   tmpbm = NULL;
@@ -208,11 +206,9 @@ bool EDBM_op_call_and_selectf(BMEditMesh *em,
   const char *fmt,
   ...)
 {
-  BMOpSlot *slot_select_out;
   BMesh *bm = em->bm;
   BMOperator bmop;
   va_list list;
-  char hflag;
 
   va_start(list, fmt);
 
@@ -224,8 +220,8 @@ bool EDBM_op_call_and_selectf(BMEditMesh *em,
 
   BMO_op_exec(bm, &bmop);
 
-  slot_select_out = BMO_slot_get(bmop.slots_out, select_slot_out);
-  hflag = slot_select_out->slot_subtype.elem & BM_ALL_NOLOOP;
+  BMOpSlot *slot_select_out = BMO_slot_get(bmop.slots_out, select_slot_out);
+  char hflag = slot_select_out->slot_subtype.elem & BM_ALL_NOLOOP;
   BLI_assert(hflag != 0);
 
   if (select_extend == false) {
@@ -269,14 +265,12 @@ bool EDBM_op_call_silentf(BMEditMesh *em, const char 
*fmt, ...)
 void EDBM_mesh_make(Object *ob, const int select_mode, const bool 
add_key_index)
 {
   Mesh *me = ob->data;
-  BMesh *bm;
-
-  bm = BKE_mesh_to_bmesh(me,
- ob,
- add_key_index,
- &((struct BMeshCreateParams){
- .use_toolflags = true,
- }));
+  BMesh *bm = BKE_mesh_to_bmesh(me,
+ob,
+add_key_index,
+&((struct BMeshCreateParams){
+.use_toolflags = true,
+}));
 
   if (me->edit_mesh) {
 /* this happens when switching shape keys */
@@ -456,21 +450,15 @@ UvVertMap *BM_uv_vert_map_create(BMesh *bm, const bool 
use_select, const bool us
   BMFace *efa;
   BMLoop *l;
   BMIter iter, liter;
-  /* vars from original func */
-  UvVertMap *vmap;
-  UvMapVert *buf;
-  const float(*luv)[2];
   uint a;
-  int totverts, i, totuv, totfaces;
   const int cd_loop_uv_offset = CustomData_get_offset(&bm->ldata, 
CD_PROP_FLOAT2);
-  bool *winding = NULL;
   BLI_buffer_declare_static(vec2f, tf_uv_buf, BLI_BUFFER_NOP, 
BM_DEFAULT_NGON_STACK_SIZE);
 
   BM_mesh_elem_index_ensure(bm, BM_VERT | BM_FACE);
 
-  totfaces = bm->totface;
-  totverts = bm->totvert;
-  totuv = 0;
+  const int totfaces = bm->totface;
+  const int totverts = bm->totvert;
+  int totuv = 0;
 
   /* generate UvMapVert array */
   BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
@@ -482,13 +470,15 @@ UvVertMap *BM_uv_vert_map_create(BMesh *bm, const bool 
use_select, const bool us
   if (totuv == 0) {
 return NULL;
   }
-  vmap = (UvVertMap *)MEM_callocN(sizeof(*vmap), "UvVertMap");
+  UvVertMap *vmap = (UvVertMap *)MEM_callocN(sizeof(*vmap), "UvVertMap");
   if (!vmap) {
 return NULL;
   }
 
   vmap->vert = (UvMapVert **)MEM_callocN(sizeof(*vmap->vert) * totverts, 
"UvMapVert_pt");
-  buf = vmap->buf = (UvMapVert *)MEM_callocN(sizeof(*vmap->buf) * totuv, 
"UvMapVert");
+  UvMapVert *buf = vmap->buf = (UvMapVert *)MEM_callocN(sizeof(*vmap->buf) * 
totuv, "UvMapVert");
+
+  bool *winding = NULL;
   if (use_winding) {
 winding = MEM_callocN(sizeof(*winding) * totfaces, "winding");
   }
@@ -506,6 +496,7 @@ UvVertMap *BM_uv_vert_map_create(BMesh *bm, const bool 
use_select, const bool us
 tf_uv = (float(*)[2])BLI_buffer_reinit_data(&tf_uv_buf, vec2f, 
efa->len);
   }
 
+  int i;
   BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) {
 buf->loop_of_poly_index = i;
 buf->poly_index = a;
@@ -516,7 +507,7 @@ UvVertMap *BM_uv_vert_map_create(BMesh *bm, const bool 
use_select, const bool us
 buf++;
 
 if (use_winding) {
-  luv = BM_ELEM_CD_GET_FLOAT2_P(l, cd_loop_uv_offset);
+  const float(*luv)[2] = BM_ELEM_CD_GET_FLOAT2_P(l, cd_loop_uv_offset);
   copy_v2_v2(tf_uv[i], *luv);
 }

[Bf-blender-cvs] [f954029e97c] master: Curves Sculpt: Add report about missing surface for puff brush

2023-01-25 Thread Hans Goudey
Commit: f954029e97c866a971b62a2faadf35fdb80b73bf
Author: Hans Goudey
Date:   Wed Jan 25 11:38:12 2023 -0600
Branches: master
https://developer.blender.org/rBf954029e97c866a971b62a2faadf35fdb80b73bf

Curves Sculpt: Add report about missing surface for puff brush

This is done in the other sculpt brushes that require a surface object.

===

M   source/blender/editors/sculpt_paint/curves_sculpt_puff.cc

===

diff --git a/source/blender/editors/sculpt_paint/curves_sculpt_puff.cc 
b/source/blender/editors/sculpt_paint/curves_sculpt_puff.cc
index e44e97bc840..dcb7a3ae797 100644
--- a/source/blender/editors/sculpt_paint/curves_sculpt_puff.cc
+++ b/source/blender/editors/sculpt_paint/curves_sculpt_puff.cc
@@ -92,6 +92,7 @@ struct PuffOperationExecutor {
   return;
 }
 if (curves_id_->surface == nullptr || curves_id_->surface->type != 
OB_MESH) {
+  report_missing_surface(stroke_extension.reports);
   return;
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [2c97f152947] refactor-mesh-sharp-face-generic: Fix fluid.cc build error

2023-01-23 Thread Hans Goudey
Commit: 2c97f1529476b70730472997ac66a33295d3938c
Author: Hans Goudey
Date:   Mon Jan 23 18:27:53 2023 -0600
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rB2c97f1529476b70730472997ac66a33295d3938c

Fix fluid.cc build error

===

M   source/blender/blenkernel/intern/fluid.cc

===

diff --git a/source/blender/blenkernel/intern/fluid.cc 
b/source/blender/blenkernel/intern/fluid.cc
index 95636d40d32..a314a5c0886 100644
--- a/source/blender/blenkernel/intern/fluid.cc
+++ b/source/blender/blenkernel/intern/fluid.cc
@@ -23,7 +23,7 @@
 #include "DNA_object_types.h"
 #include "DNA_rigidbody_types.h"
 
-#include "BKE_attribute.h"
+#include "BKE_attribute.hh"
 #include "BKE_effect.h"
 #include "BKE_fluid.h"
 #include "BKE_global.h"

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [dcb60e2e0d7] refactor-mesh-sharp-face-generic: More progress on versioning

2023-01-23 Thread Hans Goudey
Commit: dcb60e2e0d759803b3f71b5d715518145fba08f4
Author: Hans Goudey
Date:   Mon Jan 23 15:52:27 2023 -0600
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rBdcb60e2e0d759803b3f71b5d715518145fba08f4

More progress on versioning

===

M   source/blender/blenloader/intern/versioning_300.cc

===

diff --git a/source/blender/blenloader/intern/versioning_300.cc 
b/source/blender/blenloader/intern/versioning_300.cc
index 16d9836a24a..aac9b3c3435 100644
--- a/source/blender/blenloader/intern/versioning_300.cc
+++ b/source/blender/blenloader/intern/versioning_300.cc
@@ -961,8 +961,27 @@ static void 
version_geometry_nodes_extrude_smooth_propagation(bNodeTree &ntree)
 return false;
   }
   bNodeSocket *capture_in_socket = nodeFindSocket(capture_node, SOCK_IN, 
"Value_003");
-  bNodeLink *link = in_links_per_socket.lookup_default(capture_in_socket, 
nullptr);
-  if (!link || link->fromnode->idname != 
StringRef("GeometryNodeInputShadeSmooth")) {
+  bNodeLink *capture_in_link = 
in_links_per_socket.lookup_default(capture_in_socket, nullptr);
+  if (!capture_in_link) {
+return false;
+  }
+  if (capture_in_link->fromnode->idname != 
StringRef("GeometryNodeInputShadeSmooth")) {
+return false;
+  }
+  if (geometry_out_links.size() != 1) {
+return false;
+  }
+  bNodeLink *geometry_out_link = geometry_out_links.first();
+  if (geometry_out_link->tonode->idname != 
StringRef("GeometryNodeSetShadeSmooth")) {
+return false;
+  }
+  bNode *set_smooth_node = geometry_out_link->tonode;
+  bNodeSocket *smooth_in_socket = nodeFindSocket(set_smooth_node, SOCK_IN, 
"Shade Smooth");
+  bNodeLink *connecting_link = 
in_links_per_socket.lookup_default(smooth_in_socket, nullptr);
+  if (!connecting_link) {
+return false;
+  }
+  if (connecting_link->fromnode != capture_node) {
 return false;
   }
   return true;
@@ -971,58 +990,51 @@ static void 
version_geometry_nodes_extrude_smooth_propagation(bNodeTree &ntree)
   continue;
 }
 
-bNode *capture_node = nullptr;
+bNode *capture_node = nodeAddNode(nullptr, &ntree, 
"GeometryNodeAttributeCapture");
+capture_node->parent = node->parent;
+capture_node->locx = node->locx - 25;
+capture_node->locx = node->locy;
+new_nodes.append(capture_node);
+static_cast(capture_node->storage)->data_type = CD_PROP_BOOL;
+static_cast(capture_node->storage)->domain 
= ATTR_DOMAIN_FACE;
 
-if (!capture_node) {
-  capture_node = nodeAddNode(nullptr, &ntree, 
"GeometryNodeAttributeCapture");
-  new_nodes.append(capture_node);
-  NodeGeometryAttributeCapture &capture_storage = 
*static_cast(
-  capture_node->storage);
-  capture_storage.data_type = CD_PROP_BOOL;
-  capture_storage.domain = ATTR_DOMAIN_FACE;
-  bNodeSocket *capture_out_socket = nodeFindSocket(capture_node, SOCK_OUT, 
"Attribute_003");
-  bNode *is_smooth_node = nodeAddNode(nullptr, &ntree, 
"GeometryNodeInputShadeSmooth");
-  nodeAddLink(&ntree,
-  is_smooth_node,
-  nodeFindSocket(is_smooth_node, SOCK_OUT, "Smooth"),
-  capture_node,
-  nodeFindSocket(capture_node, SOCK_IN, "Value_003"));
-  nodeAddLink(&ntree,
-  capture_node,
-  nodeFindSocket(capture_node, SOCK_OUT, "Geometry"),
-  capture_node,
-  geometry_in_socket);
-  geometry_in_link->tonode = capture_node;
-  geometry_in_link->tosock = nodeFindSocket(capture_node, SOCK_IN, 
"Geometry");
-}
-
-bNodeSocket *capture_out_socket = nodeFindSocket(capture_node, SOCK_OUT, 
"Attribute_003");
-
-bNode *set_smooth_node = nullptr;
-if (geometry_out_links.size() == 1) {
-  bNodeLink *link = geometry_out_links.first();
-  if (link->tonode->idname == StringRef("GeometryNodeSetShadeSmooth")) {
-  }
-}
+bNode *is_smooth_node = nodeAddNode(nullptr, &ntree, 
"GeometryNodeInputShadeSmooth");
+is_smooth_node->parent = node->parent;
+capture_node->locx = capture_node->locx - 25;
+capture_node->locx = capture_node->locy;
+nodeAddLink(&ntree,
+is_smooth_node,
+nodeFindSocket(is_smooth_node, SOCK_OUT, "Smooth"),
+capture_node,
+nodeFindSocket(capture_node, SOCK_IN, "Value_003"));
+nodeAddLink(&ntree,
+capture_node,
+   

[Bf-blender-cvs] [015f06dd4f7] refactor-mesh-sharp-face-generic: Merge branch 'master' into refactor-mesh-sharp-face-generic

2023-01-23 Thread Hans Goudey
Commit: 015f06dd4f78d2c220e71bcd9922672cdb9b9934
Author: Hans Goudey
Date:   Mon Jan 23 15:58:17 2023 -0600
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rB015f06dd4f78d2c220e71bcd9922672cdb9b9934

Merge branch 'master' into refactor-mesh-sharp-face-generic

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [aa35e2b4b95] refactor-mesh-sharp-face-generic: Cleanup

2023-01-23 Thread Hans Goudey
Commit: aa35e2b4b95442cfe4874a29408dcabf48951784
Author: Hans Goudey
Date:   Mon Jan 23 18:04:30 2023 -0600
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rBaa35e2b4b95442cfe4874a29408dcabf48951784

Cleanup

===

M   source/blender/blenkernel/intern/subdiv_ccg_material.cc

===

diff --git a/source/blender/blenkernel/intern/subdiv_ccg_material.cc 
b/source/blender/blenkernel/intern/subdiv_ccg_material.cc
index 424a11f0941..a690da515ed 100644
--- a/source/blender/blenkernel/intern/subdiv_ccg_material.cc
+++ b/source/blender/blenkernel/intern/subdiv_ccg_material.cc
@@ -46,7 +46,6 @@ void BKE_subdiv_ccg_material_flags_init_from_mesh(
   &mesh->pdata, CD_PROP_INT32, "material_index");
   data->sharp_faces = (const bool *)CustomData_get_layer_named(
   &mesh->pdata, CD_PROP_BOOL, "sharp_face");
-
   material_flags_evaluator->eval_material_flags = 
subdiv_ccg_material_flags_eval;
   material_flags_evaluator->free = subdiv_ccg_material_flags_free;
   material_flags_evaluator->user_data = data;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [163edf3cafa] refactor-mesh-sharp-face-generic: Fixes for versioning

2023-01-23 Thread Hans Goudey
Commit: 163edf3cafa9bf123eb95950cf8c9917a880d45f
Author: Hans Goudey
Date:   Mon Jan 23 16:21:11 2023 -0600
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rB163edf3cafa9bf123eb95950cf8c9917a880d45f

Fixes for versioning

===

M   source/blender/blenloader/intern/versioning_300.cc

===

diff --git a/source/blender/blenloader/intern/versioning_300.cc 
b/source/blender/blenloader/intern/versioning_300.cc
index aac9b3c3435..04ea85bfaac 100644
--- a/source/blender/blenloader/intern/versioning_300.cc
+++ b/source/blender/blenloader/intern/versioning_300.cc
@@ -928,13 +928,12 @@ static void 
version_geometry_nodes_extrude_smooth_propagation(bNodeTree &ntree)
 if (node->idname != StringRef("GeometryNodeExtrudeMesh")) {
   continue;
 }
-const NodeGeometryExtrudeMesh &storage = *static_cast(
-node->storage);
-if (storage.mode != GEO_NODE_EXTRUDE_MESH_EDGES) {
+if (static_cast(node->storage)->mode !=
+GEO_NODE_EXTRUDE_MESH_EDGES) {
   continue;
 }
-bNodeSocket *geometry_in_socket = nodeFindSocket(node, SOCK_IN, 
"Geometry");
-bNodeSocket *geometry_out_socket = nodeFindSocket(node, SOCK_OUT, 
"Geometry");
+bNodeSocket *geometry_in_socket = nodeFindSocket(node, SOCK_IN, "Mesh");
+bNodeSocket *geometry_out_socket = nodeFindSocket(node, SOCK_OUT, "Mesh");
 
 Map in_links_per_socket;
 MultiValueMap out_links_per_socket;
@@ -944,13 +943,13 @@ static void 
version_geometry_nodes_extrude_smooth_propagation(bNodeTree &ntree)
 }
 
 bNodeLink *geometry_in_link = 
in_links_per_socket.lookup_default(geometry_in_socket, nullptr);
-Span geometry_out_links = 
out_links_per_socket.lookup(geometry_in_socket);
+Span geometry_out_links = 
out_links_per_socket.lookup(geometry_out_socket);
 if (!geometry_in_link || geometry_out_links.is_empty()) {
   continue;
 }
 
 const bool versioning_already_done = [&]() {
-  if (geometry_in_link->fromnode->idname != 
StringRef("GeometryNodeAttributeCapture")) {
+  if (geometry_in_link->fromnode->idname != 
StringRef("GeometryNodeCaptureAttribute")) {
 return false;
   }
   bNode *capture_node = geometry_in_link->fromnode;
@@ -990,18 +989,19 @@ static void 
version_geometry_nodes_extrude_smooth_propagation(bNodeTree &ntree)
   continue;
 }
 
-bNode *capture_node = nodeAddNode(nullptr, &ntree, 
"GeometryNodeAttributeCapture");
+bNode *capture_node = nodeAddNode(nullptr, &ntree, 
"GeometryNodeCaptureAttribute");
 capture_node->parent = node->parent;
 capture_node->locx = node->locx - 25;
-capture_node->locx = node->locy;
+capture_node->locy = node->locy;
 new_nodes.append(capture_node);
 static_cast(capture_node->storage)->data_type = CD_PROP_BOOL;
 static_cast(capture_node->storage)->domain 
= ATTR_DOMAIN_FACE;
 
 bNode *is_smooth_node = nodeAddNode(nullptr, &ntree, 
"GeometryNodeInputShadeSmooth");
 is_smooth_node->parent = node->parent;
-capture_node->locx = capture_node->locx - 25;
-capture_node->locx = capture_node->locy;
+is_smooth_node->locx = capture_node->locx - 25;
+is_smooth_node->locy = capture_node->locy;
+new_nodes.append(is_smooth_node);
 nodeAddLink(&ntree,
 is_smooth_node,
 nodeFindSocket(is_smooth_node, SOCK_OUT, "Smooth"),
@@ -1018,7 +1018,8 @@ static void 
version_geometry_nodes_extrude_smooth_propagation(bNodeTree &ntree)
 bNode *set_smooth_node = nodeAddNode(nullptr, &ntree, 
"GeometryNodeSetShadeSmooth");
 set_smooth_node->parent = node->parent;
 set_smooth_node->locx = node->locx + 25;
-set_smooth_node->locx = node->locy;
+set_smooth_node->locy = node->locy;
+new_nodes.append(set_smooth_node);
 nodeAddLink(&ntree,
 node,
 geometry_out_socket,

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [a643971cf56] refactor-mesh-sharp-face-generic: Merge branch 'master' into refactor-mesh-sharp-face-generic

2023-01-23 Thread Hans Goudey
Commit: a643971cf5641f330eedbcf0dbcb767886150f0c
Author: Hans Goudey
Date:   Mon Jan 23 15:35:53 2023 -0600
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rBa643971cf5641f330eedbcf0dbcb767886150f0c

Merge branch 'master' into refactor-mesh-sharp-face-generic

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [0ad4d07f10e] master: Fix: Debug build compile error after recent cleanup commit

2023-01-23 Thread Hans Goudey
Commit: 0ad4d07f10e29f5a6678615ebe0453c679856f18
Author: Hans Goudey
Date:   Mon Jan 23 15:57:13 2023 -0600
Branches: master
https://developer.blender.org/rB0ad4d07f10e29f5a6678615ebe0453c679856f18

Fix: Debug build compile error after recent cleanup commit

79ba1a1ac82d854d84 missed that this variable was used in an assert.

===

M   source/blender/draw/engines/workbench/workbench_shadow.cc

===

diff --git a/source/blender/draw/engines/workbench/workbench_shadow.cc 
b/source/blender/draw/engines/workbench/workbench_shadow.cc
index 533e32662a4..e4a409f1457 100644
--- a/source/blender/draw/engines/workbench/workbench_shadow.cc
+++ b/source/blender/draw/engines/workbench/workbench_shadow.cc
@@ -131,9 +131,12 @@ void ShadowPass::ShadowView::setup(View &view, float3 
light_direction, bool forc
   float4 extruded_face = float4(UNPACK3(normal), math::dot(normal, 
corner_a));
 
   /* Ensure the plane faces outwards */
+  bool flipped = false;
   for (float3 corner : frustum_corners.vec) {
 if (math::dot(float3(extruded_face), corner) > (extruded_face.w + 
0.1)) {
   BLI_assert(!flipped);
+  UNUSED_VARS_NDEBUG(flipped);
+  flipped = true;
   extruded_face *= -1;
 }
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [42f8f98ee12] master: Fix T104088: Geometry nodes modifier boolean lost on undo

2023-01-23 Thread Hans Goudey
Commit: 42f8f98ee12b2733554b58b7773dd163859b281a
Author: Hans Goudey
Date:   Mon Jan 23 15:06:55 2023 -0600
Branches: master
https://developer.blender.org/rB42f8f98ee12b2733554b58b7773dd163859b281a

Fix T104088: Geometry nodes modifier boolean lost on undo

After object-mode undo (memfile undo), the value wan't lost, but the
property would be temporarily converted back to integer type in order
to be forward compatible. Now only use the forward compatible
writing when writing undo steps. Auto-saves and similar files are
currently not forward compatible anyway.

===

M   source/blender/modifiers/intern/MOD_nodes.cc

===

diff --git a/source/blender/modifiers/intern/MOD_nodes.cc 
b/source/blender/modifiers/intern/MOD_nodes.cc
index e487abc4248..a23156dd3c8 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -1873,16 +1873,18 @@ static void blendWrite(BlendWriter *writer, const ID * 
/*id_owner*/, const Modif
   BLO_write_struct(writer, NodesModifierData, nmd);
 
   if (nmd->settings.properties != nullptr) {
-/* Boolean properties are added automatically for boolean node group 
inputs. Integer properties
- * are automatically converted to boolean sockets where applicable as 
well. However, boolean
- * properties will crash old versions of Blender, so convert them to 
integer properties for
- * writing. The actual value is stored in the same variable for both types 
*/
 Map boolean_props;
-LISTBASE_FOREACH (IDProperty *, prop, 
&nmd->settings.properties->data.group) {
-  if (prop->type == IDP_BOOLEAN) {
-boolean_props.add_new(prop, reinterpret_cast(prop->ui_data));
-prop->type = IDP_INT;
-prop->ui_data = nullptr;
+if (!BLO_write_is_undo(writer)) {
+  /* Boolean properties are added automatically for boolean node group 
inputs. Integer
+   * properties are automatically converted to boolean sockets where 
applicable as well.
+   * However, boolean properties will crash old versions of Blender, so 
convert them to integer
+   * properties for writing. The actual value is stored in the same 
variable for both types */
+  LISTBASE_FOREACH (IDProperty *, prop, 
&nmd->settings.properties->data.group) {
+if (prop->type == IDP_BOOLEAN) {
+  boolean_props.add_new(prop, reinterpret_cast(prop->ui_data));
+  prop->type = IDP_INT;
+  prop->ui_data = nullptr;
+}
   }
 }
 
@@ -1890,12 +1892,14 @@ static void blendWrite(BlendWriter *writer, const ID * 
/*id_owner*/, const Modif
  * and don't necessarily need to be written, but we can't just free them. 
*/
 IDP_BlendWrite(writer, nmd->settings.properties);
 
-LISTBASE_FOREACH (IDProperty *, prop, 
&nmd->settings.properties->data.group) {
-  if (prop->type == IDP_INT) {
-if (IDPropertyUIDataBool **ui_data = boolean_props.lookup_ptr(prop)) {
-  prop->type = IDP_BOOLEAN;
-  if (ui_data) {
-prop->ui_data = reinterpret_cast(*ui_data);
+if (!BLO_write_is_undo(writer)) {
+  LISTBASE_FOREACH (IDProperty *, prop, 
&nmd->settings.properties->data.group) {
+if (prop->type == IDP_INT) {
+  if (IDPropertyUIDataBool **ui_data = boolean_props.lookup_ptr(prop)) 
{
+prop->type = IDP_BOOLEAN;
+if (ui_data) {
+  prop->ui_data = reinterpret_cast(*ui_data);
+}
   }
 }
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [79ba1a1ac82] master: Cleanup: Compiler warnings in new sculpt & workbench

2023-01-23 Thread Hans Goudey
Commit: 79ba1a1ac82d854d840e98141b2458e4c7e2a7dd
Author: Hans Goudey
Date:   Mon Jan 23 14:57:26 2023 -0600
Branches: master
https://developer.blender.org/rB79ba1a1ac82d854d840e98141b2458e4c7e2a7dd

Cleanup: Compiler warnings in new sculpt & workbench

Set but unused variables, unused arguments, unnecessary/incorrect type
casting, missing static qualifier. Unused arguments are removed.

===

M   source/blender/blenkernel/intern/pbvh_pixels.cc
M   source/blender/draw/engines/basic/basic_engine.c
M   source/blender/draw/engines/eevee/eevee_materials.c
M   source/blender/draw/engines/workbench/workbench_effect_outline.cc
M   source/blender/draw/engines/workbench/workbench_engine.cc
M   source/blender/draw/engines/workbench/workbench_mesh_passes.cc
M   source/blender/draw/engines/workbench/workbench_private.hh
M   source/blender/draw/engines/workbench/workbench_resources.cc
M   source/blender/draw/engines/workbench/workbench_shadow.cc
M   source/blender/editors/sculpt_paint/sculpt_intern.h
M   source/blender/editors/sculpt_paint/sculpt_paint_color.c
M   source/blender/editors/sculpt_paint/sculpt_paint_image.cc

===

diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc 
b/source/blender/blenkernel/intern/pbvh_pixels.cc
index ed87631ffe9..0055cf1335f 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -99,12 +99,8 @@ struct SplitNodePair {
 
 static void split_thread_job(TaskPool *__restrict pool, void *taskdata);
 
-static void split_pixel_node(PBVH *pbvh,
- SplitNodePair *split,
- Mesh *mesh,
- Image *image,
- ImageUser *image_user,
- SplitQueueData *tdata)
+static void split_pixel_node(
+PBVH *pbvh, SplitNodePair *split, Image *image, ImageUser *image_user, 
SplitQueueData *tdata)
 {
   BB cb;
   PBVHNode *node = &split->node;
@@ -304,7 +300,7 @@ static void split_thread_job(TaskPool *__restrict pool, 
void *taskdata)
   SplitQueueData *tdata = static_cast(BLI_task_pool_user_data(pool));
   SplitNodePair *split = static_cast(taskdata);
 
-  split_pixel_node(tdata->pbvh, split, tdata->mesh, tdata->image, 
tdata->image_user, tdata);
+  split_pixel_node(tdata->pbvh, split, tdata->image, tdata->image_user, tdata);
 }
 
 static void split_pixel_nodes(PBVH *pbvh, Mesh *mesh, Image *image, ImageUser 
*image_user)
diff --git a/source/blender/draw/engines/basic/basic_engine.c 
b/source/blender/draw/engines/basic/basic_engine.c
index 5ff596ca083..e8c2dc259fc 100644
--- a/source/blender/draw/engines/basic/basic_engine.c
+++ b/source/blender/draw/engines/basic/basic_engine.c
@@ -225,11 +225,7 @@ static void basic_cache_populate(void *vedata, Object *ob)
 if (G.debug_value == 889 && ob->sculpt && ob->sculpt->pbvh) {
   int debug_node_nr = 0;
   DRW_debug_modelmat(ob->object_to_world);
-  BKE_pbvh_draw_debug_cb(
-  ob->sculpt->pbvh,
-  (void (*)(void *d, const float min[3], const float max[3], 
PBVHNodeFlags f))
-  DRW_sculpt_debug_cb,
-  &debug_node_nr);
+  BKE_pbvh_draw_debug_cb(ob->sculpt->pbvh, DRW_sculpt_debug_cb, 
&debug_node_nr);
 }
   }
 }
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c 
b/source/blender/draw/engines/eevee/eevee_materials.c
index c90ae397e57..e5645ac4a96 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -888,11 +888,7 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata,
 if (G.debug_value == 889 && ob->sculpt && ob->sculpt->pbvh) {
   int debug_node_nr = 0;
   DRW_debug_modelmat(ob->object_to_world);
-  BKE_pbvh_draw_debug_cb(
-  ob->sculpt->pbvh,
-  (void (*)(void *d, const float min[3], const float max[3], 
PBVHNodeFlags f))
-  DRW_sculpt_debug_cb,
-  &debug_node_nr);
+  BKE_pbvh_draw_debug_cb(ob->sculpt->pbvh, DRW_sculpt_debug_cb, 
&debug_node_nr);
 }
   }
 
diff --git a/source/blender/draw/engines/workbench/workbench_effect_outline.cc 
b/source/blender/draw/engines/workbench/workbench_effect_outline.cc
index 18b8b484aef..a1826d5ecf8 100644
--- a/source/blender/draw/engines/workbench/workbench_effect_outline.cc
+++ b/source/blender/draw/engines/workbench/workbench_effect_outline.cc
@@ -38,7 +38,7 @@ void OutlinePass::sync(SceneResources &resources)
   ps_.draw_procedural(GPU_PRIM_TRIS, 1, 3);
 }
 
-void OutlinePass::draw(Manager &manager, View &view, SceneResources 
&resources, int2 resolution)
+void Outli

[Bf-blender-cvs] [7fc395354cd] master: Cleanup: Use offset indices arguments for curves utilities

2023-01-23 Thread Hans Goudey
Commit: 7fc395354cd1049157096ac97bee3a2745045624
Author: Hans Goudey
Date:   Mon Jan 23 14:41:40 2023 -0600
Branches: master
https://developer.blender.org/rB7fc395354cd1049157096ac97bee3a2745045624

Cleanup: Use offset indices arguments for curves utilities

Make the functions more flexible and more generic by changing the curves
arguments to the curve offsets. This way, theoretically they could become
normal utility functions in the future. Also do a consistency pass over
the algorithms that generate new curves geometry for naming and
code ordering, and use of utility functions. The functions are really
quite similar, and it's much easier to tell this way.

===

M   source/blender/blenkernel/BKE_curves_utils.hh
M   source/blender/blenkernel/intern/curves_utils.cc
M   source/blender/geometry/intern/add_curves_on_mesh.cc
M   source/blender/geometry/intern/fillet_curves.cc
M   source/blender/geometry/intern/resample_curves.cc
M   source/blender/geometry/intern/set_curve_type.cc
M   source/blender/geometry/intern/subdivide_curves.cc
M   source/blender/geometry/intern/trim_curves.cc

===

diff --git a/source/blender/blenkernel/BKE_curves_utils.hh 
b/source/blender/blenkernel/BKE_curves_utils.hh
index 6caf716c063..9549a643c05 100644
--- a/source/blender/blenkernel/BKE_curves_utils.hh
+++ b/source/blender/blenkernel/BKE_curves_utils.hh
@@ -471,54 +471,58 @@ class IndexRangeCyclic {
  * ranges, assuming that all curves have the same number of control points in 
#src_curves
  * and #dst_curves.
  */
-void copy_point_data(const CurvesGeometry &src_curves,
- const CurvesGeometry &dst_curves,
+void copy_point_data(OffsetIndices src_points_by_curve,
+ OffsetIndices dst_points_by_curve,
  Span curve_ranges,
  GSpan src,
  GMutableSpan dst);
 
-void copy_point_data(const CurvesGeometry &src_curves,
- const CurvesGeometry &dst_curves,
+void copy_point_data(OffsetIndices src_points_by_curve,
+ OffsetIndices dst_points_by_curve,
  IndexMask src_curve_selection,
  GSpan src,
  GMutableSpan dst);
 
 template
-void copy_point_data(const CurvesGeometry &src_curves,
- const CurvesGeometry &dst_curves,
+void copy_point_data(OffsetIndices src_points_by_curve,
+ OffsetIndices dst_points_by_curve,
  IndexMask src_curve_selection,
  Span src,
  MutableSpan dst)
 {
-  copy_point_data(src_curves, dst_curves, src_curve_selection, GSpan(src), 
GMutableSpan(dst));
+  copy_point_data(src_points_by_curve,
+  dst_points_by_curve,
+  src_curve_selection,
+  GSpan(src),
+  GMutableSpan(dst));
 }
 
-void fill_points(const CurvesGeometry &curves,
+void fill_points(OffsetIndices points_by_curve,
  IndexMask curve_selection,
  GPointer value,
  GMutableSpan dst);
 
 template
-void fill_points(const CurvesGeometry &curves,
+void fill_points(const OffsetIndices points_by_curve,
  IndexMask curve_selection,
  const T &value,
  MutableSpan dst)
 {
-  fill_points(curves, curve_selection, &value, dst);
+  fill_points(points_by_curve, curve_selection, &value, dst);
 }
 
-void fill_points(const CurvesGeometry &curves,
+void fill_points(const OffsetIndices points_by_curve,
  Span curve_ranges,
  GPointer value,
  GMutableSpan dst);
 
 template
-void fill_points(const CurvesGeometry &curves,
+void fill_points(const OffsetIndices points_by_curve,
  Span curve_ranges,
  const T &value,
  MutableSpan dst)
 {
-  fill_points(curves, curve_ranges, &value, dst);
+  fill_points(points_by_curve, curve_ranges, &value, dst);
 }
 
 /**
@@ -533,9 +537,15 @@ void fill_points(const CurvesGeometry &curves,
 bke::CurvesGeometry copy_only_curve_domain(const bke::CurvesGeometry 
&src_curves);
 
 /**
- * Copy the number of points in every curve in #curve_ranges to the 
corresponding index in #sizes.
+ * Copy the number of points in every curve in the mask to the corresponding 
index in #sizes.
  */
-void copy_curve_sizes(const bke::CurvesGeometry &curves,
+void copy_curve_sizes(OffsetIndices points_by_curve, IndexMask mask, 
MutableSpan sizes);
+
+/**
+ * Copy the number of points in every curve in #curve_ranges to the 
corresponding index in
+ * #sizes.
+ */
+void copy_curve_sizes(OffsetIndices points_by_curve,
   Span curve_ranges,
   MutableSpan 

[Bf-blender-cvs] [f24b9a7943d] master: Cleanup: Rename pbvh.cc to pbvh_colors.cc

2023-01-23 Thread Hans Goudey
Commit: f24b9a7943d4a7e20008efc070bba4f879aa00dd
Author: Hans Goudey
Date:   Mon Jan 23 14:47:08 2023 -0600
Branches: master
https://developer.blender.org/rBf24b9a7943d4a7e20008efc070bba4f879aa00dd

Cleanup: Rename pbvh.cc to pbvh_colors.cc

In preparation for moving pbvh.c to C++, give this file a different name
so git will recognize that future commit as a rename.

===

M   source/blender/blenkernel/CMakeLists.txt
R100source/blender/blenkernel/intern/pbvh.cc
source/blender/blenkernel/intern/pbvh_colors.cc

===

diff --git a/source/blender/blenkernel/CMakeLists.txt 
b/source/blender/blenkernel/CMakeLists.txt
index 1f4ab73911a..7052f362fc4 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -249,7 +249,7 @@ set(SRC
   intern/particle_distribute.c
   intern/particle_system.c
   intern/pbvh.c
-  intern/pbvh.cc
+  intern/pbvh_colors.cc
   intern/pbvh_bmesh.c
   intern/pbvh_pixels.cc
   intern/pbvh_uv_islands.cc
diff --git a/source/blender/blenkernel/intern/pbvh.cc 
b/source/blender/blenkernel/intern/pbvh_colors.cc
similarity index 100%
rename from source/blender/blenkernel/intern/pbvh.cc
rename to source/blender/blenkernel/intern/pbvh_colors.cc

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [21fb2ebd0e6] refactor-mesh-sharp-face-generic: Progress in versioning code

2023-01-23 Thread Hans Goudey
Commit: 21fb2ebd0e6826555db73844e85611cc65eef873
Author: Hans Goudey
Date:   Mon Jan 23 10:30:46 2023 -0600
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rB21fb2ebd0e6826555db73844e85611cc65eef873

Progress in versioning code

===

M   source/blender/blenloader/intern/versioning_300.cc

===

diff --git a/source/blender/blenloader/intern/versioning_300.cc 
b/source/blender/blenloader/intern/versioning_300.cc
index 4c45e1433ab..16d9836a24a 100644
--- a/source/blender/blenloader/intern/versioning_300.cc
+++ b/source/blender/blenloader/intern/versioning_300.cc
@@ -14,6 +14,7 @@
 
 #include "BLI_listbase.h"
 #include "BLI_math_vector.h"
+#include "BLI_multi_value_map.hh"
 #include "BLI_path_util.h"
 #include "BLI_string.h"
 #include "BLI_string_utils.h"
@@ -919,6 +920,121 @@ static void 
version_geometry_nodes_primitive_uv_maps(bNodeTree &ntree)
   }
 }
 
+static void version_geometry_nodes_extrude_smooth_propagation(bNodeTree &ntree)
+{
+  using namespace blender;
+  Vector new_nodes;
+  LISTBASE_FOREACH_MUTABLE (bNode *, node, &ntree.nodes) {
+if (node->idname != StringRef("GeometryNodeExtrudeMesh")) {
+  continue;
+}
+const NodeGeometryExtrudeMesh &storage = *static_cast(
+node->storage);
+if (storage.mode != GEO_NODE_EXTRUDE_MESH_EDGES) {
+  continue;
+}
+bNodeSocket *geometry_in_socket = nodeFindSocket(node, SOCK_IN, 
"Geometry");
+bNodeSocket *geometry_out_socket = nodeFindSocket(node, SOCK_OUT, 
"Geometry");
+
+Map in_links_per_socket;
+MultiValueMap out_links_per_socket;
+LISTBASE_FOREACH (bNodeLink *, link, &ntree.links) {
+  in_links_per_socket.add(link->tosock, link);
+  out_links_per_socket.add(link->fromsock, link);
+}
+
+bNodeLink *geometry_in_link = 
in_links_per_socket.lookup_default(geometry_in_socket, nullptr);
+Span geometry_out_links = 
out_links_per_socket.lookup(geometry_in_socket);
+if (!geometry_in_link || geometry_out_links.is_empty()) {
+  continue;
+}
+
+const bool versioning_already_done = [&]() {
+  if (geometry_in_link->fromnode->idname != 
StringRef("GeometryNodeAttributeCapture")) {
+return false;
+  }
+  bNode *capture_node = geometry_in_link->fromnode;
+  const NodeGeometryAttributeCapture &capture_storage =
+  *static_cast(capture_node->storage);
+  if (capture_storage.data_type != CD_PROP_BOOL ||
+  capture_storage.domain != ATTR_DOMAIN_FACE) {
+return false;
+  }
+  bNodeSocket *capture_in_socket = nodeFindSocket(capture_node, SOCK_IN, 
"Value_003");
+  bNodeLink *link = in_links_per_socket.lookup_default(capture_in_socket, 
nullptr);
+  if (!link || link->fromnode->idname != 
StringRef("GeometryNodeInputShadeSmooth")) {
+return false;
+  }
+  return true;
+}();
+if (versioning_already_done) {
+  continue;
+}
+
+bNode *capture_node = nullptr;
+
+if (!capture_node) {
+  capture_node = nodeAddNode(nullptr, &ntree, 
"GeometryNodeAttributeCapture");
+  new_nodes.append(capture_node);
+  NodeGeometryAttributeCapture &capture_storage = 
*static_cast(
+  capture_node->storage);
+  capture_storage.data_type = CD_PROP_BOOL;
+  capture_storage.domain = ATTR_DOMAIN_FACE;
+  bNodeSocket *capture_out_socket = nodeFindSocket(capture_node, SOCK_OUT, 
"Attribute_003");
+  bNode *is_smooth_node = nodeAddNode(nullptr, &ntree, 
"GeometryNodeInputShadeSmooth");
+  nodeAddLink(&ntree,
+  is_smooth_node,
+  nodeFindSocket(is_smooth_node, SOCK_OUT, "Smooth"),
+  capture_node,
+  nodeFindSocket(capture_node, SOCK_IN, "Value_003"));
+  nodeAddLink(&ntree,
+  capture_node,
+  nodeFindSocket(capture_node, SOCK_OUT, "Geometry"),
+  capture_node,
+  geometry_in_socket);
+  geometry_in_link->tonode = capture_node;
+  geometry_in_link->tosock = nodeFindSocket(capture_node, SOCK_IN, 
"Geometry");
+}
+
+bNodeSocket *capture_out_socket = nodeFindSocket(capture_node, SOCK_OUT, 
"Attribute_003");
+
+bNode *set_smooth_node = nullptr;
+if (geometry_out_links.size() == 1) {
+  bNodeLink *link = geometry_out_links.first();
+  if (link->tonode->idname == StringRef("GeometryNodeSetShadeSmooth")) {
+  }
+}
+
+for (bNodeLink *link : geometry_out_links) {
+  if (link->tonode->idname == StringRef("GeometryNodeSetShadeSmooth")) {
+  

[Bf-blender-cvs] [bd4c68658f2] refactor-mesh-sharp-face-generic: Fix screw modifier

2023-01-22 Thread Hans Goudey
Commit: bd4c68658f214db9f157562a66e9c9e6764170fc
Author: Hans Goudey
Date:   Sun Jan 22 11:29:33 2023 -0600
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rBbd4c68658f214db9f157562a66e9c9e6764170fc

Fix screw modifier

===

M   source/blender/blenkernel/intern/mesh_convert.cc
M   source/blender/modifiers/intern/MOD_screw.cc

===

diff --git a/source/blender/blenkernel/intern/mesh_convert.cc 
b/source/blender/blenkernel/intern/mesh_convert.cc
index 9ac2da547ca..ad8e4ec976a 100644
--- a/source/blender/blenkernel/intern/mesh_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_convert.cc
@@ -386,14 +386,6 @@ static Mesh *mesh_nurbs_displist_to_mesh(const Curve *cu, 
const ListBase *dispba
 make_edges_mdata_extend(*mesh);
   }
 
-  int sharp_faces_count = 0;
-  for (const bool value : sharp_faces.span) {
-if (value) {
-  sharp_faces_count++;
-}
-  }
-  std::cout << "Number of sharp faces: " << sharp_faces_count << '\n';
-
   material_indices.finish();
   sharp_faces.finish();
 
diff --git a/source/blender/modifiers/intern/MOD_screw.cc 
b/source/blender/modifiers/intern/MOD_screw.cc
index 76d611c1147..ec615c7883b 100644
--- a/source/blender/modifiers/intern/MOD_screw.cc
+++ b/source/blender/modifiers/intern/MOD_screw.cc
@@ -21,6 +21,7 @@
 #include "DNA_object_types.h"
 #include "DNA_screen_types.h"
 
+#include "BKE_attribute.hh"
 #include "BKE_context.h"
 #include "BKE_lib_query.h"
 #include "BKE_mesh.h"
@@ -179,6 +180,7 @@ static Mesh *mesh_remove_doubles_on_axis(Mesh *result,
 
 static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh 
*meshData)
 {
+  using namespace blender;
   const Mesh *mesh = meshData;
   Mesh *result;
   ScrewModifierData *ltmd = (ScrewModifierData *)md;
@@ -245,6 +247,8 @@ static Mesh *modifyMesh(ModifierData *md, const 
ModifierEvalContext *ctx, Mesh *
 
   ScrewVertConnect *vc, *vc_tmp, *vert_connect = nullptr;
 
+  const bool use_flat_shading = (ltmd->flag & MOD_SCREW_SMOOTH_SHADING) == 0;
+
   /* don't do anything? */
   if (!totvert) {
 return BKE_mesh_new_nomain_from_template(mesh, 0, 0, 0, 0, 0);
@@ -387,6 +391,9 @@ static Mesh *modifyMesh(ModifierData *md, const 
ModifierEvalContext *ctx, Mesh *
   MEdge *medge_new = BKE_mesh_edges_for_write(result);
   MPoly *mpoly_new = BKE_mesh_polys_for_write(result);
   MLoop *mloop_new = BKE_mesh_loops_for_write(result);
+  bke::MutableAttributeAccessor attributes = result->attributes_for_write();
+  bke::SpanAttributeWriter sharp_faces = 
attributes.lookup_or_add_for_write_span(
+  "sharp_face", ATTR_DOMAIN_FACE);
 
   if (!CustomData_has_layer(&result->pdata, CD_ORIGINDEX)) {
 CustomData_add_layer(&result->pdata, CD_ORIGINDEX, CD_SET_DEFAULT, 
nullptr, int(maxPolys));
@@ -863,6 +870,7 @@ static Mesh *modifyMesh(ModifierData *md, const 
ModifierEvalContext *ctx, Mesh *
   else {
 origindex[mpoly_index] = ORIGINDEX_NONE;
 dst_material_index[mpoly_index] = mat_nr;
+sharp_faces.span[i] = use_flat_shading;
   }
   mp_new->loopstart = mpoly_index * 4;
   mp_new->totloop = 4;
@@ -988,6 +996,8 @@ static Mesh *modifyMesh(ModifierData *md, const 
ModifierEvalContext *ctx, Mesh *
   }
 #endif
 
+  sharp_faces.finish();
+
   if (edge_poly_map) {
 MEM_freeN(edge_poly_map);
   }
@@ -1006,8 +1016,6 @@ static Mesh *modifyMesh(ModifierData *md, const 
ModifierEvalContext *ctx, Mesh *
  ltmd->merge_dist);
   }
 
-  BKE_mesh_smooth_flag_set(result, ltmd->flag & MOD_SCREW_SMOOTH_SHADING);
-
   return result;
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [d8abf380e07] refactor-mesh-sharp-face-generic: Fix "use smooth" RNA access

2023-01-22 Thread Hans Goudey
Commit: d8abf380e072b946bd280e2321bd13f2b691bae5
Author: Hans Goudey
Date:   Sun Jan 22 11:11:33 2023 -0600
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rBd8abf380e072b946bd280e2321bd13f2b691bae5

Fix "use smooth"  RNA access

===

M   source/blender/makesrna/intern/rna_mesh.c

===

diff --git a/source/blender/makesrna/intern/rna_mesh.c 
b/source/blender/makesrna/intern/rna_mesh.c
index f73f40d34ee..d4a0df75269 100644
--- a/source/blender/makesrna/intern/rna_mesh.c
+++ b/source/blender/makesrna/intern/rna_mesh.c
@@ -665,7 +665,7 @@ static bool rna_MeshPolygon_use_smooth_get(PointerRNA *ptr)
   const bool *sharp_faces = (const bool *)CustomData_get_layer_named(
   &mesh->pdata, CD_PROP_BOOL, "sharp_face");
   const int index = rna_MeshPolygon_index_get(ptr);
-  return sharp_faces == NULL ? false : sharp_faces[index];
+  return !(sharp_faces && sharp_faces[index]);
 }
 
 static void rna_MeshPolygon_use_smooth_set(PointerRNA *ptr, bool value)
@@ -1688,13 +1688,10 @@ static int 
rna_MeshLoopTriangle_material_index_get(PointerRNA *ptr)
 static bool rna_MeshLoopTriangle_use_smooth_get(PointerRNA *ptr)
 {
   const Mesh *me = rna_mesh(ptr);
+  const MLoopTri *ltri = (MLoopTri *)ptr->data;
   const bool *sharp_faces = (const bool *)CustomData_get_layer_named(
   &me->pdata, CD_PROP_BOOL, "sharp_face");
-  if (!sharp_faces) {
-return true;
-  }
-  const MLoopTri *ltri = (MLoopTri *)ptr->data;
-  return sharp_faces[ltri->poly];
+  return !(sharp_faces && sharp_faces[ltri->poly]);
 }
 
 /* path construction */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [25548614312] refactor-mesh-sharp-face-generic: Merge branch 'master' into refactor-mesh-sharp-face-generic

2023-01-22 Thread Hans Goudey
Commit: 25548614312a3543c5d3fa3207ac2346f61708e1
Author: Hans Goudey
Date:   Sun Jan 22 10:24:08 2023 -0600
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rB25548614312a3543c5d3fa3207ac2346f61708e1

Merge branch 'master' into refactor-mesh-sharp-face-generic

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [61de7565de4] refactor-mesh-sharp-face-generic: Various fixes and cleanups

2023-01-22 Thread Hans Goudey
Commit: 61de7565de49b63432047ce6363471c6ac642258
Author: Hans Goudey
Date:   Sun Jan 22 10:16:41 2023 -0600
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rB61de7565de49b63432047ce6363471c6ac642258

Various fixes and cleanups

===

M   intern/cycles/blender/mesh.cpp
M   source/blender/blenkernel/BKE_mesh.h
M   source/blender/blenkernel/intern/fluid.cc
M   source/blender/blenkernel/intern/mesh_convert.cc
M   source/blender/blenkernel/intern/mesh_legacy_convert.cc
M   source/blender/blenkernel/intern/mesh_normals.cc
M   source/blender/blenkernel/intern/mesh_tangent.cc
M   source/blender/bmesh/intern/bmesh_mesh_convert.cc
M   source/blender/draw/intern/draw_cache_impl_subdivision.cc
M   source/blender/editors/mesh/mesh_data.cc
M   source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc
M   source/blender/io/collada/MeshImporter.cpp
M   source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh
M   source/blender/io/wavefront_obj/importer/obj_import_mesh.cc
M   source/blender/makesrna/intern/rna_mesh.c
M   source/blender/modifiers/intern/MOD_normal_edit.cc
M   source/blender/modifiers/intern/MOD_remesh.cc
M   source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
M   source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_circle.cc
M   source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cone.cc
M   source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_grid.cc
M   source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc
M   source/blender/nodes/geometry/nodes/node_geo_set_shade_smooth.cc

===

diff --git a/intern/cycles/blender/mesh.cpp b/intern/cycles/blender/mesh.cpp
index e242a184f2f..847c7358f7a 100644
--- a/intern/cycles/blender/mesh.cpp
+++ b/intern/cycles/blender/mesh.cpp
@@ -1005,7 +1005,7 @@ static void create_mesh(Scene *scene,
 if (sharp_faces) {
   return sharp_faces->data[poly_index].value();
 }
-return 0;
+return false;
   };
 
   /* create faces */
diff --git a/source/blender/blenkernel/BKE_mesh.h 
b/source/blender/blenkernel/BKE_mesh.h
index 11f22fd9e2a..28ae1d82aa4 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -473,7 +473,7 @@ void BKE_mesh_ensure_normals_for_display(struct Mesh *mesh);
  * Used when defining an empty custom loop normals data layer,
  * to keep same shading as with auto-smooth!
  *
- * \param sharp_faces: Optional array used to mark specific faces as sharp.
+ * \param sharp_faces: Optional array used to mark specific faces for sharp 
shading.
  */
 void BKE_edges_sharp_from_angle_set(int numEdges,
 const struct MLoop *mloops,
@@ -596,7 +596,7 @@ void BKE_lnor_space_custom_normal_to_data(const 
MLoopNorSpace *lnor_space,
  * (splitting edges).
  *
  * \param loop_to_poly_map: Optional pre-created map from loops to their 
polygon.
- * \param sharp_faces: Optional array used to mark specific faces as sharp.
+ * \param sharp_faces: Optional array used to mark specific faces for sharp 
shading.
  * \param sharp_edges: Optional array of sharp edge tags, used to split the 
evaluated normals on
  * each side of the edge.
  */
diff --git a/source/blender/blenkernel/intern/fluid.cc 
b/source/blender/blenkernel/intern/fluid.cc
index 81e7840e91c..e467d3ef6c9 100644
--- a/source/blender/blenkernel/intern/fluid.cc
+++ b/source/blender/blenkernel/intern/fluid.cc
@@ -3246,6 +3246,10 @@ static Mesh *create_liquid_geometry(FluidDomainSettings 
*fds,
   mpolys = BKE_mesh_polys_for_write(me);
   mloops = BKE_mesh_loops_for_write(me);
 
+  const bool is_sharp = orgmesh->attributes().lookup_or_default(
+  "sharp_face", ATTR_DOMAIN_FACE, false)[0];
+  BKE_mesh_smooth_flag_set(me, !is_sharp);
+
   /* Get size (dimension) but considering scaling. */
   copy_v3_v3(cell_size_scaled, fds->cell_size);
   mul_v3_v3(cell_size_scaled, ob->scale);
diff --git a/source/blender/blenkernel/intern/mesh_convert.cc 
b/source/blender/blenkernel/intern/mesh_convert.cc
index 0d3cce58736..9ac2da547ca 100644
--- a/source/blender/blenkernel/intern/mesh_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_convert.cc
@@ -286,9 +286,7 @@ static Mesh *mesh_nurbs_displist_to_mesh(const Curve *cu, 
const ListBase *dispba
   }
 }
 
-if (!is_smooth) {
-  sharp_faces.span[dst_poly] = true;
-}
+sharp_faces.span[dst_poly] = !is_smooth;
 dst_poly++;
 dst_loop += 3;
 index += 3;
@@ -371,9 +369,7 @@ static Mesh *mesh_nurbs_displist_to_mesh(const Curve *cu, 
const ListBase *dispba
 }
   }
 
-  if (!is_smooth) {
-sharp_faces.span[dst_poly] = true;
-  }
+  sharp_faces.span[dst_poly] = !is_smoot

[Bf-blender-cvs] [a102b60d92e] refactor-mesh-sharp-face-generic: Merge branch 'master' into refactor-mesh-sharp-face-generic

2023-01-22 Thread Hans Goudey
Commit: a102b60d92e85a02576a6d4c2eafaece4fa0ddd8
Author: Hans Goudey
Date:   Sat Jan 21 15:52:35 2023 -0600
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rBa102b60d92e85a02576a6d4c2eafaece4fa0ddd8

Merge branch 'master' into refactor-mesh-sharp-face-generic

===



===

diff --cc source/blender/blenkernel/intern/key.cc
index 3f17416e1e6,7d835c2464d..bb8375d0cd4
--- a/source/blender/blenkernel/intern/key.cc
+++ b/source/blender/blenkernel/intern/key.cc
@@@ -2272,12 -2272,10 +2272,12 @@@ void BKE_keyblock_mesh_calc_normals(con
vert_normals);
}
if (loop_normals_needed) {
- short(*clnors)[2] = static_cast(
- CustomData_get_layer(&mesh->ldata, CD_CUSTOMLOOPNORMAL)); /* May be 
nullptr. */
+ short(*clnors)[2] = 
static_cast(CustomData_get_layer_for_write(
+ &mesh->ldata, CD_CUSTOMLOOPNORMAL, mesh->totloop)); /* May be 
nullptr. */
  const bool *sharp_edges = static_cast(
  CustomData_get_layer_named(&mesh->edata, CD_PROP_BOOL, "sharp_edge"));
 +const bool *sharp_faces = static_cast(
 +CustomData_get_layer_named(&mesh->pdata, CD_PROP_BOOL, "sharp_face"));
  BKE_mesh_normals_loop_split(positions,
  vert_normals,
  mesh->totvert,
diff --cc source/blender/blenkernel/intern/mesh.cc
index c1f9bba7659,71275444028..9de9d829562
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@@ -1841,11 -1843,11 +1845,12 @@@ void BKE_mesh_calc_normals_split_ex(Mes
const float split_angle = (mesh->flag & ME_AUTOSMOOTH) != 0 ? 
mesh->smoothresh : float(M_PI);
  
/* may be nullptr */
-   short(*clnors)[2] = (short(*)[2])CustomData_get_layer(&mesh->ldata, 
CD_CUSTOMLOOPNORMAL);
+   short(*clnors)[2] = (short(*)[2])CustomData_get_layer_for_write(
+   &mesh->ldata, CD_CUSTOMLOOPNORMAL, mesh->totloop);
const bool *sharp_edges = static_cast(
CustomData_get_layer_named(&mesh->edata, CD_PROP_BOOL, "sharp_edge"));
 -
 +  const bool *sharp_faces = static_cast(
 +  CustomData_get_layer_named(&mesh->pdata, CD_PROP_BOOL, "sharp_face"));
const Span positions = mesh->vert_positions();
const Span edges = mesh->edges();
const Span polys = mesh->polys();
diff --cc source/blender/blenkernel/intern/subdiv_ccg_material.cc
index d10b162f426,23f5371b504..424a11f0941
--- a/source/blender/blenkernel/intern/subdiv_ccg_material.cc
+++ b/source/blender/blenkernel/intern/subdiv_ccg_material.cc
@@@ -13,11 -13,11 +13,11 @@@
  #include "DNA_mesh_types.h"
  #include "DNA_meshdata_types.h"
  
- typedef struct CCGMaterialFromMeshData {
+ struct CCGMaterialFromMeshData {
const Mesh *mesh;
 -  const MPoly *polys;
 +  const bool *sharp_faces;
const int *material_indices;
- } CCGMaterialFromMeshData;
+ };
  
  static DMFlagMat subdiv_ccg_material_flags_eval(
  SubdivCCGMaterialFlagsEvaluator *material_flags_evaluator, const int 
coarse_face_index)
diff --cc source/blender/blenkernel/intern/subsurf_ccg.cc
index ad4d902fb41,a3c634bff89..a4e043556b4
--- a/source/blender/blenkernel/intern/subsurf_ccg.cc
+++ b/source/blender/blenkernel/intern/subsurf_ccg.cc
@@@ -1594,15 -1568,15 +1565,18 @@@ static void set_ccgdm_all_geometry(CCGD
  
medge = dm->getEdgeArray(dm);
  
-   const int *material_indices = CustomData_get_layer_named(
-   &dm->polyData, CD_MPOLY, "material_index");
-   const bool *sharp_faces = CustomData_get_layer_named(&dm->polyData, 
CD_PROP_BOOL, "sharp_face");
-   const int *base_polyOrigIndex = CustomData_get_layer(&dm->polyData, 
CD_ORIGINDEX);
+   const MPoly *mpoly = static_cast(CustomData_get_layer(&dm->polyData, CD_MPOLY));
+   const int *material_indices = static_cast(
+   CustomData_get_layer_named(&dm->polyData, CD_MPOLY, "material_index"));
++  const bool *sharp_faces = static_cast(
++  CustomData_get_layer_named(&dm->polyData, CD_PROP_BOOL, "sharp_face"));
 +
-   int *vertOrigIndex = DM_get_vert_data_layer(&ccgdm->dm, CD_ORIGINDEX);
-   int *edgeOrigIndex = DM_get_edge_data_layer(&ccgdm->dm, CD_ORIGINDEX);
+   const int *base_polyOrigIndex = static_cast(
+   CustomData_get_layer(&dm->polyData, CD_ORIGINDEX));
  
-   int *polyOrigIndex = DM_get_poly_data_layer(&ccgdm->dm, CD_ORIGINDEX);
+   int *vertOrigIndex = static_cast(DM_get_vert_data_layer(&ccgdm->dm, 
CD_ORIGINDEX));
+   int *edgeOrigIndex = static_cast(DM_get_edge_data_layer(&ccgdm->dm, 
CD_ORIGINDEX));
+   int *polyOrigIndex = static_cast(DM_get_poly_data_layer(&ccgdm-&g

[Bf-blender-cvs] [4ed7b4338da] refactor-mesh-sharp-face-generic: Fix build errors after merge

2023-01-22 Thread Hans Goudey
Commit: 4ed7b4338da93fe594cec04dd7740c91f1f8dee5
Author: Hans Goudey
Date:   Sat Jan 21 16:06:07 2023 -0600
Branches: refactor-mesh-sharp-face-generic
https://developer.blender.org/rB4ed7b4338da93fe594cec04dd7740c91f1f8dee5

Fix build errors after merge

===

M   source/blender/blenkernel/intern/curve_to_mesh_convert.cc
M   source/blender/blenkernel/intern/data_transfer.cc
M   source/blender/blenkernel/intern/mesh_legacy_convert.cc
M   source/blender/blenkernel/intern/subsurf_ccg.cc
M   source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc
M   source/blender/makesrna/intern/rna_mesh.c

===

diff --git a/source/blender/blenkernel/intern/curve_to_mesh_convert.cc 
b/source/blender/blenkernel/intern/curve_to_mesh_convert.cc
index 390f047c838..40eacdca168 100644
--- a/source/blender/blenkernel/intern/curve_to_mesh_convert.cc
+++ b/source/blender/blenkernel/intern/curve_to_mesh_convert.cc
@@ -738,8 +738,6 @@ Mesh *curve_to_mesh_sweep(const CurvesGeometry &main,
 positions.slice(info.vert_range));
   });
 
-  MutableAttributeAccessor mesh_attributes = mesh->attributes_for_write();
-
   SpanAttributeWriter sharp_edges;
   write_sharp_bezier_edges(curves_info, offsets, mesh_attributes, sharp_edges);
   if (fill_caps) {
diff --git a/source/blender/blenkernel/intern/data_transfer.cc 
b/source/blender/blenkernel/intern/data_transfer.cc
index cb9e82c7f62..6e8dbb4919c 100644
--- a/source/blender/blenkernel/intern/data_transfer.cc
+++ b/source/blender/blenkernel/intern/data_transfer.cc
@@ -1043,7 +1043,8 @@ static bool data_transfer_layersmapping_generate(ListBase 
*r_map,
   mix_factor,
   mix_weights,
   CustomData_get_layer_named(&me_src->pdata, CD_PROP_BOOL, 
"sharp_face"),
-  CustomData_get_layer_named(&me_dst->pdata, CD_PROP_BOOL, 
"sharp_face"),
+  CustomData_get_layer_named_for_write(
+  &me_dst->pdata, CD_PROP_BOOL, "sharp_face", num_elem_dst),
   interp,
   interp_data);
   return true;
diff --git a/source/blender/blenkernel/intern/mesh_legacy_convert.cc 
b/source/blender/blenkernel/intern/mesh_legacy_convert.cc
index a404820c283..0e97b334aec 100644
--- a/source/blender/blenkernel/intern/mesh_legacy_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_legacy_convert.cc
@@ -454,7 +454,7 @@ static void convert_mfaces_to_mpolys(ID *id,
 pdata, CD_PROP_INT32, CD_SET_DEFAULT, nullptr, totpoly, 
"material_index"));
   }
   bool *sharp_faces = static_cast(
-  CustomData_get_layer_named(pdata, CD_PROP_BOOL, "sharp_face"));
+  CustomData_get_layer_named_for_write(pdata, CD_PROP_BOOL, "sharp_face", 
totpoly));
   if (!sharp_faces) {
 sharp_faces = static_cast(CustomData_add_layer_named(
 pdata, CD_PROP_BOOL, CD_SET_DEFAULT, nullptr, totpoly, "sharp_face"));
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.cc 
b/source/blender/blenkernel/intern/subsurf_ccg.cc
index a4e043556b4..3e91b7e962e 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.cc
+++ b/source/blender/blenkernel/intern/subsurf_ccg.cc
@@ -1565,7 +1565,6 @@ static void set_ccgdm_all_geometry(CCGDerivedMesh *ccgdm,
 
   medge = dm->getEdgeArray(dm);
 
-  const MPoly *mpoly = static_cast(CustomData_get_layer(&dm->polyData, CD_MPOLY));
   const int *material_indices = static_cast(
   CustomData_get_layer_named(&dm->polyData, CD_MPOLY, "material_index"));
   const bool *sharp_faces = static_cast(
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc 
b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc
index c191a079c8a..2e79450710c 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc
@@ -2073,7 +2073,6 @@ static void 
lineart_geometry_object_load(LineartObjectInfo *ob_info,
   edge_feat_settings.userdata_chunk_size = sizeof(EdgeFeatReduceData);
   edge_feat_settings.func_reduce = feat_data_sum_reduce;
 
-  const bke::AttributeAccessor attributes = me->attributes();
   const VArray sharp_edges = attributes.lookup_or_default(
   "sharp_edge", ATTR_DOMAIN_EDGE, false);
 
diff --git a/source/blender/makesrna/intern/rna_mesh.c 
b/source/blender/makesrna/intern/rna_mesh.c
index f0f9fc9f9bf..c4baf1104e6 100644
--- a/source/blender/makesrna/intern/rna_mesh.c
+++ b/source/blender/makesrna/intern/rna_mesh.c
@@ -671,7 +671,7 @@ static bool rna_MeshPolygon_use_smooth_get(PointerRNA *ptr)
 static void rna_MeshPolygon_use_smooth_set(PointerRNA *ptr, bool value)
 {
   Mesh *mesh = rna_mesh(ptr);
-  bool *sharp_faces = (bool *)CustomData_duplicate_referenced_layer_named(
+  bool *sharp_faces = (bool *)Cu

[Bf-blender-cvs] [f2bb044fdba] master: Cleanup: Move six mesh-related files to C++

2023-01-21 Thread Hans Goudey
Commit: f2bb044fdba43139c26d3ce2de41965af1dfab0f
Author: Hans Goudey
Date:   Sat Jan 21 15:44:58 2023 -0600
Branches: master
https://developer.blender.org/rBf2bb044fdba43139c26d3ce2de41965af1dfab0f

Cleanup: Move six mesh-related files to C++

For continued refactoring of the Mesh data structure. See T103343.

===

M   source/blender/blenkernel/CMakeLists.txt
R088source/blender/blenkernel/intern/deform.c   
source/blender/blenkernel/intern/deform.cc
M   source/blender/editors/object/CMakeLists.txt
R088source/blender/editors/object/object_bake.c 
source/blender/editors/object/object_bake.cc
R090source/blender/editors/object/object_bake_api.c 
source/blender/editors/object/object_bake_api.cc
M   source/blender/editors/space_view3d/CMakeLists.txt
R078source/blender/editors/space_view3d/drawobject.c
source/blender/editors/space_view3d/drawobject.cc
M   source/blender/editors/uvedit/CMakeLists.txt
R086source/blender/editors/uvedit/uvedit_unwrap_ops.c   
source/blender/editors/uvedit/uvedit_unwrap_ops.cc

===

diff --git a/source/blender/blenkernel/CMakeLists.txt 
b/source/blender/blenkernel/CMakeLists.txt
index 8a714d8d911..8d6fe6c3cf7 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -119,7 +119,7 @@ set(SRC
   intern/customdata.cc
   intern/customdata_file.c
   intern/data_transfer.cc
-  intern/deform.c
+  intern/deform.cc
   intern/displist.cc
   intern/dynamicpaint.cc
   intern/editlattice.c
diff --git a/source/blender/blenkernel/intern/deform.c 
b/source/blender/blenkernel/intern/deform.cc
similarity index 88%
rename from source/blender/blenkernel/intern/deform.c
rename to source/blender/blenkernel/intern/deform.cc
index 8bc98270054..a01c6d724a4 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.cc
@@ -5,11 +5,11 @@
  * \ingroup bke
  */
 
-#include 
-#include 
-#include 
-#include 
-#include 
+#include 
+#include 
+#include 
+#include 
+#include 
 
 #include "MEM_guardedalloc.h"
 
@@ -46,7 +46,7 @@ bDeformGroup *BKE_object_defgroup_new(Object *ob, const char 
*name)
 
   BLI_assert(OB_TYPE_SUPPORT_VGROUP(ob->type));
 
-  defgroup = MEM_callocN(sizeof(bDeformGroup), __func__);
+  defgroup = MEM_cnew(__func__);
 
   BLI_strncpy(defgroup->name, name, sizeof(defgroup->name));
 
@@ -62,31 +62,26 @@ bDeformGroup *BKE_object_defgroup_new(Object *ob, const 
char *name)
 
 void BKE_defgroup_copy_list(ListBase *outbase, const ListBase *inbase)
 {
-  bDeformGroup *defgroup, *defgroupn;
-
   BLI_listbase_clear(outbase);
-
-  for (defgroup = inbase->first; defgroup; defgroup = defgroup->next) {
-defgroupn = BKE_defgroup_duplicate(defgroup);
+  LISTBASE_FOREACH (const bDeformGroup *, defgroup, inbase) {
+bDeformGroup *defgroupn = BKE_defgroup_duplicate(defgroup);
 BLI_addtail(outbase, defgroupn);
   }
 }
 
 bDeformGroup *BKE_defgroup_duplicate(const bDeformGroup *ingroup)
 {
-  bDeformGroup *outgroup;
-
   if (!ingroup) {
 BLI_assert(0);
-return NULL;
+return nullptr;
   }
 
-  outgroup = MEM_callocN(sizeof(bDeformGroup), "copy deformGroup");
+  bDeformGroup *outgroup = MEM_cnew(__func__);
 
   /* For now, just copy everything over. */
   memcpy(outgroup, ingroup, sizeof(bDeformGroup));
 
-  outgroup->next = outgroup->prev = NULL;
+  outgroup->next = outgroup->prev = nullptr;
 
   return outgroup;
 }
@@ -132,10 +127,10 @@ void BKE_defvert_copy(MDeformVert *dvert_dst, const 
MDeformVert *dvert_src)
 }
 
 if (dvert_src->totweight) {
-  dvert_dst->dw = MEM_dupallocN(dvert_src->dw);
+  dvert_dst->dw = static_cast(MEM_dupallocN(dvert_src->dw));
 }
 else {
-  dvert_dst->dw = NULL;
+  dvert_dst->dw = nullptr;
 }
 
 dvert_dst->totweight = dvert_src->totweight;
@@ -157,7 +152,7 @@ void BKE_defvert_copy_index(MDeformVert *dvert_dst,
 dw_dst->weight = dw_src->weight;
   }
   else {
-/* Source was NULL, assign zero (could also remove). */
+/* Source was nullptr, assign zero (could also remove). */
 dw_dst = BKE_defvert_find_index(dvert_dst, defgroup_dst);
 
 if (dw_dst) {
@@ -307,7 +302,7 @@ void BKE_defvert_normalize_lock_single(MDeformVert *dvert,
 }
   }
   else {
-MDeformWeight *dw_lock = NULL;
+MDeformWeight *dw_lock = nullptr;
 MDeformWeight *dw;
 uint i;
 float tot_weight = 0.0f;
@@ -423,7 +418,7 @@ void BKE_defvert_flip_merged(MDeformVert *dvert, const int 
*flip_map, const int
   for (dw = dvert->dw, i = 0; i < totweight; dw++, i++) {
 if (dw->def_nr < flip_map_num) {
   if (flip_map[dw->def_nr] >= 0) {
-/* error checkers complain of this but we'll never get NULL return */
+/* error checkers complain of th

[Bf-blender-cvs] [3d6fd2906be] master: Cleanup: Move versioning_290.c to C++

2023-01-21 Thread Hans Goudey
Commit: 3d6fd2906be0adac2f42528f55a53e0cac1d5896
Author: Hans Goudey
Date:   Sat Jan 21 15:30:16 2023 -0600
Branches: master
https://developer.blender.org/rB3d6fd2906be0adac2f42528f55a53e0cac1d5896

Cleanup: Move versioning_290.c to C++

Ref T103343

===

M   source/blender/blenloader/CMakeLists.txt
R090source/blender/blenloader/intern/versioning_290.c   
source/blender/blenloader/intern/versioning_290.cc
M   source/blender/blenloader/intern/versioning_common.cc

===

diff --git a/source/blender/blenloader/CMakeLists.txt 
b/source/blender/blenloader/CMakeLists.txt
index a7e99e7df2e..c660360bde7 100644
--- a/source/blender/blenloader/CMakeLists.txt
+++ b/source/blender/blenloader/CMakeLists.txt
@@ -43,7 +43,7 @@ set(SRC
   intern/versioning_260.c
   intern/versioning_270.c
   intern/versioning_280.c
-  intern/versioning_290.c
+  intern/versioning_290.cc
   intern/versioning_300.cc
   intern/versioning_400.cc
   intern/versioning_common.cc
diff --git a/source/blender/blenloader/intern/versioning_290.c 
b/source/blender/blenloader/intern/versioning_290.cc
similarity index 90%
rename from source/blender/blenloader/intern/versioning_290.c
rename to source/blender/blenloader/intern/versioning_290.cc
index 10f72f22b8e..9c968e905cf 100644
--- a/source/blender/blenloader/intern/versioning_290.c
+++ b/source/blender/blenloader/intern/versioning_290.cc
@@ -6,7 +6,6 @@
 /* allow readfile to use deprecated functionality */
 #define DNA_DEPRECATED_ALLOW
 
-#include "BLI_alloca.h"
 #include "BLI_listbase.h"
 #include "BLI_math.h"
 #include "BLI_string.h"
@@ -73,16 +72,16 @@
 
 static eSpaceSeq_Proxy_RenderSize get_sequencer_render_size(Main *bmain)
 {
-  eSpaceSeq_Proxy_RenderSize render_size = 100;
+  eSpaceSeq_Proxy_RenderSize render_size = eSpaceSeq_Proxy_RenderSize(100);
 
-  for (bScreen *screen = bmain->screens.first; screen; screen = 
screen->id.next) {
+  LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) {
 LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
   LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
 switch (sl->spacetype) {
   case SPACE_SEQ: {
 SpaceSeq *sseq = (SpaceSeq *)sl;
 if (sseq->mainb == SEQ_DRAW_IMG_IMBUF) {
-  render_size = sseq->render_size;
+  render_size = eSpaceSeq_Proxy_RenderSize(sseq->render_size);
   break;
 }
   }
@@ -96,7 +95,7 @@ static eSpaceSeq_Proxy_RenderSize 
get_sequencer_render_size(Main *bmain)
 
 static bool can_use_proxy(const Sequence *seq, int psize)
 {
-  if (seq->strip->proxy == NULL) {
+  if (seq->strip->proxy == nullptr) {
 return false;
   }
   short size_flags = seq->strip->proxy->build_size_flags;
@@ -110,7 +109,7 @@ static void seq_convert_transform_animation(const Sequence 
*seq,
 const int image_size,
 const int scene_size)
 {
-  if (scene->adt == NULL || scene->adt->action == NULL) {
+  if (scene->adt == nullptr || scene->adt->action == nullptr) {
 return;
   }
 
@@ -121,7 +120,7 @@ static void seq_convert_transform_animation(const Sequence 
*seq,
   /* Convert offset animation, but only if crop is not used. */
   if ((seq->flag & use_transform_flag) != 0 && (seq->flag & use_crop_flag) == 
0) {
 FCurve *fcu = BKE_fcurve_find(&scene->adt->action->curves, path, 0);
-if (fcu != NULL && !BKE_fcurve_is_empty(fcu)) {
+if (fcu != nullptr && !BKE_fcurve_is_empty(fcu)) {
   BezTriple *bezt = fcu->bezt;
   for (int i = 0; i < fcu->totvert; i++, bezt++) {
 /* Same math as with old_image_center_*, but simplified. */
@@ -142,11 +141,11 @@ static void seq_convert_transform_crop(const Scene *scene,
Sequence *seq,
const eSpaceSeq_Proxy_RenderSize 
render_size)
 {
-  if (seq->strip->transform == NULL) {
-seq->strip->transform = MEM_callocN(sizeof(struct StripTransform), 
"StripTransform");
+  if (seq->strip->transform == nullptr) {
+seq->strip->transform = MEM_cnew(__func__);
   }
-  if (seq->strip->crop == NULL) {
-seq->strip->crop = MEM_callocN(sizeof(struct StripCrop), "StripCrop");
+  if (seq->strip->crop == nullptr) {
+seq->strip->crop = MEM_cnew(__func__);
   }
 
   StripCrop *c = seq->strip->crop;
@@ -161,7 +160,7 @@ static void seq_convert_transform_crop(const Scene *scene,
   const uint32_t use_crop_flag = (1 << 17);
 
   const StripElem *s_elem = seq->strip->stripdata;
-  if (s_elem != NULL) {
+  if (s_elem != nullptr) {

[Bf-blender-cvs] [0b17d171d77] master: Cleanup: Move three modifier related files to C++

2023-01-21 Thread Hans Goudey
Commit: 0b17d171d77d5b3bcf5fc1a95fc57f89385dbf20
Author: Hans Goudey
Date:   Sat Jan 21 12:13:34 2023 -0600
Branches: master
https://developer.blender.org/rB0b17d171d77d5b3bcf5fc1a95fc57f89385dbf20

Cleanup: Move three modifier related files to C++

For continued refactoring of the Mesh data structure. See T103343.

===

M   source/blender/blenkernel/CMakeLists.txt
R090source/blender/blenkernel/intern/cdderivedmesh.c
source/blender/blenkernel/intern/cdderivedmesh.cc
R088source/blender/blenkernel/intern/dynamicpaint.c 
source/blender/blenkernel/intern/dynamicpaint.cc
R095source/blender/blenkernel/intern/fluid.c
source/blender/blenkernel/intern/fluid.cc
M   source/blender/editors/armature/CMakeLists.txt
R091source/blender/editors/armature/meshlaplacian.c 
source/blender/editors/armature/meshlaplacian.cc
M   source/blender/editors/armature/meshlaplacian.h
M   source/blender/editors/include/ED_armature.h
M   source/blender/editors/physics/physics_intern.h

===

diff --git a/source/blender/blenkernel/CMakeLists.txt 
b/source/blender/blenkernel/CMakeLists.txt
index bfef13649e3..8a714d8d911 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -89,7 +89,7 @@ set(SRC
   intern/cachefile.c
   intern/callbacks.c
   intern/camera.c
-  intern/cdderivedmesh.c
+  intern/cdderivedmesh.cc
   intern/cloth.cc
   intern/collection.c
   intern/collision.c
@@ -121,7 +121,7 @@ set(SRC
   intern/data_transfer.cc
   intern/deform.c
   intern/displist.cc
-  intern/dynamicpaint.c
+  intern/dynamicpaint.cc
   intern/editlattice.c
   intern/editmesh.cc
   intern/editmesh_bvh.c
@@ -131,7 +131,7 @@ set(SRC
   intern/fcurve.c
   intern/fcurve_cache.c
   intern/fcurve_driver.c
-  intern/fluid.c
+  intern/fluid.cc
   intern/fmodifier.c
   intern/freestyle.c
   intern/geometry_component_curves.cc
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c 
b/source/blender/blenkernel/intern/cdderivedmesh.cc
similarity index 90%
rename from source/blender/blenkernel/intern/cdderivedmesh.c
rename to source/blender/blenkernel/intern/cdderivedmesh.cc
index a5d179fb2cb..9cf5f7ecedf 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.cc
@@ -7,6 +7,10 @@
  * BKE_cdderivedmesh.h contains the function prototypes for this file.
  */
 
+#include 
+#include 
+#include 
+
 #include "atomic_ops.h"
 
 #include "BLI_math.h"
@@ -29,11 +33,7 @@
 
 #include "MEM_guardedalloc.h"
 
-#include 
-#include 
-#include 
-
-typedef struct {
+struct CDDerivedMesh {
   DerivedMesh dm;
 
   /* these point to data in the DerivedMesh custom data layers,
@@ -52,7 +52,7 @@ typedef struct {
   /* Mesh connectivity */
   MeshElemMap *pmap;
   int *pmap_mem;
-} CDDerivedMesh;
+};
 
 / DerivedMesh interface functions /
 static int cdDM_getNumVerts(DerivedMesh *dm)
@@ -157,11 +157,8 @@ static void cdDM_release(DerivedMesh *dm)
 / CDDM interface functions /
 static CDDerivedMesh *cdDM_create(const char *desc)
 {
-  CDDerivedMesh *cddm;
-  DerivedMesh *dm;
-
-  cddm = MEM_callocN(sizeof(*cddm), desc);
-  dm = &cddm->dm;
+  CDDerivedMesh *cddm = MEM_cnew(desc);
+  DerivedMesh *dm = &cddm->dm;
 
   dm->getNumVerts = cdDM_getNumVerts;
   dm->getNumEdges = cdDM_getNumEdges;
@@ -221,14 +218,17 @@ static DerivedMesh *cdDM_from_mesh_ex(Mesh *mesh,
   CustomData_merge(&mesh->ldata, &dm->loopData, cddata_masks.lmask, alloctype, 
mesh->totloop);
   CustomData_merge(&mesh->pdata, &dm->polyData, cddata_masks.pmask, alloctype, 
mesh->totpoly);
 
-  cddm->vert_positions = CustomData_get_layer_named_for_write(
-  &dm->vertData, CD_PROP_FLOAT3, "position", mesh->totvert);
+  cddm->vert_positions = 
static_cast(CustomData_get_layer_named_for_write(
+  &dm->vertData, CD_PROP_FLOAT3, "position", mesh->totvert));
   /* Though this may be an unnecessary calculation, simply retrieving the 
layer may return nothing
* or dirty normals. */
   cddm->vert_normals = BKE_mesh_vertex_normals_ensure(mesh);
-  cddm->medge = CustomData_get_layer_for_write(&dm->edgeData, CD_MEDGE, 
mesh->totedge);
-  cddm->mloop = CustomData_get_layer_for_write(&dm->loopData, CD_MLOOP, 
mesh->totloop);
-  cddm->mpoly = CustomData_get_layer_for_write(&dm->polyData, CD_MPOLY, 
mesh->totpoly);
+  cddm->medge = static_cast(
+  CustomData_get_layer_for_write(&dm->edgeData, CD_MEDGE, mesh->totedge));
+  cddm->mloop = static_cast(
+  CustomData_get_layer_for_write(&dm->loopData, CD_MLOOP, mesh->totloop));
+  cddm->mpoly = static_cast(
+  CustomData_get_layer

[Bf-blender-cvs] [2ea47e0def6] master: Geometry Nodes: Use checkbox for exposed boolean sockets

2023-01-20 Thread Hans Goudey
Commit: 2ea47e0def6a1d572879cdfcc1af66f926a1e5cf
Author: Hans Goudey
Date:   Fri Jan 20 17:36:07 2023 -0600
Branches: master
https://developer.blender.org/rB2ea47e0def6a1d572879cdfcc1af66f926a1e5cf

Geometry Nodes: Use checkbox for exposed boolean sockets

This uses the changes from ef68a37e5d55e17adf4c to create IDProperties
for exposed boolean sockets with a boolean type instead of an integer
with a [0,1] range. Existing properties and values are converted
automatically.

For forward compatibility, the properties are switched to the integer
type for saving. Otherwise older versions crash immediately when opening
a newer file. The "Use Attribute" IDProperties aren't changed here,
since that wouldn't have a visible benefit.

Differential Revision: https://developer.blender.org/D12816

===

M   source/blender/blenkernel/BKE_idprop.hh
M   source/blender/blenkernel/intern/idprop_create.cc
M   source/blender/modifiers/intern/MOD_nodes.cc

===

diff --git a/source/blender/blenkernel/BKE_idprop.hh 
b/source/blender/blenkernel/BKE_idprop.hh
index ce11a56ad5f..10110517402 100644
--- a/source/blender/blenkernel/BKE_idprop.hh
+++ b/source/blender/blenkernel/BKE_idprop.hh
@@ -32,6 +32,9 @@ class IDPropertyDeleter {
   }
 };
 
+/** \brief Allocate a new IDProperty of type IDP_BOOLEAN, set its name and 
value. */
+std::unique_ptr create_bool(StringRefNull 
prop_name, bool value);
+
 /** \brief Allocate a new IDProperty of type IDP_INT, set its name and value. 
*/
 std::unique_ptr create(StringRefNull prop_name, 
int32_t value);
 
diff --git a/source/blender/blenkernel/intern/idprop_create.cc 
b/source/blender/blenkernel/intern/idprop_create.cc
index 8a6e5cdcc50..cac4f736c69 100644
--- a/source/blender/blenkernel/intern/idprop_create.cc
+++ b/source/blender/blenkernel/intern/idprop_create.cc
@@ -21,6 +21,15 @@ std::unique_ptr create(const 
StringRefNull prop_n
   return std::unique_ptr(property);
 }
 
+std::unique_ptr create_bool(const StringRefNull 
prop_name,
+   bool value)
+{
+  IDPropertyTemplate prop_template{0};
+  prop_template.i = value;
+  IDProperty *property = IDP_New(IDP_BOOLEAN, &prop_template, 
prop_name.c_str());
+  return std::unique_ptr(property);
+}
+
 std::unique_ptr create(const StringRefNull 
prop_name, float value)
 {
   IDPropertyTemplate prop_template{0};
diff --git a/source/blender/modifiers/intern/MOD_nodes.cc 
b/source/blender/modifiers/intern/MOD_nodes.cc
index 1261cf56b26..9c63ee7ce15 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -496,10 +496,8 @@ id_property_create_from_socket(const bNodeSocket &socket)
 case SOCK_BOOLEAN: {
   const bNodeSocketValueBoolean *value = static_cast(
   socket.default_value);
-  auto property = bke::idprop::create(socket.identifier, 
int(value->value));
-  IDPropertyUIDataInt *ui_data = (IDPropertyUIDataInt 
*)IDP_ui_data_ensure(property.get());
-  ui_data->min = ui_data->soft_min = 0;
-  ui_data->max = ui_data->soft_max = 1;
+  auto property = bke::idprop::create_bool(socket.identifier, 
value->value);
+  IDPropertyUIDataBool *ui_data = (IDPropertyUIDataBool 
*)IDP_ui_data_ensure(property.get());
   ui_data->default_value = value->value != 0;
   return property;
 }
@@ -553,7 +551,7 @@ static bool id_property_type_matches_socket(const 
bNodeSocket &socket, const IDP
 case SOCK_RGBA:
   return property.type == IDP_ARRAY && property.subtype == IDP_FLOAT && 
property.len == 4;
 case SOCK_BOOLEAN:
-  return property.type == IDP_INT;
+  return property.type == IDP_BOOLEAN;
 case SOCK_STRING:
   return property.type == IDP_STRING;
 case SOCK_OBJECT:
@@ -601,7 +599,7 @@ static void init_socket_cpp_value_from_property(const 
IDProperty &property,
   break;
 }
 case SOCK_BOOLEAN: {
-  bool value = IDP_Int(&property) != 0;
+  const bool value = IDP_Bool(&property);
   new (r_value) ValueOrField(value);
   break;
 }
@@ -682,16 +680,23 @@ void MOD_nodes_update_interface(Object *object, 
NodesModifierData *nmd)
 
 if (old_properties != nullptr) {
   IDProperty *old_prop = IDP_GetPropertyFromGroup(old_properties, 
socket->identifier);
-  if (old_prop != nullptr && id_property_type_matches_socket(*socket, 
*old_prop)) {
-/* #IDP_CopyPropertyContent replaces the UI data as well, which we 
don't (we only
- * want to replace the values). So release it temporarily and replace 
it after. */
-IDPropertyUIData *ui_data = new_prop->ui_data;
-new_prop->ui_data = nullptr;
-IDP_CopyPropertyContent(new_prop, old_prop);
-if (new_prop-&

[Bf-blender-cvs] [453724894ea] master: Fix T103704: Particle hair doesn't fall back to active UV

2023-01-20 Thread Hans Goudey
Commit: 453724894ea5c0f02ffd90ff3a9508477259e73b
Author: Hans Goudey
Date:   Fri Jan 20 15:34:13 2023 -0600
Branches: master
https://developer.blender.org/rB453724894ea5c0f02ffd90ff3a9508477259e73b

Fix T103704: Particle hair doesn't fall back to active UV

Caused by 05952aa94d33eeb504fa, which removed the use of the
active tessface UV pointer on meshes but didn't replace it properly with
the equivalend custom data API function.

===

M   source/blender/blenkernel/intern/particle.cc

===

diff --git a/source/blender/blenkernel/intern/particle.cc 
b/source/blender/blenkernel/intern/particle.cc
index 99dfd7fe138..514accf098b 100644
--- a/source/blender/blenkernel/intern/particle.cc
+++ b/source/blender/blenkernel/intern/particle.cc
@@ -4216,7 +4216,9 @@ static int get_particle_uv(Mesh *mesh,
   int i;
 
   tf = static_cast(CustomData_get_layer_named(&mesh->fdata, 
CD_MTFACE, name));
-
+  if (tf == nullptr) {
+tf = static_cast(CustomData_get_layer(&mesh->fdata, 
CD_MTFACE));
+  }
   if (tf == nullptr) {
 return 0;
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [fc73e757793] refactor-mesh-corners-generic: Cleanup: Use C++ accessor functions

2023-01-20 Thread Hans Goudey
Commit: fc73e7577931b8879c2166ecce0fdebe5fb20829
Author: Hans Goudey
Date:   Fri Jan 20 13:01:00 2023 -0600
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rBfc73e7577931b8879c2166ecce0fdebe5fb20829

Cleanup: Use C++ accessor functions

===

M   source/blender/blenkernel/intern/multires_reshape_subdivide.cc
M   source/blender/blenkernel/intern/multires_reshape_util.cc
M   source/blender/blenkernel/intern/multires_unsubdivide.cc
M   source/blender/blenkernel/intern/subdiv_converter_mesh.cc
M   source/blender/blenkernel/intern/subdiv_eval.cc
M   source/blender/blenkernel/intern/subdiv_foreach.cc
M   source/blender/editors/sculpt_paint/paint_mask.cc
M   source/blender/editors/sculpt_paint/paint_vertex_weight_ops.cc
M   source/blender/editors/sculpt_paint/sculpt_expand.cc
M   source/blender/editors/sculpt_paint/sculpt_geodesic.cc

===

diff --git a/source/blender/blenkernel/intern/multires_reshape_subdivide.cc 
b/source/blender/blenkernel/intern/multires_reshape_subdivide.cc
index d502466e4d1..8ea6feedff6 100644
--- a/source/blender/blenkernel/intern/multires_reshape_subdivide.cc
+++ b/source/blender/blenkernel/intern/multires_reshape_subdivide.cc
@@ -30,7 +30,7 @@ static void 
multires_subdivide_create_object_space_linear_grids(Mesh *mesh)
 {
   const float(*positions)[3] = BKE_mesh_vert_positions(mesh);
   const MPoly *polys = BKE_mesh_polys(mesh);
-  const int *corner_verts = BKE_mesh_corner_verts(mesh);
+  const blender::Span corner_verts = mesh->corner_verts();
 
   MDisps *mdisps = static_cast(
   CustomData_get_layer_for_write(&mesh->ldata, CD_MDISPS, mesh->totloop));
diff --git a/source/blender/blenkernel/intern/multires_reshape_util.cc 
b/source/blender/blenkernel/intern/multires_reshape_util.cc
index 460446f52bf..0578d50db51 100644
--- a/source/blender/blenkernel/intern/multires_reshape_util.cc
+++ b/source/blender/blenkernel/intern/multires_reshape_util.cc
@@ -158,8 +158,8 @@ bool 
multires_reshape_context_create_from_base_mesh(MultiresReshapeContext *resh
   reshape_context->base_positions = BKE_mesh_vert_positions(base_mesh);
   reshape_context->base_edges = BKE_mesh_edges(base_mesh);
   reshape_context->base_polys = BKE_mesh_polys(base_mesh);
-  reshape_context->base_corner_verts = BKE_mesh_corner_verts(base_mesh);
-  reshape_context->base_corner_edges = BKE_mesh_corner_edges(base_mesh);
+  reshape_context->base_corner_verts = base_mesh->corner_verts().data();
+  reshape_context->base_corner_edges = base_mesh->corner_edges().data();
 
   reshape_context->subdiv = multires_reshape_create_subdiv(nullptr, object, 
mmd);
   reshape_context->need_free_subdiv = true;
@@ -196,8 +196,8 @@ bool 
multires_reshape_context_create_from_object(MultiresReshapeContext *reshape
   reshape_context->base_positions = BKE_mesh_vert_positions(base_mesh);
   reshape_context->base_edges = BKE_mesh_edges(base_mesh);
   reshape_context->base_polys = BKE_mesh_polys(base_mesh);
-  reshape_context->base_corner_verts = BKE_mesh_corner_verts(base_mesh);
-  reshape_context->base_corner_edges = BKE_mesh_corner_edges(base_mesh);
+  reshape_context->base_corner_verts = base_mesh->corner_verts().data();
+  reshape_context->base_corner_edges = base_mesh->corner_edges().data();
 
   reshape_context->subdiv = multires_reshape_create_subdiv(depsgraph, object, 
mmd);
   reshape_context->need_free_subdiv = true;
@@ -231,8 +231,8 @@ bool 
multires_reshape_context_create_from_ccg(MultiresReshapeContext *reshape_co
   reshape_context->base_positions = BKE_mesh_vert_positions(base_mesh);
   reshape_context->base_edges = BKE_mesh_edges(base_mesh);
   reshape_context->base_polys = BKE_mesh_polys(base_mesh);
-  reshape_context->base_corner_verts = BKE_mesh_corner_verts(base_mesh);
-  reshape_context->base_corner_edges = BKE_mesh_corner_edges(base_mesh);
+  reshape_context->base_corner_verts = base_mesh->corner_verts().data();
+  reshape_context->base_corner_edges = base_mesh->corner_edges().data();
 
   reshape_context->subdiv = subdiv_ccg->subdiv;
   reshape_context->need_free_subdiv = false;
@@ -279,8 +279,8 @@ bool 
multires_reshape_context_create_from_subdiv(MultiresReshapeContext *reshape
   reshape_context->base_positions = BKE_mesh_vert_positions(base_mesh);
   reshape_context->base_edges = BKE_mesh_edges(base_mesh);
   reshape_context->base_polys = BKE_mesh_polys(base_mesh);
-  reshape_context->base_corner_verts = BKE_mesh_corner_verts(base_mesh);
-  reshape_context->base_corner_edges = BKE_mesh_corner_edges(base_mesh);
+  reshape_context->base_corner_verts = base_mesh->corner_verts().data();
+  reshape_context->base_corner_edges = base_mesh->corner_edges().data();
   reshape_context->cd_vertex_creas

[Bf-blender-cvs] [7172a11018d] refactor-mesh-corners-generic: Merge branch 'master' into refactor-mesh-corners-generic

2023-01-20 Thread Hans Goudey
Commit: 7172a11018d17886b0a715a0f5641903867f755e
Author: Hans Goudey
Date:   Fri Jan 20 12:49:31 2023 -0600
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rB7172a11018d17886b0a715a0f5641903867f755e

Merge branch 'master' into refactor-mesh-corners-generic

===



===

diff --cc source/blender/blenkernel/intern/multires_reshape_apply_base.cc
index f4add2491bf,d491f30a1ad..8f7ca2142b4
--- a/source/blender/blenkernel/intern/multires_reshape_apply_base.cc
+++ b/source/blender/blenkernel/intern/multires_reshape_apply_base.cc
@@@ -119,13 -120,15 +118,14 @@@ void multires_reshape_apply_base_refit_
/* Set up poly, loops, and coords in order to call 
BKE_mesh_calc_poly_normal(). */
fake_poly.totloop = p->totloop;
fake_poly.loopstart = 0;
-   int *poly_verts = MEM_malloc_arrayN(p->totloop, sizeof(int), __func__);
-   fake_co = MEM_malloc_arrayN(p->totloop, sizeof(float[3]), "fake_co");
 -  MLoop *fake_loops = static_cast(
 -  MEM_malloc_arrayN(p->totloop, sizeof(MLoop), __func__));
++  int *poly_verts = static_cast(MEM_malloc_arrayN(p->totloop, 
sizeof(int), __func__));
+   float(*fake_co)[3] = static_cast(
+   MEM_malloc_arrayN(p->totloop, sizeof(float[3]), __func__));
  
for (int k = 0; k < p->totloop; k++) {
 -const int vndx = reshape_context->base_loops[p->loopstart + k].v;
 +const int vndx = reshape_context->base_corner_verts[p->loopstart + k];
  
 -fake_loops[k].v = k;
 +poly_verts[k] = k;
  
  if (vndx == i) {
copy_v3_v3(fake_co[k], center);
diff --cc source/blender/blenkernel/intern/multires_reshape_subdivide.cc
index 2b72103a31c,c65b78cb160..d502466e4d1
--- a/source/blender/blenkernel/intern/multires_reshape_subdivide.cc
+++ b/source/blender/blenkernel/intern/multires_reshape_subdivide.cc
@@@ -30,9 -30,10 +30,10 @@@ static void multires_subdivide_create_o
  {
const float(*positions)[3] = BKE_mesh_vert_positions(mesh);
const MPoly *polys = BKE_mesh_polys(mesh);
 -  const MLoop *loops = BKE_mesh_loops(mesh);
 +  const int *corner_verts = BKE_mesh_corner_verts(mesh);
  
-   MDisps *mdisps = CustomData_get_layer_for_write(&mesh->ldata, CD_MDISPS, 
mesh->totloop);
+   MDisps *mdisps = static_cast(
+   CustomData_get_layer_for_write(&mesh->ldata, CD_MDISPS, mesh->totloop));
const int totpoly = mesh->totpoly;
for (int p = 0; p < totpoly; p++) {
  const MPoly *poly = &polys[p];
diff --cc source/blender/blenkernel/intern/multires_reshape_util.cc
index ce5bed1cecf,aa0fcbb7147..460446f52bf
--- a/source/blender/blenkernel/intern/multires_reshape_util.cc
+++ b/source/blender/blenkernel/intern/multires_reshape_util.cc
@@@ -157,10 -158,9 +158,10 @@@ bool multires_reshape_context_create_fr
reshape_context->base_positions = BKE_mesh_vert_positions(base_mesh);
reshape_context->base_edges = BKE_mesh_edges(base_mesh);
reshape_context->base_polys = BKE_mesh_polys(base_mesh);
 -  reshape_context->base_loops = BKE_mesh_loops(base_mesh);
 +  reshape_context->base_corner_verts = BKE_mesh_corner_verts(base_mesh);
 +  reshape_context->base_corner_edges = BKE_mesh_corner_edges(base_mesh);
  
-   reshape_context->subdiv = multires_reshape_create_subdiv(NULL, object, mmd);
+   reshape_context->subdiv = multires_reshape_create_subdiv(nullptr, object, 
mmd);
reshape_context->need_free_subdiv = true;
  
reshape_context->reshape.level = multires_get_level(
diff --cc source/blender/blenkernel/intern/pbvh_pixels.cc
index 39301d43eea,b1d635f566e..14a169c84ee
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@@ -366,7 -366,11 +366,11 @@@ static void update_pixels(PBVH *pbvh, M
const VArraySpan uv_map = attributes.lookup(active_uv_name, 
ATTR_DOMAIN_CORNER);
  
uv_islands::MeshData mesh_data(
-   {pbvh->looptri, pbvh->totprim}, {pbvh->corner_verts, mesh->totloop}, 
pbvh->totvert, uv_map);
+   {pbvh->looptri, pbvh->totprim},
 -  {pbvh->mloop, mesh->totloop},
++  {pbvh->corner_verts, mesh->totloop},
+   pbvh->totvert,
+   uv_map,
+   {static_cast(static_cast(pbvh->vert_positions)), pbvh->totvert});
uv_islands::UVIslands islands(mesh_data);
  
uv_islands::UVIslandsMask uv_masks;
diff --cc source/blender/blenkernel/intern/pbvh_uv_islands.cc
index 7374631c2ff,16091b32917..bf40bdbd475
--- a/source/blender/blenkernel/intern/pbvh_uv_islands.cc
+++ b/source/blender/blenkernel/intern/pbvh_uv_islands.cc
@@@ -208,13 -208,15 +208,15 @@@ static void mesh_data_init(MeshData &me
  }
  
  MeshData::MeshData(const Span looptris,
 -   const Span loops,
 +  

[Bf-blender-cvs] [60ea01aa30d] master: Cleanup: Move four sculpt/paint files to C++

2023-01-20 Thread Hans Goudey
Commit: 60ea01aa30d36a5bb81649142d38786d00fa3481
Author: Hans Goudey
Date:   Fri Jan 20 11:55:43 2023 -0600
Branches: master
https://developer.blender.org/rB60ea01aa30d36a5bb81649142d38786d00fa3481

Cleanup: Move four sculpt/paint files to C++

For continued refactoring of the Mesh data structure. See T103343.

===

M   source/blender/editors/sculpt_paint/CMakeLists.txt
R088source/blender/editors/sculpt_paint/paint_mask.c
source/blender/editors/sculpt_paint/paint_mask.cc
R087source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c   
source/blender/editors/sculpt_paint/paint_vertex_weight_ops.cc
R094source/blender/editors/sculpt_paint/sculpt_expand.c 
source/blender/editors/sculpt_paint/sculpt_expand.cc
R096source/blender/editors/sculpt_paint/sculpt_geodesic.c   
source/blender/editors/sculpt_paint/sculpt_geodesic.cc

===

diff --git a/source/blender/editors/sculpt_paint/CMakeLists.txt 
b/source/blender/editors/sculpt_paint/CMakeLists.txt
index 62a07310106..35fc4ba705e 100644
--- a/source/blender/editors/sculpt_paint/CMakeLists.txt
+++ b/source/blender/editors/sculpt_paint/CMakeLists.txt
@@ -51,14 +51,14 @@ set(SRC
   paint_image_2d_curve_mask.cc
   paint_image_ops_paint.cc
   paint_image_proj.cc
-  paint_mask.c
+  paint_mask.cc
   paint_ops.c
   paint_stroke.c
   paint_utils.c
   paint_vertex.cc
   paint_vertex_color_ops.cc
   paint_vertex_proj.c
-  paint_vertex_weight_ops.c
+  paint_vertex_weight_ops.cc
   paint_vertex_weight_utils.c
   sculpt.cc
   sculpt_automasking.cc
@@ -67,12 +67,12 @@ set(SRC
   sculpt_cloth.c
   sculpt_detail.c
   sculpt_dyntopo.cc
-  sculpt_expand.c
+  sculpt_expand.cc
   sculpt_face_set.cc
   sculpt_filter_color.c
   sculpt_filter_mask.c
   sculpt_filter_mesh.c
-  sculpt_geodesic.c
+  sculpt_geodesic.cc
   sculpt_mask_expand.c
   sculpt_mask_init.c
   sculpt_multiplane_scrape.c
diff --git a/source/blender/editors/sculpt_paint/paint_mask.c 
b/source/blender/editors/sculpt_paint/paint_mask.cc
similarity index 88%
rename from source/blender/editors/sculpt_paint/paint_mask.c
rename to source/blender/editors/sculpt_paint/paint_mask.cc
index 26d3b4fead9..c0f4ddf4218 100644
--- a/source/blender/editors/sculpt_paint/paint_mask.c
+++ b/source/blender/editors/sculpt_paint/paint_mask.cc
@@ -5,6 +5,8 @@
  * \ingroup edsculpt
  */
 
+#include 
+
 #include "MEM_guardedalloc.h"
 
 #include "DNA_mesh_types.h"
@@ -13,7 +15,6 @@
 #include "DNA_object_types.h"
 #include "DNA_vec_types.h"
 
-#include "BLI_alloca.h"
 #include "BLI_bitmap_draw_2d.h"
 #include "BLI_lasso_2d.h"
 #include "BLI_math_geom.h"
@@ -53,8 +54,6 @@
 /* For undo push. */
 #include "sculpt_intern.h"
 
-#include 
-
 static const EnumPropertyItem mode_items[] = {
 {PAINT_MASK_FLOOD_VALUE,
  "VALUE",
@@ -84,7 +83,7 @@ static void mask_flood_fill_set_elem(float *elem, 
PaintMaskFloodMode mode, float
   }
 }
 
-typedef struct MaskTaskData {
+struct MaskTaskData {
   Object *ob;
   PBVH *pbvh;
   PBVHNode **nodes;
@@ -96,13 +95,13 @@ typedef struct MaskTaskData {
 
   bool front_faces_only;
   float view_normal[3];
-} MaskTaskData;
+};
 
 static void mask_flood_fill_task_cb(void *__restrict userdata,
 const int i,
-const TaskParallelTLS *__restrict 
UNUSED(tls))
+const TaskParallelTLS *__restrict /*tls*/)
 {
-  MaskTaskData *data = userdata;
+  MaskTaskData *data = static_cast(userdata);
 
   PBVHNode *node = data->nodes[i];
 
@@ -136,15 +135,13 @@ static int mask_flood_fill_exec(bContext *C, wmOperator 
*op)
   const Scene *scene = CTX_data_scene(C);
   Object *ob = CTX_data_active_object(C);
   Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
-  PaintMaskFloodMode mode;
-  float value;
   PBVH *pbvh;
   PBVHNode **nodes;
   int totnode;
   bool multires;
 
-  mode = RNA_enum_get(op->ptr, "mode");
-  value = RNA_float_get(op->ptr, "value");
+  PaintMaskFloodMode mode = PaintMaskFloodMode(RNA_enum_get(op->ptr, "mode"));
+  float value = RNA_float_get(op->ptr, "value");
 
   MultiresModifierData *mmd = BKE_sculpt_multires_active(scene, ob);
   BKE_sculpt_mask_layers_ensure(depsgraph, CTX_data_main(C), ob, mmd);
@@ -153,18 +150,17 @@ static int mask_flood_fill_exec(bContext *C, wmOperator 
*op)
   pbvh = ob->sculpt->pbvh;
   multires = (BKE_pbvh_type(pbvh) == PBVH_GRIDS);
 
-  BKE_pbvh_search_gather(pbvh, NULL, NULL, &nodes, &totnode);
+  BKE_pbvh_search_gather(pbvh, nullptr, nullptr, &nodes, &totnode);
 
   SCULPT_undo_push_begin(ob, op);
 
-  MaskTaskData data = {
-  .ob = ob,
-  .pbvh = pbvh,
-  .nodes = nodes,
-  .multires = multires,
- 

[Bf-blender-cvs] [c07fdad03de] master: Cleanup: Move multires files to C++

2023-01-20 Thread Hans Goudey
Commit: c07fdad03deb2d86d7c5b43028f5f2f8190ee5da
Author: Hans Goudey
Date:   Fri Jan 20 07:59:38 2023 -0600
Branches: master
https://developer.blender.org/rBc07fdad03deb2d86d7c5b43028f5f2f8190ee5da

Cleanup: Move multires files to C++

For continued refactoring of the Mesh data structure. See T103343.

===

M   source/blender/blenkernel/BKE_multires.h
M   source/blender/blenkernel/CMakeLists.txt
R083source/blender/blenkernel/intern/multires_reshape.c 
source/blender/blenkernel/intern/multires_reshape.cc
R090source/blender/blenkernel/intern/multires_reshape_apply_base.c  
source/blender/blenkernel/intern/multires_reshape_apply_base.cc
R086source/blender/blenkernel/intern/multires_reshape_ccg.c 
source/blender/blenkernel/intern/multires_reshape_ccg.cc
R083source/blender/blenkernel/intern/multires_reshape_smooth.c  
source/blender/blenkernel/intern/multires_reshape_smooth.cc
R091source/blender/blenkernel/intern/multires_reshape_subdivide.c   
source/blender/blenkernel/intern/multires_reshape_subdivide.cc
R084source/blender/blenkernel/intern/multires_reshape_util.c
source/blender/blenkernel/intern/multires_reshape_util.cc
R071source/blender/blenkernel/intern/multires_reshape_vertcos.c 
source/blender/blenkernel/intern/multires_reshape_vertcos.cc
R100source/blender/blenkernel/intern/multires_subdiv.c  
source/blender/blenkernel/intern/multires_subdiv.cc
R092source/blender/blenkernel/intern/multires_unsubdivide.c 
source/blender/blenkernel/intern/multires_unsubdivide.cc
R081source/blender/blenkernel/intern/multires_versioning.c  
source/blender/blenkernel/intern/multires_versioning.cc
M   source/blender/blenkernel/intern/subdiv_converter.h

===

diff --git a/source/blender/blenkernel/BKE_multires.h 
b/source/blender/blenkernel/BKE_multires.h
index 7c8c13ac8b2..5faafbe957c 100644
--- a/source/blender/blenkernel/BKE_multires.h
+++ b/source/blender/blenkernel/BKE_multires.h
@@ -156,7 +156,7 @@ void old_mdisps_bilinear(float out[3], float (*disps)[3], 
int st, float u, float
 int mdisp_rot_face_to_crn(
 struct MPoly *mpoly, int face_side, float u, float v, float *x, float *y);
 
-/* Reshaping, define in multires_reshape.c */
+/* Reshaping, define in multires_reshape.cc */
 
 bool multiresModifier_reshapeFromVertcos(struct Depsgraph *depsgraph,
  struct Object *object,
@@ -204,7 +204,7 @@ void multiresModifier_subdivide_to_level(struct Object 
*object,
  int top_level,
  eMultiresSubdivideModeType mode);
 
-/* Subdivision integration, defined in multires_subdiv.c */
+/* Subdivision integration, defined in multires_subdiv.cc */
 
 struct SubdivSettings;
 struct SubdivToMeshSettings;
diff --git a/source/blender/blenkernel/CMakeLists.txt 
b/source/blender/blenkernel/CMakeLists.txt
index 77c16b6924c..bfef13649e3 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -216,16 +216,16 @@ set(SRC
   intern/modifier.cc
   intern/movieclip.c
   intern/multires.cc
-  intern/multires_reshape.c
-  intern/multires_reshape_apply_base.c
-  intern/multires_reshape_ccg.c
-  intern/multires_reshape_smooth.c
-  intern/multires_reshape_subdivide.c
-  intern/multires_reshape_util.c
-  intern/multires_reshape_vertcos.c
-  intern/multires_subdiv.c
-  intern/multires_unsubdivide.c
-  intern/multires_versioning.c
+  intern/multires_reshape.cc
+  intern/multires_reshape_apply_base.cc
+  intern/multires_reshape_ccg.cc
+  intern/multires_reshape_smooth.cc
+  intern/multires_reshape_subdivide.cc
+  intern/multires_reshape_util.cc
+  intern/multires_reshape_vertcos.cc
+  intern/multires_subdiv.cc
+  intern/multires_unsubdivide.cc
+  intern/multires_versioning.cc
   intern/nla.c
   intern/node.cc
   intern/node_runtime.cc
diff --git a/source/blender/blenkernel/intern/multires_reshape.c 
b/source/blender/blenkernel/intern/multires_reshape.cc
similarity index 83%
rename from source/blender/blenkernel/intern/multires_reshape.c
rename to source/blender/blenkernel/intern/multires_reshape.cc
index 17e4860ab1b..522e7632b94 100644
--- a/source/blender/blenkernel/intern/multires_reshape.c
+++ b/source/blender/blenkernel/intern/multires_reshape.cc
@@ -30,9 +30,9 @@
 /** \name Reshape from object
  * \{ */
 
-bool multiresModifier_reshapeFromVertcos(struct Depsgraph *depsgraph,
- struct Object *object,
- struct MultiresModifierData *mmd,
+bool multiresModifier_reshapeFromVertcos(Depsgraph *depsgraph,
+ Object *object,
+ MultiresModifierData *mmd,
  const float (*vert_coords)[3

[Bf-blender-cvs] [bbc35fef25b] master: Cleanup: Remove remaining subdiv/subsurf files to C++

2023-01-19 Thread Hans Goudey
Commit: bbc35fef25b369e4008e233da979879d0b3f0dbb
Author: Hans Goudey
Date:   Thu Jan 19 21:40:50 2023 -0600
Branches: master
https://developer.blender.org/rBbbc35fef25b369e4008e233da979879d0b3f0dbb

Cleanup: Remove remaining subdiv/subsurf files to C++

For continued refactoring of the Mesh data structure. See T103343.

===

M   source/blender/blenkernel/BKE_multires.h
M   source/blender/blenkernel/CMakeLists.txt
R090source/blender/blenkernel/intern/subdiv.c   
source/blender/blenkernel/intern/subdiv.cc
R086source/blender/blenkernel/intern/subdiv_ccg_mask.c  
source/blender/blenkernel/intern/subdiv_ccg_mask.cc
R087source/blender/blenkernel/intern/subdiv_ccg_material.c  
source/blender/blenkernel/intern/subdiv_ccg_material.cc
R096source/blender/blenkernel/intern/subdiv_converter.c 
source/blender/blenkernel/intern/subdiv_converter.cc
M   source/blender/blenkernel/intern/subdiv_converter.h
R081source/blender/blenkernel/intern/subdiv_converter_mesh.c
source/blender/blenkernel/intern/subdiv_converter_mesh.cc
R082source/blender/blenkernel/intern/subdiv_deform.c
source/blender/blenkernel/intern/subdiv_deform.cc
R073source/blender/blenkernel/intern/subdiv_displacement.c  
source/blender/blenkernel/intern/subdiv_displacement.cc
R091source/blender/blenkernel/intern/subdiv_displacement_multires.c 
source/blender/blenkernel/intern/subdiv_displacement_multires.cc
R091source/blender/blenkernel/intern/subdiv_eval.c  
source/blender/blenkernel/intern/subdiv_eval.cc
R098source/blender/blenkernel/intern/subdiv_foreach.c   
source/blender/blenkernel/intern/subdiv_foreach.cc
R100source/blender/blenkernel/intern/subdiv_stats.c 
source/blender/blenkernel/intern/subdiv_stats.cc
R084source/blender/blenkernel/intern/subdiv_topology.c  
source/blender/blenkernel/intern/subdiv_topology.cc
R083source/blender/blenkernel/intern/subsurf_ccg.c  
source/blender/blenkernel/intern/subsurf_ccg.cc

===

diff --git a/source/blender/blenkernel/BKE_multires.h 
b/source/blender/blenkernel/BKE_multires.h
index 5e5ca8b4ee6..7c8c13ac8b2 100644
--- a/source/blender/blenkernel/BKE_multires.h
+++ b/source/blender/blenkernel/BKE_multires.h
@@ -41,7 +41,7 @@ void multires_flush_sculpt_updates(struct Object *object);
 void multires_force_sculpt_rebuild(struct Object *object);
 void multires_force_external_reload(struct Object *object);
 
-/* internal, only called in subsurf_ccg.c */
+/* internal, only called in subsurf_ccg.cc */
 void multires_modifier_update_mdisps(struct DerivedMesh *dm, struct Scene 
*scene);
 void multires_modifier_update_hidden(struct DerivedMesh *dm);
 
diff --git a/source/blender/blenkernel/CMakeLists.txt 
b/source/blender/blenkernel/CMakeLists.txt
index 70da6b22672..77c16b6924c 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -268,22 +268,22 @@ set(SRC
   intern/sound.c
   intern/speaker.c
   intern/studiolight.c
-  intern/subdiv.c
+  intern/subdiv.cc
   intern/subdiv_ccg.cc
-  intern/subdiv_ccg_mask.c
-  intern/subdiv_ccg_material.c
-  intern/subdiv_converter.c
-  intern/subdiv_converter_mesh.c
-  intern/subdiv_deform.c
-  intern/subdiv_displacement.c
-  intern/subdiv_displacement_multires.c
-  intern/subdiv_eval.c
-  intern/subdiv_foreach.c
+  intern/subdiv_ccg_mask.cc
+  intern/subdiv_ccg_material.cc
+  intern/subdiv_converter.cc
+  intern/subdiv_converter_mesh.cc
+  intern/subdiv_deform.cc
+  intern/subdiv_displacement.cc
+  intern/subdiv_displacement_multires.cc
+  intern/subdiv_eval.cc
+  intern/subdiv_foreach.cc
   intern/subdiv_mesh.cc
   intern/subdiv_modifier.cc
-  intern/subdiv_stats.c
-  intern/subdiv_topology.c
-  intern/subsurf_ccg.c
+  intern/subdiv_stats.cc
+  intern/subdiv_topology.cc
+  intern/subsurf_ccg.cc
   intern/text.c
   intern/text_suggestions.c
   intern/texture.cc
@@ -848,4 +848,4 @@ if(WITH_GTESTS)
 
   # RNA_prototypes.h
   add_dependencies(bf_blenkernel_tests bf_rna)
-endif()
\ No newline at end of file
+endif()
diff --git a/source/blender/blenkernel/intern/subdiv.c 
b/source/blender/blenkernel/intern/subdiv.cc
similarity index 90%
rename from source/blender/blenkernel/intern/subdiv.c
rename to source/blender/blenkernel/intern/subdiv.cc
index 9098c010747..50d6248f0b5 100644
--- a/source/blender/blenkernel/intern/subdiv.c
+++ b/source/blender/blenkernel/intern/subdiv.cc
@@ -96,7 +96,7 @@ bool BKE_subdiv_settings_equal(const SubdivSettings 
*settings_a, const SubdivSet
 /* Creation from scratch. */
 
 Subdiv *BKE_subdiv_new_from_converter(const SubdivSettings *settings,
-  struct OpenSubdiv_Converter *converter)
+  OpenSubdiv_Converter *converter)
 {
   SubdivStats stats;
   BKE_subdiv_stats_init(&stats);
@@ -104,7 +104,7 @@ Su

[Bf-blender-cvs] [241d87e9f41] master: Curves: Add RNA access to evaluated normals per control point

2023-01-19 Thread Hans Goudey
Commit: 241d87e9f41983daf757cbd126e35f0910c3a094
Author: Hans Goudey
Date:   Thu Jan 19 17:43:55 2023 -0600
Branches: master
https://developer.blender.org/rB241d87e9f41983daf757cbd126e35f0910c3a094

Curves: Add RNA access to evaluated normals per control point

Add an RNA API function that gives an array of the normals for every control 
point.
The normals depend on the `normal_mode` attribute, which can currently be
minumum twist or Z-up, though more options are planned. Normals are currently
evaluated on the evaluated points and then sampled back to the control points.
Because that can be expensive, a normal mode that only does a first evaluation
on control points may be important

The function is intended to be used by Cycles, so it doesn't have to implement
the calculation of normals itself. They can be interpolated between control 
points
and normalized.

For best performance, the function should only be called once, since it does the
full calculation for every control point every time it is called.

Differential Revision: https://developer.blender.org/D17024

===

M   source/blender/editors/curves/CMakeLists.txt
A   source/blender/editors/curves/intern/curves_data.cc
M   source/blender/editors/include/ED_curves.h
M   source/blender/makesrna/intern/rna_curves.c
M   source/blender/makesrna/intern/rna_mesh.c

===

diff --git a/source/blender/editors/curves/CMakeLists.txt 
b/source/blender/editors/curves/CMakeLists.txt
index 4d81b4454ac..bba85f9c77a 100644
--- a/source/blender/editors/curves/CMakeLists.txt
+++ b/source/blender/editors/curves/CMakeLists.txt
@@ -21,6 +21,7 @@ set(INC
 
 set(SRC
   intern/curves_add.cc
+  intern/curves_data.cc
   intern/curves_ops.cc
   intern/curves_selection.cc
 )
diff --git a/source/blender/editors/curves/intern/curves_data.cc 
b/source/blender/editors/curves/intern/curves_data.cc
new file mode 100644
index 000..bcec7156bf3
--- /dev/null
+++ b/source/blender/editors/curves/intern/curves_data.cc
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include "BKE_curves.hh"
+#include "BKE_geometry_fields.hh"
+
+#include "ED_curves.h"
+
+float (*ED_curves_point_normals_array_create(const Curves *curves_id))[3]
+{
+  using namespace blender;
+  const bke::CurvesGeometry &curves = 
bke::CurvesGeometry::wrap(curves_id->geometry);
+  const int size = curves.points_num();
+
+  float3 *data = static_cast(MEM_malloc_arrayN(size, sizeof(float3), 
__func__));
+
+  const bke::CurvesFieldContext context(curves, ATTR_DOMAIN_POINT);
+  fn::FieldEvaluator evaluator(context, size);
+  fn::Field field(std::make_shared());
+  evaluator.add_with_destination(std::move(field), {data, size});
+  evaluator.evaluate();
+
+  return reinterpret_cast(data);
+}
diff --git a/source/blender/editors/include/ED_curves.h 
b/source/blender/editors/include/ED_curves.h
index 7d2bad635b5..bf6b78676b9 100644
--- a/source/blender/editors/include/ED_curves.h
+++ b/source/blender/editors/include/ED_curves.h
@@ -7,13 +7,27 @@
 #pragma once
 
 struct bContext;
+struct Curves;
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
+/*  */
+/** \name C Wrappers
+ * \{ */
+
 void ED_operatortypes_curves(void);
 
+/**
+ * Return an owning pointer to an array of point normals the same size as the 
number of control
+ * points. The normals depend on the normal mode for each curve and the "tilt" 
attribute and may be
+ * calculated for the evaluated points and sampled back to the control points.
+ */
+float (*ED_curves_point_normals_array_create(const struct Curves 
*curves_id))[3];
+
+/** \} */
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/source/blender/makesrna/intern/rna_curves.c 
b/source/blender/makesrna/intern/rna_curves.c
index 3db4695a9b9..7560e1a60cb 100644
--- a/source/blender/makesrna/intern/rna_curves.c
+++ b/source/blender/makesrna/intern/rna_curves.c
@@ -50,6 +50,8 @@ const EnumPropertyItem rna_enum_curve_normal_modes[] = {
 
 #  include "DEG_depsgraph.h"
 
+#  include "ED_curves.h"
+
 #  include "WM_api.h"
 #  include "WM_types.h"
 
@@ -217,6 +219,14 @@ static void 
rna_CurveSlice_points_begin(CollectionPropertyIterator *iter, Pointe
   rna_iterator_array_begin(iter, co, sizeof(float[3]), size, 0, NULL);
 }
 
+static void rna_Curves_normals_begin(CollectionPropertyIterator *iter, 
PointerRNA *ptr)
+{
+  Curves *curves = rna_curves(ptr);
+  float(*positions)[3] = ED_curves_point_normals_array_create(curves);
+  const int size = curves->geometry.point_num;
+  rna_iterator_array_begin(iter, positions, sizeof(float[3]), size, true, 
NULL);
+}
+
 static void rna_Curves_update_data(struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
 

[Bf-blender-cvs] [203ab983ceb] master: Geometry Nodes: Rename node and socket for "Group ID" convention

2023-01-19 Thread Hans Goudey
Commit: 203ab983ceb7d791eae6d702f614f596314026d7
Author: Hans Goudey
Date:   Thu Jan 19 16:55:37 2023 -0600
Branches: master
https://developer.blender.org/rB203ab983ceb7d791eae6d702f614f596314026d7

Geometry Nodes: Rename node and socket for "Group ID" convention

Based on discussion about T102962, rename the "Face Set Boundaries" node
to "Face Group Boundaries" and the Accumulate Field node's "Group Index"
socket to "Group ID". This convention of "__ Group" and "Group ID" will
be used more in other nodes in the future.

This commit doesn't affect forwards or backwards compatibility.

===

M   source/blender/blenkernel/BKE_node.h
M   source/blender/nodes/NOD_static_types.h
M   source/blender/nodes/geometry/CMakeLists.txt
M   source/blender/nodes/geometry/node_geometry_register.cc
M   source/blender/nodes/geometry/node_geometry_register.hh
M   source/blender/nodes/geometry/nodes/node_geo_accumulate_field.cc
R082
source/blender/nodes/geometry/nodes/node_geo_mesh_face_set_boundaries.cc
source/blender/nodes/geometry/nodes/node_geo_mesh_face_group_boundaries.cc

===

diff --git a/source/blender/blenkernel/BKE_node.h 
b/source/blender/blenkernel/BKE_node.h
index dc5b1791bdb..d2f4c6e3b6e 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -1512,7 +1512,7 @@ void BKE_nodetree_remove_layer_n(struct bNodeTree *ntree, 
struct Scene *scene, i
 #define GEO_NODE_INPUT_SHORTEST_EDGE_PATHS 1168
 #define GEO_NODE_EDGE_PATHS_TO_CURVES 1169
 #define GEO_NODE_EDGE_PATHS_TO_SELECTION 1170
-#define GEO_NODE_MESH_FACE_SET_BOUNDARIES 1171
+#define GEO_NODE_MESH_FACE_GROUP_BOUNDARIES 1171
 #define GEO_NODE_DISTRIBUTE_POINTS_IN_VOLUME 1172
 #define GEO_NODE_SELF_OBJECT 1173
 #define GEO_NODE_SAMPLE_INDEX 1174
diff --git a/source/blender/nodes/NOD_static_types.h 
b/source/blender/nodes/NOD_static_types.h
index 479700da7c9..b9f747b2e4f 100644
--- a/source/blender/nodes/NOD_static_types.h
+++ b/source/blender/nodes/NOD_static_types.h
@@ -358,7 +358,7 @@ DefNode(GeometryNode, GEO_NODE_JOIN_GEOMETRY, 0, 
"JOIN_GEOMETRY", JoinGeometry,
 DefNode(GeometryNode, GEO_NODE_MATERIAL_SELECTION, 0, "MATERIAL_SELECTION", 
MaterialSelection, "Material Selection", "Provide a selection of faces that use 
the specified material")
 DefNode(GeometryNode, GEO_NODE_MERGE_BY_DISTANCE, 
def_geo_merge_by_distance,"MERGE_BY_DISTANCE", MergeByDistance, "Merge by 
Distance", "Merge vertices or points within a given distance")
 DefNode(GeometryNode, GEO_NODE_MESH_BOOLEAN, def_geo_boolean, "MESH_BOOLEAN", 
MeshBoolean, "Mesh Boolean", "Cut, subtract, or join multiple mesh inputs")
-DefNode(GeometryNode, GEO_NODE_MESH_FACE_SET_BOUNDARIES, 0, 
"MESH_FACE_SET_BOUNDARIES", MeshFaceSetBoundaries, "Face Set Boundaries", "Find 
edges on the boundaries between face sets")
+DefNode(GeometryNode, GEO_NODE_MESH_FACE_GROUP_BOUNDARIES, 0, 
"MESH_FACE_SET_BOUNDARIES", MeshFaceSetBoundaries, "Face Group Boundaries", 
"Find edges on the boundaries between groups of faces with the same ID value")
 DefNode(GeometryNode, GEO_NODE_MESH_PRIMITIVE_CIRCLE, def_geo_mesh_circle, 
"MESH_PRIMITIVE_CIRCLE", MeshCircle, "Mesh Circle", "Generate a circular ring 
of edges")
 DefNode(GeometryNode, GEO_NODE_MESH_PRIMITIVE_CONE, def_geo_mesh_cone, 
"MESH_PRIMITIVE_CONE",MeshCone, "Cone", "Generate a cone mesh")
 DefNode(GeometryNode, GEO_NODE_MESH_PRIMITIVE_CUBE, 0, 
"MESH_PRIMITIVE_CUBE",MeshCube, "Cube", "Generate a cuboid mesh with variable 
side lengths and subdivisions")
diff --git a/source/blender/nodes/geometry/CMakeLists.txt 
b/source/blender/nodes/geometry/CMakeLists.txt
index eecc79f2b12..8012b463a54 100644
--- a/source/blender/nodes/geometry/CMakeLists.txt
+++ b/source/blender/nodes/geometry/CMakeLists.txt
@@ -111,7 +111,7 @@ set(SRC
   nodes/node_geo_material_replace.cc
   nodes/node_geo_material_selection.cc
   nodes/node_geo_merge_by_distance.cc
-  nodes/node_geo_mesh_face_set_boundaries.cc
+  nodes/node_geo_mesh_face_group_boundaries.cc
   nodes/node_geo_mesh_primitive_circle.cc
   nodes/node_geo_mesh_primitive_cone.cc
   nodes/node_geo_mesh_primitive_cube.cc
diff --git a/source/blender/nodes/geometry/node_geometry_register.cc 
b/source/blender/nodes/geometry/node_geometry_register.cc
index 6305271ee8f..8d24d9bd732 100644
--- a/source/blender/nodes/geometry/node_geometry_register.cc
+++ b/source/blender/nodes/geometry/node_geometry_register.cc
@@ -95,7 +95,7 @@ void register_geometry_nodes()
   register_node_

[Bf-blender-cvs] [22f2bf804c9] refactor-mesh-corners-generic: Cleanup: Use C++ accessor functions in C++ code

2023-01-19 Thread Hans Goudey
Commit: 22f2bf804c95809637ee8c0cdbfe28c4edf438df
Author: Hans Goudey
Date:   Thu Jan 19 16:30:28 2023 -0600
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rB22f2bf804c95809637ee8c0cdbfe28c4edf438df

Cleanup: Use C++ accessor functions in C++ code

===

M   source/blender/blenkernel/intern/key.cc
M   source/blender/blenkernel/intern/mesh_merge_customdata.cc
M   source/blender/blenkernel/intern/mesh_mirror.cc
M   source/blender/blenkernel/intern/mesh_remap.cc
M   source/blender/draw/intern/draw_cache_extract_mesh_render_data.cc
M   source/blender/modifiers/intern/MOD_array.cc
M   source/blender/modifiers/intern/MOD_build.cc
M   source/blender/modifiers/intern/MOD_correctivesmooth.cc
M   source/blender/modifiers/intern/MOD_displace.cc
M   source/blender/modifiers/intern/MOD_laplaciansmooth.cc
M   source/blender/modifiers/intern/MOD_normal_edit.cc
M   source/blender/modifiers/intern/MOD_ocean.cc
M   source/blender/modifiers/intern/MOD_particleinstance.cc
M   source/blender/modifiers/intern/MOD_remesh.cc
M   source/blender/modifiers/intern/MOD_screw.cc
M   source/blender/modifiers/intern/MOD_solidify_extrude.cc
M   source/blender/modifiers/intern/MOD_solidify_nonmanifold.cc
M   source/blender/render/intern/bake.cc
M   source/blender/render/intern/multires_bake.cc

===

diff --git a/source/blender/blenkernel/intern/key.cc 
b/source/blender/blenkernel/intern/key.cc
index 70707ed4a40..3df39dacfc9 100644
--- a/source/blender/blenkernel/intern/key.cc
+++ b/source/blender/blenkernel/intern/key.cc
@@ -2235,8 +2235,8 @@ void BKE_keyblock_mesh_calc_normals(const KeyBlock *kb,
   BKE_keyblock_convert_to_mesh(kb, positions, mesh->totvert);
   const MEdge *edges = BKE_mesh_edges(mesh);
   const MPoly *polys = BKE_mesh_polys(mesh);
-  const int *corner_verts = BKE_mesh_corner_verts(mesh);
-  const int *corner_edges = BKE_mesh_corner_edges(mesh);
+  const blender::Span corner_verts = mesh->corner_verts();
+  const blender::Span corner_edges = mesh->corner_edges();
 
   const bool loop_normals_needed = r_loop_normals != nullptr;
   const bool vert_normals_needed = r_vert_normals != nullptr || 
loop_normals_needed;
@@ -2259,13 +2259,18 @@ void BKE_keyblock_mesh_calc_normals(const KeyBlock *kb,
   }
 
   if (poly_normals_needed) {
-BKE_mesh_calc_normals_poly(
-positions, mesh->totvert, corner_verts, mesh->totloop, polys, 
mesh->totpoly, poly_normals);
+BKE_mesh_calc_normals_poly(positions,
+   mesh->totvert,
+   corner_verts.data(),
+   mesh->totloop,
+   polys,
+   mesh->totpoly,
+   poly_normals);
   }
   if (vert_normals_needed) {
 BKE_mesh_calc_normals_poly_and_vertex(positions,
   mesh->totvert,
-  corner_verts,
+  corner_verts.data(),
   mesh->totloop,
   polys,
   mesh->totpoly,
@@ -2282,8 +2287,8 @@ void BKE_keyblock_mesh_calc_normals(const KeyBlock *kb,
 mesh->totvert,
 edges,
 mesh->totedge,
-corner_verts,
-corner_edges,
+corner_verts.data(),
+corner_edges.data(),
 r_loop_normals,
 mesh->totloop,
 polys,
diff --git a/source/blender/blenkernel/intern/mesh_merge_customdata.cc 
b/source/blender/blenkernel/intern/mesh_merge_customdata.cc
index c9358a127b4..f0f4fb67cf9 100644
--- a/source/blender/blenkernel/intern/mesh_merge_customdata.cc
+++ b/source/blender/blenkernel/intern/mesh_merge_customdata.cc
@@ -117,7 +117,7 @@ void BKE_mesh_merge_customdata_for_apply_modifier(Mesh *me)
   BKE_mesh_vert_loop_map_create(&vert_to_loop,
 &vert_map_mem,
 BKE_mesh_polys(me),
-BKE_mesh_corner_verts(me),
+me->corner_verts().data(),
 me->totvert,
 me->totpoly,
 me->totloop);
diff --git a/source/blender/blenkernel/intern/mesh_mirror.cc 
b/source/blender/blenkernel/intern/mesh_mirror.cc
index 273605dd63c..5bfcf86534f 100644
--- a/source/blender/blenkernel/intern/mesh_mirror.cc
+++ b/source/b

[Bf-blender-cvs] [932a211f6c0] refactor-mesh-corners-generic: Merge branch 'master' into refactor-mesh-corners-generic

2023-01-19 Thread Hans Goudey
Commit: 932a211f6c00100190f402036252e4f238e72f40
Author: Hans Goudey
Date:   Thu Jan 19 16:15:09 2023 -0600
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rB932a211f6c00100190f402036252e4f238e72f40

Merge branch 'master' into refactor-mesh-corners-generic

===



===

diff --cc source/blender/geometry/intern/mesh_merge_by_distance.cc
index d468d33e6f8,5374a6c08cd..ed37f743b29
--- a/source/blender/geometry/intern/mesh_merge_by_distance.cc
+++ b/source/blender/geometry/intern/mesh_merge_by_distance.cc
@@@ -1010,128 -1006,170 +1021,174 @@@ static void weld_poly_split_recursive(S
   *  done to reduce allocations.
   * \return r_weld_mesh: Loop and poly members will be configured here.
   */
- static void weld_poly_loop_ctx_setup(const Span corner_verts,
-  const Span corner_edges,
+ static void weld_poly_loop_ctx_setup_collapsed_and_split(
  #ifdef USE_WELD_DEBUG
-  Span mpoly,
 -Span mloop,
++const Span corner_verts,
++const Span corner_edges,
+ Span mpoly,
  #endif
-  const int mvert_len,
-  Span vert_dest_map,
-  const int remain_edge_ctx_len,
-  MutableSpan r_vlinks,
-  WeldMesh *r_weld_mesh)
+ Span vert_dest_map,
+ const int remain_edge_ctx_len,
+ WeldMesh *r_weld_mesh)
  {
+   if (remain_edge_ctx_len == 0) {
+ r_weld_mesh->poly_kill_len = r_weld_mesh->wpoly.size();
+ r_weld_mesh->loop_kill_len = r_weld_mesh->wloop.size();
+ 
+ for (WeldPoly &wp : r_weld_mesh->wpoly) {
+   wp.flag = ELEM_COLLAPSED;
+ }
+ 
+ return;
+   }
+ 
WeldPoly *wpoly = r_weld_mesh->wpoly.data();
MutableSpan wloop = r_weld_mesh->wloop;
+ 
int poly_kill_len = 0;
int loop_kill_len = 0;
  
-   Span loop_map = r_weld_mesh->loop_map;
- 
-   if (remain_edge_ctx_len) {
- 
- /* Setup Poly/Loop. */
- /* `wpoly.size()` may change during the loop,
-  * so make it clear that we are only working with the original wpolys. */
- IndexRange wpoly_original_range = r_weld_mesh->wpoly.index_range();
- for (const int i : wpoly_original_range) {
-   WeldPoly &wp = wpoly[i];
-   const int ctx_loops_len = wp.loops.len;
-   const int ctx_loops_ofs = wp.loops.offs;
- 
-   int poly_loop_len = wp.loop_len;
-   int ctx_verts_len = 0;
-   WeldLoop *wl = &wloop[ctx_loops_ofs];
-   for (int l = ctx_loops_len; l--; wl++) {
- const int edge_dest = wl->edge;
- if (edge_dest == ELEM_COLLAPSED) {
-   wl->flag = ELEM_COLLAPSED;
-   if (poly_loop_len == 3) {
- wp.flag = ELEM_COLLAPSED;
- poly_kill_len++;
- loop_kill_len += 3;
- poly_loop_len = 0;
- break;
-   }
-   loop_kill_len++;
-   poly_loop_len--;
+   /* Setup Poly/Loop. */
+   /* `wpoly.size()` may change during the loop,
+* so make it clear that we are only working with the original wpolys. */
+   IndexRange wpoly_original_range = r_weld_mesh->wpoly.index_range();
+   for (const int i : wpoly_original_range) {
+ WeldPoly &wp = wpoly[i];
+ const int ctx_loops_len = wp.loops.len;
+ const int ctx_loops_ofs = wp.loops.offs;
+ 
+ int poly_loop_len = wp.loop_len;
+ int ctx_verts_len = 0;
+ WeldLoop *wl = &wloop[ctx_loops_ofs];
+ for (int l = ctx_loops_len; l--; wl++) {
+   const int edge_dest = wl->edge;
+   if (edge_dest == ELEM_COLLAPSED) {
+ wl->flag = ELEM_COLLAPSED;
+ if (poly_loop_len == 3) {
+   wp.flag = ELEM_COLLAPSED;
+   poly_kill_len++;
+   loop_kill_len += 3;
+   poly_loop_len = 0;
+   break;
  }
- else {
-   const int vert_dst = wl->vert;
-   if (vert_dest_map[vert_dst] != OUT_OF_CONTEXT) {
- ctx_verts_len++;
-   }
+ loop_kill_len++;
+ poly_loop_len--;
+   }
+   else {
+ const int vert_dst = wl->vert;
+ if (vert_dest_map[vert_dst] != OUT_OF_CONTEXT) {
+   ctx_verts_len++;
  }
}
+ }
  
-   if (poly_loop_len) {
- wp.loop_len = poly_loop_len;
+ if (poly_loop_len) {
+   wp.loop_len = poly_loop_len;
  #ifdef USE_WELD_DEBUG
- weld_assert_poly_len(&wp, wloop);
+   weld_assert_poly_len(&wp, wloop);
  #endif
  
- weld_poly_split_recursive(vert_dest_map,
+   weld_poly_split_recursive(vert_dest_map,
  #ifdef USE_WELD_DEBUG
-   corner_verts,
-   corner_edges,
+

[Bf-blender-cvs] [79053a6ff74] master: Cleanup: Move several modifiers files to C++

2023-01-19 Thread Hans Goudey
Commit: 79053a6ff74a10ef7f51f4b7c5b0e5e5a542eb5a
Author: Hans Goudey
Date:   Thu Jan 19 15:54:47 2023 -0600
Branches: master
https://developer.blender.org/rB79053a6ff74a10ef7f51f4b7c5b0e5e5a542eb5a

Cleanup: Move several modifiers files to C++

For continued refactoring of the Mesh data structure. See T103343.

===

M   source/blender/modifiers/CMakeLists.txt
R085source/blender/modifiers/intern/MOD_build.c 
source/blender/modifiers/intern/MOD_build.cc
R084source/blender/modifiers/intern/MOD_correctivesmooth.c  
source/blender/modifiers/intern/MOD_correctivesmooth.cc
R084source/blender/modifiers/intern/MOD_explode.c   
source/blender/modifiers/intern/MOD_explode.cc
R087source/blender/modifiers/intern/MOD_laplaciansmooth.c   
source/blender/modifiers/intern/MOD_laplaciansmooth.cc
R079source/blender/modifiers/intern/MOD_ocean.c 
source/blender/modifiers/intern/MOD_ocean.cc
R084source/blender/modifiers/intern/MOD_particleinstance.c  
source/blender/modifiers/intern/MOD_particleinstance.cc
R070source/blender/modifiers/intern/MOD_remesh.c
source/blender/modifiers/intern/MOD_remesh.cc
R077source/blender/modifiers/intern/MOD_solidify.c  
source/blender/modifiers/intern/MOD_solidify.cc
R086source/blender/modifiers/intern/MOD_solidify_extrude.c  
source/blender/modifiers/intern/MOD_solidify_extrude.cc
R084source/blender/modifiers/intern/MOD_solidify_nonmanifold.c  
source/blender/modifiers/intern/MOD_solidify_nonmanifold.cc
R087source/blender/modifiers/intern/MOD_solidify_util.h 
source/blender/modifiers/intern/MOD_solidify_util.hh
R087source/blender/modifiers/intern/MOD_surfacedeform.c 
source/blender/modifiers/intern/MOD_surfacedeform.cc

===

diff --git a/source/blender/modifiers/CMakeLists.txt 
b/source/blender/modifiers/CMakeLists.txt
index 30ddca5e47d..a0cf583153b 100644
--- a/source/blender/modifiers/CMakeLists.txt
+++ b/source/blender/modifiers/CMakeLists.txt
@@ -37,22 +37,22 @@ set(SRC
   intern/MOD_array.cc
   intern/MOD_bevel.c
   intern/MOD_boolean.cc
-  intern/MOD_build.c
+  intern/MOD_build.cc
   intern/MOD_cast.c
   intern/MOD_cloth.c
   intern/MOD_collision.c
-  intern/MOD_correctivesmooth.c
+  intern/MOD_correctivesmooth.cc
   intern/MOD_curve.c
   intern/MOD_datatransfer.cc
   intern/MOD_decimate.c
   intern/MOD_displace.cc
   intern/MOD_dynamicpaint.c
   intern/MOD_edgesplit.c
-  intern/MOD_explode.c
+  intern/MOD_explode.cc
   intern/MOD_fluid.c
   intern/MOD_hook.c
   intern/MOD_laplaciandeform.c
-  intern/MOD_laplaciansmooth.c
+  intern/MOD_laplaciansmooth.cc
   intern/MOD_lattice.c
   intern/MOD_mask.cc
   intern/MOD_mesh_to_volume.cc
@@ -67,10 +67,10 @@ set(SRC
   intern/MOD_nodes.cc
   intern/MOD_none.c
   intern/MOD_normal_edit.cc
-  intern/MOD_ocean.c
-  intern/MOD_particleinstance.c
+  intern/MOD_ocean.cc
+  intern/MOD_particleinstance.cc
   intern/MOD_particlesystem.cc
-  intern/MOD_remesh.c
+  intern/MOD_remesh.cc
   intern/MOD_screw.cc
   intern/MOD_shapekey.c
   intern/MOD_shrinkwrap.c
@@ -78,12 +78,12 @@ set(SRC
   intern/MOD_skin.c
   intern/MOD_smooth.c
   intern/MOD_softbody.c
-  intern/MOD_solidify.c
-  intern/MOD_solidify_extrude.c
-  intern/MOD_solidify_nonmanifold.c
+  intern/MOD_solidify.cc
+  intern/MOD_solidify_extrude.cc
+  intern/MOD_solidify_nonmanifold.cc
   intern/MOD_subsurf.cc
   intern/MOD_surface.c
-  intern/MOD_surfacedeform.c
+  intern/MOD_surfacedeform.cc
   intern/MOD_triangulate.cc
   intern/MOD_ui_common.c
   intern/MOD_util.cc
@@ -104,7 +104,7 @@ set(SRC
   MOD_modifiertypes.h
   MOD_nodes.h
   intern/MOD_meshcache_util.h
-  intern/MOD_solidify_util.h
+  intern/MOD_solidify_util.hh
   intern/MOD_ui_common.h
   intern/MOD_util.h
   intern/MOD_weightvg_util.h
diff --git a/source/blender/modifiers/intern/MOD_build.c 
b/source/blender/modifiers/intern/MOD_build.cc
similarity index 85%
rename from source/blender/modifiers/intern/MOD_build.c
rename to source/blender/modifiers/intern/MOD_build.cc
index b2c9995a928..ae69677a2d6 100644
--- a/source/blender/modifiers/intern/MOD_build.c
+++ b/source/blender/modifiers/intern/MOD_build.cc
@@ -48,18 +48,17 @@ static void initData(ModifierData *md)
   MEMCPY_STRUCT_AFTER(bmd, DNA_struct_default_get(BuildModifierData), 
modifier);
 }
 
-static bool dependsOnTime(struct Scene *UNUSED(scene), ModifierData 
*UNUSED(md))
+static bool dependsOnTime(Scene * /*scene*/, ModifierData * /*md*/)
 {
   return true;
 }
 
-static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, 
struct Mesh *mesh)
+static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh 
*mesh)
 {
   Mesh *result;
   BuildModifierData *bmd = (BuildModifierData *)md;
   int i, j, k;
   int faces_dst_num, edges_dst_num, loops_dst_num = 0;
-  int *vertMap, *edgeMap, *faceMap;
   float frac;
   MPoly *mpoly_dst;
   MLoop *ml_dst

[Bf-blender-cvs] [2ab72f6db83] master: Fix T103964: Assert on mouse hover of empty node editor

2023-01-19 Thread Hans Goudey
Commit: 2ab72f6db8319b564dc6e3e6c0a6c26d253fda30
Author: Hans Goudey
Date:   Thu Jan 19 15:49:49 2023 -0600
Branches: master
https://developer.blender.org/rB2ab72f6db8319b564dc6e3e6c0a6c26d253fda30

Fix T103964: Assert on mouse hover of empty node editor

The reverse iteration added in e091291b5b5f525cd8d3 didn't handle
the case where there are no nodes properly. Thanks to Iliya Katueshenock
for investigating this.

===

M   source/blender/editors/space_node/node_draw.cc
M   source/blender/editors/space_node/node_edit.cc

===

diff --git a/source/blender/editors/space_node/node_draw.cc 
b/source/blender/editors/space_node/node_draw.cc
index d3b34c408cf..bc4b6d416c1 100644
--- a/source/blender/editors/space_node/node_draw.cc
+++ b/source/blender/editors/space_node/node_draw.cc
@@ -2621,8 +2621,10 @@ int node_get_resize_cursor(NodeResizeDirection 
directions)
 
 static const bNode *find_node_under_cursor(SpaceNode &snode, const float2 
&cursor)
 {
-  /* Check nodes front to back. */
   const Span nodes = snode.edittree->all_nodes();
+  if (nodes.is_empty()) {
+return nullptr;
+  }
   for (int i = nodes.index_range().last(); i >= 0; i--) {
 if (BLI_rctf_isect_pt(&nodes[i]->runtime->totr, cursor[0], cursor[1])) {
   return nodes[i];
diff --git a/source/blender/editors/space_node/node_edit.cc 
b/source/blender/editors/space_node/node_edit.cc
index d93b93d8f8c..fc039746639 100644
--- a/source/blender/editors/space_node/node_edit.cc
+++ b/source/blender/editors/space_node/node_edit.cc
@@ -1135,8 +1135,11 @@ bNodeSocket *node_find_indicated_socket(SpaceNode &snode,
 /* Sockets haven't been drawn yet, e.g. when the file is currently 
opening. */
 return nullptr;
   }
-
   const Span nodes = snode.edittree->all_nodes();
+  if (nodes.is_empty()) {
+return nullptr;
+  }
+
   for (int i = nodes.index_range().last(); i >= 0; i--) {
 bNode &node = *nodes[i];

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [190d66b51e4] master: Cleanup: Remove unused attribute API function

2023-01-19 Thread Hans Goudey
Commit: 190d66b51e4db98d7e9dc69e01c972b7da498e40
Author: Hans Goudey
Date:   Thu Jan 19 15:37:36 2023 -0600
Branches: master
https://developer.blender.org/rB190d66b51e4db98d7e9dc69e01c972b7da498e40

Cleanup: Remove unused attribute API function

While we do need higher level utilities for copying attributes
between geometries, this currently isn't used and it's not clear
that it will be the right abstraction in the end.

===

M   source/blender/blenkernel/BKE_attribute.hh
M   source/blender/blenkernel/intern/attribute_access.cc

===

diff --git a/source/blender/blenkernel/BKE_attribute.hh 
b/source/blender/blenkernel/BKE_attribute.hh
index 0ff120328d3..afa9f1fba23 100644
--- a/source/blender/blenkernel/BKE_attribute.hh
+++ b/source/blender/blenkernel/BKE_attribute.hh
@@ -753,20 +753,6 @@ Vector 
retrieve_attributes_for_transfer(
 const AnonymousAttributePropagationInfo &propagation_info,
 const Set &skip = {});
 
-/**
- * Copy attributes for the domain based on the elementwise mask.
- *
- * \param mask_indices: Indexed elements to copy from the source data-block.
- * \param domain: Attribute domain to transfer.
- * \param skip: Named attributes to ignore/skip.
- */
-void copy_attribute_domain(AttributeAccessor src_attributes,
-   MutableAttributeAccessor dst_attributes,
-   IndexMask selection,
-   eAttrDomain domain,
-   const AnonymousAttributePropagationInfo 
&propagation_info,
-   const Set &skip = {});
-
 bool allow_procedural_attribute_access(StringRef attribute_name);
 extern const char *no_procedural_access_message;
 
diff --git a/source/blender/blenkernel/intern/attribute_access.cc 
b/source/blender/blenkernel/intern/attribute_access.cc
index 92bb7247673..8a6e1486701 100644
--- a/source/blender/blenkernel/intern/attribute_access.cc
+++ b/source/blender/blenkernel/intern/attribute_access.cc
@@ -913,38 +913,6 @@ Vector 
retrieve_attributes_for_transfer(
   return attributes;
 }
 
-void copy_attribute_domain(const AttributeAccessor src_attributes,
-   MutableAttributeAccessor dst_attributes,
-   const IndexMask selection,
-   const eAttrDomain domain,
-   const AnonymousAttributePropagationInfo 
&propagation_info,
-   const Set &skip)
-{
-  src_attributes.for_all(
-  [&](const bke::AttributeIDRef &id, const bke::AttributeMetaData 
&meta_data) {
-if (meta_data.domain != domain) {
-  return true;
-}
-if (id.is_anonymous() && 
!propagation_info.propagate(id.anonymous_id())) {
-  return true;
-}
-if (skip.contains(id.name())) {
-  return true;
-}
-
-const GVArray src = src_attributes.lookup(id, meta_data.domain);
-BLI_assert(src);
-
-/* Copy attribute. */
-GSpanAttributeWriter dst = 
dst_attributes.lookup_or_add_for_write_only_span(
-id, domain, meta_data.data_type);
-array_utils::copy(src, selection, dst.span);
-dst.finish();
-
-return true;
-  });
-}
-
 }  // namespace blender::bke
 
 /** \} */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [9233b609eb9] master: Cleanup: Use utility function for copying curve domain data

2023-01-19 Thread Hans Goudey
Commit: 9233b609eb94785739689227c45fbed1ee10a7cc
Author: Hans Goudey
Date:   Thu Jan 19 15:08:58 2023 -0600
Branches: master
https://developer.blender.org/rB9233b609eb94785739689227c45fbed1ee10a7cc

Cleanup: Use utility function for copying curve domain data

Standardizing the process of creating a new CurvesGeometry with
different curve sizes based on an existing curves is helpful, since
there are a few methods to simplify the process that aren't obvious
at first, like filling the offsets with sizes directly and accumulating
them to become sizes.

Also, in the trim curves node, avoid creating the curve types attribute
all the time. Use the special API functions for the types which do
some optimizations automatically. Also use a more consistent
method to copy the curve domain data, and correct some comments.

===

M   source/blender/blenkernel/BKE_curves_utils.hh
M   source/blender/geometry/intern/resample_curves.cc
M   source/blender/geometry/intern/trim_curves.cc

===

diff --git a/source/blender/blenkernel/BKE_curves_utils.hh 
b/source/blender/blenkernel/BKE_curves_utils.hh
index 144f934414a..c8b8510a938 100644
--- a/source/blender/blenkernel/BKE_curves_utils.hh
+++ b/source/blender/blenkernel/BKE_curves_utils.hh
@@ -76,14 +76,17 @@ struct CurvePoint : public CurveSegment {
  * [0, range_size) can be iterated over an arbitrary amount of times in 
between.
  */
 class IndexRangeCyclic {
-  /* Index to the start and end of the iterated range.
+  /**
+   * Index to the start and end of the iterated range.
*/
   int start_ = 0;
   int end_ = 0;
-  /* Size of the underlying iterable range.
+  /**
+   * Size of the underlying iterable range.
*/
   int range_size_ = 0;
-  /* Number of times the range end is passed when the range is iterated.
+  /**
+   * Number of times the range end is passed when the range is iterated.
*/
   int cycles_ = 0;
 
@@ -519,8 +522,12 @@ void fill_points(const CurvesGeometry &curves,
 }
 
 /**
- * Copy only the attributes on the curve domain, but not the offsets or any 
point attributes,
- * meant for operations that change the number of points but not the number of 
curves.
+ * Create new curves with the same number of curves as the input, but no 
points. Copy all curve
+ * domain attributes to the new curves, except the offsets encoding the size 
of each curve.
+ *
+ * Used for operations that change the number of points but not the number of 
curves, allowing
+ * creation of the new offsets directly inside the new array.
+ *
  * \warning The returned curves have invalid offsets!
  */
 bke::CurvesGeometry copy_only_curve_domain(const bke::CurvesGeometry 
&src_curves);
diff --git a/source/blender/geometry/intern/resample_curves.cc 
b/source/blender/geometry/intern/resample_curves.cc
index eac1d7d8d81..77e136ae886 100644
--- a/source/blender/geometry/intern/resample_curves.cc
+++ b/source/blender/geometry/intern/resample_curves.cc
@@ -239,16 +239,7 @@ static CurvesGeometry resample_to_uniform(const 
CurvesGeometry &src_curves,
   const fn::Field &count_field,
   const 
ResampleCurvesOutputAttributeIDs &output_ids)
 {
-  /* Create the new curves without any points and evaluate the final count 
directly
-   * into the offsets array, in order to be accumulated into offsets later. */
-  CurvesGeometry dst_curves = CurvesGeometry(0, src_curves.curves_num());
-
-  /* Directly copy curve attributes, since they stay the same (except for 
curve types). */
-  CustomData_copy(&src_curves.curve_data,
-  &dst_curves.curve_data,
-  CD_MASK_ALL,
-  CD_DUPLICATE,
-  src_curves.curves_num());
+  CurvesGeometry dst_curves = bke::curves::copy_only_curve_domain(src_curves);
   MutableSpan dst_offsets = dst_curves.offsets_for_write();
 
   const bke::CurvesFieldContext field_context{src_curves, ATTR_DOMAIN_CURVE};
@@ -422,17 +413,8 @@ CurvesGeometry resample_to_evaluated(const CurvesGeometry 
&src_curves,
   const OffsetIndices src_points_by_curve = src_curves.points_by_curve();
   const OffsetIndices src_evaluated_points_by_curve = 
src_curves.evaluated_points_by_curve();
 
-  CurvesGeometry dst_curves(0, src_curves.curves_num());
-
-  /* Directly copy curve attributes, since they stay the same (except for 
curve types). */
-  CustomData_copy(&src_curves.curve_data,
-  &dst_curves.curve_data,
-  CD_MASK_ALL,
-  CD_DUPLICATE,
-  src_curves.curves_num());
-  /* All resampled curves are poly curves. */
+  CurvesGeometry dst_curves = bke::curves::copy_only_curve_domain(src_curves);
   dst_curves.fill_curve_types(selection, CURVE_TYPE_POLY);
-
   MutableSpan dst_offsets = dst_curves.offsets_for_write();
   

[Bf-blender-cvs] [7db00d4ef73] master: Cleanup: Rename curves utility function

2023-01-19 Thread Hans Goudey
Commit: 7db00d4ef7381830852edc471c9fbd9b39d44fa0
Author: Hans Goudey
Date:   Thu Jan 19 15:31:16 2023 -0600
Branches: master
https://developer.blender.org/rB7db00d4ef7381830852edc471c9fbd9b39d44fa0

Cleanup: Rename curves utility function

"Fill" usually refers to setting a single value. This copies the
sizes from curves offsets to a separate array.

===

M   source/blender/blenkernel/BKE_curves_utils.hh
M   source/blender/blenkernel/intern/curves_utils.cc
M   source/blender/geometry/intern/fillet_curves.cc
M   source/blender/geometry/intern/resample_curves.cc
M   source/blender/geometry/intern/subdivide_curves.cc
M   source/blender/geometry/intern/trim_curves.cc

===

diff --git a/source/blender/blenkernel/BKE_curves_utils.hh 
b/source/blender/blenkernel/BKE_curves_utils.hh
index c8b8510a938..6caf716c063 100644
--- a/source/blender/blenkernel/BKE_curves_utils.hh
+++ b/source/blender/blenkernel/BKE_curves_utils.hh
@@ -533,11 +533,11 @@ void fill_points(const CurvesGeometry &curves,
 bke::CurvesGeometry copy_only_curve_domain(const bke::CurvesGeometry 
&src_curves);
 
 /**
- * Copy the size of every curve in #curve_ranges to the corresponding index in 
#counts.
+ * Copy the number of points in every curve in #curve_ranges to the 
corresponding index in #sizes.
  */
-void fill_curve_counts(const bke::CurvesGeometry &curves,
-   Span curve_ranges,
-   MutableSpan counts);
+void copy_curve_sizes(const bke::CurvesGeometry &curves,
+  Span curve_ranges,
+  MutableSpan sizes);
 
 IndexMask indices_for_type(const VArray &types,
const std::array &type_counts,
diff --git a/source/blender/blenkernel/intern/curves_utils.cc 
b/source/blender/blenkernel/intern/curves_utils.cc
index 598f654b298..ef2518cbc3f 100644
--- a/source/blender/blenkernel/intern/curves_utils.cc
+++ b/source/blender/blenkernel/intern/curves_utils.cc
@@ -10,16 +10,16 @@
 
 namespace blender::bke::curves {
 
-void fill_curve_counts(const bke::CurvesGeometry &curves,
-   const Span curve_ranges,
-   MutableSpan counts)
+void copy_curve_sizes(const bke::CurvesGeometry &curves,
+  const Span curve_ranges,
+  MutableSpan sizes)
 {
   const OffsetIndices points_by_curve = curves.points_by_curve();
   threading::parallel_for(curve_ranges.index_range(), 512, [&](IndexRange 
ranges_range) {
 for (const IndexRange curves_range : curve_ranges.slice(ranges_range)) {
   threading::parallel_for(curves_range, 4096, [&](IndexRange range) {
 for (const int i : range) {
-  counts[i] = points_by_curve.size(i);
+  sizes[i] = points_by_curve.size(i);
 }
   });
 }
diff --git a/source/blender/geometry/intern/fillet_curves.cc 
b/source/blender/geometry/intern/fillet_curves.cc
index 1bb33f0e80f..f666a6b6b40 100644
--- a/source/blender/geometry/intern/fillet_curves.cc
+++ b/source/blender/geometry/intern/fillet_curves.cc
@@ -70,7 +70,7 @@ static void calculate_result_offsets(const 
bke::CurvesGeometry &src_curves,
  MutableSpan dst_point_offsets)
 {
   /* Fill the offsets array with the curve point counts, then accumulate them 
to form offsets. */
-  bke::curves::fill_curve_counts(src_curves, unselected_ranges, 
dst_curve_offsets);
+  bke::curves::copy_curve_sizes(src_curves, unselected_ranges, 
dst_curve_offsets);
   const OffsetIndices points_by_curve = src_curves.points_by_curve();
   threading::parallel_for(selection.index_range(), 512, [&](IndexRange range) {
 for (const int curve_i : selection.slice(range)) {
diff --git a/source/blender/geometry/intern/resample_curves.cc 
b/source/blender/geometry/intern/resample_curves.cc
index 77e136ae886..00bd1898674 100644
--- a/source/blender/geometry/intern/resample_curves.cc
+++ b/source/blender/geometry/intern/resample_curves.cc
@@ -252,7 +252,7 @@ static CurvesGeometry resample_to_uniform(const 
CurvesGeometry &src_curves,
   src_curves.curves_range(), nullptr);
 
   /* Fill the counts for the curves that aren't selected and accumulate the 
counts into offsets. */
-  bke::curves::fill_curve_counts(src_curves, unselected_ranges, dst_offsets);
+  bke::curves::copy_curve_sizes(src_curves, unselected_ranges, dst_offsets);
   offset_indices::accumulate_counts_to_offsets(dst_offsets);
   dst_curves.resize(dst_offsets.last(), dst_curves.curves_num());
 
@@ -421,7 +421,7 @@ CurvesGeometry resample_to_evaluated(const CurvesGeometry 
&src_curves,
   dst_offsets[i] = src_evaluated_points_by_curve.size(i);
 }
   });
-  bke::curves::fill_curve_counts(src_curves, unselected_ranges, dst_offsets);
+  bke::curves::copy_cur

[Bf-blender-cvs] [8d63293c46e] master: Curves: Avoid building evaluated point offsets for poly curves

2023-01-19 Thread Hans Goudey
Commit: 8d63293c46e9bd68f5fbeddae12a0d433461e2f1
Author: Hans Goudey
Date:   Thu Jan 19 15:22:54 2023 -0600
Branches: master
https://developer.blender.org/rB8d63293c46e9bd68f5fbeddae12a0d433461e2f1

Curves: Avoid building evaluated point offsets for poly curves

When all the curves are poly curves, skip the work of building a
separate array of offsets for the evaluated points (which are the
same as the control points). This saves 1-4ms on every reevaluation
in test files with many curves.

===

M   source/blender/blenkernel/intern/curves_geometry.cc

===

diff --git a/source/blender/blenkernel/intern/curves_geometry.cc 
b/source/blender/blenkernel/intern/curves_geometry.cc
index 52da64634b5..26a4f41db48 100644
--- a/source/blender/blenkernel/intern/curves_geometry.cc
+++ b/source/blender/blenkernel/intern/curves_geometry.cc
@@ -499,6 +499,14 @@ static void calculate_evaluated_offsets(const 
CurvesGeometry &curves,
 
 OffsetIndices CurvesGeometry::evaluated_points_by_curve() const
 {
+  if (this->is_single_type(CURVE_TYPE_POLY)) {
+/* When all the curves are poly curves, the evaluated offsets are the same 
as the control
+ * point offsets, so it's possible to completely avoid building a new 
offsets array. */
+this->runtime->offsets_cache_mutex.ensure(
+[&]() { this->runtime->evaluated_offsets_cache.clear_and_shrink(); });
+return this->points_by_curve();
+  }
+
   this->runtime->offsets_cache_mutex.ensure([&]() {
 this->runtime->evaluated_offsets_cache.resize(this->curves_num() + 1);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [baf69b064b9] master: Geometry Nodes: Avoid creating cyclic attribute when redundant

2023-01-19 Thread Hans Goudey
Commit: baf69b064b91e8300830ab4e7d9a86060d80f7d6
Author: Hans Goudey
Date:   Thu Jan 19 15:35:58 2023 -0600
Branches: master
https://developer.blender.org/rBbaf69b064b91e8300830ab4e7d9a86060d80f7d6

Geometry Nodes: Avoid creating cyclic attribute when redundant

The default when there is no cyclic attribute is that none of the curves
are cyclic. In the mesh to curve node, avoid creating the attribute with
just false to save time and memory usage. Also avoid looking up the
attribute twice in the trim node.

===

M   source/blender/geometry/intern/mesh_to_curve_convert.cc
M   source/blender/geometry/intern/trim_curves.cc

===

diff --git a/source/blender/geometry/intern/mesh_to_curve_convert.cc 
b/source/blender/geometry/intern/mesh_to_curve_convert.cc
index 06bef16dec7..22c925a1310 100644
--- a/source/blender/geometry/intern/mesh_to_curve_convert.cc
+++ b/source/blender/geometry/intern/mesh_to_curve_convert.cc
@@ -30,12 +30,16 @@ bke::CurvesGeometry create_curve_from_vert_indices(
   curves.offsets_for_write().last() = vert_indices.size();
   curves.fill_curve_types(CURVE_TYPE_POLY);
 
-  curves.cyclic_for_write().fill(false);
-  curves.cyclic_for_write().slice(cyclic_curves).fill(true);
-
   const bke::AttributeAccessor mesh_attributes = mesh.attributes();
   bke::MutableAttributeAccessor curves_attributes = 
curves.attributes_for_write();
 
+  if (!cyclic_curves.is_empty()) {
+bke::SpanAttributeWriter cyclic = 
curves_attributes.lookup_or_add_for_write_span(
+"cyclic", ATTR_DOMAIN_CURVE);
+cyclic.span.slice(cyclic_curves).fill(true);
+cyclic.finish();
+  }
+
   Set source_attribute_ids = mesh_attributes.all_ids();
 
   for (const bke::AttributeIDRef &attribute_id : source_attribute_ids) {
diff --git a/source/blender/geometry/intern/trim_curves.cc 
b/source/blender/geometry/intern/trim_curves.cc
index 3097c2e8c4a..b7faf54bdc5 100644
--- a/source/blender/geometry/intern/trim_curves.cc
+++ b/source/blender/geometry/intern/trim_curves.cc
@@ -1064,8 +1064,9 @@ bke::CurvesGeometry trim_curves(const bke::CurvesGeometry 
&src_curves,
   }
   else {
 /* Only trimmed curves are no longer cyclic.  */
-if (dst_curves.attributes().contains("cyclic")) {
-  dst_curves.cyclic_for_write().fill_indices(selection, false);
+if (bke::SpanAttributeWriter cyclic = 
dst_attributes.lookup_for_write_span("cyclic")) {
+  cyclic.span.fill_indices(selection, false);
+  cyclic.finish();
 }
 
 Set copy_point_skip;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [e12498e44e2] master: Cleanup: Avoid reallocations when evaluating curve in trim node

2023-01-19 Thread Hans Goudey
Commit: e12498e44e22b723c8772ef1ff0055a91cce6bef
Author: Hans Goudey
Date:   Thu Jan 19 14:16:31 2023 -0600
Branches: master
https://developer.blender.org/rBe12498e44e22b723c8772ef1ff0055a91cce6bef

Cleanup: Avoid reallocations when evaluating curve in trim node

Use the same method as the resample node to use a single vector for
each thread. This avoids an allocation for each attribute of each curve.

===

M   source/blender/geometry/intern/resample_curves.cc
M   source/blender/geometry/intern/trim_curves.cc

===

diff --git a/source/blender/geometry/intern/resample_curves.cc 
b/source/blender/geometry/intern/resample_curves.cc
index 64827fb6143..eac1d7d8d81 100644
--- a/source/blender/geometry/intern/resample_curves.cc
+++ b/source/blender/geometry/intern/resample_curves.cc
@@ -336,9 +336,7 @@ static CurvesGeometry resample_to_uniform(const 
CurvesGeometry &src_curves,
  dst.slice(dst_points));
   }
   else {
-const int evaluated_size = evaluated_points_by_curve.size(i_curve);
-evaluated_buffer.clear();
-evaluated_buffer.resize(sizeof(T) * evaluated_size);
+evaluated_buffer.reinitialize(sizeof(T) * 
evaluated_points_by_curve.size(i_curve));
 MutableSpan evaluated = 
evaluated_buffer.as_mutable_span().cast();
 src_curves.interpolate_to_evaluated(i_curve, 
src.slice(src_points), evaluated);
 
diff --git a/source/blender/geometry/intern/trim_curves.cc 
b/source/blender/geometry/intern/trim_curves.cc
index 0879718a73a..1ab330c3c0a 100644
--- a/source/blender/geometry/intern/trim_curves.cc
+++ b/source/blender/geometry/intern/trim_curves.cc
@@ -787,13 +787,15 @@ static void trim_evaluated_curves(const 
bke::CurvesGeometry &src_curves,
   using T = decltype(dummy);
 
   threading::parallel_for(selection.index_range(), 512, [&](const 
IndexRange range) {
+Vector evaluated_buffer;
 for (const int64_t curve_i : selection.slice(range)) {
+  const IndexRange src_points = src_points_by_curve[curve_i];
+
   /* Interpolate onto the evaluated point domain and sample the 
evaluated domain. */
-  GArray<> evaluated_data(CPPType::get(), 
src_evaluated_points_by_curve.size(curve_i));
-  GMutableSpan evaluated_span = evaluated_data.as_mutable_span();
-  src_curves.interpolate_to_evaluated(
-  curve_i, attribute.src.slice(src_points_by_curve[curve_i]), 
evaluated_span);
-  sample_interval_linear(evaluated_span.typed(),
+  evaluated_buffer.reinitialize(sizeof(T) * 
src_evaluated_points_by_curve.size(curve_i));
+  MutableSpan evaluated = 
evaluated_buffer.as_mutable_span().cast();
+  src_curves.interpolate_to_evaluated(curve_i, 
attribute.src.slice(src_points), evaluated);
+  sample_interval_linear(evaluated,
 attribute.dst.span.typed(),
 src_ranges[curve_i],
 dst_points_by_curve[curve_i],

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [4cfa4f7551e] master: Geometry Nodes: Parallelize flip faces node

2023-01-19 Thread Hans Goudey
Commit: 4cfa4f7551ee537bdefd99c0b3d93243fdcb729b
Author: Hans Goudey
Date:   Thu Jan 19 14:14:12 2023 -0600
Branches: master
https://developer.blender.org/rB4cfa4f7551ee537bdefd99c0b3d93243fdcb729b

Geometry Nodes: Parallelize flip faces node

I observed a 2x performance improvement for a large mesh.

===

M   source/blender/nodes/geometry/nodes/node_geo_flip_faces.cc

===

diff --git a/source/blender/nodes/geometry/nodes/node_geo_flip_faces.cc 
b/source/blender/nodes/geometry/nodes/node_geo_flip_faces.cc
index e88ade18764..561579aef88 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_flip_faces.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_flip_faces.cc
@@ -1,11 +1,10 @@
 /* SPDX-License-Identifier: GPL-2.0-or-later */
 
+#include "BLI_task.hh"
+
 #include "BKE_mesh.h"
 #include "BKE_mesh_runtime.h"
 
-#include "DNA_mesh_types.h"
-#include "DNA_meshdata_types.h"
-
 #include "BKE_attribute_math.hh"
 
 #include "node_geometry_util.hh"
@@ -33,16 +32,18 @@ static void mesh_flip_faces(Mesh &mesh, const Field 
&selection_field)
   const Span polys = mesh.polys();
   MutableSpan loops = mesh.loops_for_write();
 
-  for (const int i : selection.index_range()) {
-const MPoly &poly = polys[selection[i]];
-int start = poly.loopstart;
-for (const int j : IndexRange(poly.totloop / 2)) {
-  const int index1 = start + j + 1;
-  const int index2 = start + poly.totloop - j - 1;
-  std::swap(loops[index1].v, loops[index2].v);
-  std::swap(loops[index1 - 1].e, loops[index2].e);
+  threading::parallel_for(selection.index_range(), 1024, [&](const IndexRange 
range) {
+for (const int i : selection.slice(range)) {
+  const IndexRange poly(polys[i].loopstart, polys[i].totloop);
+  int start = poly.start();
+  for (const int j : IndexRange(poly.size() / 2)) {
+const int index1 = start + j + 1;
+const int index2 = start + poly.size() - j - 1;
+std::swap(loops[index1].v, loops[index2].v);
+std::swap(loops[index1 - 1].e, loops[index2].e);
+  }
 }
-  }
+  });
 
   MutableAttributeAccessor attributes = mesh.attributes_for_write();
   attributes.for_all(
@@ -56,10 +57,12 @@ static void mesh_flip_faces(Mesh &mesh, const Field 
&selection_field)
   attribute_math::convert_to_static_type(meta_data.data_type, [&](auto 
dummy) {
 using T = decltype(dummy);
 MutableSpan dst_span = attribute.span.typed();
-for (const int j : selection.index_range()) {
-  const MPoly &poly = polys[selection[j]];
-  dst_span.slice(poly.loopstart + 1, poly.totloop - 1).reverse();
-}
+threading::parallel_for(selection.index_range(), 1024, [&](const 
IndexRange range) {
+  for (const int i : selection.slice(range)) {
+const IndexRange poly(polys[i].loopstart, polys[i].totloop);
+dst_span.slice(poly.drop_front(1)).reverse();
+  }
+});
   });
   attribute.finish();
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [dfd63bf1e47] master: Curves: Avoid reallocations when evaluating NURBS curves

2023-01-19 Thread Hans Goudey
Commit: dfd63bf1e47ee4558ac0eb84c2ae3e8a31d8401d
Author: Hans Goudey
Date:   Thu Jan 19 14:29:14 2023 -0600
Branches: master
https://developer.blender.org/rBdfd63bf1e47ee4558ac0eb84c2ae3e8a31d8401d

Curves: Avoid reallocations when evaluating NURBS curves

I didn't detect a noticeable performance difference in a basic test,
but this is better in principle anyway.

===

M   source/blender/blenkernel/intern/curves_geometry.cc

===

diff --git a/source/blender/blenkernel/intern/curves_geometry.cc 
b/source/blender/blenkernel/intern/curves_geometry.cc
index 5944c557941..52da64634b5 100644
--- a/source/blender/blenkernel/intern/curves_geometry.cc
+++ b/source/blender/blenkernel/intern/curves_geometry.cc
@@ -562,6 +562,7 @@ void CurvesGeometry::ensure_nurbs_basis_cache() const
 const VArray knots_modes = this->nurbs_knots_modes();
 
 threading::parallel_for(nurbs_mask.index_range(), 64, [&](const IndexRange 
range) {
+  Vector knots;
   for (const int curve_index : nurbs_mask.slice(range)) {
 const IndexRange points = points_by_curve[curve_index];
 const IndexRange evaluated_points = 
evaluated_points_by_curve[curve_index];
@@ -575,8 +576,7 @@ void CurvesGeometry::ensure_nurbs_basis_cache() const
   continue;
 }
 
-const int knots_num = curves::nurbs::knots_num(points.size(), order, 
is_cyclic);
-Array knots(knots_num);
+knots.reinitialize(curves::nurbs::knots_num(points.size(), order, 
is_cyclic));
 curves::nurbs::calculate_knots(points.size(), mode, order, is_cyclic, 
knots);
 curves::nurbs::calculate_basis_cache(points.size(),
  evaluated_points.size(),

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [38a45e46bc9] master: Cleanup: Use OffsetIndices class in more cases

2023-01-19 Thread Hans Goudey
Commit: 38a45e46bc910c68ae3aa349c1ef3c72a34b6fc8
Author: Hans Goudey
Date:   Thu Jan 19 13:48:20 2023 -0600
Branches: master
https://developer.blender.org/rB38a45e46bc910c68ae3aa349c1ef3c72a34b6fc8

Cleanup: Use OffsetIndices class in more cases

The same logic from D17025 is used in other places in the curve code.
This patch uses the class for the evaluated point offsets and the Bezier
control point offsets. This helps to standardize the behavior and make
it easier to read.

Previously the Bezier control point offsets used a slightly different standard
where the first point was the first offset, just so they could have the same
size as the number of points. However two nodes used a helper function
to use the same `OffsetIndices` system, so switch to that there too.
That requires removing the subtraction by one to find the actual offset.

Also add const when accessing data arrays from curves, for consistency.

Differential Revision: https://developer.blender.org/D17038

===

M   source/blender/blenkernel/BKE_curves.hh
M   source/blender/blenkernel/intern/curve_bezier.cc
M   source/blender/blenkernel/intern/curve_catmull_rom.cc
M   source/blender/blenkernel/intern/curve_to_mesh_convert.cc
M   source/blender/blenkernel/intern/curves_geometry.cc
M   source/blender/blenkernel/intern/geometry_component_curves.cc
M   source/blender/blenlib/BLI_offset_indices.hh
M   source/blender/draw/intern/draw_cache_impl_curve.cc
M   source/blender/geometry/intern/fillet_curves.cc
M   source/blender/geometry/intern/resample_curves.cc
M   source/blender/geometry/intern/subdivide_curves.cc
M   source/blender/geometry/intern/trim_curves.cc
M   source/blender/nodes/geometry/nodes/node_geo_curve_fill.cc
M   source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc
M   source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc
M   source/blender/nodes/geometry/nodes/node_geo_input_tangent.cc

===

diff --git a/source/blender/blenkernel/BKE_curves.hh 
b/source/blender/blenkernel/BKE_curves.hh
index 6569629c71f..1b52fe709ac 100644
--- a/source/blender/blenkernel/BKE_curves.hh
+++ b/source/blender/blenkernel/BKE_curves.hh
@@ -30,17 +30,6 @@
 
 namespace blender::bke {
 
-template)>
-constexpr IndexRange offsets_to_range(Span offsets, int64_t index)
-{
-  BLI_assert(index >= 0);
-  BLI_assert(index < offsets.size());
-
-  const int offset = offsets[index];
-  const int offset_next = offsets[index + 1];
-  return {offset, offset_next - offset};
-}
-
 namespace curves::nurbs {
 
 struct BasisCache {
@@ -81,7 +70,7 @@ class CurvesGeometryRuntime {
* evaluated points, Bezier curve vector segments, different resolutions per 
curve, etc.
*/
   mutable Vector evaluated_offsets_cache;
-  mutable Vector bezier_evaluated_offsets;
+  mutable Vector all_bezier_evaluated_offsets;
   mutable CacheMutex offsets_cache_mutex;
 
   mutable Vector nurbs_basis_cache;
@@ -303,25 +292,14 @@ class CurvesGeometry : public ::CurvesGeometry {
   int evaluated_points_num() const;
 
   /**
-   * Access a range of indices of point data for a specific curve.
-   * Call #evaluated_offsets() first to ensure that the evaluated offsets 
cache is current.
-   */
-  IndexRange evaluated_points_for_curve(int index) const;
-  IndexRange evaluated_points_for_curves(IndexRange curves) const;
-
-  /**
-   * The index of the first evaluated point for every curve. The size of this 
span is one larger
-   * than the number of curves. Consider using #evaluated_points_for_curve 
rather than using the
-   * offsets directly.
+   * The offsets of every curve's evaluated points.
*/
-  Span evaluated_offsets() const;
-
-  /** Makes sure the data described by #evaluated_offsets if necessary. */
-  void ensure_evaluated_offsets() const;
+  OffsetIndices evaluated_points_by_curve() const;
 
   /**
-   * Retrieve offsets into a Bezier curve's evaluated points for each control 
point.
-   * Call #ensure_evaluated_offsets() first to ensure that the evaluated 
offsets cache is current.
+   * Retrieve offsets into a Bezier curve's evaluated points for each control 
point. Stored in the
+   * same format as #OffsetIndices. Call #evaluated_points_by_curve() first to 
ensure that the
+   * evaluated offsets cache is current.
*/
   Span bezier_evaluated_offsets_for_curve(int curve_index) const;
 
@@ -489,6 +467,17 @@ inline float3 decode_surface_bary_coord(const float2 &v)
   return {v.x, v.y, 1.0f - v.x - v.y};
 }
 
+/**
+ * Return a range used to retrieve values from an array of values stored per 
point, but with an
+ * extra element at the end of each curve. This is useful for offsets within 
curves, where it is
+ * convenient to store the first 0 and have the last offset be the total 
result curve size, using
+ * the same rules as #OffsetIndi

[Bf-blender-cvs] [76673e5fcfc] master: Cleanup: Use OffsetIndices abstraction in duplicate elements node

2023-01-19 Thread Hans Goudey
Commit: 76673e5fcfc814a8aca2ecd1f5d9cdf37a6a96d5
Author: Hans Goudey
Date:   Thu Jan 19 13:48:54 2023 -0600
Branches: master
https://developer.blender.org/rB76673e5fcfc814a8aca2ecd1f5d9cdf37a6a96d5

Cleanup: Use OffsetIndices abstraction in duplicate elements node

===

M   source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc

===

diff --git a/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc 
b/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc
index 480fd516360..90f089ae3df 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc
@@ -3,6 +3,7 @@
 #include "BLI_array_utils.hh"
 #include "BLI_map.hh"
 #include "BLI_noise.hh"
+#include "BLI_offset_indices.hh"
 #include "BLI_span.hh"
 #include "BLI_task.hh"
 
@@ -75,36 +76,27 @@ static Map 
gather_attributes_without_id(
   return attributes;
 };
 
-static IndexRange range_for_offsets_index(const Span offsets, const int 
index)
+static OffsetIndices accumulate_counts_to_offsets(const IndexMask 
selection,
+   const VArray 
&counts,
+   Array 
&r_offset_data)
 {
-  return {offsets[index], offsets[index + 1] - offsets[index]};
-}
-
-static Array accumulate_counts_to_offsets(const IndexMask selection,
-   const VArray &counts)
-{
-  Array offsets(selection.size() + 1);
-  int total = 0;
-  for (const int i : selection.index_range()) {
-offsets[i] = total;
-total += std::max(counts[selection[i]], 0);
-  }
-  offsets.last() = total;
-  return offsets;
+  r_offset_data.reinitialize(selection.size() + 1);
+  counts.materialize_compressed(selection, r_offset_data);
+  offset_indices::accumulate_counts_to_offsets(r_offset_data);
+  return OffsetIndices(r_offset_data);
 }
 
 /* Utility functions for threaded copying of attribute data where possible. */
 template
-static void threaded_slice_fill(Span offsets,
+static void threaded_slice_fill(const OffsetIndices offsets,
 const IndexMask selection,
-Span src,
+const Span src,
 MutableSpan dst)
 {
-  BLI_assert(offsets.last() == dst.size());
-  BLI_assert(selection.size() == offsets.size() - 1);
-  threading::parallel_for(IndexRange(offsets.size() - 1), 512, [&](IndexRange 
range) {
+  BLI_assert(offsets.total_size() == dst.size());
+  threading::parallel_for(selection.index_range(), 512, [&](IndexRange range) {
 for (const int i : range) {
-  dst.slice(range_for_offsets_index(offsets, i)).fill(src[selection[i]]);
+  dst.slice(offsets[i]).fill(src[selection[i]]);
 }
   });
 }
@@ -116,20 +108,20 @@ static void copy_hashed_ids(const Span src, const 
int hash, MutableSpan offsets,
+static void threaded_id_offset_copy(const OffsetIndices offsets,
 const Span src,
-MutableSpan dst)
+MutableSpan all_dst)
 {
-  BLI_assert(offsets.last() == dst.size());
-  threading::parallel_for(IndexRange(offsets.size() - 1), 512, [&](IndexRange 
range) {
+  BLI_assert(offsets.total_size() == all_dst.size());
+  threading::parallel_for(IndexRange(offsets.ranges_num()), 512, 
[&](IndexRange range) {
 for (const int i : range) {
-  dst[offsets[i]] = src[i];
-  const int count = offsets[i + 1] - offsets[i];
-  if (count == 0) {
+  MutableSpan dst = all_dst.slice(offsets[i]);
+  if (dst.is_empty()) {
 continue;
   }
-  for (const int i_duplicate : IndexRange(1, count - 1)) {
-dst[offsets[i] + i_duplicate] = noise::hash(src[i], i_duplicate);
+  dst.first() = src[i];
+  for (const int i_duplicate : dst.index_range().drop_front(1)) {
+dst[i_duplicate] = noise::hash(src[i], i_duplicate);
   }
 }
   });
@@ -140,13 +132,12 @@ static void 
create_duplicate_index_attribute(bke::MutableAttributeAccessor attri
  const eAttrDomain output_domain,
  const IndexMask selection,
  const IndexAttributes 
&attribute_outputs,
- const Span offsets)
+ const OffsetIndices offsets)
 {
   SpanAttributeWriter duplicate_indices = 
attributes.lookup_or_add_for_write_only_span(
   attribute_outputs.duplicate_index.get(), output_domain);
   for (const int i : IndexRange(selection.size())) {
-const IndexRange range = 

[Bf-blender-cvs] [d3ea9316475] master: Fix: Compile error from designated initializers in C++

2023-01-19 Thread Hans Goudey
Commit: d3ea9316475a605f250d28482a132fce40ce46d4
Author: Hans Goudey
Date:   Thu Jan 19 13:35:37 2023 -0600
Branches: master
https://developer.blender.org/rBd3ea9316475a605f250d28482a132fce40ce46d4

Fix: Compile error from designated initializers in C++

===

M   source/blender/blenkernel/intern/nla_test.cc

===

diff --git a/source/blender/blenkernel/intern/nla_test.cc 
b/source/blender/blenkernel/intern/nla_test.cc
index e6875fff1ce..2f670ef69e5 100644
--- a/source/blender/blenkernel/intern/nla_test.cc
+++ b/source/blender/blenkernel/intern/nla_test.cc
@@ -3,43 +3,40 @@
 
 #include "BKE_nla.h"
 
-#include "DNA_nla_types.h"
 #include "DNA_anim_types.h"
+#include "DNA_nla_types.h"
 
 #include "MEM_guardedalloc.h"
 
 #include "testing/testing.h"
 
-
 namespace blender::bke::tests {
 
 TEST(nla_strip, BKE_nlastrip_recalculate_blend)
 {
-
-  NlaStrip strip = {
-.blendin = 4.0,
-.blendout = 5.0,
-.start = 1,
-.end = 10
-  };
+  NlaStrip strip{};
+  strip.blendin = 4.0;
+  strip.blendout = 5.0;
+  strip.start = 1;
+  strip.end = 10;
 
   /* Scaling a strip up doesn't affect the blend in/out value */
-strip.end = 20;
-BKE_nlastrip_recalculate_blend(&strip);
-EXPECT_FLOAT_EQ(strip.blendin, 4.0);
-EXPECT_FLOAT_EQ(strip.blendout, 5.0);
+  strip.end = 20;
+  BKE_nlastrip_recalculate_blend(&strip);
+  EXPECT_FLOAT_EQ(strip.blendin, 4.0);
+  EXPECT_FLOAT_EQ(strip.blendout, 5.0);
 
   /* Scaling a strip down affects the blend-in value before the blend-out 
value  */
-strip.end = 7;
-BKE_nlastrip_recalculate_blend(&strip);
-EXPECT_FLOAT_EQ(strip.blendin, 1.0);
-EXPECT_FLOAT_EQ(strip.blendout, 5.0);
-
-/* Scaling a strip down to nothing updates the blend in/out values 
accordingly  */
-strip.end = 1.1;
-BKE_nlastrip_recalculate_blend(&strip);
-EXPECT_FLOAT_EQ(strip.blendin, 0.0);
-EXPECT_FLOAT_EQ(strip.blendout, 0.1);
+  strip.end = 7;
+  BKE_nlastrip_recalculate_blend(&strip);
+  EXPECT_FLOAT_EQ(strip.blendin, 1.0);
+  EXPECT_FLOAT_EQ(strip.blendout, 5.0);
+
+  /* Scaling a strip down to nothing updates the blend in/out values 
accordingly  */
+  strip.end = 1.1;
+  BKE_nlastrip_recalculate_blend(&strip);
+  EXPECT_FLOAT_EQ(strip.blendin, 0.0);
+  EXPECT_FLOAT_EQ(strip.blendout, 0.1);
 }
 
 }  // namespace blender::bke::tests

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [e7af2503c5f] master: Cleanup: Fix unused variable warning in merge by distance

2023-01-19 Thread Hans Goudey
Commit: e7af2503c5f325fdf24ade8a53f31d8409f6e580
Author: Hans Goudey
Date:   Thu Jan 19 11:53:32 2023 -0600
Branches: master
https://developer.blender.org/rBe7af2503c5f325fdf24ade8a53f31d8409f6e580

Cleanup: Fix unused variable warning in merge by distance

===

M   source/blender/geometry/intern/mesh_merge_by_distance.cc

===

diff --git a/source/blender/geometry/intern/mesh_merge_by_distance.cc 
b/source/blender/geometry/intern/mesh_merge_by_distance.cc
index 0d1cdf93133..5374a6c08cd 100644
--- a/source/blender/geometry/intern/mesh_merge_by_distance.cc
+++ b/source/blender/geometry/intern/mesh_merge_by_distance.cc
@@ -1006,13 +1006,14 @@ static void weld_poly_split_recursive(Span 
vert_dest_map,
  *  done to reduce allocations.
  * \return r_weld_mesh: Loop and poly members will be configured here.
  */
-static void weld_poly_loop_ctx_setup_collapsed_and_split(Span mloop,
+static void weld_poly_loop_ctx_setup_collapsed_and_split(
 #ifdef USE_WELD_DEBUG
- Span mpoly,
+Span mloop,
+Span mpoly,
 #endif
- Span 
vert_dest_map,
- const int 
remain_edge_ctx_len,
- WeldMesh *r_weld_mesh)
+Span vert_dest_map,
+const int remain_edge_ctx_len,
+WeldMesh *r_weld_mesh)
 {
   if (remain_edge_ctx_len == 0) {
 r_weld_mesh->poly_kill_len = r_weld_mesh->wpoly.size();
@@ -1262,13 +1263,14 @@ static void weld_mesh_context_create(const Mesh &mesh,
 
   weld_poly_loop_ctx_alloc(polys, loops, vert_dest_map, edge_dest_map, 
r_weld_mesh);
 
-  weld_poly_loop_ctx_setup_collapsed_and_split(loops,
+  weld_poly_loop_ctx_setup_collapsed_and_split(
 #ifdef USE_WELD_DEBUG
-   polys,
+  loops,
+  polys,
 #endif
-   vert_dest_map,
-   wedge.size() - 
r_weld_mesh->edge_kill_len,
-   r_weld_mesh);
+  vert_dest_map,
+  wedge.size() - r_weld_mesh->edge_kill_len,
+  r_weld_mesh);
 
   weld_poly_find_doubles(loops,
 #ifdef USE_WELD_DEBUG

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [2a41e0822ad] master: Fix T103911: Custom property edit gets wrong existing default

2023-01-19 Thread Hans Goudey
Commit: 2a41e0822ad8af7aa68ab112cec8557a5b1f64fe
Author: Hans Goudey
Date:   Thu Jan 19 11:14:56 2023 -0600
Branches: master
https://developer.blender.org/rB2a41e0822ad8af7aa68ab112cec8557a5b1f64fe

Fix T103911: Custom property edit gets wrong existing default

The array length was wrong for all types after 0e89d2431840386fe9b, and
a typo meant that the boolean defaults were assigned to the int defaults.

===

M   release/scripts/startup/bl_operators/wm.py

===

diff --git a/release/scripts/startup/bl_operators/wm.py 
b/release/scripts/startup/bl_operators/wm.py
index b8f5fc596c3..cb881ad024e 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -1587,8 +1587,9 @@ class WM_OT_properties_edit(Operator):
 elif self.property_type == 'STRING':
 self.default_string = rna_data["default"]
 elif self.property_type in {'BOOL', 'BOOL_ARRAY'}:
-self.default_int = 
self._convert_new_value_array(rna_data["default"], bool, 32)
-elif self.property_type in {'FLOAT_ARRAY', 'INT_ARRAY', 'BOOL_ARRAY'}:
+self.default_bool = 
self._convert_new_value_array(rna_data["default"], bool, 32)
+
+if self.property_type in {'FLOAT_ARRAY', 'INT_ARRAY', 'BOOL_ARRAY'}:
 self.array_length = len(item[name])
 
 # The dictionary does not contain the description if it was empty.

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [d300fe01ac2] refactor-mesh-corners-generic: Cleanup: Make naming more consistent

2023-01-18 Thread Hans Goudey
Commit: d300fe01ac2b0f449af7eb1deb7280c6dff181e1
Author: Hans Goudey
Date:   Wed Jan 18 19:33:14 2023 -0600
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rBd300fe01ac2b0f449af7eb1deb7280c6dff181e1

Cleanup: Make naming more consistent

Avoid _i prefix which doesn't really help

===

M   source/blender/blenkernel/intern/curve_to_mesh_convert.cc
M   source/blender/blenkernel/intern/geometry_component_mesh.cc
M   source/blender/blenkernel/intern/mesh.cc
M   source/blender/blenkernel/intern/mesh_iterators.cc
M   source/blender/blenkernel/intern/mesh_mapping.cc
M   source/blender/blenkernel/intern/mesh_normals.cc
M   source/blender/blenkernel/intern/mesh_remap.cc
M   source/blender/blenkernel/intern/mesh_sample.cc
M   source/blender/blenkernel/intern/mesh_validate.cc
M   source/blender/blenkernel/intern/subdiv_converter_mesh.c
M   source/blender/blenkernel/intern/subdiv_foreach.c
M   source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edge_fac.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_pos.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_uv.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_lnor.cc
M   
source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_mesh_analysis.cc
M   
source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_select_idx.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_weights.cc
M   source/blender/editors/sculpt_paint/sculpt_face_set.cc
M   source/blender/editors/transform/transform_snap_object.cc
M   source/blender/geometry/intern/realize_instances.cc
M   source/blender/io/alembic/exporter/abc_writer_mesh.cc
M   source/blender/io/alembic/intern/abc_reader_mesh.cc
M   source/blender/io/usd/intern/usd_writer_mesh.cc
M   source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc
M   source/blender/io/wavefront_obj/importer/obj_import_mesh.cc
M   source/blender/nodes/geometry/nodes/node_geo_blur_attribute.cc
M   source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
M   source/blender/nodes/geometry/nodes/node_geo_delete_geometry.cc
M   source/blender/nodes/geometry/nodes/node_geo_dual_mesh.cc
M   source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc
M   source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
M   source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_angle.cc
M   
source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_neighbors.cc
M   
source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_is_planar.cc
M   
source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_neighbors.cc
M   
source/blender/nodes/geometry/nodes/node_geo_input_mesh_vertex_neighbors.cc
M   source/blender/nodes/geometry/nodes/node_geo_scale_elements.cc
M   source/blender/nodes/geometry/nodes/node_geo_uv_pack_islands.cc
M   source/blender/nodes/geometry/nodes/node_geo_uv_unwrap.cc

===

diff --git a/source/blender/blenkernel/intern/curve_to_mesh_convert.cc 
b/source/blender/blenkernel/intern/curve_to_mesh_convert.cc
index 364606e0cb3..1e40ef9a24a 100644
--- a/source/blender/blenkernel/intern/curve_to_mesh_convert.cc
+++ b/source/blender/blenkernel/intern/curve_to_mesh_convert.cc
@@ -144,7 +144,6 @@ static void fill_mesh_topology(const int vert_offset,
   corner_edges[cap_loop_offset + i] = profile_edges_start + ((i == 
(profile_segment_num - 1)) ?
  
(profile_segment_num - 1) :
  (i_inv - 
1));
-
   corner_verts[cap_loop_offset + profile_segment_num + i] = 
last_ring_vert_offset + i;
   corner_edges[cap_loop_offset + profile_segment_num + i] = 
last_ring_edge_offset + i;
 }
diff --git a/source/blender/blenkernel/intern/geometry_component_mesh.cc 
b/source/blender/blenkernel/intern/geometry_component_mesh.cc
index 2aafa3b7879..bdf41c43509 100644
--- a/source/blender/blenkernel/intern/geometry_component_mesh.cc
+++ b/source/blender/blenkernel/intern/geometry_component_mesh.cc
@@ -177,8 +177,8 @@ static void adapt_mesh_domain_corner_to_point_impl(const 
Mesh &mesh,
   const Span corner_verts = mesh.corner_verts();
 
   attribute_math::DefaultMixer mixer(r_values);
-  for (const int corner_i : IndexRange(mesh.totloop)) {
-mixer.mix_in(corner_verts[corner_i], old_values[corner_i]);
+  for (const int corner : IndexRange(mesh.totloop)) {
+mixer.mix_in(corner_verts[corner], old_values[corner]);
   }
   mixer.finalize();
 }
@@ -195,11 +195,11 @@ void adapt_mesh_domain_corner_to_point_impl(const Mesh 
&mesh,
   Array loose_verts(mesh.totvert, true);
 
   r_values.fill(true);
-  for (const

[Bf-blender-cvs] [37d5248b2ac] refactor-mesh-corners-generic: Merge branch 'master' into refactor-mesh-corners-generic

2023-01-18 Thread Hans Goudey
Commit: 37d5248b2accd54ac7f4ab4cf58461a7e5e52285
Author: Hans Goudey
Date:   Wed Jan 18 18:33:51 2023 -0600
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rB37d5248b2accd54ac7f4ab4cf58461a7e5e52285

Merge branch 'master' into refactor-mesh-corners-generic

===



===

diff --cc source/blender/blenkernel/BKE_mesh.h
index c3ff1a14972,557b70b8a11..653a2407887
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@@ -472,11 -473,9 +473,10 @@@ void BKE_mesh_ensure_normals_for_displa
   * Used when defining an empty custom loop normals data layer,
   * to keep same shading as with auto-smooth!
   */
- void BKE_edges_sharp_from_angle_set(struct MEdge *medges,
- int numEdges,
+ void BKE_edges_sharp_from_angle_set(int numEdges,
 -const struct MLoop *mloops,
 -int numLoops,
 +const int *corner_verts,
 +const int *corner_edges,
 +int corners_num,
  const struct MPoly *mpolys,
  const float (*poly_normals)[3],
  int numPolys,
@@@ -615,10 -617,9 +619,10 @@@ void BKE_mesh_normals_loop_split(const 
  void BKE_mesh_normals_loop_custom_set(const float (*vert_positions)[3],
const float (*vert_normals)[3],
int numVerts,
-   struct MEdge *medges,
+   const struct MEdge *medges,
int numEdges,
 -  const struct MLoop *mloops,
 +  const int *corner_verts,
 +  const int *corner_edges,
float (*r_custom_loop_normals)[3],
int numLoops,
const struct MPoly *mpolys,
@@@ -629,11 -631,10 +634,11 @@@ void BKE_mesh_normals_loop_custom_from_
   const float 
(*vert_normals)[3],
   float 
(*r_custom_vert_normals)[3],
   int numVerts,
-  struct MEdge *medges,
+  const struct MEdge *medges,
   int numEdges,
 - const struct MLoop *mloops,
 - int numLoops,
 + const int *corner_verts,
 + const int *corner_edges,
 + int corners_num,
   const struct MPoly *mpolys,
   const float 
(*poly_normals)[3],
   int numPolys,
@@@ -756,9 -759,9 +762,10 @@@ void BKE_mesh_polygon_flip_ex(const str
struct MDisps *mdisp,
bool use_loop_mdisp_flip);
  void BKE_mesh_polygon_flip(const struct MPoly *mpoly,
 -   struct MLoop *mloop,
 +   int *corner_verts,
 +   int *corner_edges,
-struct CustomData *ldata);
+struct CustomData *ldata,
+int totloop);
  /**
   * Flip (invert winding of) all polygons (used to inverse their normals).
   *
@@@ -1018,27 -1019,16 +1025,27 @@@ BLI_INLINE const MPoly *BKE_mesh_polys(
  }
  BLI_INLINE MPoly *BKE_mesh_polys_for_write(Mesh *mesh)
  {
-   return (MPoly *)CustomData_duplicate_referenced_layer(&mesh->pdata, 
CD_MPOLY, mesh->totpoly);
+   return (MPoly *)CustomData_get_layer_for_write(&mesh->pdata, CD_MPOLY, 
mesh->totpoly);
  }
  
 -BLI_INLINE const MLoop *BKE_mesh_loops(const Mesh *mesh)
 +BLI_INLINE const int *BKE_mesh_corner_verts(const Mesh *mesh)
  {
 -  return (const MLoop *)CustomData_get_layer(&mesh->ldata, CD_MLOOP);
 +  return (const int *)CustomData_get_layer_named(&mesh->ldata, CD_PROP_INT32, 
".corner_vert");
  }
 -BLI_INLINE MLoop *BKE_mesh_loops_for_write(Mesh *mesh)
 +BLI_INLINE int *BKE_mesh_corner_verts_for_write(Mesh *mesh)
  {
-   return (int *)CustomData_duplicate_referenced_layer_named(
 -  return (MLoop *)CustomData_get_layer_for_write(&a

[Bf-blender-cvs] [2a98a1c1335] refactor-mesh-corners-generic: Avoid allocating vertex indices in obj exporter

2023-01-18 Thread Hans Goudey
Commit: 2a98a1c13355021c504a86baf29a096bb4a273d0
Author: Hans Goudey
Date:   Wed Jan 18 18:44:15 2023 -0600
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rB2a98a1c13355021c504a86baf29a096bb4a273d0

Avoid allocating vertex indices in obj exporter

===

M   source/blender/io/wavefront_obj/exporter/obj_export_file_writer.cc
M   source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc
M   source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh

===

diff --git a/source/blender/io/wavefront_obj/exporter/obj_export_file_writer.cc 
b/source/blender/io/wavefront_obj/exporter/obj_export_file_writer.cc
index 6957e07dadd..9a59ccd50c9 100644
--- a/source/blender/io/wavefront_obj/exporter/obj_export_file_writer.cc
+++ b/source/blender/io/wavefront_obj/exporter/obj_export_file_writer.cc
@@ -348,7 +348,7 @@ void OBJWriter::write_poly_elements(FormatHandler &fh,
 int prev_i = obj_mesh_data.remap_poly_index(idx - 1);
 int i = obj_mesh_data.remap_poly_index(idx);
 
-Vector poly_vertex_indices = 
obj_mesh_data.calc_poly_vertex_indices(i);
+Span poly_vertex_indices = obj_mesh_data.calc_poly_vertex_indices(i);
 Span poly_uv_indices = obj_mesh_data.calc_poly_uv_indices(i);
 Vector poly_normal_indices = 
obj_mesh_data.calc_poly_normal_indices(i);
 
diff --git a/source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc 
b/source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc
index 181ead5e335..1ce118d290f 100644
--- a/source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc
+++ b/source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc
@@ -276,7 +276,7 @@ float3 OBJMesh::calc_vertex_coords(const int vert_index, 
const float global_scal
   return r_coords;
 }
 
-Vector OBJMesh::calc_poly_vertex_indices(const int poly_index) const
+Span OBJMesh::calc_poly_vertex_indices(const int poly_index) const
 {
   const MPoly &mpoly = mesh_polys_[poly_index];
   return mesh_corner_verts_.slice(mpoly.loopstart, mpoly.totloop);
diff --git a/source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh 
b/source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh
index 1540ced36bb..2b0ce326bd4 100644
--- a/source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh
+++ b/source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh
@@ -151,7 +151,7 @@ class OBJMesh : NonCopyable {
   /**
* Calculate vertex indices of all vertices of the polygon at the given 
index.
*/
-  Vector calc_poly_vertex_indices(int poly_index) const;
+  Span calc_poly_vertex_indices(int poly_index) const;
   /**
* Calculate UV vertex coordinates of an Object.
* Stores the coordinates and UV vertex indices in the member variables.

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [83f9218801d] master: Cleanup: Remove unused/redundant includes from curves/pointcloud draw

2023-01-18 Thread Hans Goudey
Commit: 83f9218801d4b6c8dd5e20897df47f562c04cea7
Author: Hans Goudey
Date:   Wed Jan 18 18:14:44 2023 -0600
Branches: master
https://developer.blender.org/rB83f9218801d4b6c8dd5e20897df47f562c04cea7

Cleanup: Remove unused/redundant includes from curves/pointcloud draw

===

M   source/blender/draw/intern/draw_attributes.h
M   source/blender/draw/intern/draw_curves.cc
M   source/blender/draw/intern/draw_pointcloud.cc

===

diff --git a/source/blender/draw/intern/draw_attributes.h 
b/source/blender/draw/intern/draw_attributes.h
index 00621c711bf..223c2a26c60 100644
--- a/source/blender/draw/intern/draw_attributes.h
+++ b/source/blender/draw/intern/draw_attributes.h
@@ -14,7 +14,6 @@
 #endif
 
 #include "DNA_customdata_types.h"
-#include "DNA_meshdata_types.h"
 
 #include "BKE_attribute.h"
 
diff --git a/source/blender/draw/intern/draw_curves.cc 
b/source/blender/draw/intern/draw_curves.cc
index 166d3ac8426..8bb786827f3 100644
--- a/source/blender/draw/intern/draw_curves.cc
+++ b/source/blender/draw/intern/draw_curves.cc
@@ -11,10 +11,8 @@
 #include "BLI_utildefines.h"
 
 #include "DNA_curves_types.h"
-#include "DNA_customdata_types.h"
 
 #include "BKE_curves.hh"
-#include "BKE_geometry_set.hh"
 
 #include "GPU_batch.h"
 #include "GPU_capabilities.h"
diff --git a/source/blender/draw/intern/draw_pointcloud.cc 
b/source/blender/draw/intern/draw_pointcloud.cc
index 582dc690cee..4f228addffb 100644
--- a/source/blender/draw/intern/draw_pointcloud.cc
+++ b/source/blender/draw/intern/draw_pointcloud.cc
@@ -3,19 +3,13 @@
 
 /** \file
  * \ingroup draw
- *
- * \brief Contains procedural GPU hair drawing methods.
  */
 
 #include "BLI_string_utils.h"
 #include "BLI_utildefines.h"
 
-#include "DNA_customdata_types.h"
 #include "DNA_pointcloud_types.h"
 
-#include "BKE_curves.hh"
-#include "BKE_geometry_set.hh"
-
 #include "GPU_batch.h"
 #include "GPU_capabilities.h"
 #include "GPU_compute.h"

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [6c4e3a9e517] master: Curves: Deduplicate and parallelize point to curve map creation

2023-01-18 Thread Hans Goudey
Commit: 6c4e3a9e517840bb69260f2ad46748e1dc655e32
Author: Hans Goudey
Date:   Wed Jan 18 16:41:10 2023 -0600
Branches: master
https://developer.blender.org/rB6c4e3a9e517840bb69260f2ad46748e1dc655e32

Curves: Deduplicate and parallelize point to curve map creation

There is a utility method on `CurvesGeometry` to build a map of the
curve for each point. Use that in two more places and make sure its
implementation is multithreaded, which gives a slight speedup
in a simple test file.

===

M   source/blender/blenkernel/intern/curves_geometry.cc
M   source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc

===

diff --git a/source/blender/blenkernel/intern/curves_geometry.cc 
b/source/blender/blenkernel/intern/curves_geometry.cc
index b2cd7cf5cae..0f24d9ea640 100644
--- a/source/blender/blenkernel/intern/curves_geometry.cc
+++ b/source/blender/blenkernel/intern/curves_geometry.cc
@@ -536,9 +536,11 @@ Array CurvesGeometry::point_to_curve_map() const
 {
   const OffsetIndices points_by_curve = this->points_by_curve();
   Array map(this->points_num());
-  for (const int i : this->curves_range()) {
-map.as_mutable_span().slice(points_by_curve[i]).fill(i);
-  }
+  threading::parallel_for(this->curves_range(), 1024, [&](const IndexRange 
range) {
+for (const int i_curve : range) {
+  map.as_mutable_span().slice(points_by_curve[i_curve]).fill(i_curve);
+}
+  });
   return map;
 }
 
@@ -1075,28 +1077,13 @@ static void copy_with_map(const GSpan src, const 
Span map, GMutableSpan dst
   });
 }
 
-/**
- * Builds an array that for every point, contains the corresponding curve 
index.
- */
-static Array build_point_to_curve_map(const CurvesGeometry &curves)
-{
-  const OffsetIndices points_by_curve = curves.points_by_curve();
-  Array point_to_curve_map(curves.points_num());
-  threading::parallel_for(curves.curves_range(), 1024, [&](const IndexRange 
curves_range) {
-for (const int i_curve : curves_range) {
-  
point_to_curve_map.as_mutable_span().slice(points_by_curve[i_curve]).fill(i_curve);
-}
-  });
-  return point_to_curve_map;
-}
-
 static CurvesGeometry copy_with_removed_points(
 const CurvesGeometry &curves,
 const IndexMask points_to_delete,
 const AnonymousAttributePropagationInfo &propagation_info)
 {
   /* Use a map from points to curves to facilitate using an #IndexMask input. 
*/
-  const Array point_to_curve_map = build_point_to_curve_map(curves);
+  const Array point_to_curve_map = curves.point_to_curve_map();
 
   const Vector copy_point_ranges = 
points_to_delete.extract_ranges_invert(
   curves.points_range());
diff --git a/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc 
b/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc
index b3017a569eb..480fd516360 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc
@@ -821,14 +821,7 @@ static void duplicate_points_curve(GeometrySet 
&geometry_set,
   Array offsets = accumulate_counts_to_offsets(selection, counts);
   const int dst_num = offsets.last();
 
-  const OffsetIndices src_points_by_curve = src_curves.points_by_curve();
-  Array point_to_curve_map(src_curves.points_num());
-  threading::parallel_for(src_curves.curves_range(), 1024, [&](const 
IndexRange range) {
-for (const int i_curve : range) {
-  const IndexRange points = src_points_by_curve[i_curve];
-  point_to_curve_map.as_mutable_span().slice(points).fill(i_curve);
-}
-  });
+  const Array point_to_curve_map = src_curves.point_to_curve_map();
 
   Curves *new_curves_id = bke::curves_new_nomain(dst_num, dst_num);
   bke::curves_copy_parameters(src_curves_id, *new_curves_id);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [9179362e7b0] master: Geometry Nodes: Prefer evaluate at index value input in search

2023-01-17 Thread Hans Goudey
Commit: 9179362e7b05d334ec8490bcdd6d04c05af4a81a
Author: Hans Goudey
Date:   Tue Jan 17 19:43:36 2023 -0600
Branches: master
https://developer.blender.org/rB9179362e7b05d334ec8490bcdd6d04c05af4a81a

Geometry Nodes: Prefer evaluate at index value input in search

Give the "Value" input a higher search weight than the "Index"
input, since it's more likely that users will want to connect to
that. Based on feedback from Simon Thommes.

===

M   source/blender/nodes/geometry/nodes/node_geo_evaluate_at_index.cc

===

diff --git a/source/blender/nodes/geometry/nodes/node_geo_evaluate_at_index.cc 
b/source/blender/nodes/geometry/nodes/node_geo_evaluate_at_index.cc
index 65f88f23aff..68d309c0bf4 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_evaluate_at_index.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_evaluate_at_index.cc
@@ -131,9 +131,6 @@ static void node_update(bNodeTree *ntree, bNode *node)
 
 static void node_gather_link_searches(GatherLinkSearchOpParams ¶ms)
 {
-  const NodeDeclaration &declaration = *params.node_type().fixed_declaration;
-  search_link_ops_for_declarations(params, 
declaration.inputs.as_span().take_front(1));
-
   const bNodeType &node_type = params.node_type();
   const std::optional type = 
node_data_type_to_custom_data_type(
   (eNodeSocketDatatype)params.other_socket().type);
@@ -143,6 +140,14 @@ static void 
node_gather_link_searches(GatherLinkSearchOpParams ¶ms)
   node.custom2 = *type;
   params.update_and_connect_available_socket(node, "Value");
 });
+params.add_item(
+IFACE_("Index"),
+[node_type, type](LinkSearchOpParams ¶ms) {
+  bNode &node = params.add_node(node_type);
+  node.custom2 = *type;
+  params.update_and_connect_available_socket(node, "Index");
+},
+-1);
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [301119619c9] master: Curves: Remove attribute retrieval, deduplicate evaluation logic

2023-01-17 Thread Hans Goudey
Commit: 301119619c96aac2c6c3ec3a83bc16c5b3110469
Author: Hans Goudey
Date:   Tue Jan 17 14:40:01 2023 -0600
Branches: master
https://developer.blender.org/rB301119619c96aac2c6c3ec3a83bc16c5b3110469

Curves: Remove attribute retrieval, deduplicate evaluation logic

Avoid calling `interpolate_to_evaluate` while evaluating normals,
which has to look up attributes by name for every curve. Also avoid
duplicating the curve type switch in a few functions. I didn't observe
a performance difference, but theoretically this could reduce
overhead for many small curves.

===

M   source/blender/blenkernel/intern/curves_geometry.cc

===

diff --git a/source/blender/blenkernel/intern/curves_geometry.cc 
b/source/blender/blenkernel/intern/curves_geometry.cc
index 0dc6a24fd9e..133521bc298 100644
--- a/source/blender/blenkernel/intern/curves_geometry.cc
+++ b/source/blender/blenkernel/intern/curves_geometry.cc
@@ -716,14 +716,57 @@ static void 
rotate_directions_around_axes(MutableSpan directions,
   }
 }
 
+static void evaluate_generic_data_for_curve(
+const int curve_index,
+const IndexRange points,
+const VArray &types,
+const VArray &cyclic,
+const VArray &resolution,
+const Span bezier_evaluated_offsets,
+const Span nurbs_basis_cache,
+const VArray &nurbs_orders,
+const Span nurbs_weights,
+const GSpan src,
+GMutableSpan dst)
+{
+  switch (types[curve_index]) {
+case CURVE_TYPE_CATMULL_ROM:
+  curves::catmull_rom::interpolate_to_evaluated(
+  src, cyclic[curve_index], resolution[curve_index], dst);
+  break;
+case CURVE_TYPE_POLY:
+  dst.copy_from(src);
+  break;
+case CURVE_TYPE_BEZIER:
+  curves::bezier::interpolate_to_evaluated(src, 
bezier_evaluated_offsets.slice(points), dst);
+  break;
+case CURVE_TYPE_NURBS:
+  curves::nurbs::interpolate_to_evaluated(nurbs_basis_cache[curve_index],
+  nurbs_orders[curve_index],
+  nurbs_weights.slice_safe(points),
+  src,
+  dst);
+  break;
+  }
+}
+
 Span CurvesGeometry::evaluated_normals() const
 {
   this->runtime->normal_cache_mutex.ensure([&]() {
-const Span evaluated_tangents = this->evaluated_tangents();
+const VArray types = this->curve_types();
 const VArray cyclic = this->cyclic();
 const VArray normal_mode = this->normal_mode();
-const VArray types = this->curve_types();
+const VArray resolution = this->resolution();
+const VArray nurbs_orders = this->nurbs_orders();
+const Span nurbs_weights = this->nurbs_weights();
+
+const Span evaluated_tangents = this->evaluated_tangents();
 const VArray tilt = this->tilt();
+VArraySpan tilt_span;
+const bool use_tilt = !(tilt.is_single() && tilt.get_internal_single() == 
0.0f);
+if (use_tilt) {
+  tilt_span = tilt;
+}
 
 this->runtime->evaluated_normal_cache.resize(this->evaluated_points_num());
 MutableSpan evaluated_normals = 
this->runtime->evaluated_normal_cache;
@@ -748,19 +791,26 @@ Span CurvesGeometry::evaluated_normals() const
 
 /* If the "tilt" attribute exists, rotate the normals around the 
tangents by the
  * evaluated angles. We can avoid copying the tilts to evaluate them 
for poly curves. */
-if (!(tilt.is_single() && tilt.get_internal_single() == 0.0f)) {
+if (use_tilt) {
   const IndexRange points = this->points_for_curve(curve_index);
-  Span curve_tilt = tilt.get_internal_span().slice(points);
   if (types[curve_index] == CURVE_TYPE_POLY) {
 
rotate_directions_around_axes(evaluated_normals.slice(evaluated_points),
   
evaluated_tangents.slice(evaluated_points),
-  curve_tilt);
+  tilt_span.slice(points));
   }
   else {
-evaluated_tilts.clear();
-evaluated_tilts.resize(evaluated_points.size());
-this->interpolate_to_evaluated(
-curve_index, curve_tilt, evaluated_tilts.as_mutable_span());
+evaluated_tilts.reinitialize(evaluated_points.size());
+evaluate_generic_data_for_curve(curve_index,
+points,
+types,
+cyclic,
+resolution,
+
this->runtime->bezier_evaluated_offsets.as_span(),
+

[Bf-blender-cvs] [d42d4e339f2] master: Cleanup: Remove unnecessary includes in geometry set header

2023-01-17 Thread Hans Goudey
Commit: d42d4e339f20a0eb95b9f333159edea446e8b364
Author: Hans Goudey
Date:   Tue Jan 17 12:45:51 2023 -0600
Branches: master
https://developer.blender.org/rBd42d4e339f20a0eb95b9f333159edea446e8b364

Cleanup: Remove unnecessary includes in geometry set header

===

M   source/blender/blenkernel/BKE_geometry_fields.hh
M   source/blender/blenkernel/BKE_geometry_set.hh
M   source/blender/blenkernel/BKE_geometry_set_instances.hh
M   source/blender/nodes/geometry/node_geometry_util.hh
M   source/blender/nodes/intern/node_socket.cc

===

diff --git a/source/blender/blenkernel/BKE_geometry_fields.hh 
b/source/blender/blenkernel/BKE_geometry_fields.hh
index 5f5333beb63..019ff41184b 100644
--- a/source/blender/blenkernel/BKE_geometry_fields.hh
+++ b/source/blender/blenkernel/BKE_geometry_fields.hh
@@ -8,7 +8,6 @@
  * Common field utilities and field definitions for geometry components.
  */
 
-#include "BKE_attribute.h"
 #include "BKE_geometry_set.hh"
 
 #include "FN_field.hh"
diff --git a/source/blender/blenkernel/BKE_geometry_set.hh 
b/source/blender/blenkernel/BKE_geometry_set.hh
index 42d773055fa..f450ffe33e8 100644
--- a/source/blender/blenkernel/BKE_geometry_set.hh
+++ b/source/blender/blenkernel/BKE_geometry_set.hh
@@ -10,16 +10,12 @@
 #include 
 #include 
 
-#include "BLI_float4x4.hh"
 #include "BLI_function_ref.hh"
-#include "BLI_hash.hh"
 #include "BLI_map.hh"
 #include "BLI_math_vector_types.hh"
-#include "BLI_set.hh"
 #include "BLI_user_counter.hh"
 #include "BLI_vector_set.hh"
 
-#include "BKE_anonymous_attribute_id.hh"
 #include "BKE_attribute.hh"
 #include "BKE_geometry_set.h"
 
diff --git a/source/blender/blenkernel/BKE_geometry_set_instances.hh 
b/source/blender/blenkernel/BKE_geometry_set_instances.hh
index 6d4b9a2128c..3e9fb1d0379 100644
--- a/source/blender/blenkernel/BKE_geometry_set_instances.hh
+++ b/source/blender/blenkernel/BKE_geometry_set_instances.hh
@@ -2,6 +2,8 @@
 
 #pragma once
 
+#include "BLI_float4x4.hh"
+
 #include "BKE_geometry_set.hh"
 
 namespace blender::bke {
diff --git a/source/blender/nodes/geometry/node_geometry_util.hh 
b/source/blender/nodes/geometry/node_geometry_util.hh
index 68205c3ce6b..84dbd8e1fef 100644
--- a/source/blender/nodes/geometry/node_geometry_util.hh
+++ b/source/blender/nodes/geometry/node_geometry_util.hh
@@ -4,6 +4,7 @@
 
 #include 
 
+#include "BLI_float4x4.hh"
 #include "BLI_math_vector_types.hh"
 #include "BLI_utildefines.h"
 
diff --git a/source/blender/nodes/intern/node_socket.cc 
b/source/blender/nodes/intern/node_socket.cc
index 2fbf14b4760..814ad1c80e1 100644
--- a/source/blender/nodes/intern/node_socket.cc
+++ b/source/blender/nodes/intern/node_socket.cc
@@ -11,6 +11,7 @@
 
 #include "BLI_color.hh"
 #include "BLI_listbase.h"
+#include "BLI_math_vector.h"
 #include "BLI_math_vector_types.hh"
 #include "BLI_string.h"
 #include "BLI_utildefines.h"

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


  1   2   3   4   5   6   7   8   9   10   >