[Bf-blender-cvs] [22c4323b216] master: Cleanup: remove commented code

2021-07-12 Thread Campbell Barton
Commit: 22c4323b2169e700fa124b3dfe56b750bc532e49
Author: Campbell Barton
Date:   Tue Jul 13 15:27:38 2021 +1000
Branches: master
https://developer.blender.org/rB22c4323b2169e700fa124b3dfe56b750bc532e49

Cleanup: remove commented code

Replace with brief note in warning.

===

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 a909186c088..85c646d689c 100644
--- a/source/blender/editors/mesh/editmesh_utils.c
+++ b/source/blender/editors/mesh/editmesh_utils.c
@@ -322,7 +322,8 @@ void EDBM_mesh_make(Object *ob, const int select_mode, 
const bool add_key_index)
 
 /**
  * \warning This can invalidate the #Mesh runtime cache of other objects (for 
linked duplicates).
- * Most callers should run #DEG_id_tag_update on \a ob->data, see: T46738, 
T46913
+ * Most callers should run #DEG_id_tag_update on `ob->data`, see: T46738, 
T46913.
+ * This ensures #BKE_object_free_derived_caches runs on all objects that use 
this mesh.
  */
 void EDBM_mesh_load_ex(Main *bmain, Object *ob, bool free_data)
 {
@@ -342,25 +343,6 @@ void EDBM_mesh_load_ex(Main *bmain, Object *ob, bool 
free_data)
.calc_object_remap = true,
.update_shapekey_indices = !free_data,
}));
-
-  /* Free derived mesh. usually this would happen through depsgraph but there
-   * are exceptions like file save that will not cause this, and we want to
-   * avoid ending up with an invalid derived mesh then.
-   *
-   * Do it for all objects which shares the same mesh datablock, since their
-   * derived meshes might also be referencing data which was just freed,
-   *
-   * Annoying enough, but currently seems most efficient way to avoid access
-   * of freed data on scene update, especially in cases when there are 
dependency
-   * cycles.
-   */
-#if 0
-  for (Object *other_object = bmain->objects.first; other_object != NULL; 
other_object = other_object->id.next) {
-if (other_object->data == ob->data) {
-  BKE_object_free_derived_caches(other_object);
-}
-  }
-#endif
 }
 
 void EDBM_mesh_clear(BMEditMesh *em)

___
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] [7a084c2eee2] master: Cleanup: minor changes to edit-mesh API calls

2021-07-12 Thread Campbell Barton
Commit: 7a084c2eee266cac01ade0fed3527586b9e2e0d2
Author: Campbell Barton
Date:   Tue Jul 13 15:05:39 2021 +1000
Branches: master
https://developer.blender.org/rB7a084c2eee266cac01ade0fed3527586b9e2e0d2

Cleanup: minor changes to edit-mesh API calls

Rename:

- EDBM_mesh_free -> EDBM_mesh_free_data
  BKE_editmesh_free -> BKE_editmesh_free_data

  Since this doesn't free the edit-mesh pointer.

- BKE_editmesh_free_derivedmesh -> BKE_editmesh_free_derived_caches

  Since this no longer uses derived-mesh, match naming for the related
  object function BKE_object_free_derived_caches.

Also remove `do_tessellate` argument from BKE_editmesh_create,
since the caller can explicitly do this if it's needed,
with the advantage that it can be combined with normal calculation
which is faster on high-poly meshes.

===

M   source/blender/blenkernel/BKE_editmesh.h
M   source/blender/blenkernel/intern/DerivedMesh.cc
M   source/blender/blenkernel/intern/editmesh.c
M   source/blender/editors/include/ED_mesh.h
M   source/blender/editors/mesh/editmesh_mask_extract.c
M   source/blender/editors/mesh/editmesh_undo.c
M   source/blender/editors/mesh/editmesh_utils.c
M   source/blender/editors/object/object_edit.c
M   source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c

===

diff --git a/source/blender/blenkernel/BKE_editmesh.h 
b/source/blender/blenkernel/BKE_editmesh.h
index 9112877b5a3..e204667c4c3 100644
--- a/source/blender/blenkernel/BKE_editmesh.h
+++ b/source/blender/blenkernel/BKE_editmesh.h
@@ -94,11 +94,11 @@ void 
BKE_editmesh_looptri_and_normals_calc_with_partial(BMEditMesh *em,
 
 void BKE_editmesh_looptri_and_normals_calc(BMEditMesh *em);
 
-BMEditMesh *BKE_editmesh_create(BMesh *bm, const bool do_tessellate);
+BMEditMesh *BKE_editmesh_create(BMesh *bm);
 BMEditMesh *BKE_editmesh_copy(BMEditMesh *em);
 BMEditMesh *BKE_editmesh_from_object(struct Object *ob);
-void BKE_editmesh_free_derivedmesh(BMEditMesh *em);
-void BKE_editmesh_free(BMEditMesh *em);
+void BKE_editmesh_free_derived_caches(BMEditMesh *em);
+void BKE_editmesh_free_data(BMEditMesh *em);
 
 float (*BKE_editmesh_vert_coords_alloc(struct Depsgraph *depsgraph,
struct BMEditMesh *em,
diff --git a/source/blender/blenkernel/intern/DerivedMesh.cc 
b/source/blender/blenkernel/intern/DerivedMesh.cc
index 46dec073bab..ecbb3d1cfab 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.cc
+++ b/source/blender/blenkernel/intern/DerivedMesh.cc
@@ -1990,7 +1990,7 @@ static void editbmesh_build_data(struct Depsgraph 
*depsgraph,
 BKE_sculpt_update_object_before_eval(obedit);
   }
 
-  BKE_editmesh_free_derivedmesh(em);
+  BKE_editmesh_free_derived_caches(em);
 
   Mesh *me_cage;
   Mesh *me_final;
diff --git a/source/blender/blenkernel/intern/editmesh.c 
b/source/blender/blenkernel/intern/editmesh.c
index 2eb6b488da2..9cae74e4e9a 100644
--- a/source/blender/blenkernel/intern/editmesh.c
+++ b/source/blender/blenkernel/intern/editmesh.c
@@ -39,15 +39,14 @@
 #include "BKE_mesh_wrapper.h"
 #include "BKE_object.h"
 
-BMEditMesh *BKE_editmesh_create(BMesh *bm, const bool do_tessellate)
+/**
+ * \note The caller is responsible for ensuring triangulation data,
+ * typically by calling #BKE_editmesh_looptri_calc.
+ */
+BMEditMesh *BKE_editmesh_create(BMesh *bm)
 {
   BMEditMesh *em = MEM_callocN(sizeof(BMEditMesh), __func__);
-
   em->bm = bm;
-  if (do_tessellate) {
-BKE_editmesh_looptri_calc(em);
-  }
-
   return em;
 }
 
@@ -209,7 +208,7 @@ void 
BKE_editmesh_looptri_and_normals_calc_with_partial(BMEditMesh *em,
  });
 }
 
-void BKE_editmesh_free_derivedmesh(BMEditMesh *em)
+void BKE_editmesh_free_derived_caches(BMEditMesh *em)
 {
   if (em->mesh_eval_cage) {
 BKE_id_free(NULL, em->mesh_eval_cage);
@@ -223,9 +222,9 @@ void BKE_editmesh_free_derivedmesh(BMEditMesh *em)
 }
 
 /* Does not free the #BMEditMesh struct itself. */
-void BKE_editmesh_free(BMEditMesh *em)
+void BKE_editmesh_free_data(BMEditMesh *em)
 {
-  BKE_editmesh_free_derivedmesh(em);
+  BKE_editmesh_free_derived_caches(em);
 
   if (em->looptris) {
 MEM_freeN(em->looptris);
diff --git a/source/blender/editors/include/ED_mesh.h 
b/source/blender/editors/include/ED_mesh.h
index 667540b8f63..2b73194afb2 100644
--- a/source/blender/editors/include/ED_mesh.h
+++ b/source/blender/editors/include/ED_mesh.h
@@ -86,7 +86,7 @@ void EDBM_mesh_clear(struct BMEditMesh *em);
 
 void EDBM_selectmode_to_scene(struct bContext *C);
 void EDBM_mesh_make(struct Object *ob, const int select_mode, const bool 
add_key_index);
-void EDBM_mesh_free(struct BMEditMesh *em);
+void EDBM_mesh_free_data(struct BMEditMesh *em);
 void EDBM_mesh_load_ex(struct Main *bmain, struct Object *ob, bool free_data);
 void EDBM_mesh_load(struct Main *bmain, struct Object *ob);
 
diff 

[Bf-blender-cvs] [b90b1af25c8] master: Event Simulate: and a --time-actions command line argument

2021-07-12 Thread Campbell Barton
Commit: b90b1af25c8eeb243a748c61af7879eb89ef9d4b
Author: Campbell Barton
Date:   Tue Jul 13 14:32:41 2021 +1000
Branches: master
https://developer.blender.org/rBb90b1af25c8eeb243a748c61af7879eb89ef9d4b

Event Simulate: and a --time-actions command line argument

When enabled, print the time taken between running actions.

===

M   tests/python/bl_run_operators_event_simulate.py

===

diff --git a/tests/python/bl_run_operators_event_simulate.py 
b/tests/python/bl_run_operators_event_simulate.py
index 92315d3e853..1cc621b9684 100644
--- a/tests/python/bl_run_operators_event_simulate.py
+++ b/tests/python/bl_run_operators_event_simulate.py
@@ -165,6 +165,16 @@ def gen_events_type_text(text):
 yield dict(type=type, value='RELEASE', **kw_extra)
 
 
+def repr_action(name, args, kwargs):
+return "%s(%s)" % (
+name,
+", ".join(
+[repr(value) for value in args] +
+[("%s=%r" % (key, value)) for key, value in kwargs.items()]
+)
+)
+
+
 # -
 # Simulate Events
 
@@ -505,6 +515,18 @@ def argparse_create():
 required=False,
 )
 
+parser.add_argument(
+"--time-actions",
+dest="time_actions",
+default=False,
+action="store_true",
+help=(
+"Display the time each action takes\n"
+"(useful for measuring delay between key-presses)."
+),
+required=False,
+)
+
 # Collect doc-strings from static methods in `actions`.
 actions_docstring = []
 for action_key in ACTION_DIR:
@@ -554,7 +576,7 @@ def setup_default_preferences(prefs):
 # Main Function
 
 
-def main_event_iter(*, action_list):
+def main_event_iter(*, action_list, time_actions):
 """
 Yield all events from action handlers.
 """
@@ -565,9 +587,18 @@ def main_event_iter(*, action_list):
 
 yield dict(type='MOUSEMOVE', value='NOTHING', x=x_init, y=y_init)
 
+if time_actions:
+import time
+t_prev = time.time()
+
 for (op, args, kwargs) in action_list:
 yield from handle_action(op, args, kwargs)
 
+if time_actions:
+t = time.time()
+print("%.4f: %s" % ((t - t_prev), repr_action(op, args, kwargs)))
+t_prev = t
+
 
 def main():
 from sys import argv
@@ -588,7 +619,7 @@ def main():
 bpy.app.use_event_simulate = False
 
 run_event_simulate(
-event_iter=main_event_iter(action_list=args.actions),
+event_iter=main_event_iter(action_list=args.actions, 
time_actions=args.time_actions),
 exit_fn=exit_fn,
 )

___
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] [50986783083] master: Cleanup: Use correct _WIN32/64 defines for MSVC

2021-07-12 Thread Jesse Yurkovich
Commit: 5098678308319e9ac2de98928aacffc54c7a9761
Author: Jesse Yurkovich
Date:   Mon Jul 12 21:01:18 2021 -0700
Branches: master
https://developer.blender.org/rB5098678308319e9ac2de98928aacffc54c7a9761

Cleanup: Use correct _WIN32/64 defines for MSVC

Docs: https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros

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

===

M   intern/libmv/libmv/numeric/numeric.h
M   source/blender/blenlib/intern/path_util.c

===

diff --git a/intern/libmv/libmv/numeric/numeric.h 
b/intern/libmv/libmv/numeric/numeric.h
index e3d44226338..e3ebdb5a4bb 100644
--- a/intern/libmv/libmv/numeric/numeric.h
+++ b/intern/libmv/libmv/numeric/numeric.h
@@ -43,7 +43,7 @@ inline void sincos(double x, double* sinx, double* cosx) {
 #  endif
 #endif  // !__MINGW64__
 
-#if (defined(WIN32) || defined(WIN64)) && !defined(__MINGW32__)
+#if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__)
 inline long lround(double d) {
   return (long)(d > 0 ? d + 0.5 : ceil(d - 0.5));
 }
diff --git a/source/blender/blenlib/intern/path_util.c 
b/source/blender/blenlib/intern/path_util.c
index 8969dd4f6b5..4d0dc43ed1e 100644
--- a/source/blender/blenlib/intern/path_util.c
+++ b/source/blender/blenlib/intern/path_util.c
@@ -1275,7 +1275,7 @@ void BLI_setenv(const char *env, const char *val)
 {
   /* free windows */
 
-#if (defined(WIN32) || defined(WIN64))
+#if (defined(_WIN32) || defined(_WIN64))
   uputenv(env, val);
 
 #else

___
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] [3b3a08f4391] soc-2021-curve-fillet: Basic Curve Fillet node implementation

2021-07-12 Thread dilithjay
Commit: 3b3a08f439106d696dfdbaa3674076df300805b0
Author: dilithjay
Date:   Tue Jul 13 09:13:02 2021 +0530
Branches: soc-2021-curve-fillet
https://developer.blender.org/rB3b3a08f439106d696dfdbaa3674076df300805b0

Basic Curve Fillet node implementation

===

M   release/scripts/startup/nodeitems_builtins.py
M   source/blender/blenkernel/BKE_node.h
M   source/blender/blenkernel/intern/node.cc
M   source/blender/makesdna/DNA_node_types.h
M   source/blender/makesrna/intern/rna_nodetree.c
M   source/blender/nodes/CMakeLists.txt
M   source/blender/nodes/NOD_geometry.h
M   source/blender/nodes/NOD_static_types.h
A   source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc

===

diff --git a/release/scripts/startup/nodeitems_builtins.py 
b/release/scripts/startup/nodeitems_builtins.py
index b1ed1441245..bd0cd0623f3 100644
--- a/release/scripts/startup/nodeitems_builtins.py
+++ b/release/scripts/startup/nodeitems_builtins.py
@@ -509,6 +509,7 @@ geometry_node_categories = [
 NodeItem("GeometryNodeCurveEndpoints"),
 NodeItem("GeometryNodeCurveLength"),
 NodeItem("GeometryNodeCurveReverse"),
+NodeItem("GeometryNodeCurveFillet"),
 ]),
 GeometryNodeCategory("GEO_PRIMITIVES_CURVE", "Curve Primitives", items=[
 NodeItem("GeometryNodeCurvePrimitiveLine"),
diff --git a/source/blender/blenkernel/BKE_node.h 
b/source/blender/blenkernel/BKE_node.h
index c9f724036e0..b9f111d5a05 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -1458,6 +1458,7 @@ int ntreeTexExecTree(struct bNodeTree *ntree,
 #define GEO_NODE_VIEWER 1067
 #define GEO_NODE_CURVE_PRIMITIVE_LINE 1068
 #define GEO_NODE_CURVE_ENDPOINTS 1069
+#define GEO_NODE_CURVE_FILLET 1070
 
 /** \} */
 
diff --git a/source/blender/blenkernel/intern/node.cc 
b/source/blender/blenkernel/intern/node.cc
index 5bed5b1aaad..79bf195715a 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -5117,6 +5117,7 @@ static void registerGeometryNodes()
   register_node_type_geo_curve_resample();
   register_node_type_geo_curve_reverse();
   register_node_type_geo_curve_subdivide();
+  register_node_type_geo_curve_fillet();
   register_node_type_geo_curve_to_mesh();
   register_node_type_geo_curve_to_points();
   register_node_type_geo_delete_geometry();
diff --git a/source/blender/makesdna/DNA_node_types.h 
b/source/blender/makesdna/DNA_node_types.h
index 1a3415bf74e..2ff72500435 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -1380,6 +1380,13 @@ typedef struct NodeGeometryCurveSubdivide {
   uint8_t cuts_type;
 } NodeGeometryCurveSubdivide;
 
+typedef struct NodeGeometryCurveFillet {
+  /* GeometryNodeCurveFilletMode. */
+  uint8_t mode;
+  /* GeometryNodeCurveFilletRadiusMode. */
+  uint8_t radius_mode;
+} NodeGeometryCurveFillet;
+
 typedef struct NodeGeometryCurveToPoints {
   /* GeometryNodeCurveSampleMode. */
   uint8_t mode;
@@ -1931,6 +1938,16 @@ typedef enum GeometryNodeCurveSampleMode {
   GEO_NODE_CURVE_SAMPLE_EVALUATED = 2,
 } GeometryNodeCurveSampleMode;
 
+typedef enum GeometryNodeCurveFilletMode {
+  GEO_NODE_CURVE_FILLET_ADAPTIVE = 0,
+  GEO_NODE_CURVE_FILLET_USER_DEFINED = 1,
+} GeometryNodeCurveFilletMode;
+
+typedef enum GeometryNodeCurveFilletRadiusMode {
+  GEO_NODE_CURVE_FILLET_RADIUS_FLOAT = 0,
+  GEO_NODE_CURVE_FILLET_RADIUS_ATTRIBUTE = 1,
+} GeometryNodeCurveFilletRadiusMode;
+
 typedef enum GeometryNodeAttributeTransferMapMode {
   GEO_NODE_ATTRIBUTE_TRANSFER_NEAREST_FACE_INTERPOLATED = 0,
   GEO_NODE_ATTRIBUTE_TRANSFER_NEAREST = 1,
diff --git a/source/blender/makesrna/intern/rna_nodetree.c 
b/source/blender/makesrna/intern/rna_nodetree.c
index 5c363a3e6b6..dbde584efd1 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -9986,6 +9986,51 @@ static void def_geo_curve_subdivide(StructRNA *srna)
   RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update");
 }
 
+static void def_geo_curve_fillet(StructRNA *srna)
+{
+  PropertyRNA *prop;
+
+  static EnumPropertyItem mode_items[] = {
+  {GEO_NODE_CURVE_FILLET_ADAPTIVE,
+   "ADAPTIVE",
+   0,
+   "Adaptive",
+   "Decide the best number of control points based on angle"},
+  {GEO_NODE_CURVE_FILLET_USER_DEFINED,
+   "USER_DEFINED",
+   0,
+   "User Defined",
+   "Specify the number of control points"},
+  {0, NULL, 0, NULL, NULL},
+  };
+
+  static EnumPropertyItem radius_mode_items[] = {
+  {GEO_NODE_CURVE_FILLET_RADIUS_FLOAT,
+   "FLOAT",
+   0,
+   "Float",
+   "Define a common radius for all points."},
+  {GEO_NODE_CURVE_FILLET_RADIUS_ATTRIBUTE,
+   "ATTRIBUTE",
+   0,
+   "Attribute",
+   "Specify 

[Bf-blender-cvs] [1d4c5d25c37] soc-2021-curve-fillet: Merge branch 'soc-2021-curve-fillet' of git.blender.org:blender into soc-2021-curve-fillet

2021-07-12 Thread dilithjay
Commit: 1d4c5d25c3750d01e4b2ced6d730277aad530460
Author: dilithjay
Date:   Tue Jul 13 09:23:24 2021 +0530
Branches: soc-2021-curve-fillet
https://developer.blender.org/rB1d4c5d25c3750d01e4b2ced6d730277aad530460

Merge branch 'soc-2021-curve-fillet' of git.blender.org:blender into 
soc-2021-curve-fillet

===



===



___
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] [dc679f6247b] master: Cleanup: Use C99 format string for the SIZET_FORMAT macro

2021-07-12 Thread Jesse Yurkovich
Commit: dc679f6247be25f06be14e51a3a1fedf50e6dbbf
Author: Jesse Yurkovich
Date:   Mon Jul 12 20:32:37 2021 -0700
Branches: master
https://developer.blender.org/rBdc679f6247be25f06be14e51a3a1fedf50e6dbbf

Cleanup: Use C99 format string for the SIZET_FORMAT macro

All platforms support the proper format string and it's already used in
various other places.

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

===

M   intern/guardedalloc/intern/mallocn_intern.h

===

diff --git a/intern/guardedalloc/intern/mallocn_intern.h 
b/intern/guardedalloc/intern/mallocn_intern.h
index aa956150484..e4bd3d533a3 100644
--- a/intern/guardedalloc/intern/mallocn_intern.h
+++ b/intern/guardedalloc/intern/mallocn_intern.h
@@ -53,14 +53,8 @@ size_t malloc_usable_size(void *ptr);
 #  undef USE_MALLOC_USABLE_SIZE
 #endif
 
-/* Blame Microsoft for LLP64 and no inttypes.h, quick workaround needed: */
-#if defined(WIN64)
-#  define SIZET_FORMAT "%I64u"
-#  define SIZET_ARG(a) ((unsigned long long)(a))
-#else
-#  define SIZET_FORMAT "%lu"
-#  define SIZET_ARG(a) ((unsigned long)(a))
-#endif
+#define SIZET_FORMAT "%zu"
+#define SIZET_ARG(a) ((size_t)(a))
 
 #define SIZET_ALIGN_4(len) ((len + 3) & ~(size_t)3)

___
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] [b4de48d3b21] soc-2021-curve-fillet: Basoc Curve Fillet node implementation

2021-07-12 Thread dilithjay
Commit: b4de48d3b21ba4cb06f4c377a2a50fe2e47fd4fb
Author: dilithjay
Date:   Tue Jul 13 09:13:02 2021 +0530
Branches: soc-2021-curve-fillet
https://developer.blender.org/rBb4de48d3b21ba4cb06f4c377a2a50fe2e47fd4fb

Basoc Curve Fillet node implementation

===

M   release/scripts/startup/nodeitems_builtins.py
M   source/blender/blenkernel/BKE_node.h
M   source/blender/blenkernel/intern/node.cc
M   source/blender/makesdna/DNA_node_types.h
M   source/blender/makesrna/intern/rna_nodetree.c
M   source/blender/nodes/CMakeLists.txt
M   source/blender/nodes/NOD_geometry.h
M   source/blender/nodes/NOD_static_types.h
A   source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc

===

diff --git a/release/scripts/startup/nodeitems_builtins.py 
b/release/scripts/startup/nodeitems_builtins.py
index b1ed1441245..bd0cd0623f3 100644
--- a/release/scripts/startup/nodeitems_builtins.py
+++ b/release/scripts/startup/nodeitems_builtins.py
@@ -509,6 +509,7 @@ geometry_node_categories = [
 NodeItem("GeometryNodeCurveEndpoints"),
 NodeItem("GeometryNodeCurveLength"),
 NodeItem("GeometryNodeCurveReverse"),
+NodeItem("GeometryNodeCurveFillet"),
 ]),
 GeometryNodeCategory("GEO_PRIMITIVES_CURVE", "Curve Primitives", items=[
 NodeItem("GeometryNodeCurvePrimitiveLine"),
diff --git a/source/blender/blenkernel/BKE_node.h 
b/source/blender/blenkernel/BKE_node.h
index c9f724036e0..b9f111d5a05 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -1458,6 +1458,7 @@ int ntreeTexExecTree(struct bNodeTree *ntree,
 #define GEO_NODE_VIEWER 1067
 #define GEO_NODE_CURVE_PRIMITIVE_LINE 1068
 #define GEO_NODE_CURVE_ENDPOINTS 1069
+#define GEO_NODE_CURVE_FILLET 1070
 
 /** \} */
 
diff --git a/source/blender/blenkernel/intern/node.cc 
b/source/blender/blenkernel/intern/node.cc
index 5bed5b1aaad..79bf195715a 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -5117,6 +5117,7 @@ static void registerGeometryNodes()
   register_node_type_geo_curve_resample();
   register_node_type_geo_curve_reverse();
   register_node_type_geo_curve_subdivide();
+  register_node_type_geo_curve_fillet();
   register_node_type_geo_curve_to_mesh();
   register_node_type_geo_curve_to_points();
   register_node_type_geo_delete_geometry();
diff --git a/source/blender/makesdna/DNA_node_types.h 
b/source/blender/makesdna/DNA_node_types.h
index 1a3415bf74e..2ff72500435 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -1380,6 +1380,13 @@ typedef struct NodeGeometryCurveSubdivide {
   uint8_t cuts_type;
 } NodeGeometryCurveSubdivide;
 
+typedef struct NodeGeometryCurveFillet {
+  /* GeometryNodeCurveFilletMode. */
+  uint8_t mode;
+  /* GeometryNodeCurveFilletRadiusMode. */
+  uint8_t radius_mode;
+} NodeGeometryCurveFillet;
+
 typedef struct NodeGeometryCurveToPoints {
   /* GeometryNodeCurveSampleMode. */
   uint8_t mode;
@@ -1931,6 +1938,16 @@ typedef enum GeometryNodeCurveSampleMode {
   GEO_NODE_CURVE_SAMPLE_EVALUATED = 2,
 } GeometryNodeCurveSampleMode;
 
+typedef enum GeometryNodeCurveFilletMode {
+  GEO_NODE_CURVE_FILLET_ADAPTIVE = 0,
+  GEO_NODE_CURVE_FILLET_USER_DEFINED = 1,
+} GeometryNodeCurveFilletMode;
+
+typedef enum GeometryNodeCurveFilletRadiusMode {
+  GEO_NODE_CURVE_FILLET_RADIUS_FLOAT = 0,
+  GEO_NODE_CURVE_FILLET_RADIUS_ATTRIBUTE = 1,
+} GeometryNodeCurveFilletRadiusMode;
+
 typedef enum GeometryNodeAttributeTransferMapMode {
   GEO_NODE_ATTRIBUTE_TRANSFER_NEAREST_FACE_INTERPOLATED = 0,
   GEO_NODE_ATTRIBUTE_TRANSFER_NEAREST = 1,
diff --git a/source/blender/makesrna/intern/rna_nodetree.c 
b/source/blender/makesrna/intern/rna_nodetree.c
index 5c363a3e6b6..dbde584efd1 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -9986,6 +9986,51 @@ static void def_geo_curve_subdivide(StructRNA *srna)
   RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update");
 }
 
+static void def_geo_curve_fillet(StructRNA *srna)
+{
+  PropertyRNA *prop;
+
+  static EnumPropertyItem mode_items[] = {
+  {GEO_NODE_CURVE_FILLET_ADAPTIVE,
+   "ADAPTIVE",
+   0,
+   "Adaptive",
+   "Decide the best number of control points based on angle"},
+  {GEO_NODE_CURVE_FILLET_USER_DEFINED,
+   "USER_DEFINED",
+   0,
+   "User Defined",
+   "Specify the number of control points"},
+  {0, NULL, 0, NULL, NULL},
+  };
+
+  static EnumPropertyItem radius_mode_items[] = {
+  {GEO_NODE_CURVE_FILLET_RADIUS_FLOAT,
+   "FLOAT",
+   0,
+   "Float",
+   "Define a common radius for all points."},
+  {GEO_NODE_CURVE_FILLET_RADIUS_ATTRIBUTE,
+   "ATTRIBUTE",
+   0,
+   "Attribute",
+   "Specify 

[Bf-blender-cvs] [2e7e7a6fb68] master: Fix object "Set Origin" operating on linked library data

2021-07-12 Thread Campbell Barton
Commit: 2e7e7a6fb6835f5b6671ef06752aa21d7768f108
Author: Campbell Barton
Date:   Tue Jul 13 13:01:28 2021 +1000
Branches: master
https://developer.blender.org/rB2e7e7a6fb6835f5b6671ef06752aa21d7768f108

Fix object "Set Origin" operating on linked library data

Regression in d25747ee751096de2e417a7da1316bf5bf81c25a

===

M   source/blender/editors/object/object_transform.c

===

diff --git a/source/blender/editors/object/object_transform.c 
b/source/blender/editors/object/object_transform.c
index e350653e178..86871a02a72 100644
--- a/source/blender/editors/object/object_transform.c
+++ b/source/blender/editors/object/object_transform.c
@@ -1195,32 +1195,33 @@ static int object_origin_set_exec(bContext *C, 
wmOperator *op)
   else if (ID_IS_LINKED(ob->data)) {
 tot_lib_error++;
   }
+  else if (ob->type == OB_MESH) {
+if (obedit == NULL) {
+  Mesh *me = ob->data;
 
-  if (obedit == NULL && ob->type == OB_MESH) {
-Mesh *me = ob->data;
-
-if (centermode == ORIGIN_TO_CURSOR) {
-  /* done */
-}
-else if (centermode == ORIGIN_TO_CENTER_OF_MASS_SURFACE) {
-  BKE_mesh_center_of_surface(me, cent);
-}
-else if (centermode == ORIGIN_TO_CENTER_OF_MASS_VOLUME) {
-  BKE_mesh_center_of_volume(me, cent);
-}
-else if (around == V3D_AROUND_CENTER_BOUNDS) {
-  BKE_mesh_center_bounds(me, cent);
-}
-else { /* #V3D_AROUND_CENTER_MEDIAN. */
-  BKE_mesh_center_median(me, cent);
-}
+  if (centermode == ORIGIN_TO_CURSOR) {
+/* done */
+  }
+  else if (centermode == ORIGIN_TO_CENTER_OF_MASS_SURFACE) {
+BKE_mesh_center_of_surface(me, cent);
+  }
+  else if (centermode == ORIGIN_TO_CENTER_OF_MASS_VOLUME) {
+BKE_mesh_center_of_volume(me, cent);
+  }
+  else if (around == V3D_AROUND_CENTER_BOUNDS) {
+BKE_mesh_center_bounds(me, cent);
+  }
+  else { /* #V3D_AROUND_CENTER_MEDIAN. */
+BKE_mesh_center_median(me, cent);
+  }
 
-negate_v3_v3(cent_neg, cent);
-BKE_mesh_translate(me, cent_neg, 1);
+  negate_v3_v3(cent_neg, cent);
+  BKE_mesh_translate(me, cent_neg, 1);
 
-tot_change++;
-me->id.tag |= LIB_TAG_DOIT;
-do_inverse_offset = true;
+  tot_change++;
+  me->id.tag |= LIB_TAG_DOIT;
+  do_inverse_offset = true;
+}
   }
   else if (ELEM(ob->type, OB_CURVE, OB_SURF)) {
 Curve *cu = ob->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] [73012ab1f7a] refactor-idprop-ui-data: Merge branch 'master' into refactor-idprop-ui-data

2021-07-12 Thread Hans Goudey
Commit: 73012ab1f7a2feeef0c5c18a869f5a6f0120c8fa
Author: Hans Goudey
Date:   Mon Jul 12 21:43:40 2021 -0400
Branches: refactor-idprop-ui-data
https://developer.blender.org/rB73012ab1f7a2feeef0c5c18a869f5a6f0120c8fa

Merge branch 'master' into refactor-idprop-ui-data

===



===

diff --cc source/blender/modifiers/intern/MOD_nodes.cc
index 877ddea16a1,9af2472f2c6..633fd50a22d
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@@ -567,24 -734,9 +570,11 @@@ static void initialize_group_input(Node
  blender::nodes::socket_cpp_value_get(socket, r_value);
  return;
}
 -  property_type->init_cpp_value(*property, r_value);
 +
 +  init_socket_cpp_value_from_property(
 +  *property, static_cast(socket.type), r_value);
  }
  
- static void reset_tree_ui_storage(Span 
trees,
-   const Object ,
-   const ModifierData )
- {
-   const NodeTreeEvaluationContext context = {object, modifier};
- 
-   for (const blender::nodes::NodeTreeRef *tree : trees) {
- bNodeTree *btree_cow = tree->btree();
- bNodeTree *btree_original = (bNodeTree *)DEG_get_original_id((ID 
*)btree_cow);
- BKE_nodetree_ui_storage_free_for_context(*btree_original, context);
-   }
- }
- 
  static Vector find_spreadsheet_editors(Main *bmain)
  {
wmWindowManager *wm = (wmWindowManager *)bmain->wm.first;

___
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] [3b39186afa6] refactor-idprop-ui-data: Rename id_properties_create to id_properties_ensure

2021-07-12 Thread Hans Goudey
Commit: 3b39186afa65ff14a5f6b7c79fa9c885729f7bf0
Author: Hans Goudey
Date:   Mon Jul 12 21:49:21 2021 -0400
Branches: refactor-idprop-ui-data
https://developer.blender.org/rB3b39186afa65ff14a5f6b7c79fa9c885729f7bf0

Rename id_properties_create to id_properties_ensure

===

M   release/scripts/modules/rna_prop_ui.py
M   release/scripts/startup/bl_operators/wm.py
M   source/blender/python/intern/bpy_rna.c
M   tests/python/bl_pyapi_idprop.py

===

diff --git a/release/scripts/modules/rna_prop_ui.py 
b/release/scripts/modules/rna_prop_ui.py
index dcfc2425a62..efbaa80a89a 100644
--- a/release/scripts/modules/rna_prop_ui.py
+++ b/release/scripts/modules/rna_prop_ui.py
@@ -42,7 +42,7 @@ def rna_idprop_ui_prop_update(item, prop):
 
 
 def rna_idprop_ui_prop_clear(item, prop):
-props = item.id_properties_create()
+props = item.id_properties_ensure()
 props.ui_data_clear(prop)
 
 
@@ -115,7 +115,7 @@ def rna_idprop_ui_create(
 rna_idprop_ui_prop_update(item, prop)
 
 # Update the UI settings
-props = item.id_properties_create()
+props = item.id_properties_ensure()
 props.ui_data_update(
 prop, 
 subtype=subtype, 
diff --git a/release/scripts/startup/bl_operators/wm.py 
b/release/scripts/startup/bl_operators/wm.py
index 52f4f355990..acff62015e3 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -1429,7 +1429,7 @@ class WM_OT_properties_edit(Operator):
 prop_type_new = type(prop_value)
 prop_type, is_array = rna_idprop_value_item_type(prop_value)
 
-props = item.id_properties_create()
+props = item.id_properties_ensure()
 props.ui_data_update(
 prop,
 subtype=self.subtype,
@@ -1537,7 +1537,7 @@ class WM_OT_properties_edit(Operator):
 self.default = ""
 
 # setup defaults
-props = item.id_properties_create()
+props = item.id_properties_ensure()
 rna_data = props.ui_data(prop)
 self.subtype =  rna_data["subtype"]
 if prop_type in {int, float}:
diff --git a/source/blender/python/intern/bpy_rna.c 
b/source/blender/python/intern/bpy_rna.c
index 9c3766b66ee..69803963833 100644
--- a/source/blender/python/intern/bpy_rna.c
+++ b/source/blender/python/intern/bpy_rna.c
@@ -4253,11 +4253,11 @@ static PyObject *pyrna_struct_dir(BPy_StructRNA *self)
   return ret;
 }
 
-PyDoc_STRVAR(pyrna_struct_id_properties_create_doc,
- ".. method:: id_properties_create()\n"
+PyDoc_STRVAR(pyrna_struct_id_properties_ensure_doc,
+ ".. method:: id_properties_ensure()\n"
  "   :return: the parent group for an RNA struct's custom 
IDProperties.\n"
  "   :rtype: :class:`bpy.types.IDPropertyGroup`\n");
-static PyObject *pyrna_struct_id_properties_create(BPy_StructRNA *self)
+static PyObject *pyrna_struct_id_properties_ensure(BPy_StructRNA *self)
 {
   PYRNA_STRUCT_CHECK_OBJ(self);
 
@@ -5764,10 +5764,10 @@ static struct PyMethodDef pyrna_struct_methods[] = {
  METH_VARARGS | METH_CLASS,
  pyrna_struct_bl_rna_get_subclass_doc},
 {"__dir__", (PyCFunction)pyrna_struct_dir, METH_NOARGS, NULL},
-{"id_properties_create",
- (PyCFunction)pyrna_struct_id_properties_create,
+{"id_properties_ensure",
+ (PyCFunction)pyrna_struct_id_properties_ensure,
  METH_NOARGS,
- pyrna_struct_id_properties_create_doc},
+ pyrna_struct_id_properties_ensure_doc},
 
 /* experimental */
 /* unused for now */
diff --git a/tests/python/bl_pyapi_idprop.py b/tests/python/bl_pyapi_idprop.py
index 5cf25b5fb95..18bd5fe968e 100644
--- a/tests/python/bl_pyapi_idprop.py
+++ b/tests/python/bl_pyapi_idprop.py
@@ -251,7 +251,7 @@ class TestRNAData(TestHelper, unittest.TestCase):
 def test_custom_properties_none(self):
 bpy.data.objects.new("test", None)
 test_object = bpy.data.objects["test"]
-props = test_object.id_properties_create()
+props = test_object.id_properties_ensure()
 self.assertEqual(len(props), 0)
 
 # Access default RNA data values
@@ -282,7 +282,7 @@ class TestRNAData(TestHelper, unittest.TestCase):
 bpy.data.objects.new("test_2", None)
 test_object_2 = bpy.data.objects["test_2"]
 test_object_2["test_prop_3"] = 20.1
-props_2 = test_object_2.id_properties_create()
+props_2 = test_object_2.id_properties_ensure()
 props_2.ui_data_copy(props, "test_prop", "test_prop_3")
 rna_data = props_2.ui_data("test_prop_3")
 self.assertEqual(rna_data["min"], 0)
@@ -292,14 +292,14 @@ class TestRNAData(TestHelper, unittest.TestCase):
 
 # Test RNA data for string property
 test_object["test_string_prop"] = "Hello there!"
-props = test_object.id_properties_create()
+props = 

[Bf-blender-cvs] [d7a74a2ad69] temp-geometry-nodes-curve-sample: Merge branch 'master' into curve-sample-node

2021-07-12 Thread Hans Goudey
Commit: d7a74a2ad69914602f563852610efff3e8ed6e1c
Author: Hans Goudey
Date:   Mon Jul 12 19:42:26 2021 -0400
Branches: temp-geometry-nodes-curve-sample
https://developer.blender.org/rBd7a74a2ad69914602f563852610efff3e8ed6e1c

Merge branch 'master' into curve-sample-node

===



===

diff --cc source/blender/blenkernel/BKE_node.h
index 0f53b76ce15,c9f724036e0..61d26379052
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@@ -1444,7 -1455,9 +1455,10 @@@ int ntreeTexExecTree(struct bNodeTree *
  #define GEO_NODE_CURVE_PRIMITIVE_QUADRATIC_BEZIER 1064
  #define GEO_NODE_CURVE_PRIMITIVE_BEZIER_SEGMENT 1065
  #define GEO_NODE_CURVE_PRIMITIVE_CIRCLE 1066
- #define GEO_NODE_CURVE_SAMPLE 1067
+ #define GEO_NODE_VIEWER 1067
+ #define GEO_NODE_CURVE_PRIMITIVE_LINE 1068
+ #define GEO_NODE_CURVE_ENDPOINTS 1069
++#define GEO_NODE_CURVE_SAMPLE 1070
  
  /** \} */
  
diff --cc source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc
index e6e583f939f,bb8f560f92d..4edebf24d6a
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc
@@@ -348,14 -330,14 +330,14 @@@ static void geo_node_curve_to_points_ex
GeometrySet result = 
GeometrySet::create_with_pointcloud(BKE_pointcloud_new_nomain(total_size));
PointCloudComponent _component = 
result.get_component_for_write();
  
-   ResultAttributes new_attributes = create_point_attributes(point_component, 
curve);
- 
+   CurveToPointsResults new_attributes = 
curve_to_points_create_result_attributes(point_component,
+   
   curve);
switch (mode) {
 -case GEO_NODE_CURVE_SAMPLE_COUNT:
 -case GEO_NODE_CURVE_SAMPLE_LENGTH:
 +case GEO_NODE_CURVE_RESAMPLE_COUNT:
 +case GEO_NODE_CURVE_RESAMPLE_LENGTH:
copy_uniform_sample_point_attributes(splines, offsets, new_attributes);
break;
 -case GEO_NODE_CURVE_SAMPLE_EVALUATED:
 +case GEO_NODE_CURVE_RESAMPLE_EVALUATED:
copy_evaluated_point_attributes(splines, offsets, new_attributes);
break;
}

___
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] [a101f6d974e] temp-geometry-nodes-curve-sample: Some progress

2021-07-12 Thread Hans Goudey
Commit: a101f6d974efc33ea97352b394e6aeb2cd7a86df
Author: Hans Goudey
Date:   Sun Jul 4 21:08:16 2021 -0500
Branches: temp-geometry-nodes-curve-sample
https://developer.blender.org/rBa101f6d974efc33ea97352b394e6aeb2cd7a86df

Some progress

===

M   source/blender/blenkernel/BKE_spline.hh
M   source/blender/blenkernel/intern/spline_base.cc
M   source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc

===

diff --git a/source/blender/blenkernel/BKE_spline.hh 
b/source/blender/blenkernel/BKE_spline.hh
index cd752bcb798..d7b2dd181b4 100644
--- a/source/blender/blenkernel/BKE_spline.hh
+++ b/source/blender/blenkernel/BKE_spline.hh
@@ -56,6 +56,8 @@ using SplinePtr = std::unique_ptr;
  * along the length of a curve.
  *  3. #sample_uniform_index_factors returns an array that stores 
uniform-length samples
  * along the spline which can be used to interpolate data from method 1.
+ *  4. #sample_length_parameters_to_index_factors does the same, but uses 
arbitrary parameter
+ * inputs, instead of sampling uniformly.
  *
  * Commonly used evaluated data is stored in caches on the spline itself so 
that operations on
  * splines don't need to worry about taking ownership of evaluated data when 
they don't need to.
@@ -170,6 +172,8 @@ class Spline {
   LookupResult lookup_evaluated_length(const float length) const;
 
   blender::Array sample_uniform_index_factors(const int samples_size) 
const;
+  void sample_length_parameters_to_index_factors(blender::MutableSpan 
parameters) const;
+
   LookupResult lookup_data_from_index_factor(const float index_factor) const;
 
   void sample_with_index_factors(const blender::fn::GVArray ,
diff --git a/source/blender/blenkernel/intern/spline_base.cc 
b/source/blender/blenkernel/intern/spline_base.cc
index aa0d95d4d61..0926e3befcd 100644
--- a/source/blender/blenkernel/intern/spline_base.cc
+++ b/source/blender/blenkernel/intern/spline_base.cc
@@ -463,6 +463,53 @@ Array Spline::sample_uniform_index_factors(const 
int samples_size) const
   return samples;
 }
 
+#ifdef DEBUG
+static void assert_sorted_array_in_range(Span data, const float min, 
const float max)
+{
+  BLI_assert(data.first() >= min);
+  for (const int i : IndexRange(1, data.size() - 1)) {
+BLI_assert(data[i] >= data[i - 1]);
+  }
+  BLI_assert(data.last() <= max);
+}
+#endif
+
+/**
+ * Transform an array of sorted length parameters into index factors. The 
result is indices
+ * and factors to the next index, encoded in floats. The logic for converting 
from the float
+ * values to interpolation data is in #lookup_data_from_index_factor.
+ *
+ * \param parameters: Lengths along the spline to be transformed into index 
factors
+ * (to save another allocation). Must be between zero and the total length of 
the spline.
+ *
+ * \note The implementation is similar to #sample_uniform_index_factors(), 
though
+ * the two loops are inverted, and obviously custom parameters are provided.
+ */
+void Spline::sample_length_parameters_to_index_factors(MutableSpan 
parameters) const
+{
+  const Span lengths = this->evaluated_lengths();
+#ifdef DEBUG
+  assert_sorted_array_in_range(parameters, 0.0f, this->length());
+#endif
+
+  /* Store the length at the previous evaluated point in a variable so it can
+   * start out at zero (the lengths array doesn't contain 0 for the first 
point). */
+  float prev_length = 0.0f;
+  int i_evaluated = 0;
+  for (const int i_sample : parameters.index_range()) {
+const float sample_length = parameters[i_sample];
+
+/* Skip over every evaluated point that fits before this sample. */
+while (lengths[i_evaluated] < sample_length) {
+  prev_length = lengths[i_evaluated];
+  i_evaluated++;
+}
+
+const float factor = (sample_length - prev_length) / (lengths[i_evaluated] 
- prev_length);
+parameters[i_sample] = i_evaluated + factor;
+  }
+}
+
 Spline::LookupResult Spline::lookup_data_from_index_factor(const float 
index_factor) const
 {
   const int eval_size = this->evaluated_points_size();
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc 
b/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc
index cf43e4b1c4e..89c46b58405 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc
@@ -76,16 +76,70 @@ static void geo_node_curve_resample_update(bNodeTree 
*UNUSED(ntree), bNode *node
 
 namespace blender::nodes {
 
+static AttributeDomain get_result_domain(const GeometryComponent ,
+ const StringRef parameter_name,
+ const StringRef result_name)
+{
+  std::optional result_info = 
component.attribute_get_meta_data(result_name);
+  if (result_info) {
+return result_info->domain;
+  }
+  std::optional parameter_info = 

[Bf-blender-cvs] [cc93e09b5d3] refactor-vertex-group-names: Add small API to retrieve vertex group indices and lists from an ID

2021-07-12 Thread Hans Goudey
Commit: cc93e09b5d338ed68c10ffcd2e26e9a81fc310b4
Author: Hans Goudey
Date:   Tue Jun 29 16:41:45 2021 -0500
Branches: refactor-vertex-group-names
https://developer.blender.org/rBcc93e09b5d338ed68c10ffcd2e26e9a81fc310b4

Add small API to retrieve vertex group indices and lists from an ID

===

M   source/blender/blenkernel/BKE_deform.h
M   source/blender/blenkernel/intern/data_transfer.c
M   source/blender/blenkernel/intern/deform.c
M   source/blender/blenkernel/intern/lattice_deform.c
M   source/blender/blenkernel/intern/object_deform.c
M   source/blender/blenkernel/intern/softbody.c
M   source/blender/editors/object/object_vgroup.c
M   source/blender/modifiers/intern/MOD_curve.c
M   source/blender/modifiers/intern/MOD_mask.cc
M   source/blender/modifiers/intern/MOD_solidify_extrude.c
M   source/blender/modifiers/intern/MOD_solidify_nonmanifold.c
M   source/blender/modifiers/intern/MOD_util.c
M   source/blender/modifiers/intern/MOD_weightvg_util.c
M   source/blender/modifiers/intern/MOD_weightvgedit.c
M   source/blender/modifiers/intern/MOD_weightvgmix.c
M   source/blender/modifiers/intern/MOD_weightvgproximity.c
M   source/blender/modifiers/intern/MOD_weld.c
M   source/blender/modifiers/intern/MOD_wireframe.c
M   source/blender/render/intern/texture_pointdensity.c

===

diff --git a/source/blender/blenkernel/BKE_deform.h 
b/source/blender/blenkernel/BKE_deform.h
index 3a9475e2f6c..81136822ca9 100644
--- a/source/blender/blenkernel/BKE_deform.h
+++ b/source/blender/blenkernel/BKE_deform.h
@@ -37,6 +37,7 @@ struct MLoop;
 struct MPoly;
 struct Object;
 struct bDeformGroup;
+struct ID;
 
 const struct ListBase *BKE_object_defgroup_list_for_read(const struct Object 
*ob);
 struct ListBase *BKE_object_defgroup_list_for_write(struct Object *ob);
@@ -45,6 +46,10 @@ int BKE_object_defgroup_count(const struct Object *ob);
 int BKE_object_defgroup_active_index_get(const struct Object *ob);
 void BKE_object_defgroup_active_index_set(struct Object *ob, const int 
new_index);
 
+const struct ListBase *BKE_id_defgroup_list_get(const struct ID *id);
+struct ListBase *BKE_id_defgroup_list_get_mutable(struct ID *id);
+int BKE_id_defgroup_name_index(const struct ID *id, const char *name);
+
 struct bDeformGroup *BKE_object_defgroup_new(struct Object *ob, const char 
*name);
 void BKE_defgroup_copy_list(struct ListBase *outbase, const struct ListBase 
*inbase);
 struct bDeformGroup *BKE_defgroup_duplicate(const struct bDeformGroup 
*ingroup);
diff --git a/source/blender/blenkernel/intern/data_transfer.c 
b/source/blender/blenkernel/intern/data_transfer.c
index 12269cf0d51..d9d79c326e8 100644
--- a/source/blender/blenkernel/intern/data_transfer.c
+++ b/source/blender/blenkernel/intern/data_transfer.c
@@ -1437,7 +1437,7 @@ bool BKE_object_data_transfer_ex(struct Depsgraph 
*depsgraph,
   if (vgroup_name) {
 mdef = CustomData_get_layer(_dst->vdata, CD_MDEFORMVERT);
 if (mdef) {
-  vg_idx = BKE_object_defgroup_name_index(ob_dst, vgroup_name);
+  vg_idx = BKE_id_defgroup_name_index(_dst->id, vgroup_name);
 }
   }
 
diff --git a/source/blender/blenkernel/intern/deform.c 
b/source/blender/blenkernel/intern/deform.c
index 1a375c4b452..9a885bf2359 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@ -506,46 +506,66 @@ int BKE_object_defgroup_name_index(const Object *ob, 
const char *name)
   return BLI_findstringindex(defbase, name, offsetof(bDeformGroup, name));
 }
 
-const ListBase *BKE_object_defgroup_list_for_read(const Object *ob)
+int BKE_id_defgroup_name_index(const ID *id, const char *name)
 {
-  switch (ob->type) {
-case OB_MESH: {
-  const Mesh *mesh = (const Mesh *)ob->data;
-  return >vertex_group_names;
+  const ListBase *defbase = BKE_id_defgroup_list_get(id);
+  return BLI_findstringindex(defbase, name, offsetof(bDeformGroup, name));
+}
+
+const ListBase *BKE_id_defgroup_list_get(const ID *id)
+{
+  switch (GS(id->name)) {
+case ID_ME: {
+  const Mesh *me = (const Mesh *)id;
+  return >vertex_group_names;
 }
-case OB_LATTICE: {
-  const Lattice *lattice = (const Lattice *)ob->data;
-  return >vertex_group_names;
+case ID_LT: {
+  const Lattice *lt = (const Lattice *)id;
+  return >vertex_group_names;
 }
-case OB_GPENCIL: {
-  const bGPdata *gpd = (const bGPdata *)ob->data;
+case ID_GD: {
+  const bGPdata *gpd = (const bGPdata *)id;
   return >vertex_group_names;
 }
+default: {
+  BLI_assert_unreachable();
+}
   }
-  BLI_assert_unreachable();
   return NULL;
 }
 
-ListBase *BKE_object_defgroup_list_for_write(Object *ob)
+ListBase *BKE_id_defgroup_list_get_mutable(ID *id)
 {
-  switch (ob->type) {
-case OB_MESH: {
-  Mesh *mesh = (Mesh *)ob->data;
- 

[Bf-blender-cvs] [3efc50dfde4] temp-geometry-nodes-curve-sample: Boilerplate code. Big problem is using builtin attributes

2021-07-12 Thread Hans Goudey
Commit: 3efc50dfde43252927e094b1ebf9ef5aa6b12b07
Author: Hans Goudey
Date:   Fri Jul 2 15:23:43 2021 -0500
Branches: temp-geometry-nodes-curve-sample
https://developer.blender.org/rB3efc50dfde43252927e094b1ebf9ef5aa6b12b07

Boilerplate code. Big problem is using builtin attributes

===

M   source/blender/blenkernel/BKE_geometry_set.hh
M   source/blender/blenkernel/BKE_node.h
M   source/blender/blenkernel/BKE_spline.hh
M   source/blender/blenkernel/intern/node.cc
M   source/blender/makesdna/DNA_node_types.h
M   source/blender/makesrna/intern/rna_nodetree.c
M   source/blender/nodes/CMakeLists.txt
M   source/blender/nodes/NOD_geometry.h
M   source/blender/nodes/NOD_static_types.h
M   source/blender/nodes/geometry/nodes/node_geo_curve_resample.cc
A   source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc
M   source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc

===

diff --git a/source/blender/blenkernel/BKE_geometry_set.hh 
b/source/blender/blenkernel/BKE_geometry_set.hh
index 82c9a31dfce..c8d6f18baf8 100644
--- a/source/blender/blenkernel/BKE_geometry_set.hh
+++ b/source/blender/blenkernel/BKE_geometry_set.hh
@@ -180,6 +180,18 @@ class GeometryComponent {
 return blender::fn::GVArray_Typed(std::move(varray));
   }
 
+  /* Should be used instead of the method above when the requested data type 
is known at compile
+   * time for better type safety. */
+  template
+  blender::fn::GVArray_Typed attribute_get_for_read(const 
blender::StringRef attribute_name,
+   const T _value) 
const
+  {
+const blender::fn::CPPType _type = blender::fn::CPPType::get();
+const CustomDataType type = 
blender::bke::cpp_type_to_custom_data_type(cpp_type);
+std::unique_ptr varray = this->attribute_get_for_read(attribute_name, 
type, _value);
+return blender::fn::GVArray_Typed(std::move(varray));
+  }
+
   /**
* Returns an "output attribute", which is essentially a mutable virtual 
array with some commonly
* used convince features. The returned output attribute might be empty if 
requested attribute
diff --git a/source/blender/blenkernel/BKE_node.h 
b/source/blender/blenkernel/BKE_node.h
index 3562a3e8d63..0f53b76ce15 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -1444,6 +1444,7 @@ int ntreeTexExecTree(struct bNodeTree *ntree,
 #define GEO_NODE_CURVE_PRIMITIVE_QUADRATIC_BEZIER 1064
 #define GEO_NODE_CURVE_PRIMITIVE_BEZIER_SEGMENT 1065
 #define GEO_NODE_CURVE_PRIMITIVE_CIRCLE 1066
+#define GEO_NODE_CURVE_SAMPLE 1067
 
 /** \} */
 
diff --git a/source/blender/blenkernel/BKE_spline.hh 
b/source/blender/blenkernel/BKE_spline.hh
index 1aac2e311e3..cd752bcb798 100644
--- a/source/blender/blenkernel/BKE_spline.hh
+++ b/source/blender/blenkernel/BKE_spline.hh
@@ -205,6 +205,8 @@ class Spline {
 return 
blender::fn::GVArray_Typed(this->interpolate_to_evaluated(blender::fn::GSpan(data)));
   }
 
+  blender::fn::GVArrayPtr get_evaluated_attribute(const blender::StringRef 
name) const;
+
  protected:
   virtual void correct_end_tangents() const = 0;
   virtual void copy_settings(Spline ) const = 0;
diff --git a/source/blender/blenkernel/intern/node.cc 
b/source/blender/blenkernel/intern/node.cc
index e6635665567..9773bc77f31 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -5059,6 +5059,7 @@ static void registerGeometryNodes()
   register_node_type_geo_curve_primitive_quadratic_bezier();
   register_node_type_geo_curve_primitive_spiral();
   register_node_type_geo_curve_primitive_star();
+  register_node_type_geo_curve_sample();
   register_node_type_geo_curve_to_mesh();
   register_node_type_geo_curve_to_points();
   register_node_type_geo_curve_resample();
diff --git a/source/blender/makesdna/DNA_node_types.h 
b/source/blender/makesdna/DNA_node_types.h
index a6de85dd6af..a98023158df 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -1368,17 +1368,22 @@ typedef struct NodeGeometryCurvePrimitiveCircle {
 } NodeGeometryCurvePrimitiveCircle;
 
 typedef struct NodeGeometryCurveResample {
-  /* GeometryNodeCurveSampleMode. */
+  /* GeometryNodeCurveResampleMode. */
   uint8_t mode;
 } NodeGeometryCurveResample;
 
+typedef struct NodeGeometryCurveSample {
+  /* GeometryNodeCurveSampleMode. */
+  uint8_t mode;
+} NodeGeometryCurveSample;
+
 typedef struct NodeGeometryCurveSubdivide {
   /* GeometryNodeAttributeInputMode (integer or attribute). */
   uint8_t cuts_type;
 } NodeGeometryCurveSubdivide;
 
 typedef struct NodeGeometryCurveToPoints {
-  /* GeometryNodeCurveSampleMode. */
+  /* GeometryNodeCurveResampleMode. */
   uint8_t mode;
 } NodeGeometryCurveToPoints;
 
@@ -1909,10 +1914,15 @@ typedef enum 

[Bf-blender-cvs] [45803403216] temp-geometry-nodes-curve-sample: Some progress

2021-07-12 Thread Hans Goudey
Commit: 45803403216e31ea43e9e56b9c9b90c3cb20740c
Author: Hans Goudey
Date:   Mon Jul 5 07:26:10 2021 -0500
Branches: temp-geometry-nodes-curve-sample
https://developer.blender.org/rB45803403216e31ea43e9e56b9c9b90c3cb20740c

Some progress

===

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

===

diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc 
b/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc
index 89c46b58405..5e8094169d7 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc
@@ -92,12 +92,29 @@ static AttributeDomain get_result_domain(const 
GeometryComponent ,
   return ATTR_DOMAIN_POINT;
 }
 
+Array calculate_spline_accumulated_lengths(Span splines)
+{
+  Array lengths(splines.size() + 1);
+  float length = 0.0f;
+  for (const int i : splines.index_range()) {
+length += splines[i]->length();
+lengths[i] = length;
+  }
+  lengths.last() = length;
+  return lengths;
+}
+
+static void spline_sample_data(const Span evaluated_spans)
+{
+}
+
 /**
  * 1. Sort input parameters
  * 2. For each spline in the curve, sample the values on it.
  */
-static void curve_sample_attributes(const CurveEval ,
-const StringRef name,
+static void curve_sample_attributes(const Span splines,
+const Span spline_lengths,
+const Span evaluated_spans,
 const Span parameters,
 GMutableSpan result)
 {
@@ -110,6 +127,15 @@ static void curve_sample_attributes(const CurveEval ,
 return parameters[a] > parameters[b];
   });
 
+  Span remaining_parameters = parameters;
+
+  std::lower_bound
+
+  int spline_start_index = 0;
+  int spline_end_index = 0;
+  for (const int i : splines.index_range()) {
+  }
+
   for (const int i : range) {
   }
 }
@@ -133,9 +159,11 @@ static void execute_on_component(GeometryComponent 
,
   GMutableSpan result_span = result.as_span();
 
   const CurveEval  = *curve_component.get_for_read();
+  const Array lengths = 
calculate_spline_accumulated_lengths(curve.splines());
 
   threading::parallel_for(IndexRange(result_span.size()), 1024, [&](IndexRange 
range) {
 curve_sample_attributes(curve,
+lengths,
 attribute_name,
 parameters_span.slice(range.start(), range.size()),
 result_span.slice(range.start(), range.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] [53a6201c471] refactor-vertex-group-names: Merge branch 'master' into refactor-vertex-group-names

2021-07-12 Thread Hans Goudey
Commit: 53a6201c471e538368acac837f129eb7615a72fe
Author: Hans Goudey
Date:   Mon Jul 5 07:40:11 2021 -0500
Branches: refactor-vertex-group-names
https://developer.blender.org/rB53a6201c471e538368acac837f129eb7615a72fe

Merge branch 'master' into refactor-vertex-group-names

===



===

diff --cc source/blender/blenkernel/BKE_blender_version.h
index d5baeb08ccc,d5baeb08ccc..9d286b94b04
--- a/source/blender/blenkernel/BKE_blender_version.h
+++ b/source/blender/blenkernel/BKE_blender_version.h
@@@ -39,7 -39,7 +39,7 @@@ extern "C" 
  
  /* Blender file format version. */
  #define BLENDER_FILE_VERSION BLENDER_VERSION
--#define BLENDER_FILE_SUBVERSION 7
++#define BLENDER_FILE_SUBVERSION 8
  
  /* Minimum Blender version that supports reading file written with the current
   * version. Older Blender versions will test this and show a warning if the 
file
diff --cc source/blender/blenkernel/intern/deform.c
index 9a885bf2359,19840a70bf0..f457ab19f29
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@@ -1507,14 -1373,12 +1507,14 @@@ bool data_transfer_layersmapping_vgroup
  }
  
  if (tolayers >= 0) {
-   /* Note: in this case we assume layer exists! */
+   /* NOTE: in this case we assume layer exists! */
idx_dst = tolayers;
 -  BLI_assert(idx_dst < BLI_listbase_count(_dst->defbase));
 +  const ListBase *dst_defbase = BKE_object_defgroup_list_for_read(ob_dst);
 +  BLI_assert(idx_dst < BLI_listbase_count(dst_defbase));
 +  UNUSED_VARS_NDEBUG(dst_defbase);
  }
  else if (tolayers == DT_LAYERS_ACTIVE_DST) {
 -  if ((idx_dst = ob_dst->actdef - 1) == -1) {
 +  if ((idx_dst = BKE_object_defgroup_active_index_get(ob_dst) - 1) == -1) 
{
  bDeformGroup *dg_src;
  if (!use_create) {
return true;
diff --cc source/blender/blenloader/intern/versioning_300.c
index 9d239a0aec0,ecee14d3d58..fdc4e6006cb
--- a/source/blender/blenloader/intern/versioning_300.c
+++ b/source/blender/blenloader/intern/versioning_300.c
@@@ -145,10 -131,6 +145,10 @@@ void do_versions_after_linking_300(Mai
  assert_sorted_ids(bmain);
}
  
-   if (!MAIN_VERSION_ATLEAST(bmain, 300, 7)) {
++  if (!MAIN_VERSION_ATLEAST(bmain, 300, 8)) {
 +move_vertex_group_names_to_object_data(bmain);
 +  }
 +
/**
 * Versioning code until next subversion bump goes here.
 *
diff --cc source/blender/editors/object/object_vgroup.c
index cb34bbeb13b,37075a29b92..2dd0bd13088
--- a/source/blender/editors/object/object_vgroup.c
+++ b/source/blender/editors/object/object_vgroup.c
@@@ -1008,9 -1000,9 +1008,9 @@@ float ED_vgroup_vert_weight(Object *ob
  
  void ED_vgroup_select_by_name(Object *ob, const char *name)
  {
-   /* note: actdef==0 signals on painting to create a new one,
 -  /* NOTE: ob->actdef==0 signals on painting to create a new one,
++  /* NOTE: actdef==0 signals on painting to create a new one,
 * if a bone in posemode is selected */
 -  ob->actdef = BKE_object_defgroup_name_index(ob, name) + 1;
 +  BKE_object_defgroup_active_index_set(ob, BKE_object_defgroup_name_index(ob, 
name) + 1);
  }
  
  /** \} */
@@@ -1138,13 -1127,13 +1138,13 @@@ static void vgroup_duplicate(Object *ob
BLI_strncpy(cdg->name, name, sizeof(cdg->name));
BKE_object_defgroup_unique_name(cdg, ob);
  
 -  BLI_addtail(>defbase, cdg);
 +  BLI_addtail(defbase, cdg);
  
 -  idg = (ob->actdef - 1);
 -  ob->actdef = BLI_listbase_count(>defbase);
 -  icdg = (ob->actdef - 1);
 +  idg = BKE_object_defgroup_active_index_get(ob) - 1;
 +  BKE_object_defgroup_active_index_set(ob, BLI_listbase_count(defbase));
 +  icdg = BKE_object_defgroup_active_index_get(ob) - 1;
  
-   /* TODO, we might want to allow only copy selected verts here? - campbell */
+   /* TODO(campbell): we might want to allow only copy selected verts here? */
ED_vgroup_parray_alloc(ob->data, _array, _tot, false);
  
if (dvert_array) {
diff --cc source/blender/makesdna/DNA_mesh_types.h
index 1c7acd50abc,2f089b28048..2a569c8db50
--- a/source/blender/makesdna/DNA_mesh_types.h
+++ b/source/blender/makesdna/DNA_mesh_types.h
@@@ -164,11 -164,8 +164,10 @@@ typedef struct Mesh 
struct MVert *mvert;
/** Array of edges. */
struct MEdge *medge;
- 
-   /** Deformgroup vertices. */
+   /** Deform-group vertices. */
struct MDeformVert *dvert;
 +  /** List of bDeformGroup names and flag only. */
 +  ListBase vertex_group_names;
  
/* array of colors for the tessellated faces, must be number of tessellated
 * faces * 4 in length */
diff --cc source/blender/makesdna/DNA_object_types.h
index aa43097cf83,262d650c1ef..1577e727127
--- a/source/blender/makesdna/DNA_object_types.h
+++ b/source/blender/makesdna/DNA_object_types.h
@@@ -381,9 -380,9 +381,9 @@@ typedef struct Object 
  
/** Custom index, for renderpasses. */
short index;
-   

[Bf-blender-cvs] [530cb2c80fd] refactor-vertex-group-names: More fixes and cleanup

2021-07-12 Thread Hans Goudey
Commit: 530cb2c80fd7c2104513a76c53a414d032c1e44c
Author: Hans Goudey
Date:   Fri Jul 2 16:56:39 2021 -0500
Branches: refactor-vertex-group-names
https://developer.blender.org/rB530cb2c80fd7c2104513a76c53a414d032c1e44c

More fixes and cleanup

===

M   source/blender/blenkernel/intern/armature_deform.c
M   source/blender/blenkernel/intern/gpencil.c
M   source/blender/blenkernel/intern/key.c
M   source/blender/blenkernel/intern/lattice_deform.c
M   source/blender/blenkernel/intern/mesh.c
M   source/blender/blenkernel/intern/object.c
M   source/blender/blenkernel/intern/object_deform.c
M   source/blender/editors/armature/armature_skinning.c
M   source/blender/editors/gpencil/gpencil_armature.c
M   source/blender/editors/mesh/editmesh_select_similar.c
M   source/blender/editors/object/object_vgroup.c

===

diff --git a/source/blender/blenkernel/intern/armature_deform.c 
b/source/blender/blenkernel/intern/armature_deform.c
index 3cc8ad27424..b86103c4a3a 100644
--- a/source/blender/blenkernel/intern/armature_deform.c
+++ b/source/blender/blenkernel/intern/armature_deform.c
@@ -485,7 +485,7 @@ static void armature_deform_coords_impl(const Object 
*ob_arm,
   int defbase_len = 0;   /* safety for vertexgroup index overflow */
   int i, dverts_len = 0; /* safety for vertexgroup overflow */
   bool use_dverts = false;
-  int armature_def_nr;
+  int armature_def_nr = -1;
   int cd_dvert_offset = -1;
 
   /* in editmode, or not an armature */
@@ -500,12 +500,11 @@ static void armature_deform_coords_impl(const Object 
*ob_arm,
 BLI_assert(0);
   }
 
-  /* get the def_nr for the overall armature vertex group if present */
-  armature_def_nr = BKE_object_defgroup_name_index(ob_target, defgrp_name);
-  const ListBase *defbase = BKE_object_defgroup_list_for_read(ob_target);
-
   if (ELEM(ob_target->type, OB_MESH, OB_LATTICE, OB_GPENCIL)) {
-defbase_len = BLI_listbase_count(defbase);
+/* get the def_nr for the overall armature vertex group if present */
+armature_def_nr = BKE_object_defgroup_name_index(ob_target, defgrp_name);
+
+defbase_len = BKE_object_defgroup_count(ob_target);
 
 if (ob_target->type == OB_MESH) {
   if (em_target == NULL) {
@@ -552,6 +551,7 @@ static void armature_deform_coords_impl(const Object 
*ob_arm,
  *
  * - Check whether keeping this consistent across frames gives speedup.
  */
+const ListBase *defbase = BKE_object_defgroup_list_for_read(ob_target);
 for (i = 0, dg = defbase->first; dg; i++, dg = dg->next) {
   pchan_from_defbase[i] = BKE_pose_channel_find_name(ob_arm->pose, 
dg->name);
   /* exclude non-deforming bones */
diff --git a/source/blender/blenkernel/intern/gpencil.c 
b/source/blender/blenkernel/intern/gpencil.c
index 6321f6b8461..9e997d9e47c 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -87,7 +87,7 @@ static void greasepencil_copy_data(Main *UNUSED(bmain),
 gpd_dst->mat = MEM_dupallocN(gpd_src->mat);
   }
 
-  BKE_defgroup_copy_list(_dst->vertex_group_names, 
_src->vertex_group_names);
+  BKE_defgroup_copy_list(_dst->vertex_group_names, 
_src->vertex_group_names, __func__);
 
   /* copy layers */
   BLI_listbase_clear(_dst->layers);
diff --git a/source/blender/blenkernel/intern/key.c 
b/source/blender/blenkernel/intern/key.c
index 01cd7530f47..52f888d9543 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -1311,14 +1311,13 @@ static float *get_weights_array(Object *ob, char 
*vgroup, WeightsArrayCache *cac
   }
 
   /* find the group (weak loop-in-loop) */
-  const ListBase *defbase = BKE_object_defgroup_list_for_read(ob);
   defgrp_index = BKE_object_defgroup_name_index(ob, vgroup);
   if (defgrp_index != -1) {
 float *weights;
 
 if (cache) {
   if (cache->defgroup_weights == NULL) {
-int num_defgroup = BLI_listbase_count(defbase);
+int num_defgroup = BKE_object_defgroup_count(ob);
 cache->defgroup_weights = MEM_callocN(sizeof(*cache->defgroup_weights) 
* num_defgroup,
   "cached defgroup weights");
 cache->num_defgroup_weights = num_defgroup;
diff --git a/source/blender/blenkernel/intern/lattice_deform.c 
b/source/blender/blenkernel/intern/lattice_deform.c
index 618ec5bc301..d6e5eca95fc 100644
--- a/source/blender/blenkernel/intern/lattice_deform.c
+++ b/source/blender/blenkernel/intern/lattice_deform.c
@@ -112,7 +112,7 @@ LatticeDeformData *BKE_lattice_deform_data_create(const 
Object *oblatt, const Ob
   int defgrp_index = -1;
   const MDeformVert *dvert = BKE_lattice_deform_verts_get(oblatt);
   if (lt->vgroup[0] && dvert) {
-defgrp_index = BKE_id_defgroup_name_index(lt, lt->vgroup);
+defgrp_index = 

[Bf-blender-cvs] [3f1614e788f] refactor-vertex-group-names: Share implementation of vertex group retrieval

2021-07-12 Thread Hans Goudey
Commit: 3f1614e788fed54ddf45bd57f11376df8bd93f90
Author: Hans Goudey
Date:   Mon Jul 5 10:24:24 2021 -0500
Branches: refactor-vertex-group-names
https://developer.blender.org/rB3f1614e788fed54ddf45bd57f11376df8bd93f90

Share implementation of vertex group retrieval

===

M   source/blender/blenkernel/intern/deform.c

===

diff --git a/source/blender/blenkernel/intern/deform.c 
b/source/blender/blenkernel/intern/deform.c
index f457ab19f29..362fdd70bde 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@ -536,24 +536,8 @@ const ListBase *BKE_id_defgroup_list_get(const ID *id)
 
 ListBase *BKE_id_defgroup_list_get_mutable(ID *id)
 {
-  switch (GS(id->name)) {
-case ID_ME: {
-  Mesh *me = (Mesh *)id;
-  return >vertex_group_names;
-}
-case ID_LT: {
-  Lattice *lt = (Lattice *)id;
-  return >vertex_group_names;
-}
-case ID_GD: {
-  bGPdata *gpd = (bGPdata *)id;
-  return >vertex_group_names;
-}
-default: {
-  BLI_assert_unreachable();
-}
-  }
-  return NULL;
+  /* Cast away const just for the accessor. */
+  return (ListBase *)BKE_id_defgroup_list_get(id);
 }
 
 const ListBase *BKE_object_defgroup_list_for_read(const Object *ob)

___
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] [9b8b4a5ab86] refactor-vertex-group-names: Move active index to geometry

2021-07-12 Thread Hans Goudey
Commit: 9b8b4a5ab86516b9948b97928d945cd7be76a2d7
Author: Hans Goudey
Date:   Tue Jun 29 12:43:03 2021 -0500
Branches: refactor-vertex-group-names
https://developer.blender.org/rB9b8b4a5ab86516b9948b97928d945cd7be76a2d7

Move active index to geometry

===

M   source/blender/blenkernel/BKE_deform.h
M   source/blender/blenkernel/intern/deform.c
M   source/blender/blenkernel/intern/object_deform.c
M   source/blender/draw/intern/draw_cache.c
M   source/blender/draw/intern/draw_cache_impl_gpencil.c
M   source/blender/draw/intern/draw_cache_impl_mesh.c
M   source/blender/editors/gpencil/gpencil_data.c
M   source/blender/editors/gpencil/gpencil_fill.c
M   source/blender/editors/gpencil/gpencil_paint.c
M   source/blender/editors/gpencil/gpencil_primitive.c
M   source/blender/editors/gpencil/gpencil_sculpt_paint.c
M   source/blender/editors/gpencil/gpencil_utils.c
M   source/blender/editors/gpencil/gpencil_weight_paint.c
M   source/blender/editors/mesh/editmesh_tools.c
M   source/blender/editors/mesh/meshtools.c
M   source/blender/editors/object/object_hook.c
M   source/blender/editors/object/object_vgroup.c
M   source/blender/editors/sculpt_paint/paint_vertex.c
M   source/blender/editors/sculpt_paint/paint_vertex_color_ops.c
M   source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c
M   source/blender/editors/sculpt_paint/paint_vertex_weight_utils.c
M   source/blender/editors/space_outliner/outliner_select.c
M   source/blender/editors/space_view3d/view3d_buttons.c
M   source/blender/makesdna/DNA_gpencil_types.h
M   source/blender/makesdna/DNA_lattice_types.h
M   source/blender/makesdna/DNA_mesh_types.h
M   source/blender/makesdna/DNA_object_types.h
M   source/blender/makesrna/intern/rna_object.c
M   source/blender/render/intern/texture_pointdensity.c

===

diff --git a/source/blender/blenkernel/BKE_deform.h 
b/source/blender/blenkernel/BKE_deform.h
index c9f01f3d2eb..3a9475e2f6c 100644
--- a/source/blender/blenkernel/BKE_deform.h
+++ b/source/blender/blenkernel/BKE_deform.h
@@ -41,6 +41,10 @@ struct bDeformGroup;
 const struct ListBase *BKE_object_defgroup_list_for_read(const struct Object 
*ob);
 struct ListBase *BKE_object_defgroup_list_for_write(struct Object *ob);
 
+int BKE_object_defgroup_count(const struct Object *ob);
+int BKE_object_defgroup_active_index_get(const struct Object *ob);
+void BKE_object_defgroup_active_index_set(struct Object *ob, const int 
new_index);
+
 struct bDeformGroup *BKE_object_defgroup_new(struct Object *ob, const char 
*name);
 void BKE_defgroup_copy_list(struct ListBase *outbase, const struct ListBase 
*inbase);
 struct bDeformGroup *BKE_defgroup_duplicate(const struct bDeformGroup 
*ingroup);
diff --git a/source/blender/blenkernel/intern/deform.c 
b/source/blender/blenkernel/intern/deform.c
index a448cf4236b..1a375c4b452 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@ -546,6 +546,61 @@ ListBase *BKE_object_defgroup_list_for_write(Object *ob)
   return NULL;
 }
 
+int BKE_object_defgroup_count(const Object *ob)
+{
+  return BLI_listbase_count(BKE_object_defgroup_list_for_read(ob));
+}
+
+/**
+ * \note For historical reasons, the index starts at 1 rather than 0.
+ */
+int BKE_object_defgroup_active_index_get(const Object *ob)
+{
+  switch (ob->type) {
+case OB_MESH: {
+  const Mesh *mesh = (const Mesh *)ob->data;
+  return mesh->vertex_group_active_index;
+}
+case OB_LATTICE: {
+  const Lattice *lattice = (const Lattice *)ob->data;
+  return lattice->vertex_group_active_index;
+}
+case OB_GPENCIL: {
+  const bGPdata *gpd = (const bGPdata *)ob->data;
+  return gpd->vertex_group_active_index;
+}
+  }
+  BLI_assert_unreachable();
+  return -1;
+}
+
+/**
+ * \note For historical reasons, the index starts at 1 rather than 0.
+ */
+void BKE_object_defgroup_active_index_set(Object *ob, const int new_index)
+{
+  switch (ob->type) {
+case OB_MESH: {
+  Mesh *mesh = (Mesh *)ob->data;
+  mesh->vertex_group_active_index = new_index;
+  break;
+}
+case OB_LATTICE: {
+  Lattice *lattice = (Lattice *)ob->data;
+  lattice->vertex_group_active_index = new_index;
+  break;
+}
+case OB_GPENCIL: {
+  bGPdata *gpd = (bGPdata *)ob->data;
+  gpd->vertex_group_active_index = new_index;
+  break;
+}
+default: {
+  BLI_assert_unreachable();
+}
+  }
+}
+
 /**
  * \note caller must free.
  */
@@ -1329,7 +1384,7 @@ static bool 
data_transfer_layersmapping_vgroups_multisrc_to_dst(ListBase *r_map,
 if ((idx_dst = BKE_object_defgroup_name_index(ob_dst, dg_src->name)) 
== -1) {
   if (use_create) {
 BKE_object_defgroup_add_name(ob_dst, dg_src->name);
-   

[Bf-blender-cvs] [648b9c61593] refactor-vertex-group-names: Safer RNA object vertex group API (should fix issues reported by @Mets, thanks!)

2021-07-12 Thread Hans Goudey
Commit: 648b9c6159330f3ff313293b0126398963246627
Author: Hans Goudey
Date:   Mon Jul 5 13:14:40 2021 -0500
Branches: refactor-vertex-group-names
https://developer.blender.org/rB648b9c6159330f3ff313293b0126398963246627

Safer RNA object vertex group API (should fix issues reported by @Mets, thanks!)

===

M   source/blender/blenkernel/BKE_deform.h
M   source/blender/blenkernel/intern/deform.c
M   source/blender/makesrna/intern/rna_object.c

===

diff --git a/source/blender/blenkernel/BKE_deform.h 
b/source/blender/blenkernel/BKE_deform.h
index 1330bee87df..0ab126a70ae 100644
--- a/source/blender/blenkernel/BKE_deform.h
+++ b/source/blender/blenkernel/BKE_deform.h
@@ -39,6 +39,7 @@ struct Object;
 struct bDeformGroup;
 struct ID;
 
+bool BKE_object_supports_vertex_groups(const struct Object *ob);
 const struct ListBase *BKE_object_defgroup_list(const struct Object *ob);
 struct ListBase *BKE_object_defgroup_list_mutable(struct Object *ob);
 
diff --git a/source/blender/blenkernel/intern/deform.c 
b/source/blender/blenkernel/intern/deform.c
index 4a2c084bde5..20c2b0425b8 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@ -540,13 +540,25 @@ ListBase *BKE_id_defgroup_list_get_mutable(ID *id)
   return (ListBase *)BKE_id_defgroup_list_get(id);
 }
 
+bool BKE_object_supports_vertex_groups(const Object *ob)
+{
+  const ID *id = (const ID *)ob->data;
+  if (id == NULL) {
+return false;
+  }
+
+  return ELEM(GS(id->name), ID_ME, ID_LT, ID_GD);
+}
+
 const ListBase *BKE_object_defgroup_list(const Object *ob)
 {
+  BLI_assert(ob->data != NULL);
   return BKE_id_defgroup_list_get((const ID *)ob->data);
 }
 
 ListBase *BKE_object_defgroup_list_mutable(Object *ob)
 {
+  BLI_assert(ob->data != NULL);
   return BKE_id_defgroup_list_get_mutable((ID *)ob->data);
 }
 
diff --git a/source/blender/makesrna/intern/rna_object.c 
b/source/blender/makesrna/intern/rna_object.c
index 5259c5367c0..e110459eeea 100644
--- a/source/blender/makesrna/intern/rna_object.c
+++ b/source/blender/makesrna/intern/rna_object.c
@@ -728,16 +728,6 @@ static const EnumPropertyItem 
*rna_Object_parent_type_itemf(bContext *UNUSED(C),
   return item;
 }
 
-static void rna_Object_vertex_groups_begin(CollectionPropertyIterator *iter, 
PointerRNA *ptr)
-{
-  Object *ob = (Object *)ptr->data;
-
-  ListBase *defbase = BKE_object_defgroup_list_mutable(ob);
-  iter->valid = defbase != NULL;
-
-  rna_iterator_listbase_begin(iter, defbase, NULL);
-}
-
 static void rna_Object_empty_display_type_set(PointerRNA *ptr, int value)
 {
   Object *ob = (Object *)ptr->data;
@@ -800,9 +790,27 @@ static void rna_Object_dup_collection_set(PointerRNA *ptr,
   }
 }
 
+static void rna_Object_vertex_groups_begin(CollectionPropertyIterator *iter, 
PointerRNA *ptr)
+{
+  Object *ob = (Object *)ptr->data;
+  if (!BKE_object_supports_vertex_groups(ob)) {
+iter->valid = 0;
+return;
+  }
+
+  ListBase *defbase = BKE_object_defgroup_list_mutable(ob);
+  iter->valid = defbase != NULL;
+
+  rna_iterator_listbase_begin(iter, defbase, NULL);
+}
+
 static void rna_VertexGroup_name_set(PointerRNA *ptr, const char *value)
 {
   Object *ob = (Object *)ptr->owner_id;
+  if (!BKE_object_supports_vertex_groups(ob)) {
+return;
+  }
+
   bDeformGroup *dg = (bDeformGroup *)ptr->data;
   BLI_strncpy_utf8(dg->name, value, sizeof(dg->name));
   BKE_object_defgroup_unique_name(dg, ob);
@@ -811,6 +819,9 @@ static void rna_VertexGroup_name_set(PointerRNA *ptr, const 
char *value)
 static int rna_VertexGroup_index_get(PointerRNA *ptr)
 {
   Object *ob = (Object *)ptr->owner_id;
+  if (!BKE_object_supports_vertex_groups(ob)) {
+return -1;
+  }
 
   const ListBase *defbase = BKE_object_defgroup_list(ob);
   return BLI_findindex(defbase, ptr->data);
@@ -819,6 +830,10 @@ static int rna_VertexGroup_index_get(PointerRNA *ptr)
 static PointerRNA rna_Object_active_vertex_group_get(PointerRNA *ptr)
 {
   Object *ob = (Object *)ptr->owner_id;
+  if (!BKE_object_supports_vertex_groups(ob)) {
+return PointerRNA_NULL;
+  }
+
   const ListBase *defbase = BKE_object_defgroup_list(ob);
 
   return rna_pointer_inherit_refine(
@@ -830,7 +845,12 @@ static void rna_Object_active_vertex_group_set(PointerRNA 
*ptr,
struct ReportList *reports)
 {
   Object *ob = (Object *)ptr->owner_id;
+  if (!BKE_object_supports_vertex_groups(ob)) {
+return;
+  }
+
   const ListBase *defbase = BKE_object_defgroup_list(ob);
+
   int index = BLI_findindex(defbase, value.data);
   if (index == -1) {
 BKE_reportf(reports,
@@ -847,12 +867,20 @@ static void rna_Object_active_vertex_group_set(PointerRNA 
*ptr,
 static int rna_Object_active_vertex_group_index_get(PointerRNA *ptr)
 {
   Object *ob = (Object *)ptr->owner_id;
+  if (!BKE_object_supports_vertex_groups(ob)) {
+

[Bf-blender-cvs] [56ca4fe5bb3] refactor-vertex-group-names: Fixes from review comments

2021-07-12 Thread Hans Goudey
Commit: 56ca4fe5bb3c3d8cd92a1c99fc83856aaefdd0c2
Author: Hans Goudey
Date:   Mon Jul 5 13:58:23 2021 -0500
Branches: refactor-vertex-group-names
https://developer.blender.org/rB56ca4fe5bb3c3d8cd92a1c99fc83856aaefdd0c2

Fixes from review comments

===

M   source/blender/blenkernel/intern/deform.c
M   source/blender/blenkernel/intern/lattice_deform.c
M   source/blender/blenkernel/intern/mesh.c
M   source/blender/editors/gpencil/gpencil_fill.c
M   source/blender/editors/object/object_vgroup.c
M   source/blender/makesdna/DNA_object_types.h

===

diff --git a/source/blender/blenkernel/intern/deform.c 
b/source/blender/blenkernel/intern/deform.c
index 20c2b0425b8..f7ef84728b6 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@ -488,28 +488,14 @@ void BKE_defvert_flip_merged(MDeformVert *dvert, const 
int *flip_map, const int
   }
 }
 
-bDeformGroup *BKE_object_defgroup_find_name(const Object *ob, const char *name)
-{
-  if (name == NULL || name[0] == '\0') {
-return NULL;
-  }
-  const ListBase *defbase = BKE_object_defgroup_list(ob);
-  return BLI_findstring(defbase, name, offsetof(bDeformGroup, name));
-}
-
-int BKE_object_defgroup_name_index(const Object *ob, const char *name)
+bool BKE_object_supports_vertex_groups(const Object *ob)
 {
-  if (name == NULL || name[0] == '\0') {
-return -1;
+  const ID *id = (const ID *)ob->data;
+  if (id == NULL) {
+return false;
   }
-  const ListBase *defbase = BKE_object_defgroup_list(ob);
-  return BLI_findstringindex(defbase, name, offsetof(bDeformGroup, name));
-}
 
-int BKE_id_defgroup_name_index(const ID *id, const char *name)
-{
-  const ListBase *defbase = BKE_id_defgroup_list_get(id);
-  return BLI_findstringindex(defbase, name, offsetof(bDeformGroup, name));
+  return ELEM(GS(id->name), ID_ME, ID_LT, ID_GD);
 }
 
 const ListBase *BKE_id_defgroup_list_get(const ID *id)
@@ -534,31 +520,64 @@ const ListBase *BKE_id_defgroup_list_get(const ID *id)
   return NULL;
 }
 
+static const int *object_defgroup_active_index_get_p(const Object *ob)
+{
+  BLI_assert(BKE_object_supports_vertex_groups(ob));
+  switch (ob->type) {
+case OB_MESH: {
+  const Mesh *mesh = (const Mesh *)ob->data;
+  return >vertex_group_active_index;
+}
+case OB_LATTICE: {
+  const Lattice *lattice = (const Lattice *)ob->data;
+  return >vertex_group_active_index;
+}
+case OB_GPENCIL: {
+  const bGPdata *gpd = (const bGPdata *)ob->data;
+  return >vertex_group_active_index;
+}
+  }
+  return NULL;
+}
+
 ListBase *BKE_id_defgroup_list_get_mutable(ID *id)
 {
   /* Cast away const just for the accessor. */
   return (ListBase *)BKE_id_defgroup_list_get(id);
 }
 
-bool BKE_object_supports_vertex_groups(const Object *ob)
+bDeformGroup *BKE_object_defgroup_find_name(const Object *ob, const char *name)
 {
-  const ID *id = (const ID *)ob->data;
-  if (id == NULL) {
-return false;
+  if (name == NULL || name[0] == '\0') {
+return NULL;
   }
+  const ListBase *defbase = BKE_object_defgroup_list(ob);
+  return BLI_findstring(defbase, name, offsetof(bDeformGroup, name));
+}
 
-  return ELEM(GS(id->name), ID_ME, ID_LT, ID_GD);
+int BKE_id_defgroup_name_index(const ID *id, const char *name)
+{
+  if (name == NULL || name[0] == '\0') {
+return -1;
+  }
+  const ListBase *defbase = BKE_id_defgroup_list_get(id);
+  return BLI_findstringindex(defbase, name, offsetof(bDeformGroup, name));
 }
 
 const ListBase *BKE_object_defgroup_list(const Object *ob)
 {
-  BLI_assert(ob->data != NULL);
+  BLI_assert(BKE_object_supports_vertex_groups(ob));
   return BKE_id_defgroup_list_get((const ID *)ob->data);
 }
 
+int BKE_object_defgroup_name_index(const Object *ob, const char *name)
+{
+  return BKE_id_defgroup_name_index((ID *)ob->data, name);
+}
+
 ListBase *BKE_object_defgroup_list_mutable(Object *ob)
 {
-  BLI_assert(ob->data != NULL);
+  BLI_assert(BKE_object_supports_vertex_groups(ob));
   return BKE_id_defgroup_list_get_mutable((ID *)ob->data);
 }
 
@@ -572,22 +591,7 @@ int BKE_object_defgroup_count(const Object *ob)
  */
 int BKE_object_defgroup_active_index_get(const Object *ob)
 {
-  switch (ob->type) {
-case OB_MESH: {
-  const Mesh *mesh = (const Mesh *)ob->data;
-  return mesh->vertex_group_active_index;
-}
-case OB_LATTICE: {
-  const Lattice *lattice = (const Lattice *)ob->data;
-  return lattice->vertex_group_active_index;
-}
-case OB_GPENCIL: {
-  const bGPdata *gpd = (const bGPdata *)ob->data;
-  return gpd->vertex_group_active_index;
-}
-  }
-  BLI_assert_unreachable();
-  return -1;
+  return *object_defgroup_active_index_get_p(ob);
 }
 
 /**
@@ -595,26 +599,9 @@ int BKE_object_defgroup_active_index_get(const Object *ob)
  */
 void BKE_object_defgroup_active_index_set(Object *ob, const 

[Bf-blender-cvs] [6eac08f542f] refactor-vertex-group-names: Merge branch 'master' into refactor-vertex-group-names

2021-07-12 Thread Hans Goudey
Commit: 6eac08f542f313d5485de3f3ed01fd388a4f1630
Author: Hans Goudey
Date:   Mon Jul 5 12:32:56 2021 -0500
Branches: refactor-vertex-group-names
https://developer.blender.org/rB6eac08f542f313d5485de3f3ed01fd388a4f1630

Merge branch 'master' into refactor-vertex-group-names

===



===



___
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] [9bbcf6fec82] refactor-vertex-group-names: Fix issue with modifier vertex group utility-- tests pass

2021-07-12 Thread Hans Goudey
Commit: 9bbcf6fec82462a038906acbdf24128a5eb78092
Author: Hans Goudey
Date:   Fri Jul 2 22:50:22 2021 -0500
Branches: refactor-vertex-group-names
https://developer.blender.org/rB9bbcf6fec82462a038906acbdf24128a5eb78092

Fix issue with modifier vertex group utility-- tests pass

===

M   source/blender/blenkernel/intern/gpencil.c
M   source/blender/blenkernel/intern/mesh.c
M   source/blender/modifiers/intern/MOD_util.c

===

diff --git a/source/blender/blenkernel/intern/gpencil.c 
b/source/blender/blenkernel/intern/gpencil.c
index 9e997d9e47c..6321f6b8461 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -87,7 +87,7 @@ static void greasepencil_copy_data(Main *UNUSED(bmain),
 gpd_dst->mat = MEM_dupallocN(gpd_src->mat);
   }
 
-  BKE_defgroup_copy_list(_dst->vertex_group_names, 
_src->vertex_group_names, __func__);
+  BKE_defgroup_copy_list(_dst->vertex_group_names, 
_src->vertex_group_names);
 
   /* copy layers */
   BLI_listbase_clear(_dst->layers);
diff --git a/source/blender/blenkernel/intern/mesh.c 
b/source/blender/blenkernel/intern/mesh.c
index 7daca2f7a56..5aa73ed0e9e 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -932,8 +932,11 @@ void BKE_mesh_copy_parameters(Mesh *me_dst, const Mesh 
*me_src)
   copy_v3_v3(me_dst->loc, me_src->loc);
   copy_v3_v3(me_dst->size, me_src->size);
 
-  /* Copy vertex group names. */
-  BKE_defgroup_copy_list(_dst->vertex_group_names, 
_src->vertex_group_names);
+  /* Copy vertex group names, only when they haven't already been copied. */
+  if (BLI_listbase_is_empty(_dst->vertex_group_names)) {
+BKE_defgroup_copy_list(_dst->vertex_group_names, 
_src->vertex_group_names);
+  }
+
   me_dst->vertex_group_active_index = me_src->vertex_group_active_index;
 }
 
diff --git a/source/blender/modifiers/intern/MOD_util.c 
b/source/blender/modifiers/intern/MOD_util.c
index 6af02555a32..501549c3f63 100644
--- a/source/blender/modifiers/intern/MOD_util.c
+++ b/source/blender/modifiers/intern/MOD_util.c
@@ -256,7 +256,12 @@ void MOD_get_vgroup(
 {
   if (mesh) {
 *defgrp_index = BKE_id_defgroup_name_index(>id, name);
-*dvert = mesh->dvert;
+if (*defgrp_index != -1) {
+  *dvert = mesh->dvert;
+}
+else {
+  *dvert = NULL;
+}
   }
   else {
 *defgrp_index = BKE_object_defgroup_name_index(ob, name);

___
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] [1947cbfc407] refactor-vertex-group-names: Merge branch 'master' into refactor-vertex-group-names

2021-07-12 Thread Hans Goudey
Commit: 1947cbfc4079038d0862a68376d100b1fc68082f
Author: Hans Goudey
Date:   Fri Jul 2 15:24:06 2021 -0500
Branches: refactor-vertex-group-names
https://developer.blender.org/rB1947cbfc4079038d0862a68376d100b1fc68082f

Merge branch 'master' into refactor-vertex-group-names

===



===



___
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] [941c4188ad3] refactor-vertex-group-names: Rename functions "for_read" -> "" and "for_write" -> "mutable"

2021-07-12 Thread Hans Goudey
Commit: 941c4188ad3d8a87e35d380ecf7ccd14a9f25d9d
Author: Hans Goudey
Date:   Mon Jul 5 10:27:27 2021 -0500
Branches: refactor-vertex-group-names
https://developer.blender.org/rB941c4188ad3d8a87e35d380ecf7ccd14a9f25d9d

Rename functions "for_read" -> "" and "for_write" -> "mutable"

===

M   source/blender/blenkernel/BKE_deform.h
M   source/blender/blenkernel/intern/armature_deform.c
M   source/blender/blenkernel/intern/deform.c
M   source/blender/blenkernel/intern/object_deform.c
M   source/blender/blenloader/intern/versioning_300.c
M   source/blender/draw/engines/overlay/overlay_armature.c
M   source/blender/editors/gpencil/gpencil_fill.c
M   source/blender/editors/gpencil/gpencil_primitive.c
M   source/blender/editors/mesh/editmesh_select.c
M   source/blender/editors/mesh/editmesh_select_similar.c
M   source/blender/editors/object/object_data_transfer.c
M   source/blender/editors/object/object_hook.c
M   source/blender/editors/object/object_vgroup.c
M   source/blender/editors/sculpt_paint/paint_vertex_weight_utils.c
M   source/blender/editors/space_outliner/outliner_tree.c
M   source/blender/editors/space_view3d/view3d_buttons.c
M   source/blender/io/collada/ControllerExporter.cpp
M   source/blender/io/collada/SkinInfo.cpp
M   source/blender/makesrna/intern/rna_modifier.c
M   source/blender/makesrna/intern/rna_object.c
M   source/blender/makesrna/intern/rna_particle.c
M   source/blender/modifiers/intern/MOD_armature.c

===

diff --git a/source/blender/blenkernel/BKE_deform.h 
b/source/blender/blenkernel/BKE_deform.h
index 81136822ca9..1330bee87df 100644
--- a/source/blender/blenkernel/BKE_deform.h
+++ b/source/blender/blenkernel/BKE_deform.h
@@ -39,8 +39,8 @@ struct Object;
 struct bDeformGroup;
 struct ID;
 
-const struct ListBase *BKE_object_defgroup_list_for_read(const struct Object 
*ob);
-struct ListBase *BKE_object_defgroup_list_for_write(struct Object *ob);
+const struct ListBase *BKE_object_defgroup_list(const struct Object *ob);
+struct ListBase *BKE_object_defgroup_list_mutable(struct Object *ob);
 
 int BKE_object_defgroup_count(const struct Object *ob);
 int BKE_object_defgroup_active_index_get(const struct Object *ob);
diff --git a/source/blender/blenkernel/intern/armature_deform.c 
b/source/blender/blenkernel/intern/armature_deform.c
index b86103c4a3a..2552b5eefea 100644
--- a/source/blender/blenkernel/intern/armature_deform.c
+++ b/source/blender/blenkernel/intern/armature_deform.c
@@ -551,7 +551,7 @@ static void armature_deform_coords_impl(const Object 
*ob_arm,
  *
  * - Check whether keeping this consistent across frames gives speedup.
  */
-const ListBase *defbase = BKE_object_defgroup_list_for_read(ob_target);
+const ListBase *defbase = BKE_object_defgroup_list(ob_target);
 for (i = 0, dg = defbase->first; dg; i++, dg = dg->next) {
   pchan_from_defbase[i] = BKE_pose_channel_find_name(ob_arm->pose, 
dg->name);
   /* exclude non-deforming bones */
diff --git a/source/blender/blenkernel/intern/deform.c 
b/source/blender/blenkernel/intern/deform.c
index 362fdd70bde..4a2c084bde5 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@ -66,7 +66,7 @@ bDeformGroup *BKE_object_defgroup_new(Object *ob, const char 
*name)
 
   BLI_strncpy(defgroup->name, name, sizeof(defgroup->name));
 
-  ListBase *defbase = BKE_object_defgroup_list_for_write(ob);
+  ListBase *defbase = BKE_object_defgroup_list_mutable(ob);
 
   BLI_addtail(defbase, defgroup);
   BKE_object_defgroup_unique_name(defgroup, ob);
@@ -493,7 +493,7 @@ bDeformGroup *BKE_object_defgroup_find_name(const Object 
*ob, const char *name)
   if (name == NULL || name[0] == '\0') {
 return NULL;
   }
-  const ListBase *defbase = BKE_object_defgroup_list_for_read(ob);
+  const ListBase *defbase = BKE_object_defgroup_list(ob);
   return BLI_findstring(defbase, name, offsetof(bDeformGroup, name));
 }
 
@@ -502,7 +502,7 @@ int BKE_object_defgroup_name_index(const Object *ob, const 
char *name)
   if (name == NULL || name[0] == '\0') {
 return -1;
   }
-  const ListBase *defbase = BKE_object_defgroup_list_for_read(ob);
+  const ListBase *defbase = BKE_object_defgroup_list(ob);
   return BLI_findstringindex(defbase, name, offsetof(bDeformGroup, name));
 }
 
@@ -540,19 +540,19 @@ ListBase *BKE_id_defgroup_list_get_mutable(ID *id)
   return (ListBase *)BKE_id_defgroup_list_get(id);
 }
 
-const ListBase *BKE_object_defgroup_list_for_read(const Object *ob)
+const ListBase *BKE_object_defgroup_list(const Object *ob)
 {
   return BKE_id_defgroup_list_get((const ID *)ob->data);
 }
 
-ListBase *BKE_object_defgroup_list_for_write(Object *ob)
+ListBase *BKE_object_defgroup_list_mutable(Object *ob)
 {
   return 

[Bf-blender-cvs] [ce5c6e4d0d6] curve-nodes-modifier: Change more switch statements to reflect the fact that curves only render as wires

2021-07-12 Thread Hans Goudey
Commit: ce5c6e4d0d63c14b10031151ad6a9c8ac31b5434
Author: Hans Goudey
Date:   Tue Jul 6 17:15:43 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rBce5c6e4d0d63c14b10031151ad6a9c8ac31b5434

Change more switch statements to reflect the fact that curves only render as 
wires

===

M   source/blender/draw/intern/draw_cache.c

===

diff --git a/source/blender/draw/intern/draw_cache.c 
b/source/blender/draw/intern/draw_cache.c
index 9380114893d..a6530278862 100644
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@ -939,9 +939,9 @@ int DRW_cache_object_material_count_get(struct Object *ob)
 
   Mesh *me = BKE_object_get_evaluated_mesh(ob);
   if (me != NULL && type != OB_POINTCLOUD) {
-/* Some object types (e.g. curves) can have a Curve in ob->data, but will 
be rendered as mesh.
- * For point clouds this never happens. Ideally this check would happen at 
another level and we
- * would just have to care about ob->data here. */
+/* Some object types can have one data type in ob->data, but will be 
rendered as mesh.
+ * For point clouds this never happens. Ideally this check would happen at 
another level
+ * and we would just have to care about ob->data here. */
 type = OB_MESH;
   }
 
@@ -3467,6 +3467,8 @@ void drw_batch_cache_validate(Object *ob)
   DRW_mesh_batch_cache_validate((Mesh *)ob->data);
   break;
 case OB_CURVE:
+  DRW_curve_batch_cache_validate((Curve *)ob->data);
+  break;
 case OB_FONT:
 case OB_SURF:
   if (mesh_eval != NULL) {
@@ -3514,8 +3516,10 @@ void drw_batch_cache_generate_requested(Object *ob)
   DRW_mesh_batch_cache_create_requested(
   DST.task_graph, ob, (Mesh *)ob->data, scene, is_paint_mode, 
use_hide);
   break;
-case OB_CURVE:
 case OB_FONT:
+case OB_CURVE:
+  DRW_curve_batch_cache_create_requested(ob, scene);
+  break;
 case OB_SURF:
   if (mesh_eval) {
 DRW_mesh_batch_cache_create_requested(
@@ -3542,8 +3546,6 @@ void DRW_batch_cache_free_old(Object *ob, int ctime)
 case OB_MESH:
   DRW_mesh_batch_cache_free_old((Mesh *)ob->data, ctime);
   break;
-case OB_CURVE:
-case OB_FONT:
 case OB_SURF:
   if (mesh_eval) {
 DRW_mesh_batch_cache_free_old(mesh_eval, ctime);

___
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] [1d5527baf3d] refactor-vertex-group-names: Fix unused variable warning

2021-07-12 Thread Hans Goudey
Commit: 1d5527baf3d7ec236d3be88a4bbe0eb2cc9120f2
Author: Hans Goudey
Date:   Wed Jun 23 22:07:58 2021 -0500
Branches: refactor-vertex-group-names
https://developer.blender.org/rB1d5527baf3d7ec236d3be88a4bbe0eb2cc9120f2

Fix unused variable warning

===

M   source/blender/blenkernel/intern/deform.c

===

diff --git a/source/blender/blenkernel/intern/deform.c 
b/source/blender/blenkernel/intern/deform.c
index 87f98018b59..a448cf4236b 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@ -1400,7 +1400,6 @@ bool data_transfer_layersmapping_vgroups(ListBase *r_map,
*/
 
   const ListBase *src_defbase = BKE_object_defgroup_list_for_read(ob_src);
-  ListBase *dst_defbase = BKE_object_defgroup_list_for_write(ob_dst);
   if (BLI_listbase_is_empty(src_defbase)) {
 if (use_delete) {
   BKE_object_defgroup_remove_all(ob_dst);
@@ -1435,7 +1434,9 @@ bool data_transfer_layersmapping_vgroups(ListBase *r_map,
 if (tolayers >= 0) {
   /* Note: in this case we assume layer exists! */
   idx_dst = tolayers;
+  const ListBase *dst_defbase = BKE_object_defgroup_list_for_read(ob_dst);
   BLI_assert(idx_dst < BLI_listbase_count(dst_defbase));
+  UNUSED_VARS_NDEBUG(dst_defbase);
 }
 else if (tolayers == DT_LAYERS_ACTIVE_DST) {
   if ((idx_dst = ob_dst->actdef - 1) == -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] [6f4b222f0f6] refactor-vertex-group-names: Merge branch 'master' into refactor-vertex-group-names

2021-07-12 Thread Hans Goudey
Commit: 6f4b222f0f61da35d2ff0bf189a7b155f8590a64
Author: Hans Goudey
Date:   Wed Jun 23 17:48:13 2021 -0500
Branches: refactor-vertex-group-names
https://developer.blender.org/rB6f4b222f0f61da35d2ff0bf189a7b155f8590a64

Merge branch 'master' into refactor-vertex-group-names

===



===



___
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] [d4c7408dc36] refactor-vertex-group-names: Add comments, minor cleanup, remove debug statements

2021-07-12 Thread Hans Goudey
Commit: d4c7408dc36247e6c0f5eab2709ce3dd16727d88
Author: Hans Goudey
Date:   Wed Jun 23 17:58:11 2021 -0500
Branches: refactor-vertex-group-names
https://developer.blender.org/rBd4c7408dc36247e6c0f5eab2709ce3dd16727d88

Add comments, minor cleanup, remove debug statements

===

M   source/blender/blenkernel/intern/deform.c
M   source/blender/blenkernel/intern/mesh.c
M   source/blender/blenloader/intern/versioning_300.c

===

diff --git a/source/blender/blenkernel/intern/deform.c 
b/source/blender/blenkernel/intern/deform.c
index 6651e816f3b..87f98018b59 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@ -83,7 +83,6 @@ void BKE_defgroup_copy_list(ListBase *outbase, const ListBase 
*inbase)
   BLI_listbase_clear(outbase);
 
   for (defgroup = inbase->first; defgroup; defgroup = defgroup->next) {
-printf("Copying defgroup %p\n", defgroup);
 defgroupn = BKE_defgroup_duplicate(defgroup);
 BLI_addtail(outbase, defgroupn);
   }
@@ -494,8 +493,8 @@ bDeformGroup *BKE_object_defgroup_find_name(const Object 
*ob, const char *name)
   if (name == NULL || name[0] == '\0') {
 return NULL;
   }
-  const ListBase *list = BKE_object_defgroup_list_for_read(ob);
-  return BLI_findstring(list, name, offsetof(bDeformGroup, name));
+  const ListBase *defbase = BKE_object_defgroup_list_for_read(ob);
+  return BLI_findstring(defbase, name, offsetof(bDeformGroup, name));
 }
 
 int BKE_object_defgroup_name_index(const Object *ob, const char *name)
@@ -503,8 +502,8 @@ int BKE_object_defgroup_name_index(const Object *ob, const 
char *name)
   if (name == NULL || name[0] == '\0') {
 return -1;
   }
-  const ListBase *list = BKE_object_defgroup_list_for_read(ob);
-  return BLI_findstringindex(list, name, offsetof(bDeformGroup, name));
+  const ListBase *defbase = BKE_object_defgroup_list_for_read(ob);
+  return BLI_findstringindex(defbase, name, offsetof(bDeformGroup, name));
 }
 
 const ListBase *BKE_object_defgroup_list_for_read(const Object *ob)
@@ -552,8 +551,8 @@ ListBase *BKE_object_defgroup_list_for_write(Object *ob)
  */
 int *BKE_object_defgroup_flip_map(const Object *ob, int *flip_map_len, const 
bool use_default)
 {
-  const ListBase *list = BKE_object_defgroup_list_for_read(ob);
-  int defbase_tot = *flip_map_len = BLI_listbase_count(list);
+  const ListBase *defbase = BKE_object_defgroup_list_for_read(ob);
+  int defbase_tot = *flip_map_len = BLI_listbase_count(defbase);
 
   if (defbase_tot == 0) {
 return NULL;
@@ -567,7 +566,7 @@ int *BKE_object_defgroup_flip_map(const Object *ob, int 
*flip_map_len, const boo
 map[i] = -1;
   }
 
-  for (dg = list->first, i = 0; dg; dg = dg->next, i++) {
+  for (dg = defbase->first, i = 0; dg; dg = dg->next, i++) {
 if (map[i] == -1) { /* may be calculated previously */
 
   /* in case no valid value is found, use this */
@@ -597,8 +596,8 @@ int *BKE_object_defgroup_flip_map_single(const Object *ob,
  const bool use_default,
  int defgroup)
 {
-  const ListBase *list = BKE_object_defgroup_list_for_read(ob);
-  int defbase_tot = *flip_map_len = BLI_listbase_count(list);
+  const ListBase *defbase = BKE_object_defgroup_list_for_read(ob);
+  int defbase_tot = *flip_map_len = BLI_listbase_count(defbase);
 
   if (defbase_tot == 0) {
 return NULL;
@@ -612,7 +611,7 @@ int *BKE_object_defgroup_flip_map_single(const Object *ob,
 map[i] = use_default ? i : -1;
   }
 
-  dg = BLI_findlink(list, defgroup);
+  dg = BLI_findlink(defbase, defgroup);
 
   BLI_string_flip_side_name(name_flip, dg->name, false, sizeof(name_flip));
   if (!STREQ(name_flip, dg->name)) {
@@ -629,8 +628,8 @@ int *BKE_object_defgroup_flip_map_single(const Object *ob,
 
 int BKE_object_defgroup_flip_index(const Object *ob, int index, const bool 
use_default)
 {
-  const ListBase *list = BKE_object_defgroup_list_for_read(ob);
-  bDeformGroup *dg = BLI_findlink(list, index);
+  const ListBase *defbase = BKE_object_defgroup_list_for_read(ob);
+  bDeformGroup *dg = BLI_findlink(defbase, index);
   int flip_index = -1;
 
   if (dg) {
@@ -647,10 +646,10 @@ int BKE_object_defgroup_flip_index(const Object *ob, int 
index, const bool use_d
 
 static bool defgroup_find_name_dupe(const char *name, bDeformGroup *dg, Object 
*ob)
 {
-  const ListBase *list = BKE_object_defgroup_list_for_read(ob);
+  const ListBase *defbase = BKE_object_defgroup_list_for_read(ob);
   bDeformGroup *curdef;
 
-  for (curdef = list->first; curdef; curdef = curdef->next) {
+  for (curdef = defbase->first; curdef; curdef = curdef->next) {
 if (dg != curdef) {
   if (STREQ(curdef->name, name)) {
 return true;
@@ -1243,9 +1242,9 @@ static bool 
data_transfer_layersmapping_vgroups_multisrc_to_dst(ListBase *r_map,
   int idx_src;
   

[Bf-blender-cvs] [5be17e92c56] refactor-vertex-group-names: Merge branch 'master' into refactor-vertex-group-names

2021-07-12 Thread Hans Goudey
Commit: 5be17e92c56f84acc455f4c59f70148b1f002ffd
Author: Hans Goudey
Date:   Mon Jun 28 22:47:29 2021 -0500
Branches: refactor-vertex-group-names
https://developer.blender.org/rB5be17e92c56f84acc455f4c59f70148b1f002ffd

Merge branch 'master' into refactor-vertex-group-names

===



===

diff --cc source/blender/blenkernel/BKE_blender_version.h
index bac982708bc,110b9fc4252..d5baeb08ccc
--- a/source/blender/blenkernel/BKE_blender_version.h
+++ b/source/blender/blenkernel/BKE_blender_version.h
@@@ -39,7 -39,7 +39,7 @@@ extern "C" 
  
  /* Blender file format version. */
  #define BLENDER_FILE_VERSION BLENDER_VERSION
- #define BLENDER_FILE_SUBVERSION 5
 -#define BLENDER_FILE_SUBVERSION 6
++#define BLENDER_FILE_SUBVERSION 7
  
  /* Minimum Blender version that supports reading file written with the current
   * version. Older Blender versions will test this and show a warning if the 
file
diff --cc source/blender/blenkernel/intern/gpencil.c
index ba6592996e8,459fc5e4c68..6321f6b8461
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@@ -231,12 -227,10 +231,12 @@@ void BKE_gpencil_blend_read_data(BlendD
  }
}
  
 +  BLO_read_list(reader, >vertex_group_names);
 +
-   /* materials */
+   /* Materials. */
BLO_read_pointer_array(reader, (void **)>mat);
  
-   /* relink layers */
+   /* Relink layers. */
BLO_read_list(reader, >layers);
  
LISTBASE_FOREACH (bGPDlayer *, gpl, >layers) {
diff --cc source/blender/blenloader/intern/versioning_300.c
index 718bd3a2405,84021755cef..261923d7109
--- a/source/blender/blenloader/intern/versioning_300.c
+++ b/source/blender/blenloader/intern/versioning_300.c
@@@ -140,10 -129,6 +143,10 @@@ void do_versions_after_linking_300(Mai
  assert_sorted_ids(bmain);
}
  
-   if (!MAIN_VERSION_ATLEAST(bmain, 300, 5)) {
++  if (!MAIN_VERSION_ATLEAST(bmain, 300, 7)) {
 +move_vertex_group_names_to_object_data(bmain);
 +  }
 +
/**
 * Versioning code until next subversion bump goes here.
 *
diff --cc source/blender/editors/object/object_vgroup.c
index 4bea3925968,51a9a3676e7..a73e3b7bbc7
--- a/source/blender/editors/object/object_vgroup.c
+++ b/source/blender/editors/object/object_vgroup.c
@@@ -4036,11 -4065,10 +4036,11 @@@ static char *vgroup_init_remap(Object *
  static int vgroup_do_remap(Object *ob, const char *name_array, wmOperator *op)
  {
MDeformVert *dvert = NULL;
 -  bDeformGroup *def;
 -  int defbase_tot = BLI_listbase_count(>defbase);
 +  const bDeformGroup *def;
 +  const ListBase *defbase = BKE_object_defgroup_list_for_read(ob);
 +  int defbase_tot = BLI_listbase_count(defbase);
  
-   /* needs a dummy index at the start*/
+   /* Needs a dummy index at the start. */
int *sort_map_update = MEM_mallocN(sizeof(int) * (defbase_tot + 1), "sort 
vgroups");
int *sort_map = sort_map_update + 1;
  
@@@ -4159,15 -4186,13 +4159,15 @@@ static int vertex_group_sort_exec(bCont
int ret;
int sort_type = RNA_enum_get(op->ptr, "sort_type");
  
-   /*init remapping*/
+   /* Init remapping. */
name_array = vgroup_init_remap(ob);
  
 +  ListBase *defbase = BKE_object_defgroup_list_for_write(ob);
 +
-   /*sort vgroup names*/
+   /* Sort vgroup names. */
switch (sort_type) {
  case SORT_TYPE_NAME:
 -  BLI_listbase_sort(>defbase, vgroup_sort_name);
 +  BLI_listbase_sort(defbase, vgroup_sort_name);
break;
  case SORT_TYPE_BONEHIERARCHY:
vgroup_sort_bone_hierarchy(ob, 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] [1688450fa9f] refactor-vertex-group-names: Refactor: Move vertex group names to object data (WIP)

2021-07-12 Thread Hans Goudey
Commit: 1688450fa9f63cc754662982a0e3f2a556f348a5
Author: Hans Goudey
Date:   Wed Jun 23 17:41:36 2021 -0500
Branches: refactor-vertex-group-names
https://developer.blender.org/rB1688450fa9f63cc754662982a0e3f2a556f348a5

Refactor: Move vertex group names to object data (WIP)

As explained in T88951, the list of vertex group names is currently
stored separately per object, even though vertex group data is stored
on the geometry. This tends to complicate code and cause bugs,
especially as geometry is created procedurally and tied less closely
to objects.

This commit moves the storage of `bDeformGroup` to `Mesh`, `Lattice`,
and `bGPdata` instead of `Object`. In order to avoid dramatically
changing existing code, I introduced a helper function to access the
list of names given just the object.

TODO:
 - Move the active group index to the object as well.
 - Possibly move the Python API for vertex groups to object data.

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

===

M   release/scripts/startup/bl_ui/properties_data_mesh.py
M   source/blender/blenkernel/BKE_blender_version.h
M   source/blender/blenkernel/BKE_deform.h
M   source/blender/blenkernel/BKE_geometry_set.hh
M   source/blender/blenkernel/intern/DerivedMesh.cc
M   source/blender/blenkernel/intern/armature_deform.c
M   source/blender/blenkernel/intern/deform.c
M   source/blender/blenkernel/intern/geometry_component_mesh.cc
M   source/blender/blenkernel/intern/geometry_set_instances.cc
M   source/blender/blenkernel/intern/gpencil.c
M   source/blender/blenkernel/intern/key.c
M   source/blender/blenkernel/intern/lattice.c
M   source/blender/blenkernel/intern/mesh.c
M   source/blender/blenkernel/intern/object.c
M   source/blender/blenkernel/intern/object_deform.c
M   source/blender/blenloader/intern/versioning_300.c
M   source/blender/draw/engines/overlay/overlay_armature.c
M   source/blender/draw/intern/draw_cache.c
M   source/blender/draw/intern/draw_cache_impl_gpencil.c
M   source/blender/draw/intern/draw_cache_impl_mesh.c
M   source/blender/editors/armature/armature_skinning.c
M   source/blender/editors/gpencil/gpencil_armature.c
M   source/blender/editors/gpencil/gpencil_data.c
M   source/blender/editors/gpencil/gpencil_fill.c
M   source/blender/editors/gpencil/gpencil_paint.c
M   source/blender/editors/gpencil/gpencil_primitive.c
M   source/blender/editors/gpencil/gpencil_sculpt_paint.c
M   source/blender/editors/gpencil/gpencil_utils.c
M   source/blender/editors/gpencil/gpencil_weight_paint.c
M   source/blender/editors/lattice/editlattice_select.c
M   source/blender/editors/mesh/editmesh_select.c
M   source/blender/editors/mesh/editmesh_select_similar.c
M   source/blender/editors/mesh/meshtools.c
M   source/blender/editors/object/object_data_transfer.c
M   source/blender/editors/object/object_hook.c
M   source/blender/editors/object/object_intern.h
M   source/blender/editors/object/object_ops.c
M   source/blender/editors/object/object_vgroup.c
M   source/blender/editors/sculpt_paint/paint_utils.c
M   source/blender/editors/sculpt_paint/paint_vertex.c
M   source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c
M   source/blender/editors/sculpt_paint/paint_vertex_weight_utils.c
M   source/blender/editors/space_outliner/outliner_tree.c
M   
source/blender/editors/space_spreadsheet/spreadsheet_data_source_geometry.cc
M   source/blender/editors/space_view3d/view3d_buttons.c
M   source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
M   source/blender/io/collada/ControllerExporter.cpp
M   source/blender/io/collada/ControllerExporter.h
M   source/blender/io/collada/SkinInfo.cpp
M   source/blender/makesdna/DNA_gpencil_types.h
M   source/blender/makesdna/DNA_lattice_types.h
M   source/blender/makesdna/DNA_mesh_types.h
M   source/blender/makesdna/DNA_object_types.h
M   source/blender/makesrna/intern/rna_modifier.c
M   source/blender/makesrna/intern/rna_object.c
M   source/blender/makesrna/intern/rna_particle.c
M   source/blender/modifiers/intern/MOD_armature.c
M   source/blender/modifiers/intern/MOD_mask.cc
M   source/blender/modifiers/intern/MOD_nodes.cc
M   source/blender/modifiers/intern/MOD_weightvgedit.c
M   source/blender/modifiers/intern/MOD_weightvgmix.c
M   source/blender/modifiers/intern/MOD_weightvgproximity.c
M   source/blender/nodes/geometry/nodes/node_geo_delete_geometry.cc
M   source/blender/nodes/geometry/nodes/node_geo_subdivide.cc
M   source/blender/nodes/geometry/nodes/node_geo_subdivision_surface.cc

===

diff --git a/release/scripts/startup/bl_ui/properties_data_mesh.py 
b/release/scripts/startup/bl_ui/properties_data_mesh.py

[Bf-blender-cvs] [ca87f088146] curve-nodes-modifier: Cleanup: Remove unused DispList wire edge drawing code

2021-07-12 Thread Hans Goudey
Commit: ca87f088146c4a01fd687b7a3ffdc46500d9ca57
Author: Hans Goudey
Date:   Tue Jul 6 16:30:11 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rBca87f088146c4a01fd687b7a3ffdc46500d9ca57

Cleanup: Remove unused DispList wire edge drawing code

===

M   source/blender/draw/intern/draw_cache_impl_curve.cc

===

diff --git a/source/blender/draw/intern/draw_cache_impl_curve.cc 
b/source/blender/draw/intern/draw_cache_impl_curve.cc
index e427810d98f..3501a9d191f 100644
--- a/source/blender/draw/intern/draw_cache_impl_curve.cc
+++ b/source/blender/draw/intern/draw_cache_impl_curve.cc
@@ -112,43 +112,6 @@ static void 
curve_render_overlay_verts_edges_len_get(ListBase *lb,
   }
 }
 
-static void curve_render_wire_verts_edges_len_get(const CurveCache 
*ob_curve_cache,
-  int *r_curve_len,
-  int *r_vert_len,
-  int *r_edge_len)
-{
-  BLI_assert(r_vert_len || r_edge_len);
-  int vert_len = 0;
-  int edge_len = 0;
-  int curve_len = 0;
-  LISTBASE_FOREACH (const BevList *, bl, _curve_cache->bev) {
-if (bl->nr > 0) {
-  const bool is_cyclic = bl->poly != -1;
-  edge_len += (is_cyclic) ? bl->nr : bl->nr - 1;
-  vert_len += bl->nr;
-  curve_len += 1;
-}
-  }
-  LISTBASE_FOREACH (const DispList *, dl, _curve_cache->disp) {
-if (ELEM(dl->type, DL_SEGM, DL_POLY)) {
-  BLI_assert(dl->parts == 1);
-  const bool is_cyclic = dl->type == DL_POLY;
-  edge_len += (is_cyclic) ? dl->nr : dl->nr - 1;
-  vert_len += dl->nr;
-  curve_len += 1;
-}
-  }
-  if (r_vert_len) {
-*r_vert_len = vert_len;
-  }
-  if (r_edge_len) {
-*r_edge_len = edge_len;
-  }
-  if (r_curve_len) {
-*r_curve_len = curve_len;
-  }
-}
-
 static void curve_eval_render_wire_verts_edges_len_get(const CurveEval 
_eval,
int *r_curve_len,
int *r_vert_len,
@@ -266,12 +229,6 @@ static CurveRenderData *curve_render_data_create(Curve 
*cu, Object *object, cons
  >wire.vert_len,
  >wire.edge_len);
 }
-else {
-  curve_render_wire_verts_edges_len_get(rdata->ob_curve_cache,
->wire.curve_len,
->wire.vert_len,
->wire.edge_len);
-}
   }
 
   if (cu->editnurb) {
@@ -593,6 +550,10 @@ void DRW_curve_batch_cache_free(Curve *cu)
 /* GPUBatch cache usage. */
 static void curve_create_curves_pos(CurveRenderData *rdata, GPUVertBuf 
*vbo_curves_pos)
 {
+  if (rdata->curve_eval == nullptr) {
+return;
+  }
+
   static GPUVertFormat format = {0};
   static struct {
 uint pos;
@@ -605,46 +566,26 @@ static void curve_create_curves_pos(CurveRenderData 
*rdata, GPUVertBuf *vbo_curv
   GPU_vertbuf_init_with_format(vbo_curves_pos, );
   GPU_vertbuf_data_alloc(vbo_curves_pos, vert_len);
 
-  if (rdata->curve_eval != nullptr) {
-const CurveEval _eval = *rdata->curve_eval;
-Span splines = curve_eval.splines();
-Array offsets = curve_eval.evaluated_point_offsets();
-BLI_assert(offsets.last() == vert_len);
-
-for (const int i_spline : splines.index_range()) {
-  Span positions = splines[i_spline]->evaluated_positions();
-  for (const int i_point : positions.index_range()) {
-GPU_vertbuf_attr_set(
-vbo_curves_pos, attr_id.pos, offsets[i_spline] + i_point, 
positions[i_point]);
-  }
-}
-  }
-  else {
-BLI_assert(rdata->ob_curve_cache != nullptr);
-
-int v_idx = 0;
-LISTBASE_FOREACH (const BevList *, bl, >ob_curve_cache->bev) {
-  if (bl->nr <= 0) {
-continue;
-  }
-  const int i_end = v_idx + bl->nr;
-  for (const BevPoint *bevp = bl->bevpoints; v_idx < i_end; v_idx++, 
bevp++) {
-GPU_vertbuf_attr_set(vbo_curves_pos, attr_id.pos, v_idx, bevp->vec);
-  }
-}
-LISTBASE_FOREACH (const DispList *, dl, >ob_curve_cache->disp) {
-  if (ELEM(dl->type, DL_SEGM, DL_POLY)) {
-for (int i = 0; i < dl->nr; v_idx++, i++) {
-  GPU_vertbuf_attr_set(vbo_curves_pos, attr_id.pos, v_idx, 
&((float(*)[3])dl->verts)[i]);
-}
-  }
+  const CurveEval _eval = *rdata->curve_eval;
+  Span splines = curve_eval.splines();
+  Array offsets = curve_eval.evaluated_point_offsets();
+  BLI_assert(offsets.last() == vert_len);
+
+  for (const int i_spline : splines.index_range()) {
+Span positions = splines[i_spline]->evaluated_positions();
+for (const int i_point : positions.index_range()) {
+  GPU_vertbuf_attr_set(
+  vbo_curves_pos, attr_id.pos, offsets[i_spline] 

[Bf-blender-cvs] [e0b3d641865] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: e0b3d64186555a4733028ac6419841f60c3d76d9
Author: Hans Goudey
Date:   Mon Jun 28 21:47:01 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rBe0b3d64186555a4733028ac6419841f60c3d76d9

Merge branch 'master' into curve-nodes-modifier

===



===



___
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] [f7b2d30d8f9] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: f7b2d30d8f93bc5f1049388a88b05bfbd09ab2f5
Author: Hans Goudey
Date:   Thu Jul 1 10:58:23 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rBf7b2d30d8f93bc5f1049388a88b05bfbd09ab2f5

Merge branch 'master' into curve-nodes-modifier

===



===



___
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] [98f8534789f] curve-nodes-modifier: Cleanup: White space

2021-07-12 Thread Hans Goudey
Commit: 98f8534789f0ee6724529d79d1c41ebe95c55d2b
Author: Hans Goudey
Date:   Tue Jul 6 09:46:11 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB98f8534789f0ee6724529d79d1c41ebe95c55d2b

Cleanup: White space

===

M   source/blender/draw/intern/draw_cache.c

===

diff --git a/source/blender/draw/intern/draw_cache.c 
b/source/blender/draw/intern/draw_cache.c
index 01d025fef8d..9380114893d 100644
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@ -2929,7 +2929,6 @@ GPUBatch *DRW_cache_mesh_surface_mesh_analysis_get(Object 
*ob)
 GPUBatch *DRW_cache_curve_edge_wire_get(Object *ob)
 {
   BLI_assert(ob->type == OB_CURVE);
-
   struct Curve *cu = ob->data;
   return DRW_curve_batch_cache_get_wire_edge(cu);
 }
@@ -2937,7 +2936,6 @@ GPUBatch *DRW_cache_curve_edge_wire_get(Object *ob)
 GPUBatch *DRW_cache_curve_edge_normal_get(Object *ob)
 {
   BLI_assert(ob->type == OB_CURVE);
-
   struct Curve *cu = ob->data;
   return DRW_curve_batch_cache_get_normal_edge(cu);
 }

___
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] [32d5cd8b525] curve-nodes-modifier: Fix text object edit mode overlays

2021-07-12 Thread Hans Goudey
Commit: 32d5cd8b52539332202d9f39fa538e698273f43e
Author: Hans Goudey
Date:   Tue Jul 6 17:35:10 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB32d5cd8b52539332202d9f39fa538e698273f43e

Fix text object edit mode overlays

===

M   source/blender/blenkernel/intern/displist.cc
M   source/blender/depsgraph/intern/depsgraph_query_iter.cc

===

diff --git a/source/blender/blenkernel/intern/displist.cc 
b/source/blender/blenkernel/intern/displist.cc
index 0df00e4c362..514d7212ea0 100644
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@ -1546,8 +1546,8 @@ void BKE_displist_make_curveTypes(Depsgraph *depsgraph,
 
 /* If the curve is in edit mode, make sure the output geometry set 
containts a
  * curve component, which is used indirectly to render the edit mode 
overlays. */
-if (BKE_curve_editNurbs_get_for_read((const Curve *)ob->data) &&
-!geometry_set.has()) {
+const Curve *curve_orig = (const Curve *)ob->data;
+if (BKE_curve_editNurbs_get_for_read(curve_orig) || curve_orig->editfont) {
   geometry_set.get_component_for_write();
 }
 
diff --git a/source/blender/depsgraph/intern/depsgraph_query_iter.cc 
b/source/blender/depsgraph/intern/depsgraph_query_iter.cc
index 2d4e5286e35..580f1cdff87 100644
--- a/source/blender/depsgraph/intern/depsgraph_query_iter.cc
+++ b/source/blender/depsgraph/intern/depsgraph_query_iter.cc
@@ -227,7 +227,7 @@ bool deg_iterator_components_step(BLI_Iterator *iter)
 if (component != nullptr) {
 
   /* Don't use a temporary object for this component when the owner is a 
curve object. */
-  if (data->geometry_component_owner->type == OB_CURVE) {
+  if (ELEM(data->geometry_component_owner->type, OB_CURVE, OB_FONT)) {
 iter->current = data->geometry_component_owner;
 return true;
   }
@@ -236,7 +236,10 @@ bool deg_iterator_components_step(BLI_Iterator *iter)
   if (curve != nullptr) {
 Object *temp_object = >temp_geometry_component_object;
 *temp_object = *data->geometry_component_owner;
-temp_object->type = OB_CURVE;
+/* Use OB_FONT when the owner is a text object, so that the text 
editing edit mode
+ * overlays will draw. Here it's important that text objects don't 
support the nodes
+ * modifier, so they always have data corresponding to their original 
text. */
+temp_object->type = data->geometry_component_owner->type == OB_FONT ? 
OB_FONT : OB_CURVE;
 temp_object->data = (void *)curve;
 temp_object->runtime.select_id = 
data->geometry_component_owner->runtime.select_id;
 iter->current = temp_object;

___
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] [6e2e7726673] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: 6e2e7726673d8e6b5ada31e8b39c110b60447946
Author: Hans Goudey
Date:   Mon Jul 5 22:48:55 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB6e2e7726673d8e6b5ada31e8b39c110b60447946

Merge branch 'master' into curve-nodes-modifier

===



===



___
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] [4a89a391664] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: 4a89a391664da701067697d90382d770ce98ca2f
Author: Hans Goudey
Date:   Mon Jun 28 21:00:16 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB4a89a391664da701067697d90382d770ce98ca2f

Merge branch 'master' into curve-nodes-modifier

===



===



___
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] [e253b6bef3b] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: e253b6bef3b2717b441e12483be90c5aa4d80f7a
Author: Hans Goudey
Date:   Thu Jul 1 23:04:42 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rBe253b6bef3b2717b441e12483be90c5aa4d80f7a

Merge branch 'master' into curve-nodes-modifier

===



===



___
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] [b21c16b627c] curve-nodes-modifier: Fix surface objects again

2021-07-12 Thread Hans Goudey
Commit: b21c16b627c1821f9c427043d7cb75f5f8ae4fa8
Author: Hans Goudey
Date:   Tue Jul 6 16:35:11 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rBb21c16b627c1821f9c427043d7cb75f5f8ae4fa8

Fix surface objects again

===

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

===

diff --git a/source/blender/blenkernel/intern/displist.cc 
b/source/blender/blenkernel/intern/displist.cc
index 0bf9f1f3252..0df00e4c362 100644
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@ -836,10 +836,10 @@ void BKE_curve_calc_modifiers_pre(Depsgraph *depsgraph,
  * \return True if the deformed curve control point data should be implicitly
  * converted directly to a mesh, or false it can be left as curve data via 
#CurveEval.
  */
-static bool do_mesh_conversion(const Curve *curve,
-   ModifierData *first_modifier,
-   const Scene *scene,
-   const ModifierMode required_mode)
+static bool do_curve_implicit_mesh_conversion(const Curve *curve,
+  ModifierData *first_modifier,
+  const Scene *scene,
+  const ModifierMode required_mode)
 {
   /* Do implicit conversion to mesh with the object bevel mode. */
   if (curve->bevel_mode == CU_BEV_MODE_OBJECT && curve->bevobj != nullptr) {
@@ -902,7 +902,7 @@ static GeometrySet curve_calc_modifiers_post(Depsgraph 
*depsgraph,
  pretessellatePoint->next;
 
   GeometrySet geometry_set;
-  if (ELEM(ob->type, OB_CURVE, OB_FONT) && do_mesh_conversion(cu, md, scene, 
required_mode)) {
+  if (ob->type == OB_SURF || do_curve_implicit_mesh_conversion(cu, md, scene, 
required_mode)) {
 Mesh *mesh = BKE_mesh_new_nomain_from_curve_displist(ob, dispbase);
 /* Copy materials, since BKE_mesh_new_nomain_from_curve_displist() 
doesn't. */
 mesh->mat = (Material **)MEM_dupallocN(cu->mat);
@@ -1084,6 +1084,9 @@ static void evaluate_surface_object(Depsgraph *depsgraph,
   curve_to_filledpoly(cu, r_dispbase);
   GeometrySet geometry_set = curve_calc_modifiers_post(
   depsgraph, scene, ob, r_dispbase, for_render);
+  if (!geometry_set.has_mesh()) {
+geometry_set.replace_mesh(BKE_mesh_new_nomain(0, 0, 0, 0, 0));
+  }
   MeshComponent _component = 
geometry_set.get_component_for_write();
   *r_final = mesh_component.release();
 }

___
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] [af64b0ad5f5] curve-nodes-modifier: Cleanup: Simplify curve eval cache

2021-07-12 Thread Hans Goudey
Commit: af64b0ad5f561208af748dc2b383152207c1be2b
Author: Hans Goudey
Date:   Tue Jul 6 16:22:09 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rBaf64b0ad5f561208af748dc2b383152207c1be2b

Cleanup: Simplify curve eval cache

===

M   source/blender/blenkernel/intern/displist.cc
M   source/blender/depsgraph/intern/depsgraph_query_iter.cc
M   source/blender/draw/intern/draw_cache_impl_curve.cc
M   source/blender/makesdna/DNA_object_types.h

===

diff --git a/source/blender/blenkernel/intern/displist.cc 
b/source/blender/blenkernel/intern/displist.cc
index 1e9f22d588e..0bf9f1f3252 100644
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@ -1548,8 +1548,6 @@ void BKE_displist_make_curveTypes(Depsgraph *depsgraph,
   geometry_set.get_component_for_write();
 }
 
-ob->runtime.curve_eval = (void *)geometry_set.get_curve_for_read();
-
 ob->runtime.geometry_set_eval = new GeometrySet(std::move(geometry_set));
   }
 
diff --git a/source/blender/depsgraph/intern/depsgraph_query_iter.cc 
b/source/blender/depsgraph/intern/depsgraph_query_iter.cc
index 5d7c51be562..2d4e5286e35 100644
--- a/source/blender/depsgraph/intern/depsgraph_query_iter.cc
+++ b/source/blender/depsgraph/intern/depsgraph_query_iter.cc
@@ -238,7 +238,6 @@ bool deg_iterator_components_step(BLI_Iterator *iter)
 *temp_object = *data->geometry_component_owner;
 temp_object->type = OB_CURVE;
 temp_object->data = (void *)curve;
-temp_object->runtime.curve_eval = (void *)component->get_for_read();
 temp_object->runtime.select_id = 
data->geometry_component_owner->runtime.select_id;
 iter->current = temp_object;
 return true;
diff --git a/source/blender/draw/intern/draw_cache_impl_curve.cc 
b/source/blender/draw/intern/draw_cache_impl_curve.cc
index 96c1a267d22..e427810d98f 100644
--- a/source/blender/draw/intern/draw_cache_impl_curve.cc
+++ b/source/blender/draw/intern/draw_cache_impl_curve.cc
@@ -255,7 +255,9 @@ static CurveRenderData *curve_render_data_create(Curve *cu, 
Object *object, cons
   rdata->actvert = cu->actvert;
 
   rdata->ob_curve_cache = object->runtime.curve_cache;
-  rdata->curve_eval = (const CurveEval *)object->runtime.curve_eval;
+  if (object->runtime.geometry_set_eval != nullptr) {
+rdata->curve_eval = 
object->runtime.geometry_set_eval->get_curve_for_read();
+  }
 
   if (types & CU_DATATYPE_WIRE) {
 if (rdata->curve_eval != nullptr) {
diff --git a/source/blender/makesdna/DNA_object_types.h 
b/source/blender/makesdna/DNA_object_types.h
index d4227fabe36..262d650c1ef 100644
--- a/source/blender/makesdna/DNA_object_types.h
+++ b/source/blender/makesdna/DNA_object_types.h
@@ -210,16 +210,6 @@ typedef struct Object_Runtime {
   /** Runtime evaluated curve-specific data, not stored in the file. */
   struct CurveCache *curve_cache;
 
-  /**
-   * A pointer to evaluated curve data owned by #geometry_set_eval (const 
CurveEval *).
-   * Stored as a `void *` because DNA doesn't support const pointers right now.
-   *
-   * This is necessary because curve object data does not use CoW. Normally we 
use a "fake" CoW
-   * in the geometry component, but for curve objects we must use the original 
#Curve in order to
-   * display edit mode data, and the evaluated data cannot be stored in the 
original #Curve.
-   */
-  void *curve_eval;
-
   unsigned short local_collections_bits;
   short _pad2[3];
 } Object_Runtime;

___
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] [9363099526d] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: 9363099526dff80ac4d060164bb606fb53b1850e
Author: Hans Goudey
Date:   Tue Jul 6 13:21:51 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB9363099526dff80ac4d060164bb606fb53b1850e

Merge branch 'master' into curve-nodes-modifier

===



===



___
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] [9773b0fb0b0] curve-nodes-modifier: Fix surface objects

2021-07-12 Thread Hans Goudey
Commit: 9773b0fb0b0b17cdc3ab799fc167660c6bf13d36
Author: Hans Goudey
Date:   Tue Jul 6 09:46:02 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB9773b0fb0b0b17cdc3ab799fc167660c6bf13d36

Fix surface objects

===

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

===

diff --git a/source/blender/blenkernel/intern/displist.cc 
b/source/blender/blenkernel/intern/displist.cc
index efd87318bbd..172c9fd8ff9 100644
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@ -862,8 +862,9 @@ static GeometrySet curve_calc_modifiers_post(Depsgraph 
*depsgraph,
  pretessellatePoint->next;
 
   GeometrySet geometry_set;
-  if (md == nullptr ||
-  (md->type == eModifierType_Nodes && BKE_modifier_is_enabled(scene, md, 
required_mode))) {
+  if (ELEM(ob->type, OB_CURVE, OB_FONT) &&
+  (md == nullptr ||
+   (md->type == eModifierType_Nodes && BKE_modifier_is_enabled(scene, md, 
required_mode {
 std::unique_ptr curve_eval = curve_eval_from_dna_curve(
 *cu, ob->runtime.curve_cache->deformed_nurbs);
 geometry_set.replace_curve(curve_eval.release());

___
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] [3036b724f74] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: 3036b724f74893a5446d8c10f2ba6698f62d9f92
Author: Hans Goudey
Date:   Mon Jun 28 22:45:26 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB3036b724f74893a5446d8c10f2ba6698f62d9f92

Merge branch 'master' into curve-nodes-modifier

===



===



___
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] [bb6b926b04e] curve-nodes-modifier: Add smarter mesh conversion logic

2021-07-12 Thread Hans Goudey
Commit: bb6b926b04ebb8c13bad314205dbab994658b9d4
Author: Hans Goudey
Date:   Tue Jul 6 16:09:49 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rBbb6b926b04ebb8c13bad314205dbab994658b9d4

Add smarter mesh conversion logic

===

M   source/blender/blenkernel/intern/displist.cc
M   source/blender/blenkernel/intern/geometry_component_curve.cc
M   source/blender/depsgraph/intern/depsgraph_query_iter.cc
M   source/blender/draw/intern/draw_cache_impl_curve.cc
M   source/blender/makesdna/DNA_curve_types.h
M   source/blender/makesdna/DNA_object_types.h

===

diff --git a/source/blender/blenkernel/intern/displist.cc 
b/source/blender/blenkernel/intern/displist.cc
index 172c9fd8ff9..b542ec2ea00 100644
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@ -40,6 +40,7 @@
 #include "BLI_math.h"
 #include "BLI_memarena.h"
 #include "BLI_scanfill.h"
+#include "BLI_span.hh"
 #include "BLI_string.h"
 #include "BLI_utildefines.h"
 
@@ -831,6 +832,45 @@ void BKE_curve_calc_modifiers_pre(Depsgraph *depsgraph,
   }
 }
 
+/**
+ * \return True if the deformed curve control point data should be implicitly
+ * converted directly to a mesh, or false it can be left as curve data via 
#CurveEval.
+ */
+static bool do_mesh_conversion(const Curve *curve,
+   ModifierData *first_modifier,
+   const Scene *scene,
+   const ModifierMode required_mode)
+{
+  /* Do implicit conversion to mesh with the object bevel mode. */
+  if (curve->bevel_mode == CU_BEV_MODE_OBJECT && curve->bevobj != nullptr) {
+return true;
+  }
+
+  /* 2D curves are implicitly filled and converted to a mesh. */
+  if (CU_IS_2D(curve)) {
+return true;
+  }
+
+  /* Curve objects with implicit "tube" meshes should convert implicitly to a 
mesh. */
+  if (curve->ext1 != 0.0f || curve->ext2 != 0.0f) {
+return true;
+  }
+
+  /* If a non-geometry-nodes modifier is enabled before a nodes modifier,
+   * force conversion to mesh, since it doesn't support curve data. */
+  ModifierData *md = first_modifier;
+  for (; md; md = md->next) {
+if (BKE_modifier_is_enabled(scene, md, required_mode)) {
+  if (md->type == eModifierType_Nodes) {
+break;
+  }
+  return true;
+}
+  }
+
+  return false;
+}
+
 static GeometrySet curve_calc_modifiers_post(Depsgraph *depsgraph,
  const Scene *scene,
  Object *ob,
@@ -862,14 +902,7 @@ static GeometrySet curve_calc_modifiers_post(Depsgraph 
*depsgraph,
  pretessellatePoint->next;
 
   GeometrySet geometry_set;
-  if (ELEM(ob->type, OB_CURVE, OB_FONT) &&
-  (md == nullptr ||
-   (md->type == eModifierType_Nodes && BKE_modifier_is_enabled(scene, md, 
required_mode {
-std::unique_ptr curve_eval = curve_eval_from_dna_curve(
-*cu, ob->runtime.curve_cache->deformed_nurbs);
-geometry_set.replace_curve(curve_eval.release());
-  }
-  else {
+  if (ELEM(ob->type, OB_CURVE, OB_FONT) && do_mesh_conversion(cu, md, scene, 
required_mode)) {
 Mesh *mesh = BKE_mesh_new_nomain_from_curve_displist(ob, dispbase);
 /* Copy materials, since BKE_mesh_new_nomain_from_curve_displist() 
doesn't. */
 mesh->mat = (Material **)MEM_dupallocN(cu->mat);
@@ -877,6 +910,11 @@ static GeometrySet curve_calc_modifiers_post(Depsgraph 
*depsgraph,
 
 geometry_set.replace_mesh(mesh);
   }
+  else {
+std::unique_ptr curve_eval = curve_eval_from_dna_curve(
+*cu, ob->runtime.curve_cache->deformed_nurbs);
+geometry_set.replace_curve(curve_eval.release());
+  }
 
   for (; md; md = md->next) {
 const ModifierTypeInfo *mti = 
BKE_modifier_get_info((ModifierType)md->type);
@@ -1502,15 +1540,15 @@ void BKE_displist_make_curveTypes(Depsgraph *depsgraph,
   else {
 GeometrySet geometry_set;
 evaluate_curve_type_object(depsgraph, scene, ob, for_render, dispbase, 
_set);
+
 if (BKE_curve_editNurbs_get_for_read((const Curve *)ob->data) &&
 !geometry_set.has()) {
   geometry_set.get_component_for_write();
 }
-ob->runtime.geometry_set_eval = new GeometrySet(std::move(geometry_set));
 
-if (geometry_set.has()) {
-  std::cout << "Output has mesh component\n";
-}
+ob->runtime.curve_eval = (void *)geometry_set.get_curve_for_read();
+
+ob->runtime.geometry_set_eval = new GeometrySet(std::move(geometry_set));
   }
 
   boundbox_displist_object(ob);
diff --git a/source/blender/blenkernel/intern/geometry_component_curve.cc 
b/source/blender/blenkernel/intern/geometry_component_curve.cc
index b5c49dbb8b2..e177cceb091 100644
--- a/source/blender/blenkernel/intern/geometry_component_curve.cc
+++ 

[Bf-blender-cvs] [1ad81a67067] curve-nodes-modifier: Make curve data visible on non-curve object types

2021-07-12 Thread Hans Goudey
Commit: 1ad81a6706739126ef46afa4897c45a1e5b31619
Author: Hans Goudey
Date:   Fri Jul 2 00:15:23 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB1ad81a6706739126ef46afa4897c45a1e5b31619

Make curve data visible on non-curve object types

===

M   source/blender/blenkernel/intern/geometry_component_curve.cc
M   source/blender/draw/intern/draw_cache.c
M   source/blender/draw/intern/draw_cache_impl_curve.cc
M   source/blender/makesdna/DNA_curve_types.h

===

diff --git a/source/blender/blenkernel/intern/geometry_component_curve.cc 
b/source/blender/blenkernel/intern/geometry_component_curve.cc
index e177cceb091..b5c49dbb8b2 100644
--- a/source/blender/blenkernel/intern/geometry_component_curve.cc
+++ b/source/blender/blenkernel/intern/geometry_component_curve.cc
@@ -146,6 +146,7 @@ const Curve *CurveComponent::get_curve_for_render() const
   }
 
   curve_for_render_ = (Curve *)BKE_id_new_nomain(ID_CU, nullptr);
+  curve_for_render_->curve_eval = curve_;
 
   return curve_for_render_;
 }
diff --git a/source/blender/draw/intern/draw_cache.c 
b/source/blender/draw/intern/draw_cache.c
index 6775a281677..10c4c2c4fcc 100644
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@ -2931,11 +2931,6 @@ GPUBatch *DRW_cache_curve_edge_wire_get(Object *ob)
   BLI_assert(ob->type == OB_CURVE);
 
   struct Curve *cu = ob->data;
-  struct Mesh *mesh_eval = BKE_object_get_evaluated_mesh(ob);
-  if (mesh_eval != NULL) {
-return DRW_mesh_batch_cache_get_loose_edges(mesh_eval);
-  }
-
   return DRW_curve_batch_cache_get_wire_edge(cu);
 }
 
diff --git a/source/blender/draw/intern/draw_cache_impl_curve.cc 
b/source/blender/draw/intern/draw_cache_impl_curve.cc
index fe0eaa219cb..fa59b61248a 100644
--- a/source/blender/draw/intern/draw_cache_impl_curve.cc
+++ b/source/blender/draw/intern/draw_cache_impl_curve.cc
@@ -256,7 +256,7 @@ static CurveRenderData *curve_render_data_create(Curve *cu, 
Object *ob, const in
 
   rdata->ob_curve_cache = ob->runtime.curve_cache;
 
-  rdata->curve_eval = ob->runtime.geometry_set_eval->get_curve_for_read();
+  rdata->curve_eval = cu->curve_eval;
 
   if (types & CU_DATATYPE_WIRE) {
 if (rdata->curve_eval != nullptr) {
diff --git a/source/blender/makesdna/DNA_curve_types.h 
b/source/blender/makesdna/DNA_curve_types.h
index 231c7a79f34..06e9953b33c 100644
--- a/source/blender/makesdna/DNA_curve_types.h
+++ b/source/blender/makesdna/DNA_curve_types.h
@@ -300,6 +300,12 @@ typedef struct Curve {
   char _pad2[6];
   float fsize_realtime;
 
+  /**
+   * A pointer to curve data from geometry nodes, currently only set for 
evaluated
+   * objects by the dependency graph iterator, and owned by #geometry_set_eval.
+   */
+  struct CurveEval *curve_eval;
+
   void *batch_cache;
 } Curve;

___
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] [0dc68aeff8e] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: 0dc68aeff8e91b837ce8b769f3016503950e269f
Author: Hans Goudey
Date:   Mon Jun 28 21:33:34 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB0dc68aeff8e91b837ce8b769f3016503950e269f

Merge branch 'master' into curve-nodes-modifier

===



===

diff --cc source/blender/blenkernel/intern/displist.cc
index 3faa1ff99ce,3048795ba45..719a8900aa9
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@@ -1275,28 -1403,31 +1275,28 @@@ static void evaluate_curve_type_object(
 Object *ob,
 const bool for_render,
 ListBase *r_dispbase,
 -   Mesh **r_final)
 +   GeometrySet *r_geometry_set)
  {
-   const Curve *cu = (const Curve *)ob->data;
BLI_assert(ELEM(ob->type, OB_CURVE, OB_FONT));
+   const Curve *cu = (const Curve *)ob->data;
  
 -  ListBase nubase = {nullptr, nullptr};
 -
 -  BKE_curve_bevelList_free(>runtime.curve_cache->bev);
 -
 -  if (ob->runtime.curve_cache->anim_path_accum_length) {
 -MEM_freeN((void *)ob->runtime.curve_cache->anim_path_accum_length);
 -  }
 -  ob->runtime.curve_cache->anim_path_accum_length = nullptr;
 +  ListBase *deformed_nurbs = >runtime.curve_cache->deformed_nurbs;
  
if (ob->type == OB_FONT) {
 -BKE_vfont_to_curve_nubase(ob, FO_EDIT, );
 +BKE_vfont_to_curve_nubase(ob, FO_EDIT, deformed_nurbs);
}
else {
 -BKE_nurbList_duplicate(, BKE_curve_nurbs_get(const_cast(cu)));
 +BKE_nurbList_duplicate(deformed_nurbs, 
BKE_curve_nurbs_get(const_cast(cu)));
}
  
 -  bool force_mesh_conversion = BKE_curve_calc_modifiers_pre(
 -  depsgraph, scene, ob, , , for_render);
 +  BKE_curve_calc_modifiers_pre(depsgraph, scene, ob, deformed_nurbs, 
deformed_nurbs, for_render);
 +
 +  BKE_curve_bevelList_make(ob, deformed_nurbs, for_render);
  
 -  BKE_curve_bevelList_make(ob, , for_render);
 +  if ((cu->flag & CU_PATH) ||
 +  DEG_get_eval_flags_for_id(depsgraph, >id) & 
DAG_EVAL_NEED_CURVE_PATH) {
 +BKE_anim_path_calc_data(ob);
 +  }
  
/* If curve has no bevel will return nothing */
ListBase dlbev = BKE_curve_bevel_make(cu);
@@@ -1512,20 -1660,18 +1512,20 @@@ void BKE_displist_make_curveTypes(Depsg
  }
  
  void BKE_displist_make_curveTypes_forRender(
- Depsgraph *depsgraph, const Scene *scene, Object *ob, ListBase *dispbase, 
Mesh **r_final)
+ Depsgraph *depsgraph, const Scene *scene, Object *ob, ListBase 
*r_dispbase, Mesh **r_final)
  {
if (ob->runtime.curve_cache == nullptr) {
 -ob->runtime.curve_cache = (CurveCache *)MEM_callocN(sizeof(CurveCache),
 -"CurveCache for 
Curve");
 +ob->runtime.curve_cache = (CurveCache *)MEM_callocN(sizeof(CurveCache), 
__func__);
}
  
if (ob->type == OB_SURF) {
- evaluate_surface_object(depsgraph, scene, ob, true, dispbase, r_final);
+ evaluate_surface_object(depsgraph, scene, ob, true, r_dispbase, r_final);
}
else {
 -evaluate_curve_type_object(depsgraph, scene, ob, true, r_dispbase, 
r_final);
 +GeometrySet geometry_set;
- evaluate_curve_type_object(depsgraph, scene, ob, true, dispbase, 
_set);
++evaluate_curve_type_object(depsgraph, scene, ob, true, r_dispbase, 
_set);
 +MeshComponent _component = 
geometry_set.get_component_for_write();
 +*r_final = mesh_component.release();
}
  }

___
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] [86fc7153495] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: 86fc7153495239e6c6bbd4a958bcf9a0f3526054
Author: Hans Goudey
Date:   Wed Jun 30 11:34:51 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB86fc7153495239e6c6bbd4a958bcf9a0f3526054

Merge branch 'master' into curve-nodes-modifier

===



===



___
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] [4c0c91cb603] curve-nodes-modifier: Further development and improvements

2021-07-12 Thread Hans Goudey
Commit: 4c0c91cb603f8201f26a4d3a0096008f873bfe39
Author: Hans Goudey
Date:   Fri Jul 2 00:03:24 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB4c0c91cb603f8201f26a4d3a0096008f873bfe39

Further development and improvements

===

M   source/blender/blenkernel/BKE_geometry_set.hh
M   source/blender/blenkernel/intern/displist.cc
M   source/blender/blenkernel/intern/geometry_component_curve.cc
M   source/blender/blenkernel/intern/geometry_set_instances.cc
M   source/blender/depsgraph/intern/depsgraph_query_iter.cc
M   source/blender/draw/intern/draw_cache.c
M   source/blender/draw/intern/draw_cache_impl_curve.cc
M   source/blender/makesdna/DNA_curve_types.h

===

diff --git a/source/blender/blenkernel/BKE_geometry_set.hh 
b/source/blender/blenkernel/BKE_geometry_set.hh
index 8e93031e36d..82c9a31dfce 100644
--- a/source/blender/blenkernel/BKE_geometry_set.hh
+++ b/source/blender/blenkernel/BKE_geometry_set.hh
@@ -413,7 +413,6 @@ class CurveComponent : public GeometryComponent {
*/
   mutable Curve *curve_for_render_ = nullptr;
   mutable std::mutex curve_for_render_mutex_;
-  // std::unique_ptr owned_edit_mode_curve_;
 
  public:
   CurveComponent();
@@ -440,15 +439,11 @@ class CurveComponent : public GeometryComponent {
   void ensure_owns_direct_data() override;
 
   const Curve *get_curve_for_render() const;
-  void add_edit_mode_data_to_result(const Curve _curve);
-  // void add_edit_curve_eval_to_render_curve(std::unique_ptr 
curve);
 
   static constexpr inline GeometryComponentType static_type = 
GEO_COMPONENT_TYPE_CURVE;
 
  private:
   const blender::bke::ComponentAttributeProviders *get_attribute_providers() 
const final;
-
-  void create_render_curve() const;
 };
 
 class InstanceReference {
diff --git a/source/blender/blenkernel/intern/displist.cc 
b/source/blender/blenkernel/intern/displist.cc
index 00995e23d30..efd87318bbd 100644
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@ -831,13 +831,6 @@ void BKE_curve_calc_modifiers_pre(Depsgraph *depsgraph,
   }
 }
 
-static void geometry_set_ensure_mesh(GeometrySet _set)
-{
-  if (!geometry_set.has_mesh()) {
-geometry_set.replace_mesh(BKE_mesh_new_nomain(0, 0, 0, 0, 0));
-  }
-}
-
 static GeometrySet curve_calc_modifiers_post(Depsgraph *depsgraph,
  const Scene *scene,
  Object *ob,
@@ -895,7 +888,9 @@ static GeometrySet curve_calc_modifiers_post(Depsgraph 
*depsgraph,
   continue;
 }
 
-geometry_set_ensure_mesh(geometry_set);
+if (!geometry_set.has_mesh()) {
+  geometry_set.replace_mesh(BKE_mesh_new_nomain(0, 0, 0, 0, 0));
+}
 Mesh *mesh = geometry_set.get_mesh_for_write();
 
 if (mti->type == eModifierTypeType_OnlyDeform) {
@@ -919,16 +914,17 @@ static GeometrySet curve_calc_modifiers_post(Depsgraph 
*depsgraph,
 }
   }
 
-  geometry_set_ensure_mesh(geometry_set);
-  Mesh *final_mesh = geometry_set.get_mesh_for_write();
+  if (geometry_set.has_mesh()) {
+Mesh *final_mesh = geometry_set.get_mesh_for_write();
 
-  /* XXX2.8(Sybren): make sure the face normals are recalculated as well */
-  BKE_mesh_ensure_normals(final_mesh);
+/* XXX2.8(Sybren): make sure the face normals are recalculated as well */
+BKE_mesh_ensure_normals(final_mesh);
 
-  /* Set flag which makes it easier to see what's going on in a debugger. */
-  final_mesh->id.tag |= LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT;
-  BLI_strncpy(final_mesh->id.name, cu->id.name, sizeof(final_mesh->id.name));
-  *((short *)final_mesh->id.name) = ID_ME;
+/* Set flag which makes it easier to see what's going on in a debugger. */
+final_mesh->id.tag |= LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT;
+BLI_strncpy(final_mesh->id.name, cu->id.name, sizeof(final_mesh->id.name));
+*((short *)final_mesh->id.name) = ID_ME;
+  }
 
   return geometry_set;
 }
@@ -1505,13 +1501,15 @@ void BKE_displist_make_curveTypes(Depsgraph *depsgraph,
   else {
 GeometrySet geometry_set;
 evaluate_curve_type_object(depsgraph, scene, ob, for_render, dispbase, 
_set);
-
-if (ob->mode == OB_MODE_EDIT) {
-  const Curve _curve = *(const Curve *)ob->data;
-  CurveComponent _component = 
geometry_set.get_component_for_write();
-  curve_component.add_edit_mode_data_to_result(original_curve);
+if (BKE_curve_editNurbs_get_for_read((const Curve *)ob->data) &&
+!geometry_set.has()) {
+  geometry_set.get_component_for_write();
 }
 ob->runtime.geometry_set_eval = new GeometrySet(std::move(geometry_set));
+
+if (geometry_set.has()) {
+  std::cout << "Output has mesh component\n";
+}
   }
 
   boundbox_displist_object(ob);
diff --git a/source/blender/blenkernel/intern/geometry_component_curve.cc 

[Bf-blender-cvs] [1cdfb9ad5a9] curve-nodes-modifier: Cleanup: Remove unecessary change

2021-07-12 Thread Hans Goudey
Commit: 1cdfb9ad5a9736abf0322e2d00d0d4d47dc8c7db
Author: Hans Goudey
Date:   Tue Jul 6 13:29:39 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB1cdfb9ad5a9736abf0322e2d00d0d4d47dc8c7db

Cleanup: Remove unecessary change

===

M   source/blender/draw/intern/draw_cache_impl_curve.cc

===

diff --git a/source/blender/draw/intern/draw_cache_impl_curve.cc 
b/source/blender/draw/intern/draw_cache_impl_curve.cc
index b7f5f79291f..51bd4c535cd 100644
--- a/source/blender/draw/intern/draw_cache_impl_curve.cc
+++ b/source/blender/draw/intern/draw_cache_impl_curve.cc
@@ -245,7 +245,9 @@ enum {
 /*
  * ob_curve_cache can be NULL, only needed for CU_DATATYPE_WIRE
  */
-static CurveRenderData *curve_render_data_create(Curve *cu, Object *ob, const 
int types)
+static CurveRenderData *curve_render_data_create(Curve *cu,
+ CurveCache *ob_curve_cache,
+ const int types)
 {
   CurveRenderData *rdata = (CurveRenderData *)MEM_callocN(sizeof(*rdata), 
__func__);
   rdata->types = types;
@@ -254,7 +256,7 @@ static CurveRenderData *curve_render_data_create(Curve *cu, 
Object *ob, const in
   rdata->actnu = cu->actnu;
   rdata->actvert = cu->actvert;
 
-  rdata->ob_curve_cache = ob->runtime.curve_cache;
+  rdata->ob_curve_cache = ob_curve_cache;
 
   rdata->curve_eval = cu->curve_eval;
 
@@ -1146,7 +1148,7 @@ void DRW_curve_batch_cache_create_requested(Object *ob, 
const struct Scene *scen
   printf("  mr_flag %d\n\n", mr_flag);
 #endif
 
-  CurveRenderData *rdata = curve_render_data_create(cu, ob, mr_flag);
+  CurveRenderData *rdata = curve_render_data_create(cu, 
ob->runtime.curve_cache, mr_flag);
 
   /* The object's curve cache can be empty (in one case because we use 
#CurveEval's cache instead),
* If so, point to an empty DispList list to avoid the need to check for 
null in the following

___
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] [78c086f686b] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: 78c086f686b2b45551a1e34310283f88047b9d03
Author: Hans Goudey
Date:   Wed Jun 30 18:32:36 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB78c086f686b2b45551a1e34310283f88047b9d03

Merge branch 'master' into curve-nodes-modifier

===



===



___
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] [49304aa3036] curve-nodes-modifier: Various Improvements

2021-07-12 Thread Hans Goudey
Commit: 49304aa303635d140c276ace91967cca466144d9
Author: Hans Goudey
Date:   Thu Jul 1 15:50:32 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB49304aa303635d140c276ace91967cca466144d9

Various Improvements

===

M   source/blender/blenkernel/BKE_geometry_set.hh
M   source/blender/blenkernel/intern/displist.cc
M   source/blender/blenkernel/intern/geometry_component_curve.cc
M   source/blender/draw/intern/draw_cache.c
M   source/blender/draw/intern/draw_cache.h
M   source/blender/draw/intern/draw_cache_impl_curve.cc
M   source/blender/makesdna/DNA_curve_types.h

===

diff --git a/source/blender/blenkernel/BKE_geometry_set.hh 
b/source/blender/blenkernel/BKE_geometry_set.hh
index 82c9a31dfce..8e93031e36d 100644
--- a/source/blender/blenkernel/BKE_geometry_set.hh
+++ b/source/blender/blenkernel/BKE_geometry_set.hh
@@ -413,6 +413,7 @@ class CurveComponent : public GeometryComponent {
*/
   mutable Curve *curve_for_render_ = nullptr;
   mutable std::mutex curve_for_render_mutex_;
+  // std::unique_ptr owned_edit_mode_curve_;
 
  public:
   CurveComponent();
@@ -439,11 +440,15 @@ class CurveComponent : public GeometryComponent {
   void ensure_owns_direct_data() override;
 
   const Curve *get_curve_for_render() const;
+  void add_edit_mode_data_to_result(const Curve _curve);
+  // void add_edit_curve_eval_to_render_curve(std::unique_ptr 
curve);
 
   static constexpr inline GeometryComponentType static_type = 
GEO_COMPONENT_TYPE_CURVE;
 
  private:
   const blender::bke::ComponentAttributeProviders *get_attribute_providers() 
const final;
+
+  void create_render_curve() const;
 };
 
 class InstanceReference {
diff --git a/source/blender/blenkernel/intern/displist.cc 
b/source/blender/blenkernel/intern/displist.cc
index c978c997856..2be42d328f6 100644
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@ -869,7 +869,8 @@ static GeometrySet curve_calc_modifiers_post(Depsgraph 
*depsgraph,
  pretessellatePoint->next;
 
   GeometrySet geometry_set;
-  if (md && md->type == eModifierType_Nodes && BKE_modifier_is_enabled(scene, 
md, required_mode)) {
+  if (md == nullptr ||
+  (md->type == eModifierType_Nodes && BKE_modifier_is_enabled(scene, md, 
required_mode))) {
 std::unique_ptr curve_eval = curve_eval_from_dna_curve(
 *cu, ob->runtime.curve_cache->deformed_nurbs);
 geometry_set.replace_curve(curve_eval.release());
@@ -1504,6 +1505,12 @@ void BKE_displist_make_curveTypes(Depsgraph *depsgraph,
   else {
 GeometrySet geometry_set;
 evaluate_curve_type_object(depsgraph, scene, ob, for_render, dispbase, 
_set);
+
+if (ob->mode == OB_MODE_EDIT) {
+  const Curve _curve = *(const Curve *)ob->data;
+  CurveComponent _component = 
geometry_set.get_component_for_write();
+  curve_component.add_edit_mode_data_to_result(original_curve);
+}
 ob->runtime.geometry_set_eval = new GeometrySet(std::move(geometry_set));
   }
 
diff --git a/source/blender/blenkernel/intern/geometry_component_curve.cc 
b/source/blender/blenkernel/intern/geometry_component_curve.cc
index b5c49dbb8b2..cd3cde977e4 100644
--- a/source/blender/blenkernel/intern/geometry_component_curve.cc
+++ b/source/blender/blenkernel/intern/geometry_component_curve.cc
@@ -64,6 +64,8 @@ void CurveComponent::clear()
   delete curve_;
 }
 if (curve_for_render_ != nullptr) {
+  /* Don't free the edit mode data, it's only borrowed! */
+  curve_for_render_->editnurb = nullptr;
   BKE_id_free(nullptr, curve_for_render_);
   curve_for_render_ = nullptr;
 }
@@ -128,29 +130,53 @@ void CurveComponent::ensure_owns_direct_data()
   }
 }
 
-/**
- * Create empty curve data used for rendering the spline's wire edges.
- * \note See comment on #curve_for_render_ for further explanation.
- */
-const Curve *CurveComponent::get_curve_for_render() const
+void CurveComponent::create_render_curve() const
 {
-  if (curve_ == nullptr) {
-return nullptr;
-  }
   if (curve_for_render_ != nullptr) {
-return curve_for_render_;
+return;
   }
   std::lock_guard lock{curve_for_render_mutex_};
   if (curve_for_render_ != nullptr) {
-return curve_for_render_;
+return;
   }
 
   curve_for_render_ = (Curve *)BKE_id_new_nomain(ID_CU, nullptr);
   curve_for_render_->curve_eval = curve_;
+}
+
+/**
+ * Create empty curve data used for rendering the spline's wire edges.
+ * \note See comment on #curve_for_render_ for further explanation.
+ */
+const Curve *CurveComponent::get_curve_for_render() const
+{
+  this->create_render_curve();
 
   return curve_for_render_;
 }
 
+/**
+ * TODO: Comment
+ */
+void CurveComponent::add_edit_mode_data_to_result(const Curve _curve)
+{
+  std::cout << __func__ << "\n";
+  this->create_render_curve();
+
+  

[Bf-blender-cvs] [cc13189d96d] curve-nodes-modifier: Cleanup: Add comment

2021-07-12 Thread Hans Goudey
Commit: cc13189d96d3be1895faba07d2e9efb075efb1b2
Author: Hans Goudey
Date:   Tue Jul 6 16:14:29 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rBcc13189d96d3be1895faba07d2e9efb075efb1b2

Cleanup: Add comment

===

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

===

diff --git a/source/blender/blenkernel/intern/displist.cc 
b/source/blender/blenkernel/intern/displist.cc
index b542ec2ea00..1e9f22d588e 100644
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@ -1541,6 +1541,8 @@ void BKE_displist_make_curveTypes(Depsgraph *depsgraph,
 GeometrySet geometry_set;
 evaluate_curve_type_object(depsgraph, scene, ob, for_render, dispbase, 
_set);
 
+/* If the curve is in edit mode, make sure the output geometry set 
containts a
+ * curve component, which is used indirectly to render the edit mode 
overlays. */
 if (BKE_curve_editNurbs_get_for_read((const Curve *)ob->data) &&
 !geometry_set.has()) {
   geometry_set.get_component_for_write();

___
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] [65c326cbe9e] curve-nodes-modifier: Cleanup: Remove unecessary change

2021-07-12 Thread Hans Goudey
Commit: 65c326cbe9ed56b283464705fbe9523b5b9ff1ed
Author: Hans Goudey
Date:   Mon Jun 28 15:23:42 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB65c326cbe9ed56b283464705fbe9523b5b9ff1ed

Cleanup: Remove unecessary change

===

M   source/blender/blenlib/BLI_vector.hh

===

diff --git a/source/blender/blenlib/BLI_vector.hh 
b/source/blender/blenlib/BLI_vector.hh
index 98e4650f0be..da02c4f4ae1 100644
--- a/source/blender/blenlib/BLI_vector.hh
+++ b/source/blender/blenlib/BLI_vector.hh
@@ -221,21 +221,6 @@ class Vector {
 }
   }
 
-  /**
-   * Create a vector from a const ListBase. The caller has to make sure that 
the values in the
-   * linked list have the correct type.
-   *
-   * Example Usage:
-   *  Vector modifiers(ob->modifiers);
-   */
-  Vector(const ListBase , Allocator allocator = {})
-  : Vector(NoExceptConstructor(), allocator)
-  {
-LISTBASE_FOREACH (T, value, ) {
-  this->append(value);
-}
-  }
-
   /**
* Create a copy of another vector. The other vector will not be changed. If 
the other vector has
* less than InlineBufferCapacity elements, no allocation will be made.

___
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] [66e00013c99] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: 66e00013c992ac6e205e1b29ca1f828ecfc2a8ae
Author: Hans Goudey
Date:   Wed Jun 30 16:52:33 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB66e00013c992ac6e205e1b29ca1f828ecfc2a8ae

Merge branch 'master' into curve-nodes-modifier

===



===



___
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] [82034701744] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: 8203470174493b080861572b8a21f5442ed8717f
Author: Hans Goudey
Date:   Mon Jun 28 14:31:40 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB8203470174493b080861572b8a21f5442ed8717f

Merge branch 'master' into curve-nodes-modifier

===



===



___
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] [e51c10d71e9] curve-nodes-modifier: Cleanup: Rename variables

2021-07-12 Thread Hans Goudey
Commit: e51c10d71e90fec5ebcdc8893b6db40469a325cf
Author: Hans Goudey
Date:   Mon Jun 28 17:53:42 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rBe51c10d71e90fec5ebcdc8893b6db40469a325cf

Cleanup: Rename variables

===

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

===

diff --git a/source/blender/blenkernel/intern/displist.cc 
b/source/blender/blenkernel/intern/displist.cc
index 80d77f062de..4063a61e75b 100644
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@ -968,20 +968,21 @@ static void displist_make_surf(Depsgraph *depsgraph,
Mesh **r_final,
const bool for_render)
 {
+  BLI_assert(ob->type == OB_SURF);
   const Curve *cu = (const Curve *)ob->data;
 
-  ListBase *nubase = >runtime.curve_cache->deformed_nurbs;
+  ListBase *deformed_nurbs = >runtime.curve_cache->deformed_nurbs;
 
   if (!for_render && cu->editnurb) {
-BKE_nurbList_duplicate(nubase, BKE_curve_editNurbs_get_for_read(cu));
+BKE_nurbList_duplicate(deformed_nurbs, 
BKE_curve_editNurbs_get_for_read(cu));
   }
   else {
-BKE_nurbList_duplicate(nubase, >nurb);
+BKE_nurbList_duplicate(deformed_nurbs, >nurb);
   }
 
-  BKE_curve_calc_modifiers_pre(depsgraph, scene, ob, nubase, nubase, 
for_render);
+  BKE_curve_calc_modifiers_pre(depsgraph, scene, ob, deformed_nurbs, 
deformed_nurbs, for_render);
 
-  LISTBASE_FOREACH (Nurb *, nu, nubase) {
+  LISTBASE_FOREACH (Nurb *, nu, deformed_nurbs) {
 if (!(for_render || nu->hide == 0) || !BKE_nurb_check_valid_uv(nu)) {
   continue;
 }
@@ -1274,31 +1275,31 @@ static void evaluate_curve_type_object(Depsgraph 
*depsgraph,
   const Curve *cu = (const Curve *)ob->data;
   BLI_assert(ELEM(ob->type, OB_CURVE, OB_FONT));
 
-  ListBase *nubase = >runtime.curve_cache->deformed_nurbs;
+  ListBase *deformed_nurbs = >runtime.curve_cache->deformed_nurbs;
 
   if (ob->type == OB_FONT) {
-BKE_vfont_to_curve_nubase(ob, FO_EDIT, nubase);
+BKE_vfont_to_curve_nubase(ob, FO_EDIT, deformed_nurbs);
   }
   else {
-BKE_nurbList_duplicate(nubase, BKE_curve_nurbs_get(const_cast(cu)));
+BKE_nurbList_duplicate(deformed_nurbs, 
BKE_curve_nurbs_get(const_cast(cu)));
   }
 
-  BKE_curve_calc_modifiers_pre(depsgraph, scene, ob, nubase, nubase, 
for_render);
+  BKE_curve_calc_modifiers_pre(depsgraph, scene, ob, deformed_nurbs, 
deformed_nurbs, for_render);
 
-  BKE_curve_bevelList_make(ob, nubase, for_render);
+  BKE_curve_bevelList_make(ob, deformed_nurbs, for_render);
 
   /* If curve has no bevel will return nothing */
   ListBase dlbev = BKE_curve_bevel_make(cu);
 
   /* no bevel or extrude, and no width correction? */
   if (BLI_listbase_is_empty() && cu->width == 1.0f) {
-curve_to_displist(cu, nubase, for_render, dispbase);
+curve_to_displist(cu, deformed_nurbs, for_render, dispbase);
   }
   else {
 const float widfac = cu->width - 1.0f;
 
 const BevList *bl = (BevList *)ob->runtime.curve_cache->bev.first;
-const Nurb *nu = (Nurb *)nubase->first;
+const Nurb *nu = (Nurb *)deformed_nurbs->first;
 for (; bl && nu; bl = bl->next, nu = nu->next) {
   float *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] [e14ce0fefee] curve-nodes-modifier: Cleanup: Remove unecessary include

2021-07-12 Thread Hans Goudey
Commit: e14ce0fefee6f6fd6b2703fbe97b6332bf79df28
Author: Hans Goudey
Date:   Mon Jun 28 14:34:57 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rBe14ce0fefee6f6fd6b2703fbe97b6332bf79df28

Cleanup: Remove unecessary include

===

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

===

diff --git a/source/blender/blenkernel/intern/geometry_set_instances.cc 
b/source/blender/blenkernel/intern/geometry_set_instances.cc
index 9acf88b8478..01b51d552a9 100644
--- a/source/blender/blenkernel/intern/geometry_set_instances.cc
+++ b/source/blender/blenkernel/intern/geometry_set_instances.cc
@@ -14,7 +14,6 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-#include "BKE_curve.h"
 #include "BKE_geometry_set_instances.hh"
 #include "BKE_material.h"
 #include "BKE_mesh.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] [7ae47bc368c] curve-nodes-modifier: More cleanup, displist still shows up when it shouldn't (no mesh in data_eval)

2021-07-12 Thread Hans Goudey
Commit: 7ae47bc368c4a6cbd8f2e01dd8e33c16f846683f
Author: Hans Goudey
Date:   Mon Jun 28 20:27:07 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB7ae47bc368c4a6cbd8f2e01dd8e33c16f846683f

More cleanup, displist still shows up when it shouldn't (no mesh in data_eval)

===

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

===

diff --git a/source/blender/blenkernel/intern/displist.cc 
b/source/blender/blenkernel/intern/displist.cc
index 4063a61e75b..3faa1ff99ce 100644
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@ -832,10 +832,17 @@ void BKE_curve_calc_modifiers_pre(Depsgraph *depsgraph,
   }
 }
 
+static void geometry_set_ensure_mesh(GeometrySet _set)
+{
+  if (!geometry_set.has_mesh()) {
+geometry_set.replace_mesh(BKE_mesh_new_nomain(0, 0, 0, 0, 0));
+  }
+}
+
 static GeometrySet curve_calc_modifiers_post(Depsgraph *depsgraph,
  const Scene *scene,
  Object *ob,
- ListBase *dispbase,
+ const ListBase *dispbase,
  const bool for_render)
 {
   const Curve *cu = (const Curve *)ob->data;
@@ -869,7 +876,6 @@ static GeometrySet curve_calc_modifiers_post(Depsgraph 
*depsgraph,
 geometry_set.replace_curve(curve_eval.release());
   }
   else {
-curve_to_filledpoly(cu, dispbase);
 Mesh *mesh = BKE_mesh_new_nomain_from_curve_displist(ob, dispbase);
 /* Copy materials, since BKE_mesh_new_nomain_from_curve_displist() 
doesn't. */
 mesh->mat = (Material **)MEM_dupallocN(cu->mat);
@@ -889,9 +895,7 @@ static GeometrySet curve_calc_modifiers_post(Depsgraph 
*depsgraph,
   continue;
 }
 
-if (!geometry_set.has_mesh()) {
-  geometry_set.replace_mesh(BKE_mesh_new_nomain(0, 0, 0, 0, 0));
-}
+geometry_set_ensure_mesh(geometry_set);
 Mesh *mesh = geometry_set.get_mesh_for_write();
 
 if (mti->type == eModifierTypeType_OnlyDeform) {
@@ -915,17 +919,16 @@ static GeometrySet curve_calc_modifiers_post(Depsgraph 
*depsgraph,
 }
   }
 
-  if (geometry_set.has_mesh()) {
-Mesh *final_mesh = geometry_set.get_mesh_for_write();
+  geometry_set_ensure_mesh(geometry_set);
+  Mesh *final_mesh = geometry_set.get_mesh_for_write();
 
-/* XXX2.8(Sybren): make sure the face normals are recalculated as well */
-BKE_mesh_ensure_normals(final_mesh);
+  /* XXX2.8(Sybren): make sure the face normals are recalculated as well */
+  BKE_mesh_ensure_normals(final_mesh);
 
-/* Set flag which makes it easier to see what's going on in a debugger. */
-final_mesh->id.tag |= LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT;
-BLI_strncpy(final_mesh->id.name, cu->id.name, sizeof(final_mesh->id.name));
-*((short *)final_mesh->id.name) = ID_ME;
-  }
+  /* Set flag which makes it easier to see what's going on in a debugger. */
+  final_mesh->id.tag |= LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT;
+  BLI_strncpy(final_mesh->id.name, cu->id.name, sizeof(final_mesh->id.name));
+  *((short *)final_mesh->id.name) = ID_ME;
 
   return geometry_set;
 }
@@ -961,12 +964,12 @@ static void displist_surf_indices(DispList *dl)
   }
 }
 
-static void displist_make_surf(Depsgraph *depsgraph,
-   const Scene *scene,
-   Object *ob,
-   ListBase *dispbase,
-   Mesh **r_final,
-   const bool for_render)
+static void evaluate_surface_object(Depsgraph *depsgraph,
+const Scene *scene,
+Object *ob,
+const bool for_render,
+ListBase *r_dispbase,
+Mesh **r_final)
 {
   BLI_assert(ob->type == OB_SURF);
   const Curve *cu = (const Curve *)ob->data;
@@ -982,7 +985,7 @@ static void displist_make_surf(Depsgraph *depsgraph,
 
   BKE_curve_calc_modifiers_pre(depsgraph, scene, ob, deformed_nurbs, 
deformed_nurbs, for_render);
 
-  LISTBASE_FOREACH (Nurb *, nu, deformed_nurbs) {
+  LISTBASE_FOREACH (const Nurb *, nu, deformed_nurbs) {
 if (!(for_render || nu->hide == 0) || !BKE_nurb_check_valid_uv(nu)) {
   continue;
 }
@@ -996,7 +999,7 @@ static void displist_make_surf(Depsgraph *depsgraph,
   DispList *dl = (DispList *)MEM_callocN(sizeof(DispList), 
"makeDispListsurf");
   dl->verts = (float *)MEM_mallocN(len * sizeof(float[3]), "dlverts");
 
-  BLI_addtail(dispbase, dl);
+  BLI_addtail(r_dispbase, dl);
   dl->parts = 1;
   dl->nr = len;
   dl->col = nu->mat_nr;
@@ -1018,7 +1021,7 @@ static void displist_make_surf(Depsgraph *depsgraph,
 
   

[Bf-blender-cvs] [229d30587bf] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: 229d30587bf57e4653e55ef0244eb88167b94a9d
Author: Hans Goudey
Date:   Mon Jun 28 17:50:10 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB229d30587bf57e4653e55ef0244eb88167b94a9d

Merge branch 'master' into curve-nodes-modifier

===



===

diff --cc source/blender/blenkernel/intern/displist.cc
index 9c301962f86,757c86681e0..80d77f062de
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@@ -915,32 -997,70 +915,21 @@@ static GeometrySet curve_calc_modifiers
  }
}
  
 -  if (vertCos) {
 -if (modified) {
 -  Mesh *temp_mesh = (Mesh *)BKE_id_copy_ex(
 -  nullptr, >id, nullptr, LIB_ID_COPY_LOCALIZE);
 -  BKE_id_free(nullptr, modified);
 -  modified = temp_mesh;
 +  if (geometry_set.has_mesh()) {
 +Mesh *final_mesh = geometry_set.get_mesh_for_write();
  
 -  BKE_mesh_vert_coords_apply(modified, vertCos);
 -  BKE_mesh_calc_normals_mapping_simple(modified);
 +/* XXX2.8(Sybren): make sure the face normals are recalculated as well */
 +BKE_mesh_ensure_normals(final_mesh);
  
 -  MEM_freeN(vertCos);
 -}
 -else {
 -  displist_vert_coords_apply(dispbase, vertCos);
 -  MEM_freeN(vertCos);
 -  vertCos = nullptr;
 -}
 +/* Set flag which makes it easier to see what's going on in a debugger. */
 +final_mesh->id.tag |= LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT;
 +BLI_strncpy(final_mesh->id.name, cu->id.name, 
sizeof(final_mesh->id.name));
 +*((short *)final_mesh->id.name) = ID_ME;
}
  
 -  if (r_final) {
 -if (force_mesh_conversion && !modified) {
 -  /* XXX 2.8 : This is a workaround for by some deeper technical debts:
 -   * - DRW Batch cache is stored inside the ob->data.
 -   * - Curve data is not COWed for instances that use different modifiers.
 -   * This can causes the modifiers to be applied on all user of the same 
data-block
 -   * (see T71055)
 -   *
 -   * The easy workaround is to force to generate a Mesh that will be used 
for display data
 -   * since a Mesh output is already used for generative modifiers.
 -   * However it does not fix problems with actual edit data still being 
shared.
 -   *
 -   * The right solution would be to COW the Curve data block at the input 
of the modifier
 -   * stack just like what the mesh modifier does.
 -   */
 -  modified = BKE_mesh_new_nomain_from_curve_displist(ob, dispbase);
 -}
 -
 -if (modified) {
 -
 -  /* XXX2.8(Sybren): make sure the face normals are recalculated as well 
*/
 -  BKE_mesh_ensure_normals(modified);
 -
 -  /* Special tweaks, needed since neither 
BKE_mesh_new_nomain_from_template() nor
 -   * BKE_mesh_new_nomain_from_curve_displist() properly duplicate mat 
info... */
 -  BLI_strncpy(modified->id.name, cu->id.name, sizeof(modified->id.name));
 -  *((short *)modified->id.name) = ID_ME;
 -  MEM_SAFE_FREE(modified->mat);
 -  /* Set flag which makes it easier to see what's going on in a debugger. 
*/
 -  modified->id.tag |= LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT;
 -  modified->mat = (Material **)MEM_dupallocN(cu->mat);
 -  modified->totcol = cu->totcol;
 -
 -  (*r_final) = modified;
 -}
 -else {
 -  (*r_final) = nullptr;
 -}
 -  }
 -  else if (modified != nullptr) {
 -/* Pretty stupid to generate that whole mesh if it's unused, yet we have 
to free it. */
 -BKE_id_free(nullptr, modified);
 -  }
 +  return geometry_set;
  }
  
- static Mesh *curve_calc_modifiers_post_for_mesh(Depsgraph *depsgraph,
- const Scene *scene,
- Object *ob,
- ListBase *dispbase,
- const bool for_render)
- {
-   GeometrySet geometry_set = curve_calc_modifiers_post(depsgraph, scene, ob, 
dispbase, for_render);
-   MeshComponent _component = 
geometry_set.get_component_for_write();
-   return mesh_component.release();
- }
- 
  static void displist_surf_indices(DispList *dl)
  {
int b, p1, p2, p3, p4;
@@@ -979,19 -1099,20 +968,20 @@@ static void displist_make_surf(Depsgrap
 Mesh **r_final,
 const bool for_render)
  {
--  ListBase nubase = {nullptr, nullptr};
const Curve *cu = (const Curve *)ob->data;
  
++  ListBase *nubase = >runtime.curve_cache->deformed_nurbs;
++
if (!for_render && cu->editnurb) {
--BKE_nurbList_duplicate(, BKE_curve_editNurbs_get(const_cast(cu)));
++BKE_nurbList_duplicate(nubase, BKE_curve_editNurbs_get_for_read(cu));
}
else {
--BKE_nurbList_duplicate(, >nurb);
++BKE_nurbList_duplicate(nubase, >nurb);
}
  
-   

[Bf-blender-cvs] [e77f3d92eee] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: e77f3d92eee2814fb19c5cb4b2b8a531bd3c25f2
Author: Hans Goudey
Date:   Mon Jun 28 22:23:57 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rBe77f3d92eee2814fb19c5cb4b2b8a531bd3c25f2

Merge branch 'master' into curve-nodes-modifier

===



===

diff --cc source/blender/blenkernel/intern/displist.cc
index 719a8900aa9,7f4db0be34e..c0defc6e775
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@@ -1286,10 -1412,11 +1286,10 @@@ static void evaluate_curve_type_object(
  BKE_vfont_to_curve_nubase(ob, FO_EDIT, deformed_nurbs);
}
else {
- BKE_nurbList_duplicate(deformed_nurbs, 
BKE_curve_nurbs_get(const_cast(cu)));
+ BKE_nurbList_duplicate(deformed_nurbs, BKE_curve_nurbs_get_for_read(cu));
}
  
 -  bool force_mesh_conversion = BKE_curve_calc_modifiers_pre(
 -  depsgraph, scene, ob, deformed_nurbs, deformed_nurbs, for_render);
 +  BKE_curve_calc_modifiers_pre(depsgraph, scene, ob, deformed_nurbs, 
deformed_nurbs, for_render);
  
BKE_curve_bevelList_make(ob, deformed_nurbs, for_render);

___
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] [59be5bf228a] curve-nodes-modifier: Remove "Curve deform fill" setting, avoid duplicating spline list

2021-07-12 Thread Hans Goudey
Commit: 59be5bf228a3ff52879e9c55785f21a379e57536
Author: Hans Goudey
Date:   Mon Jun 28 16:49:48 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB59be5bf228a3ff52879e9c55785f21a379e57536

Remove "Curve deform fill" setting, avoid duplicating spline list

===

M   release/scripts/startup/bl_ui/properties_data_curve.py
M   source/blender/blenkernel/intern/displist.cc
M   source/blender/editors/curve/editcurve_add.c
M   source/blender/io/alembic/intern/abc_reader_curves.cc
M   source/blender/makesdna/DNA_curve_types.h
M   source/blender/makesrna/intern/rna_curve.c

===

diff --git a/release/scripts/startup/bl_ui/properties_data_curve.py 
b/release/scripts/startup/bl_ui/properties_data_curve.py
index 85f672cd50f..e5b675db2c5 100644
--- a/release/scripts/startup/bl_ui/properties_data_curve.py
+++ b/release/scripts/startup/bl_ui/properties_data_curve.py
@@ -120,7 +120,6 @@ class DATA_PT_shape_curve(CurveButtonsPanel, Panel):
 sub = col.column()
 sub.active = (curve.dimensions == '2D' or (curve.bevel_mode != 
'OBJECT' and curve.dimensions == '3D'))
 sub.prop(curve, "fill_mode")
-col.prop(curve, "use_fill_deform")
 
 if is_curve:
 col = layout.column()
diff --git a/source/blender/blenkernel/intern/displist.cc 
b/source/blender/blenkernel/intern/displist.cc
index 05202e40c3f..9c301962f86 100644
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@ -546,11 +546,6 @@ static void bevels_to_filledpoly(const Curve *cu, ListBase 
*dispbase)
 
   LISTBASE_FOREACH (const DispList *, dl, dispbase) {
 if (dl->type == DL_SURF) {
-
-  /* This should be moved specifically to the surface evaluation functions,
-   * now that they are further separated. */
-  BLI_assert_unreachable();
-
   if ((dl->flag & DL_CYCL_V) && (dl->flag & DL_CYCL_U) == 0) {
 if ((cu->flag & CU_BACK) && (dl->flag & DL_BACK_CURVE)) {
   DispList *dlnew = (DispList *)MEM_callocN(sizeof(DispList), 
__func__);
@@ -874,9 +869,7 @@ static GeometrySet curve_calc_modifiers_post(Depsgraph 
*depsgraph,
 geometry_set.replace_curve(curve_eval.release());
   }
   else {
-if (cu->flag & CU_DEFORM_FILL) {
-  curve_to_filledpoly(cu, dispbase);
-}
+curve_to_filledpoly(cu, dispbase);
 Mesh *mesh = BKE_mesh_new_nomain_from_curve_displist(ob, dispbase);
 /* Copy materials, since BKE_mesh_new_nomain_from_curve_displist() 
doesn't. */
 mesh->mat = (Material **)MEM_dupallocN(cu->mat);
@@ -1295,8 +1288,6 @@ static void evaluate_curve_type_object(Depsgraph 
*depsgraph,
   const Curve *cu = (const Curve *)ob->data;
   BLI_assert(ELEM(ob->type, OB_CURVE, OB_FONT));
 
-  ListBase nubase = {nullptr, nullptr};
-
   BKE_curve_bevelList_free(>runtime.curve_cache->bev);
 
   if (ob->runtime.curve_cache->anim_path_accum_length) {
@@ -1304,29 +1295,31 @@ static void evaluate_curve_type_object(Depsgraph 
*depsgraph,
   }
   ob->runtime.curve_cache->anim_path_accum_length = nullptr;
 
+  ListBase *nubase = >runtime.curve_cache->deformed_nurbs;
+
   if (ob->type == OB_FONT) {
-BKE_vfont_to_curve_nubase(ob, FO_EDIT, );
+BKE_vfont_to_curve_nubase(ob, FO_EDIT, nubase);
   }
   else {
-BKE_nurbList_duplicate(, BKE_curve_nurbs_get(const_cast(cu)));
+BKE_nurbList_duplicate(nubase, BKE_curve_nurbs_get(const_cast(cu)));
   }
 
-  BKE_curve_calc_modifiers_pre(depsgraph, scene, ob, , , 
for_render);
+  BKE_curve_calc_modifiers_pre(depsgraph, scene, ob, nubase, nubase, 
for_render);
 
-  BKE_curve_bevelList_make(ob, , for_render);
+  BKE_curve_bevelList_make(ob, nubase, for_render);
 
   /* If curve has no bevel will return nothing */
   ListBase dlbev = BKE_curve_bevel_make(cu);
 
   /* no bevel or extrude, and no width correction? */
   if (BLI_listbase_is_empty() && cu->width == 1.0f) {
-curve_to_displist(cu, , for_render, dispbase);
+curve_to_displist(cu, nubase, for_render, dispbase);
   }
   else {
 const float widfac = cu->width - 1.0f;
 
-BevList *bl = (BevList *)ob->runtime.curve_cache->bev.first;
-Nurb *nu = (Nurb *)nubase.first;
+const BevList *bl = (BevList *)ob->runtime.curve_cache->bev.first;
+const Nurb *nu = (Nurb *)nubase->first;
 for (; bl && nu; bl = bl->next, nu = nu->next) {
   float *data;
 
@@ -1491,23 +1484,16 @@ static void evaluate_curve_type_object(Depsgraph 
*depsgraph,
 }
   }
 }
-BKE_displist_free();
   }
 
-  if (!(cu->flag & CU_DEFORM_FILL)) {
-curve_to_filledpoly(cu, dispbase);
-  }
+  BKE_displist_free();
 
   if ((cu->flag & CU_PATH) ||
   DEG_get_eval_flags_for_id(depsgraph, >id) & 
DAG_EVAL_NEED_CURVE_PATH) {
 BKE_anim_path_calc_data(ob);
   }
 
-  BKE_nurbList_duplicate(>runtime.curve_cache->deformed_nurbs, );
-
   

[Bf-blender-cvs] [3476da4d605] curve-nodes-modifier: Cleanup: Clang format

2021-07-12 Thread Hans Goudey
Commit: 3476da4d605b8506a10903bace68f0dd737e7af2
Author: Hans Goudey
Date:   Mon Jun 28 14:32:21 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB3476da4d605b8506a10903bace68f0dd737e7af2

Cleanup: Clang format

===

M   source/blender/blenlib/BLI_vector.hh

===

diff --git a/source/blender/blenlib/BLI_vector.hh 
b/source/blender/blenlib/BLI_vector.hh
index c8804d7c764..98e4650f0be 100644
--- a/source/blender/blenlib/BLI_vector.hh
+++ b/source/blender/blenlib/BLI_vector.hh
@@ -460,7 +460,7 @@ class Vector {
 this->append_as(std::move(value));
   }
   /* This is similar to `std::vector::emplace_back`. */
-  template void append_as(ForwardValue &&...value)
+  template void append_as(ForwardValue &&... value)
   {
 this->ensure_space_for_one();
 this->append_unchecked_as(std::forward(value)...);
@@ -502,7 +502,7 @@ class Vector {
   {
 this->append_unchecked_as(std::move(value));
   }
-  template void append_unchecked_as(ForwardT &&...value)
+  template void append_unchecked_as(ForwardT &&... value)
   {
 BLI_assert(end_ < capacity_end_);
 new (end_) T(std::forward(value)...);

___
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] [afbb61dc357] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: afbb61dc3577b356f27e778033a7959439978704
Author: Hans Goudey
Date:   Mon Jun 28 13:48:35 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rBafbb61dc3577b356f27e778033a7959439978704

Merge branch 'master' into curve-nodes-modifier

===



===



___
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] [aa7c42d5f97] curve-nodes-modifier: Working curve modifier evaluation, nodes modifier uses pre-tessellated deform

2021-07-12 Thread Hans Goudey
Commit: aa7c42d5f97f4989bf79df724283f2548310c664
Author: Hans Goudey
Date:   Mon Jun 28 13:14:04 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rBaa7c42d5f97f4989bf79df724283f2548310c664

Working curve modifier evaluation, nodes modifier uses pre-tessellated deform

===

M   source/blender/blenkernel/BKE_curve.h
M   source/blender/blenkernel/BKE_mesh.h
M   source/blender/blenkernel/intern/curve.c
M   source/blender/blenkernel/intern/displist.cc
M   source/blender/blenkernel/intern/mesh_convert.c

===

diff --git a/source/blender/blenkernel/BKE_curve.h 
b/source/blender/blenkernel/BKE_curve.h
index dbff1e23ad7..c7c5f59cab2 100644
--- a/source/blender/blenkernel/BKE_curve.h
+++ b/source/blender/blenkernel/BKE_curve.h
@@ -157,7 +157,7 @@ struct ListBase *BKE_curve_editNurbs_get(struct Curve *cu);
 const struct ListBase *BKE_curve_editNurbs_get_for_read(const struct Curve 
*cu);
 
 void BKE_curve_bevelList_free(struct ListBase *bev);
-void BKE_curve_bevelList_make(struct Object *ob, struct ListBase *nurbs, bool 
for_render);
+void BKE_curve_bevelList_make(struct Object *ob, const struct ListBase *nurbs, 
bool for_render);
 ListBase BKE_curve_bevel_make(const struct Curve *curve);
 
 void BKE_curve_forward_diff_bezier(
diff --git a/source/blender/blenkernel/BKE_mesh.h 
b/source/blender/blenkernel/BKE_mesh.h
index 8ddfb0c8eb2..6d74888b810 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -128,7 +128,8 @@ struct Mesh *BKE_mesh_copy_for_eval(struct Mesh *source, 
bool reference);
 /* These functions construct a new Mesh,
  * contrary to BKE_mesh_from_nurbs which modifies ob itself. */
 struct Mesh *BKE_mesh_new_nomain_from_curve(struct Object *ob);
-struct Mesh *BKE_mesh_new_nomain_from_curve_displist(struct Object *ob, struct 
ListBase *dispbase);
+struct Mesh *BKE_mesh_new_nomain_from_curve_displist(const struct Object *ob,
+ const struct ListBase 
*dispbase);
 
 bool BKE_mesh_ensure_facemap_customdata(struct Mesh *me);
 bool BKE_mesh_clear_facemap_customdata(struct Mesh *me);
@@ -151,7 +152,7 @@ int BKE_mesh_nurbs_to_mdata(struct Object *ob,
 struct MPoly **r_allpoly,
 int *r_totloop,
 int *r_totpoly);
-int BKE_mesh_nurbs_displist_to_mdata(struct Object *ob,
+int BKE_mesh_nurbs_displist_to_mdata(const struct Object *ob,
  const struct ListBase *dispbase,
  struct MVert **r_allvert,
  int *r_totvert,
diff --git a/source/blender/blenkernel/intern/curve.c 
b/source/blender/blenkernel/intern/curve.c
index 3342c397acf..ae3cf6c24d4 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -2655,7 +2655,7 @@ void BKE_curve_bevelList_free(ListBase *bev)
   BLI_listbase_clear(bev);
 }
 
-void BKE_curve_bevelList_make(Object *ob, ListBase *nurbs, bool for_render)
+void BKE_curve_bevelList_make(Object *ob, const ListBase *nurbs, bool 
for_render)
 {
   /*
* - convert all curves to polys, with indication of resol and flags for 
double-vertices
@@ -2700,7 +2700,7 @@ void BKE_curve_bevelList_make(Object *ob, ListBase 
*nurbs, bool for_render)
 is_editmode = 1;
   }
 
-  LISTBASE_FOREACH (Nurb *, nu, nurbs) {
+  LISTBASE_FOREACH (const Nurb *, nu, nurbs) {
 if (nu->hide && is_editmode) {
   continue;
 }
diff --git a/source/blender/blenkernel/intern/displist.cc 
b/source/blender/blenkernel/intern/displist.cc
index 39f4b6b8732..05202e40c3f 100644
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@ -539,12 +539,12 @@ void BKE_displist_fill(const ListBase *dispbase,
   /* do not free polys, needed for wireframe display */
 }
 
-static void bevels_to_filledpoly(const Curve *cu, const ListBase *src, 
ListBase *dst)
+static void bevels_to_filledpoly(const Curve *cu, ListBase *dispbase)
 {
   ListBase front = {nullptr, nullptr};
   ListBase back = {nullptr, nullptr};
 
-  LISTBASE_FOREACH (const DispList *, dl, src) {
+  LISTBASE_FOREACH (const DispList *, dl, dispbase) {
 if (dl->type == DL_SURF) {
 
   /* This should be moved specifically to the surface evaluation functions,
@@ -595,32 +595,28 @@ static void bevels_to_filledpoly(const Curve *cu, const 
ListBase *src, ListBase
   }
 
   const float z_up[3] = {0.0f, 0.0f, -1.0f};
-  BKE_displist_fill(, dst, z_up, true);
-  BKE_displist_fill(, dst, z_up, false);
+  BKE_displist_fill(, dispbase, z_up, true);
+  BKE_displist_fill(, dispbase, z_up, false);
 
   BKE_displist_free();
   BKE_displist_free();
 
-  BKE_displist_fill(src, dst, z_up, false);
+  BKE_displist_fill(dispbase, dispbase, z_up, false);
 }

[Bf-blender-cvs] [59455f9b663] curve-nodes-modifier: Further refactoring WIP

2021-07-12 Thread Hans Goudey
Commit: 59455f9b6638cdd2437a3891eb0ee1ee58a5ee6a
Author: Hans Goudey
Date:   Sat Jun 26 23:50:49 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB59455f9b6638cdd2437a3891eb0ee1ee58a5ee6a

Further refactoring WIP

===

M   source/blender/blenkernel/BKE_curve.h
M   source/blender/blenkernel/BKE_displist.h
M   source/blender/blenkernel/BKE_spline.hh
M   source/blender/blenkernel/intern/curve.c
M   source/blender/blenkernel/intern/curve_eval.cc
M   source/blender/blenkernel/intern/displist.cc
M   source/blender/blenkernel/intern/effect.c
M   source/blender/blenkernel/intern/geometry_set_instances.cc
M   source/blender/blenkernel/intern/mesh_convert.c
M   source/blender/blenkernel/intern/object_update.c
M   source/blender/blenlib/BLI_vector.hh
M   source/blender/editors/object/object_add.c
M   source/blender/editors/object/object_modifier.c
M   source/blender/editors/object/object_relations.c

===

diff --git a/source/blender/blenkernel/BKE_curve.h 
b/source/blender/blenkernel/BKE_curve.h
index 2687a5ea16c..dbff1e23ad7 100644
--- a/source/blender/blenkernel/BKE_curve.h
+++ b/source/blender/blenkernel/BKE_curve.h
@@ -121,6 +121,7 @@ void BKE_curve_material_remap(struct Curve *cu, const 
unsigned int *remap, unsig
 void BKE_curve_smooth_flag_set(struct Curve *cu, const bool use_smooth);
 
 ListBase *BKE_curve_nurbs_get(struct Curve *cu);
+const ListBase *BKE_curve_nurbs_get_for_read(const struct Curve *cu);
 
 int BKE_curve_nurb_vert_index_get(const struct Nurb *nu, const void *vert);
 void BKE_curve_nurb_active_set(struct Curve *cu, const struct Nurb *nu);
@@ -153,6 +154,7 @@ void BKE_curve_editNurb_keyIndex_delCV(struct GHash 
*keyindex, const void *cv);
 void BKE_curve_editNurb_keyIndex_free(struct GHash **keyindex);
 void BKE_curve_editNurb_free(struct Curve *cu);
 struct ListBase *BKE_curve_editNurbs_get(struct Curve *cu);
+const struct ListBase *BKE_curve_editNurbs_get_for_read(const struct Curve 
*cu);
 
 void BKE_curve_bevelList_free(struct ListBase *bev);
 void BKE_curve_bevelList_make(struct Object *ob, struct ListBase *nurbs, bool 
for_render);
diff --git a/source/blender/blenkernel/BKE_displist.h 
b/source/blender/blenkernel/BKE_displist.h
index fe72c5a129f..37e144ebbd3 100644
--- a/source/blender/blenkernel/BKE_displist.h
+++ b/source/blender/blenkernel/BKE_displist.h
@@ -87,13 +87,11 @@ bool BKE_displist_has_faces(const struct ListBase *lb);
 void BKE_displist_make_curveTypes(struct Depsgraph *depsgraph,
   const struct Scene *scene,
   struct Object *ob,
-  const bool for_render,
-  const bool for_orco);
+  const bool for_render);
 void BKE_displist_make_curveTypes_forRender(struct Depsgraph *depsgraph,
 const struct Scene *scene,
 struct Object *ob,
 struct ListBase *dispbase,
-const bool for_orco,
 struct Mesh **r_final);
 void BKE_displist_make_mball(struct Depsgraph *depsgraph, struct Scene *scene, 
struct Object *ob);
 void BKE_displist_make_mball_forRender(struct Depsgraph *depsgraph,
diff --git a/source/blender/blenkernel/BKE_spline.hh 
b/source/blender/blenkernel/BKE_spline.hh
index 0de9270bde1..cf77cc9b100 100644
--- a/source/blender/blenkernel/BKE_spline.hh
+++ b/source/blender/blenkernel/BKE_spline.hh
@@ -32,6 +32,7 @@
 #include "BKE_attribute_math.hh"
 
 struct Curve;
+struct ListBase;
 
 class Spline;
 using SplinePtr = std::unique_ptr;
@@ -546,4 +547,5 @@ struct CurveEval {
   void assert_valid_point_attributes() const;
 };
 
-std::unique_ptr curve_eval_from_dna_curve(const Curve );
+std::unique_ptr curve_eval_from_dna_curve(const Curve ,
+ const ListBase 
_list);
diff --git a/source/blender/blenkernel/intern/curve.c 
b/source/blender/blenkernel/intern/curve.c
index 462451fe72b..14135104907 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -442,6 +442,15 @@ ListBase *BKE_curve_editNurbs_get(Curve *cu)
   return NULL;
 }
 
+const ListBase *BKE_curve_editNurbs_get_for_read(const Curve *cu)
+{
+  if (cu->editnurb) {
+return >editnurb->nurbs;
+  }
+
+  return NULL;
+}
+
 short BKE_curve_type_get(const Curve *cu)
 {
   int type = cu->type;
@@ -5078,6 +5087,15 @@ ListBase *BKE_curve_nurbs_get(Curve *cu)
   return >nurb;
 }
 
+const ListBase *BKE_curve_nurbs_get_for_read(const Curve *cu)
+{
+  if (cu->editnurb) {
+return BKE_curve_editNurbs_get_for_read(cu);
+  }
+
+  return >nurb;
+}
+
 void 

[Bf-blender-cvs] [54241d1b777] curve-nodes-modifier: Fix crash with disabled nodes modifier

2021-07-12 Thread Hans Goudey
Commit: 54241d1b77727b567ffd476d67b6aeb01f1b9241
Author: Hans Goudey
Date:   Fri Jun 25 13:13:21 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB54241d1b77727b567ffd476d67b6aeb01f1b9241

Fix crash with disabled nodes modifier

===

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

===

diff --git a/source/blender/blenkernel/intern/displist.cc 
b/source/blender/blenkernel/intern/displist.cc
index cc52ff72ebc..63414c57ed4 100644
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@ -873,7 +873,7 @@ static void curve_calc_modifiers_post(Depsgraph *depsgraph,
 
   Mesh *modified = nullptr;
   GeometrySet geometry_set;
-  if (md->type == eModifierType_Nodes) {
+  if (md->type == eModifierType_Nodes && !BKE_modifier_is_enabled(scene, md, 
required_mode)) {
 geometry_set.replace_curve(curve_eval_from_dna_curve(*cu).release());
   }
   else {
@@ -886,7 +886,6 @@ static void curve_calc_modifiers_post(Depsgraph *depsgraph,
   float(*vertCos)[3] = nullptr;
   for (; md; md = md->next) {
 const ModifierTypeInfo *mti = 
BKE_modifier_get_info((ModifierType)md->type);
-
 if (!BKE_modifier_is_enabled(scene, md, required_mode)) {
   continue;
 }
@@ -900,13 +899,14 @@ static void curve_calc_modifiers_post(Depsgraph 
*depsgraph,
 MeshComponent _component = 
geometry_set.get_component_for_write();
 modified = mesh_component.release();
   }
-  /* Use an empty mesh instead of null.  */
-  if (modified == nullptr) {
-modified = BKE_mesh_new_nomain(0, 0, 0, 0, 0);
-  }
   continue;
 }
 
+/* Use an empty mesh instead of null.  */
+if (modified == nullptr) {
+  modified = BKE_mesh_new_nomain(0, 0, 0, 0, 0);
+}
+
 const bool need_normal = mti->dependsOnNormals != nullptr && 
mti->dependsOnNormals(md);
 
 if (mti->type == eModifierTypeType_OnlyDeform ||
@@ -966,25 +966,27 @@ static void curve_calc_modifiers_post(Depsgraph 
*depsgraph,
 MEM_freeN(vertCos);
   }
 
-  if (r_final) {
-/* XXX2.8(Sybren): make sure the face normals are recalculated as well */
-BKE_mesh_ensure_normals(modified);
-
-/* Special tweaks, needed since neither 
BKE_mesh_new_nomain_from_template() nor
- * BKE_mesh_new_nomain_from_curve_displist() properly duplicate mat 
info... */
-BLI_strncpy(modified->id.name, cu->id.name, sizeof(modified->id.name));
-*((short *)modified->id.name) = ID_ME;
-MEM_SAFE_FREE(modified->mat);
-/* Set flag which makes it easier to see what's going on in a debugger. */
-modified->id.tag |= LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT;
-modified->mat = (Material **)MEM_dupallocN(cu->mat);
-modified->totcol = cu->totcol;
-
-(*r_final) = modified;
-  }
-  else if (modified != nullptr) {
-/* Pretty stupid to generate that whole mesh if it's unused, yet we have 
to free it. */
-BKE_id_free(nullptr, modified);
+  if (modified != nullptr) {
+if (r_final) {
+  /* XXX2.8(Sybren): make sure the face normals are recalculated as well */
+  BKE_mesh_ensure_normals(modified);
+
+  /* Special tweaks, needed since neither 
BKE_mesh_new_nomain_from_template() nor
+   * BKE_mesh_new_nomain_from_curve_displist() properly duplicate mat 
info... */
+  BLI_strncpy(modified->id.name, cu->id.name, sizeof(modified->id.name));
+  *((short *)modified->id.name) = ID_ME;
+  MEM_SAFE_FREE(modified->mat);
+  /* Set flag which makes it easier to see what's going on in a debugger. 
*/
+  modified->id.tag |= LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT;
+  modified->mat = (Material **)MEM_dupallocN(cu->mat);
+  modified->totcol = cu->totcol;
+
+  (*r_final) = modified;
+}
+else {
+  /* Pretty stupid to generate that whole mesh if it's unused, yet we have 
to free it. */
+  BKE_id_free(nullptr, modified);
+}
   }
 
   if (r_geometry_set) {

___
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] [5c2267bbd48] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: 5c2267bbd48486a309830201cebcf2d3d02107b7
Author: Hans Goudey
Date:   Fri Jun 25 12:15:45 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB5c2267bbd48486a309830201cebcf2d3d02107b7

Merge branch 'master' into curve-nodes-modifier

===



===



___
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] [49fc3ddc5d2] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: 49fc3ddc5d203a7c4a2b0222ce59aac4d0d7ce3b
Author: Hans Goudey
Date:   Mon Jun 28 10:42:29 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB49fc3ddc5d203a7c4a2b0222ce59aac4d0d7ce3b

Merge branch 'master' into curve-nodes-modifier

===



===



___
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] [61bd814f2b5] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: 61bd814f2b5b1e6c280e75246c3c147385ddd040
Author: Hans Goudey
Date:   Mon Jun 28 13:26:34 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB61bd814f2b5b1e6c280e75246c3c147385ddd040

Merge branch 'master' into curve-nodes-modifier

===



===



___
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] [0bc58007543] curve-nodes-modifier: WIP: Geometry Nodes: Support nodes modifier on curve objects

2021-07-12 Thread Hans Goudey
Commit: 0bc580075430d8233248ae5c23d1abbf0d5818f4
Author: Hans Goudey
Date:   Mon Jun 14 01:14:30 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB0bc580075430d8233248ae5c23d1abbf0d5818f4

WIP: Geometry Nodes: Support nodes modifier on curve objects

With this commit, curve objects support the nodes modifier. The goal is
that nodes modifiers will read curve data as the original curve, unless
they are placed after a modifier that must tessalate the curve (convert
it to a mesh). Always converting to a mesh in that case  is basically
just a formalization of the behavior that was already present after
recent fixes for 2.8 versions last year and two years ago. For more
controlled explicit conversions between data types, using geometry
nodes makes so much more sense anyway.

TODO:
 - Add more code comments
 - Fix memory leak(s?)
 - Fix geometry components besides mesh don't display in viewport.

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

===

M   source/blender/blenkernel/BKE_displist.h
M   source/blender/blenkernel/intern/displist.cc
M   source/blender/editors/space_spreadsheet/space_spreadsheet.cc
M   source/blender/modifiers/intern/MOD_nodes.cc

===

diff --git a/source/blender/blenkernel/BKE_displist.h 
b/source/blender/blenkernel/BKE_displist.h
index a2d9bbcd011..b3726c26619 100644
--- a/source/blender/blenkernel/BKE_displist.h
+++ b/source/blender/blenkernel/BKE_displist.h
@@ -101,7 +101,7 @@ void BKE_displist_make_mball_forRender(struct Depsgraph 
*depsgraph,
struct Object *ob,
struct ListBase *dispbase);
 
-bool BKE_curve_calc_modifiers_pre(struct Depsgraph *depsgraph,
+void BKE_curve_calc_modifiers_pre(struct Depsgraph *depsgraph,
   const struct Scene *scene,
   struct Object *ob,
   struct ListBase *source_nurb,
diff --git a/source/blender/blenkernel/intern/displist.cc 
b/source/blender/blenkernel/intern/displist.cc
index 70355f3883d..34a1f956f41 100644
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@ -47,6 +47,7 @@
 #include "BKE_curve.h"
 #include "BKE_displist.h"
 #include "BKE_font.h"
+#include "BKE_geometry_set.hh"
 #include "BKE_key.h"
 #include "BKE_lattice.h"
 #include "BKE_lib_id.h"
@@ -55,6 +56,7 @@
 #include "BKE_mesh.h"
 #include "BKE_modifier.h"
 #include "BKE_object.h"
+#include "BKE_spline.hh"
 
 #include "BLI_sys_types.h"  // for intptr_t support
 
@@ -749,7 +751,7 @@ static ModifierData *curve_get_tessellate_point(const Scene 
*scene,
 /**
  * \return True if any modifier was applied.
  */
-bool BKE_curve_calc_modifiers_pre(Depsgraph *depsgraph,
+void BKE_curve_calc_modifiers_pre(Depsgraph *depsgraph,
   const Scene *scene,
   Object *ob,
   ListBase *source_nurb,
@@ -794,7 +796,6 @@ bool BKE_curve_calc_modifiers_pre(Depsgraph *depsgraph,
 
   const ModifierEvalContext mectx = {depsgraph, ob, apply_flag};
   ModifierData *pretessellatePoint = curve_get_tessellate_point(scene, ob, 
for_render, editmode);
-  bool modified = false;
 
   if (pretessellatePoint) {
 VirtualModifierData virtualModifierData;
@@ -814,7 +815,6 @@ bool BKE_curve_calc_modifiers_pre(Depsgraph *depsgraph,
   }
 
   mti->deformVerts(md, , nullptr, deformedVerts, numVerts);
-  modified = true;
 
   if (md == pretessellatePoint) {
 break;
@@ -833,36 +833,6 @@ bool BKE_curve_calc_modifiers_pre(Depsgraph *depsgraph,
   if (keyVerts) {
 MEM_freeN(keyVerts);
   }
-  return modified;
-}
-
-static float (*displist_vert_coords_alloc(ListBase *dispbase, int 
*r_vert_len))[3]
-{
-  *r_vert_len = 0;
-
-  LISTBASE_FOREACH (DispList *, dl, dispbase) {
-*r_vert_len += (dl->type == DL_INDEX3) ? dl->nr : dl->parts * dl->nr;
-  }
-
-  float(*allverts)[3] = (float(*)[3])MEM_mallocN(sizeof(float[3]) * 
(*r_vert_len), __func__);
-  float *fp = (float *)allverts;
-  LISTBASE_FOREACH (DispList *, dl, dispbase) {
-const int ofs = 3 * ((dl->type == DL_INDEX3) ? dl->nr : dl->parts * 
dl->nr);
-memcpy(fp, dl->verts, sizeof(float) * ofs);
-fp += ofs;
-  }
-
-  return allverts;
-}
-
-static void displist_vert_coords_apply(ListBase *dispbase, const float 
(*allverts)[3])
-{
-  const float *fp = (float *)allverts;
-  LISTBASE_FOREACH (DispList *, dl, dispbase) {
-int ofs = 3 * ((dl->type == DL_INDEX3) ? dl->nr : dl->parts * dl->nr);
-memcpy(dl->verts, fp, sizeof(float) * ofs);
-fp += ofs;
-  }
 }
 
 static void curve_calc_modifiers_post(Depsgraph *depsgraph,
@@ -870,8 +840,8 @@ static void curve_calc_modifiers_post(Depsgraph *depsgraph,
   Object 

[Bf-blender-cvs] [8e1239eedf5] curve-nodes-modifier: Enable new button in geometry node editor for curves

2021-07-12 Thread Hans Goudey
Commit: 8e1239eedf524f0b170278102fa0c819ca61ec01
Author: Hans Goudey
Date:   Fri Jun 25 10:56:02 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB8e1239eedf524f0b170278102fa0c819ca61ec01

Enable new button in geometry node editor for curves

===

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

===

diff --git a/release/scripts/startup/bl_operators/geometry_nodes.py 
b/release/scripts/startup/bl_operators/geometry_nodes.py
index 71ef89a066b..315d09d100c 100644
--- a/release/scripts/startup/bl_operators/geometry_nodes.py
+++ b/release/scripts/startup/bl_operators/geometry_nodes.py
@@ -42,8 +42,8 @@ def geometry_node_group_empty_new():
 def geometry_modifier_poll(context):
 ob = context.object
 
-# Test object support for geometry node modifier (No curve, or hair object 
support yet)
-if not ob or ob.type not in {'MESH', 'POINTCLOUD', 'VOLUME'}:
+# Test object support for geometry node modifier (No hair object support 
yet)
+if not ob or ob.type not in {'MESH', 'POINTCLOUD', 'VOLUME', 'CURVE'}:
 return False
 
 return True

___
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] [5ab4ce5856b] curve-nodes-modifier: Cleanup: Remove outdated comment

2021-07-12 Thread Hans Goudey
Commit: 5ab4ce5856b9008c588714409d6a033206d4e57f
Author: Hans Goudey
Date:   Fri Jun 25 10:57:26 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB5ab4ce5856b9008c588714409d6a033206d4e57f

Cleanup: Remove outdated comment

===

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

===

diff --git a/source/blender/blenkernel/intern/displist.cc 
b/source/blender/blenkernel/intern/displist.cc
index 52f7d88db2e..cc52ff72ebc 100644
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@ -748,9 +748,6 @@ static ModifierData *curve_get_tessellate_point(const Scene 
*scene,
   return pretessellatePoint;
 }
 
-/**
- * \return True if any modifier was applied.
- */
 void BKE_curve_calc_modifiers_pre(Depsgraph *depsgraph,
   const Scene *scene,
   Object *ob,

___
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] [bf68462387e] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: bf68462387e48df3e45aa2e6abef233d65ea1509
Author: Hans Goudey
Date:   Fri Jun 25 10:34:39 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rBbf68462387e48df3e45aa2e6abef233d65ea1509

Merge branch 'master' into curve-nodes-modifier

===



===

diff --cc source/blender/editors/space_spreadsheet/space_spreadsheet.cc
index 104854b684e,f8654500044..b0f1d2fbcb7
--- a/source/blender/editors/space_spreadsheet/space_spreadsheet.cc
+++ b/source/blender/editors/space_spreadsheet/space_spreadsheet.cc
@@@ -253,18 -293,31 +293,31 @@@ Object *spreadsheet_get_object_eval(con
}
const ID_Type id_type = GS(used_id->name);
if (id_type != ID_OB) {
- return {};
+ return nullptr;
}
Object *object_orig = (Object *)used_id;
 -  if (!ELEM(object_orig->type, OB_MESH, OB_POINTCLOUD, OB_VOLUME)) {
 +  if (!ELEM(object_orig->type, OB_MESH, OB_POINTCLOUD, OB_VOLUME, OB_CURVE)) {
- return {};
+ return nullptr;
}
+ 
Object *object_eval = DEG_get_evaluated_object(depsgraph, object_orig);
if (object_eval == nullptr) {
- return {};
+ return nullptr;
}
  
-   return data_source_from_geometry(C, object_eval);
+   return object_eval;
+ }
+ 
+ static std::unique_ptr get_data_source(const bContext *C)
+ {
+   Depsgraph *depsgraph = CTX_data_depsgraph_pointer(C);
+   SpaceSpreadsheet *sspreadsheet = CTX_wm_space_spreadsheet(C);
+ 
+   Object *object_eval = spreadsheet_get_object_eval(sspreadsheet, depsgraph);
+   if (object_eval) {
+ return data_source_from_geometry(C, object_eval);
+   }
+   return {};
  }
  
  static float get_column_width(const ColumnValues )

___
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] [18355a505df] curve-nodes-modifier: Fix error, assert for null mesh result at start

2021-07-12 Thread Hans Goudey
Commit: 18355a505df8bf575c26e349d71c444f578fb302
Author: Hans Goudey
Date:   Fri Jun 18 10:21:17 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB18355a505df8bf575c26e349d71c444f578fb302

Fix error, assert for null mesh result at start

===

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

===

diff --git a/source/blender/blenkernel/intern/displist.cc 
b/source/blender/blenkernel/intern/displist.cc
index 143dffa8ed7..a17255fa26d 100644
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@ -844,7 +844,10 @@ static void curve_calc_modifiers_post(Depsgraph *depsgraph,
   GeometrySet **r_geometry_set)
 {
   const Curve *cu = (const Curve *)ob->data;
-
+  if (r_final) {
+/* The result mesh should already be cleared by the caller. */
+BLI_assert(*r_final == nullptr);
+  }
   const bool editmode = (!for_render && (cu->editnurb || cu->editfont));
   const bool use_cache = !for_render;
 
@@ -867,14 +870,13 @@ static void curve_calc_modifiers_post(Depsgraph 
*depsgraph,
   ModifierData *md = pretessellatePoint == nullptr ?
  BKE_modifiers_get_virtual_modifierlist(ob, 
) :
  pretessellatePoint->next;
-
-  if (r_final && *r_final) {
-BKE_id_free(nullptr, *r_final);
+  if (md == nullptr) {
+return;
   }
 
   Mesh *modified = nullptr;
   GeometrySet geometry_set;
-  if (md && md->type == eModifierType_Nodes) {
+  if (md->type == eModifierType_Nodes) {
 geometry_set.replace_curve(curve_eval_from_dna_curve(*cu).release());
   }
   else {

___
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] [7008d183c40] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: 7008d183c403d206ced0e54fc07564145caab816
Author: Hans Goudey
Date:   Thu Jun 17 19:23:16 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB7008d183c403d206ced0e54fc07564145caab816

Merge branch 'master' into curve-nodes-modifier

===



===



___
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] [4a2eac8897a] curve-nodes-modifier: Fix order of assigning geometry set and BKE_object_eval_assign_data

2021-07-12 Thread Hans Goudey
Commit: 4a2eac8897af7adbfc5225eba6750d5c6cb22f07
Author: Hans Goudey
Date:   Wed Jun 16 17:30:33 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB4a2eac8897af7adbfc5225eba6750d5c6cb22f07

Fix order of assigning geometry set and BKE_object_eval_assign_data

===

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

===

diff --git a/source/blender/blenkernel/intern/displist.cc 
b/source/blender/blenkernel/intern/displist.cc
index 34a1f956f41..143dffa8ed7 100644
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@ -1606,6 +1606,10 @@ void BKE_displist_make_curveTypes(Depsgraph *depsgraph,
   do_makeDispListCurveTypes(
   depsgraph, scene, ob, dispbase, for_render, for_orco, _eval, 
_set);
 
+  if (mesh_eval != nullptr) {
+BKE_object_eval_assign_data(ob, _eval->id, true);
+  }
+
   if (geometry_set != nullptr) {
 MeshComponent _component = 
geometry_set->get_component_for_write();
 mesh_component.replace_mesh_but_keep_vertex_group_names(mesh_eval,
@@ -1613,10 +1617,6 @@ void BKE_displist_make_curveTypes(Depsgraph *depsgraph,
 ob->runtime.geometry_set_eval = geometry_set;
   }
 
-  if (mesh_eval != nullptr) {
-BKE_object_eval_assign_data(ob, _eval->id, true);
-  }
-
   boundbox_displist_object(ob);
 }

___
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] [8ceb07bd589] curve-nodes-modifier: Merge branch 'master' into curve-nodes-modifier

2021-07-12 Thread Hans Goudey
Commit: 8ceb07bd5892f35ea25047bd24fcdf89f368d2df
Author: Hans Goudey
Date:   Wed Jun 16 16:52:56 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rB8ceb07bd5892f35ea25047bd24fcdf89f368d2df

Merge branch 'master' into curve-nodes-modifier

===



===



___
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] [9213101936d] wayland: GHOST/wayland: try Wayland only when 'BLENDER_WAYLAND' is set

2021-07-12 Thread Christian Rauch
Commit: 9213101936d6aae47071c9d26f2d66fbc28036ba
Author: Christian Rauch
Date:   Thu Jun 3 21:12:09 2021 +0100
Branches: wayland
https://developer.blender.org/rB9213101936d6aae47071c9d26f2d66fbc28036ba

GHOST/wayland: try Wayland only when 'BLENDER_WAYLAND' is set

===

M   intern/ghost/intern/GHOST_ISystem.cpp

===

diff --git a/intern/ghost/intern/GHOST_ISystem.cpp 
b/intern/ghost/intern/GHOST_ISystem.cpp
index 7c12bfe0306..5ef942efb59 100644
--- a/intern/ghost/intern/GHOST_ISystem.cpp
+++ b/intern/ghost/intern/GHOST_ISystem.cpp
@@ -55,11 +55,13 @@ GHOST_TSuccess GHOST_ISystem::createSystem()
 m_system = new GHOST_SystemNULL();
 #elif defined(WITH_GHOST_X11) && defined(WITH_GHOST_WAYLAND)
 /* Special case, try Wayland, fall back to X11. */
-try {
-  m_system = new GHOST_SystemWayland();
-}
-catch (const std::runtime_error &) {
-  /* fallback to X11. */
+if (std::getenv("BLENDER_WAYLAND")) {
+  try {
+m_system = new GHOST_SystemWayland();
+  }
+  catch (const std::runtime_error &) {
+/* fallback to X11. */
+  }
 }
 if (!m_system) {
   m_system = new GHOST_SystemX11();

___
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] [a08766a5057] wayland: cmake: enable Wayland by default

2021-07-12 Thread Christian Rauch
Commit: a08766a5057d4790b8015ec48fd36597e9caad55
Author: Christian Rauch
Date:   Sun May 23 16:41:29 2021 +0100
Branches: wayland
https://developer.blender.org/rBa08766a5057d4790b8015ec48fd36597e9caad55

cmake: enable Wayland by default

===

M   CMakeLists.txt

===

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 91ac63d5e50..aeac178ffb8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -217,7 +217,7 @@ if(UNIX AND NOT (APPLE OR HAIKU))
   option(WITH_GHOST_X11 "Enable building Blender against X11 for windowing" ON)
   mark_as_advanced(WITH_GHOST_X11)
 
-  option(WITH_GHOST_WAYLAND "Enable building Blender against Wayland for 
windowing (under development)" OFF)
+  option(WITH_GHOST_WAYLAND "Enable building Blender against Wayland for 
windowing" ON)
   mark_as_advanced(WITH_GHOST_WAYLAND)
 endif()

___
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] [1ff52369bb3] wayland: GHOST/wayland: create temporary file manually for older kernel versions

2021-07-12 Thread Christian Rauch
Commit: 1ff52369bb3b99761f4823abac3c64510011910c
Author: Christian Rauch
Date:   Mon Jul 12 23:28:41 2021 +0100
Branches: wayland
https://developer.blender.org/rB1ff52369bb3b99761f4823abac3c64510011910c

GHOST/wayland: create temporary file manually for older kernel versions

===

M   intern/ghost/intern/GHOST_SystemWayland.cpp

===

diff --git a/intern/ghost/intern/GHOST_SystemWayland.cpp 
b/intern/ghost/intern/GHOST_SystemWayland.cpp
index 75a80de983d..4ed8241d5b1 100644
--- a/intern/ghost/intern/GHOST_SystemWayland.cpp
+++ b/intern/ghost/intern/GHOST_SystemWayland.cpp
@@ -49,6 +49,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #include 
 
@@ -1804,8 +1805,22 @@ GHOST_TSuccess 
GHOST_SystemWayland::setCustomCursorShape(uint8_t *bitmap,
   static const int32_t stride = sizex * 4; /* ARGB */
   cursor->file_buffer->size = size_t(stride * sizey);
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0)
   const int fd = memfd_create("blender-cursor-custom", MFD_CLOEXEC | 
MFD_ALLOW_SEALING);
   fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK);
+#else
+  char *tmpname;
+  asprintf(, "%s/%s", getenv("XDG_RUNTIME_DIR"), "blender-XX");
+  const int fd = mkostemp(tmpname, O_CLOEXEC);
+  if (fd >= 0) {
+unlink(tmpname);
+  }
+  free(tmpname);
+  if (fd < 0) {
+return GHOST_kFailure;
+  }
+#endif
+
   posix_fallocate(fd, 0, int32_t(cursor->file_buffer->size));
 
   cursor->file_buffer->data = mmap(

___
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] [49d560aedc7] wayland: Merge branch 'wl_default' into wayland

2021-07-12 Thread Christian Rauch
Commit: 49d560aedc7cfcfc684959d88a891462ac2d83ca
Author: Christian Rauch
Date:   Mon Jul 12 23:31:29 2021 +0100
Branches: wayland
https://developer.blender.org/rB49d560aedc7cfcfc684959d88a891462ac2d83ca

Merge branch 'wl_default' into wayland

===



===



___
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] [9213101936d] wayland: GHOST/wayland: try Wayland only when 'BLENDER_WAYLAND' is set

2021-07-12 Thread Christian Rauch
Commit: 9213101936d6aae47071c9d26f2d66fbc28036ba
Author: Christian Rauch
Date:   Thu Jun 3 21:12:09 2021 +0100
Branches: wayland
https://developer.blender.org/rB9213101936d6aae47071c9d26f2d66fbc28036ba

GHOST/wayland: try Wayland only when 'BLENDER_WAYLAND' is set

===

M   intern/ghost/intern/GHOST_ISystem.cpp

===

diff --git a/intern/ghost/intern/GHOST_ISystem.cpp 
b/intern/ghost/intern/GHOST_ISystem.cpp
index 7c12bfe0306..5ef942efb59 100644
--- a/intern/ghost/intern/GHOST_ISystem.cpp
+++ b/intern/ghost/intern/GHOST_ISystem.cpp
@@ -55,11 +55,13 @@ GHOST_TSuccess GHOST_ISystem::createSystem()
 m_system = new GHOST_SystemNULL();
 #elif defined(WITH_GHOST_X11) && defined(WITH_GHOST_WAYLAND)
 /* Special case, try Wayland, fall back to X11. */
-try {
-  m_system = new GHOST_SystemWayland();
-}
-catch (const std::runtime_error &) {
-  /* fallback to X11. */
+if (std::getenv("BLENDER_WAYLAND")) {
+  try {
+m_system = new GHOST_SystemWayland();
+  }
+  catch (const std::runtime_error &) {
+/* fallback to X11. */
+  }
 }
 if (!m_system) {
   m_system = new GHOST_SystemX11();

___
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] [1ff52369bb3] wayland: GHOST/wayland: create temporary file manually for older kernel versions

2021-07-12 Thread Christian Rauch
Commit: 1ff52369bb3b99761f4823abac3c64510011910c
Author: Christian Rauch
Date:   Mon Jul 12 23:28:41 2021 +0100
Branches: wayland
https://developer.blender.org/rB1ff52369bb3b99761f4823abac3c64510011910c

GHOST/wayland: create temporary file manually for older kernel versions

===

M   intern/ghost/intern/GHOST_SystemWayland.cpp

===

diff --git a/intern/ghost/intern/GHOST_SystemWayland.cpp 
b/intern/ghost/intern/GHOST_SystemWayland.cpp
index 75a80de983d..4ed8241d5b1 100644
--- a/intern/ghost/intern/GHOST_SystemWayland.cpp
+++ b/intern/ghost/intern/GHOST_SystemWayland.cpp
@@ -49,6 +49,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #include 
 
@@ -1804,8 +1805,22 @@ GHOST_TSuccess 
GHOST_SystemWayland::setCustomCursorShape(uint8_t *bitmap,
   static const int32_t stride = sizex * 4; /* ARGB */
   cursor->file_buffer->size = size_t(stride * sizey);
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0)
   const int fd = memfd_create("blender-cursor-custom", MFD_CLOEXEC | 
MFD_ALLOW_SEALING);
   fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK);
+#else
+  char *tmpname;
+  asprintf(, "%s/%s", getenv("XDG_RUNTIME_DIR"), "blender-XX");
+  const int fd = mkostemp(tmpname, O_CLOEXEC);
+  if (fd >= 0) {
+unlink(tmpname);
+  }
+  free(tmpname);
+  if (fd < 0) {
+return GHOST_kFailure;
+  }
+#endif
+
   posix_fallocate(fd, 0, int32_t(cursor->file_buffer->size));
 
   cursor->file_buffer->data = mmap(

___
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] [a08766a5057] wayland: cmake: enable Wayland by default

2021-07-12 Thread Christian Rauch
Commit: a08766a5057d4790b8015ec48fd36597e9caad55
Author: Christian Rauch
Date:   Sun May 23 16:41:29 2021 +0100
Branches: wayland
https://developer.blender.org/rBa08766a5057d4790b8015ec48fd36597e9caad55

cmake: enable Wayland by default

===

M   CMakeLists.txt

===

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 91ac63d5e50..aeac178ffb8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -217,7 +217,7 @@ if(UNIX AND NOT (APPLE OR HAIKU))
   option(WITH_GHOST_X11 "Enable building Blender against X11 for windowing" ON)
   mark_as_advanced(WITH_GHOST_X11)
 
-  option(WITH_GHOST_WAYLAND "Enable building Blender against Wayland for 
windowing (under development)" OFF)
+  option(WITH_GHOST_WAYLAND "Enable building Blender against Wayland for 
windowing" ON)
   mark_as_advanced(WITH_GHOST_WAYLAND)
 endif()

___
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] [f34cceaceb3] wayland: GHOST/wayland: create temporary file manually for older kernel versions

2021-07-12 Thread Christian Rauch
Commit: f34cceaceb364d354672d1bce6d97f943eccc53d
Author: Christian Rauch
Date:   Mon Jul 12 23:28:41 2021 +0100
Branches: wayland
https://developer.blender.org/rBf34cceaceb364d354672d1bce6d97f943eccc53d

GHOST/wayland: create temporary file manually for older kernel versions

===

M   intern/ghost/intern/GHOST_SystemWayland.cpp

===

diff --git a/intern/ghost/intern/GHOST_SystemWayland.cpp 
b/intern/ghost/intern/GHOST_SystemWayland.cpp
index 75a80de983d..4ed8241d5b1 100644
--- a/intern/ghost/intern/GHOST_SystemWayland.cpp
+++ b/intern/ghost/intern/GHOST_SystemWayland.cpp
@@ -49,6 +49,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #include 
 
@@ -1804,8 +1805,22 @@ GHOST_TSuccess 
GHOST_SystemWayland::setCustomCursorShape(uint8_t *bitmap,
   static const int32_t stride = sizex * 4; /* ARGB */
   cursor->file_buffer->size = size_t(stride * sizey);
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0)
   const int fd = memfd_create("blender-cursor-custom", MFD_CLOEXEC | 
MFD_ALLOW_SEALING);
   fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK);
+#else
+  char *tmpname;
+  asprintf(, "%s/%s", getenv("XDG_RUNTIME_DIR"), "blender-XX");
+  const int fd = mkostemp(tmpname, O_CLOEXEC);
+  if (fd >= 0) {
+unlink(tmpname);
+  }
+  free(tmpname);
+  if (fd < 0) {
+return GHOST_kFailure;
+  }
+#endif
+
   posix_fallocate(fd, 0, int32_t(cursor->file_buffer->size));
 
   cursor->file_buffer->data = mmap(

___
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] [d6b1d35bf87] master: Cleanup: Use C++ float3 type, use prefix for return argument

2021-07-12 Thread Hans Goudey
Commit: d6b1d35bf874fd42335cb09a6cbbdff615aa6362
Author: Hans Goudey
Date:   Mon Jul 12 17:24:45 2021 -0400
Branches: master
https://developer.blender.org/rBd6b1d35bf874fd42335cb09a6cbbdff615aa6362

Cleanup: Use C++ float3 type, use prefix for return argument

===

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

===

diff --git 
a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_circle.cc 
b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_circle.cc
index 1b9e9af3e2d..ae947b7aeed 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_circle.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_circle.cc
@@ -83,9 +83,10 @@ static bool colinear_f3_f3_f3(const float3 p1, const float3 
p2, const float3 p3)
 }
 
 static std::unique_ptr create_point_circle_curve(
-const float3 p1, const float3 p2, const float3 p3, const int resolution, 
float center_out[3])
+const float3 p1, const float3 p2, const float3 p3, const int resolution, 
float3 _center)
 {
   if (colinear_f3_f3_f3(p1, p2, p3)) {
+r_center = float3(0);
 return nullptr;
   }
 
@@ -118,6 +119,7 @@ static std::unique_ptr create_point_circle_curve(
 
   /* If the 3 planes do not intersect at one point, just return empty 
geometry. */
   if (!isect_plane_plane_plane_v3(plane_1, plane_2, plane_3, center)) {
+r_center = float3(0);
 return nullptr;
   }
 
@@ -141,7 +143,7 @@ static std::unique_ptr create_point_circle_curve(
   curve->add_spline(std::move(spline));
   curve->attributes.reallocate(curve->splines().size());
 
-  copy_v3_v3(center_out, center);
+  r_center = center;
   return curve;
 }
 
@@ -179,18 +181,13 @@ static void 
geo_node_curve_primitive_circle_exec(GeoNodeExecParams params)
 
   std::unique_ptr curve;
   if (mode == GEO_NODE_CURVE_PRIMITIVE_CIRCLE_TYPE_POINTS) {
-float center_point[3];
+float3 center_point;
 curve = create_point_circle_curve(params.extract_input("Point 1"),
   params.extract_input("Point 2"),
   params.extract_input("Point 3"),
   
std::max(params.extract_input("Resolution"), 3),
   center_point);
-if (curve) {
-  params.set_output("Center", float3(center_point));
-}
-else {
-  params.set_output("Center", float3(0, 0, 0));
-}
+params.set_output("Center", center_point);
   }
   else if (mode == GEO_NODE_CURVE_PRIMITIVE_CIRCLE_TYPE_RADIUS) {
 curve = 
create_radius_circle_curve(std::max(params.extract_input("Resolution"), 3),

___
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] [bfa3dc91b75] master: Depsgraph: Implement 'ID_RECALC_GEOMETRY_DEFORM'

2021-07-12 Thread Germano Cavalcante
Commit: bfa3dc91b75407b063f2ac991b176d98c050f92d
Author: Germano Cavalcante
Date:   Tue Jun 29 09:34:50 2021 -0300
Branches: master
https://developer.blender.org/rBbfa3dc91b75407b063f2ac991b176d98c050f92d

Depsgraph: Implement 'ID_RECALC_GEOMETRY_DEFORM'

During a mesh transformation in edit mode (Move, Rotate...), only part of
the batch cache needs to be updated.

This commit allows only update only the drawn batches seen in
`BKE_object_data_eval_batch_cache_deform_tag` if the new
`ID_RECALC_GEOMETRY_DEFORM` flag is used.

This new flag is used in the transforms operation for edit-mesh and
results in 1.6x overall speedup in heavy subdiv cube.

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

===

M   source/blender/blenkernel/BKE_mesh_types.h
M   source/blender/blenkernel/BKE_object.h
M   source/blender/blenkernel/intern/object_update.c
M   source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M   source/blender/depsgraph/intern/builder/deg_builder_relations.cc
M   source/blender/depsgraph/intern/depsgraph_tag.cc
M   source/blender/depsgraph/intern/eval/deg_eval_flush.cc
M   source/blender/depsgraph/intern/node/deg_node_operation.cc
M   source/blender/depsgraph/intern/node/deg_node_operation.h
M   source/blender/draw/intern/draw_cache_impl_mesh.c
M   source/blender/editors/transform/transform_convert_mesh.c
M   source/blender/makesdna/DNA_ID.h

===

diff --git a/source/blender/blenkernel/BKE_mesh_types.h 
b/source/blender/blenkernel/BKE_mesh_types.h
index aed8c44a031..b223d3872ff 100644
--- a/source/blender/blenkernel/BKE_mesh_types.h
+++ b/source/blender/blenkernel/BKE_mesh_types.h
@@ -27,6 +27,7 @@ typedef enum eMeshBatchDirtyMode {
   BKE_MESH_BATCH_DIRTY_SELECT,
   BKE_MESH_BATCH_DIRTY_SELECT_PAINT,
   BKE_MESH_BATCH_DIRTY_SHADING,
+  BKE_MESH_BATCH_DIRTY_DEFORM,
   BKE_MESH_BATCH_DIRTY_UVEDIT_ALL,
   BKE_MESH_BATCH_DIRTY_UVEDIT_SELECT,
 } eMeshBatchDirtyMode;
diff --git a/source/blender/blenkernel/BKE_object.h 
b/source/blender/blenkernel/BKE_object.h
index 4724e6dfab6..a16822fd7dd 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -374,6 +374,10 @@ void BKE_object_runtime_free_data(struct Object *object);
 
 void BKE_object_batch_cache_dirty_tag(struct Object *ob);
 void BKE_object_data_batch_cache_dirty_tag(struct ID *object_data);
+void BKE_object_data_eval_batch_cache_dirty_tag(struct Depsgraph *depsgraph,
+struct ID *object_data);
+void BKE_object_data_eval_batch_cache_deform_tag(struct Depsgraph *depsgraph,
+ struct ID *object_data);
 
 /* this function returns a superset of the scenes selection based on 
relationships */
 
diff --git a/source/blender/blenkernel/intern/object_update.c 
b/source/blender/blenkernel/intern/object_update.c
index 7e15ac5de5d..7cdea14e9bd 100644
--- a/source/blender/blenkernel/intern/object_update.c
+++ b/source/blender/blenkernel/intern/object_update.c
@@ -388,12 +388,31 @@ void BKE_object_batch_cache_dirty_tag(Object *ob)
   BKE_object_data_batch_cache_dirty_tag(ob->data);
 }
 
+void BKE_object_data_eval_batch_cache_dirty_tag(Depsgraph *depsgraph, ID 
*object_data)
+{
+  DEG_debug_print_eval(depsgraph, __func__, object_data->name, object_data);
+  BKE_object_data_batch_cache_dirty_tag(object_data);
+}
+
+void BKE_object_data_eval_batch_cache_deform_tag(Depsgraph *depsgraph, ID 
*object_data)
+{
+  DEG_debug_print_eval(depsgraph, __func__, object_data->name, object_data);
+  switch (GS(object_data->name)) {
+case ID_ME:
+  BKE_mesh_batch_cache_dirty_tag((Mesh *)object_data, 
BKE_MESH_BATCH_DIRTY_DEFORM);
+  break;
+default:
+  /* Only mesh is currently supported. Fallback to dirty all for other 
datablocks types. */
+  BKE_object_data_batch_cache_dirty_tag(object_data);
+  break;
+  }
+}
+
 void BKE_object_eval_uber_data(Depsgraph *depsgraph, Scene *scene, Object *ob)
 {
   DEG_debug_print_eval(depsgraph, __func__, ob->id.name, ob);
   BLI_assert(ob->type != OB_ARMATURE);
   BKE_object_handle_data_update(depsgraph, scene, ob);
-  BKE_object_batch_cache_dirty_tag(ob);
 }
 
 void BKE_object_eval_ptcache_reset(Depsgraph *depsgraph, Scene *scene, Object 
*object)
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc 
b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 56168739fae..c8179fb1eff 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -1495,7 +1495,7 @@ void 
DepsgraphNodeBuilder::build_object_data_geometry(Object *object, bool is_ob
   add_operation_node(
   >id,
   NodeType::BATCH_CACHE,
-  OperationCode::GEOMETRY_SELECT_UPDATE,
+  

[Bf-blender-cvs] [7b6c77aa848] master: Fix T88015: Round end caps on Freestyle lines not shaped as documented

2021-07-12 Thread Philipp Oeser
Commit: 7b6c77aa84803e4268406e394aa4556ebf7980b0
Author: Philipp Oeser
Date:   Fri May 21 13:42:13 2021 +0200
Branches: master
https://developer.blender.org/rB7b6c77aa84803e4268406e394aa4556ebf7980b0

Fix T88015: Round end caps on Freestyle lines not shaped as documented

This might be an artistic choice, but round end caps are supposed to be
a "half circle centered at the end point of the line" as documented
here: https://docs.blender.org/manual/en/dev/render/freestyle/
parameter_editor/line_style/strokes.html#caps

They are a shashed half circle instead.

This patch makes this pure half circles [and also fixes the case where
thickness of beginning was used for both beginning and end of the
stroke]

Maniphest Tasks: T88015

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

===

M   release/scripts/freestyle/modules/freestyle/shaders.py

===

diff --git a/release/scripts/freestyle/modules/freestyle/shaders.py 
b/release/scripts/freestyle/modules/freestyle/shaders.py
index 28b8aa9b23e..95e1c873657 100644
--- a/release/scripts/freestyle/modules/freestyle/shaders.py
+++ b/release/scripts/freestyle/modules/freestyle/shaders.py
@@ -1153,11 +1153,9 @@ class RoundCapShader(StrokeShader):
 return
 # calculate the number of additional vertices to form caps
 thickness_beg = sum(stroke[0].attribute.thickness)
-caplen_beg = thickness_beg / 2.0
 nverts_beg = max(5, int(thickness_beg))
 
 thickness_end = sum(stroke[-1].attribute.thickness)
-caplen_end = (thickness_end) / 2.0
 nverts_end = max(5, int(thickness_end))
 
 # adjust the total number of stroke vertices
@@ -1169,7 +1167,7 @@ class RoundCapShader(StrokeShader):
 # reshape the cap at the beginning of the stroke
 q, attr = buffer[1]
 p, attr = buffer[0]
-direction = (p - q).normalized() * caplen_beg
+direction = (p - q).normalized() * thickness_beg
 n = 1.0 / nverts_beg
 R, L = attr.thickness
 for t, svert in zip(range(nverts_beg, 0, -1), stroke):
@@ -1180,7 +1178,7 @@ class RoundCapShader(StrokeShader):
 # reshape the cap at the end of the stroke
 q, attr = buffer[-2]
 p, attr = buffer[-1]
-direction = (p - q).normalized() * caplen_beg
+direction = (p - q).normalized() * thickness_end
 n = 1.0 / nverts_end
 R, L = attr.thickness
 for t, svert in zip(range(nverts_end, 0, -1), reversed(stroke)):

___
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] [4ca249018d0] temp_bmesh_multires: More msvc errors

2021-07-12 Thread Joseph Eagar
Commit: 4ca249018d0775f838bba1ff2d34bf87bff5df81
Author: Joseph Eagar
Date:   Mon Jul 12 16:03:22 2021 -0400
Branches: temp_bmesh_multires
https://developer.blender.org/rB4ca249018d0775f838bba1ff2d34bf87bff5df81

More msvc errors

===

M   source/blender/blenlib/intern/BLI_mempool.c

===

diff --git a/source/blender/blenlib/intern/BLI_mempool.c 
b/source/blender/blenlib/intern/BLI_mempool.c
index 2df4e44b253..f751ff373c9 100644
--- a/source/blender/blenlib/intern/BLI_mempool.c
+++ b/source/blender/blenlib/intern/BLI_mempool.c
@@ -288,17 +288,17 @@ BLI_mempool *BLI_mempool_create_for_tasks(const unsigned 
int esize,
   int *r_esize,
   int flag)
 {
-  BLI_mempool *pool = BLI_mempool_create(esize, 0, pchunk, flag);
+  BLI_mempool *pool = BLI_mempool_create(esize, 0, (uint)pchunk, (uint)flag);
 
   // override pchunk, may not be a power of 2
-  pool->pchunk = pchunk;
-  pool->csize = pchunk * pool->esize;
+  pool->pchunk = (uint)pchunk;
+  pool->csize = (uint)pchunk * pool->esize;
 
   if (totelem % pchunk == 0) {
-pool->maxchunks = totelem / pchunk;
+pool->maxchunks = (uint)totelem / (uint)pchunk;
   }
   else {
-pool->maxchunks = totelem / pchunk + 1;
+pool->maxchunks = (uint)totelem / (uint)pchunk + 1;
   }
 
   if (totelem) {
@@ -330,7 +330,7 @@ BLI_mempool *BLI_mempool_create_for_tasks(const unsigned 
int esize,
 
   int i = (int)pool->pchunk - 1;
 
-  while (lastchunk && totalloc > totelem) {
+  while (lastchunk && totalloc > (uint)totelem) {
 if (i < 0) {
   BLI_mempool_chunk *lastchunk2 = NULL;
 
@@ -356,7 +356,7 @@ BLI_mempool *BLI_mempool_create_for_tasks(const unsigned 
int esize,
 i--;
   }
 
-  unsigned int ci = 0;
+  int ci = 0;
 
   chunk = pool->chunks;
   while (chunk && chunk != lastchunk) {
@@ -370,7 +370,7 @@ BLI_mempool *BLI_mempool_create_for_tasks(const unsigned 
int esize,
 
   *r_totchunk = ci;
   *r_chunks = (void **)chunks;
-  *r_esize = pool->esize;
+  *r_esize = (int)pool->esize;
 
   return pool;
 }

___
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] [d529e13d650] temp_bmesh_multires: Sculpt dyntopo: fix msvc compiler error

2021-07-12 Thread Joseph Eagar
Commit: d529e13d650b75f1f8808215e05eb9412c8810ce
Author: Joseph Eagar
Date:   Mon Jul 12 16:01:17 2021 -0400
Branches: temp_bmesh_multires
https://developer.blender.org/rBd529e13d650b75f1f8808215e05eb9412c8810ce

Sculpt dyntopo: fix msvc compiler error

===

M   source/blender/blenlib/BLI_mempool.h
M   source/blender/blenlib/intern/BLI_mempool.c
M   source/blender/bmesh/intern/bmesh_mesh_convert_threaded.c

===

diff --git a/source/blender/blenlib/BLI_mempool.h 
b/source/blender/blenlib/BLI_mempool.h
index 5b86f79cba9..b8e1a22b875 100644
--- a/source/blender/blenlib/BLI_mempool.h
+++ b/source/blender/blenlib/BLI_mempool.h
@@ -98,12 +98,12 @@ in chunks of size pchunk, and returned in r_chunks.
 */
 
 BLI_mempool *BLI_mempool_create_for_tasks(const unsigned int esize,
-  unsigned int totelem,
-  const unsigned int pchunk,
+  int totelem,
+  const int pchunk,
   void ***r_chunks,
-  unsigned int *r_totchunk,
-  unsigned int *r_esize,
-  unsigned int flag);
+  int *r_totchunk,
+  int *r_esize,
+  int flag);
 
 #ifdef __cplusplus
 }
diff --git a/source/blender/blenlib/intern/BLI_mempool.c 
b/source/blender/blenlib/intern/BLI_mempool.c
index 9f052e45599..2df4e44b253 100644
--- a/source/blender/blenlib/intern/BLI_mempool.c
+++ b/source/blender/blenlib/intern/BLI_mempool.c
@@ -281,12 +281,12 @@ to tasks.
 */
 
 BLI_mempool *BLI_mempool_create_for_tasks(const unsigned int esize,
-  unsigned int totelem,
-  const unsigned int pchunk,
+  int totelem,
+  const int pchunk,
   void ***r_chunks,
-  unsigned int *r_totchunk,
-  unsigned int *r_esize,
-  unsigned int flag)
+  int *r_totchunk,
+  int *r_esize,
+  int flag)
 {
   BLI_mempool *pool = BLI_mempool_create(esize, 0, pchunk, flag);
 
diff --git a/source/blender/bmesh/intern/bmesh_mesh_convert_threaded.c 
b/source/blender/bmesh/intern/bmesh_mesh_convert_threaded.c
index f44c83046ef..44957591b9f 100644
--- a/source/blender/bmesh/intern/bmesh_mesh_convert_threaded.c
+++ b/source/blender/bmesh/intern/bmesh_mesh_convert_threaded.c
@@ -341,33 +341,33 @@ BMesh *BM_mesh_bm_from_me_threaded(BMesh *bm,
   int vsize, esize, lsize, fsize;
 
   bm->vpool = BLI_mempool_create_for_tasks(sizeof(BMVert),
-   (uint)bm->totvert,
-   (uint)VCHUNK,
+   bm->totvert,
+   VCHUNK,
(void ***),
-   (uint),
-   (uint),
-   (uint)BLI_MEMPOOL_ALLOW_ITER);
+   ,
+   ,
+   BLI_MEMPOOL_ALLOW_ITER);
   bm->epool = BLI_mempool_create_for_tasks(sizeof(BMEdge),
-   (uint)bm->totedge,
-   (uint)ECHUNK,
+   bm->totedge,
+   ECHUNK,
(void ***),
-   (uint),
-   (uint),
-   (uint)BLI_MEMPOOL_ALLOW_ITER);
+   ,
+   ,
+   BLI_MEMPOOL_ALLOW_ITER);
   bm->lpool = BLI_mempool_create_for_tasks(sizeof(BMLoop),
-   (uint)bm->totloop,
-   (uint)LCHUNK,
+   bm->totloop,
+   LCHUNK,
(void ***),
-   (uint),
-   (uint),
-   

[Bf-blender-cvs] [13c05973e2e] wayland: GHOST/wayland: try Wayland only when 'BLENDER_WAYLAND' is set

2021-07-12 Thread Christian Rauch
Commit: 13c05973e2e53304e92b8fa910f7c831393444df
Author: Christian Rauch
Date:   Thu Jun 3 21:12:09 2021 +0100
Branches: wayland
https://developer.blender.org/rB13c05973e2e53304e92b8fa910f7c831393444df

GHOST/wayland: try Wayland only when 'BLENDER_WAYLAND' is set

===

M   intern/ghost/intern/GHOST_ISystem.cpp

===

diff --git a/intern/ghost/intern/GHOST_ISystem.cpp 
b/intern/ghost/intern/GHOST_ISystem.cpp
index 7c12bfe0306..5ef942efb59 100644
--- a/intern/ghost/intern/GHOST_ISystem.cpp
+++ b/intern/ghost/intern/GHOST_ISystem.cpp
@@ -55,11 +55,13 @@ GHOST_TSuccess GHOST_ISystem::createSystem()
 m_system = new GHOST_SystemNULL();
 #elif defined(WITH_GHOST_X11) && defined(WITH_GHOST_WAYLAND)
 /* Special case, try Wayland, fall back to X11. */
-try {
-  m_system = new GHOST_SystemWayland();
-}
-catch (const std::runtime_error &) {
-  /* fallback to X11. */
+if (std::getenv("BLENDER_WAYLAND")) {
+  try {
+m_system = new GHOST_SystemWayland();
+  }
+  catch (const std::runtime_error &) {
+/* fallback to X11. */
+  }
 }
 if (!m_system) {
   m_system = new GHOST_SystemX11();

___
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] [bf1afbcee94] wayland: cmake: enable Wayland by default

2021-07-12 Thread Christian Rauch
Commit: bf1afbcee94145f10ca3b8ffa35fc0b8a3964941
Author: Christian Rauch
Date:   Sun May 23 16:41:29 2021 +0100
Branches: wayland
https://developer.blender.org/rBbf1afbcee94145f10ca3b8ffa35fc0b8a3964941

cmake: enable Wayland by default

===

M   CMakeLists.txt

===

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 91ac63d5e50..aeac178ffb8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -217,7 +217,7 @@ if(UNIX AND NOT (APPLE OR HAIKU))
   option(WITH_GHOST_X11 "Enable building Blender against X11 for windowing" ON)
   mark_as_advanced(WITH_GHOST_X11)
 
-  option(WITH_GHOST_WAYLAND "Enable building Blender against Wayland for 
windowing (under development)" OFF)
+  option(WITH_GHOST_WAYLAND "Enable building Blender against Wayland for 
windowing" ON)
   mark_as_advanced(WITH_GHOST_WAYLAND)
 endif()

___
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] [bf1afbcee94] wl_default: cmake: enable Wayland by default

2021-07-12 Thread Christian Rauch
Commit: bf1afbcee94145f10ca3b8ffa35fc0b8a3964941
Author: Christian Rauch
Date:   Sun May 23 16:41:29 2021 +0100
Branches: wl_default
https://developer.blender.org/rBbf1afbcee94145f10ca3b8ffa35fc0b8a3964941

cmake: enable Wayland by default

===

M   CMakeLists.txt

===

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 91ac63d5e50..aeac178ffb8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -217,7 +217,7 @@ if(UNIX AND NOT (APPLE OR HAIKU))
   option(WITH_GHOST_X11 "Enable building Blender against X11 for windowing" ON)
   mark_as_advanced(WITH_GHOST_X11)
 
-  option(WITH_GHOST_WAYLAND "Enable building Blender against Wayland for 
windowing (under development)" OFF)
+  option(WITH_GHOST_WAYLAND "Enable building Blender against Wayland for 
windowing" ON)
   mark_as_advanced(WITH_GHOST_WAYLAND)
 endif()

___
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] [13c05973e2e] wl_default: GHOST/wayland: try Wayland only when 'BLENDER_WAYLAND' is set

2021-07-12 Thread Christian Rauch
Commit: 13c05973e2e53304e92b8fa910f7c831393444df
Author: Christian Rauch
Date:   Thu Jun 3 21:12:09 2021 +0100
Branches: wl_default
https://developer.blender.org/rB13c05973e2e53304e92b8fa910f7c831393444df

GHOST/wayland: try Wayland only when 'BLENDER_WAYLAND' is set

===

M   intern/ghost/intern/GHOST_ISystem.cpp

===

diff --git a/intern/ghost/intern/GHOST_ISystem.cpp 
b/intern/ghost/intern/GHOST_ISystem.cpp
index 7c12bfe0306..5ef942efb59 100644
--- a/intern/ghost/intern/GHOST_ISystem.cpp
+++ b/intern/ghost/intern/GHOST_ISystem.cpp
@@ -55,11 +55,13 @@ GHOST_TSuccess GHOST_ISystem::createSystem()
 m_system = new GHOST_SystemNULL();
 #elif defined(WITH_GHOST_X11) && defined(WITH_GHOST_WAYLAND)
 /* Special case, try Wayland, fall back to X11. */
-try {
-  m_system = new GHOST_SystemWayland();
-}
-catch (const std::runtime_error &) {
-  /* fallback to X11. */
+if (std::getenv("BLENDER_WAYLAND")) {
+  try {
+m_system = new GHOST_SystemWayland();
+  }
+  catch (const std::runtime_error &) {
+/* fallback to X11. */
+  }
 }
 if (!m_system) {
   m_system = new GHOST_SystemX11();

___
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] [bf1afbcee94] wl_default2: cmake: enable Wayland by default

2021-07-12 Thread Christian Rauch
Commit: bf1afbcee94145f10ca3b8ffa35fc0b8a3964941
Author: Christian Rauch
Date:   Sun May 23 16:41:29 2021 +0100
Branches: wl_default2
https://developer.blender.org/rBbf1afbcee94145f10ca3b8ffa35fc0b8a3964941

cmake: enable Wayland by default

===

M   CMakeLists.txt

===

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 91ac63d5e50..aeac178ffb8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -217,7 +217,7 @@ if(UNIX AND NOT (APPLE OR HAIKU))
   option(WITH_GHOST_X11 "Enable building Blender against X11 for windowing" ON)
   mark_as_advanced(WITH_GHOST_X11)
 
-  option(WITH_GHOST_WAYLAND "Enable building Blender against Wayland for 
windowing (under development)" OFF)
+  option(WITH_GHOST_WAYLAND "Enable building Blender against Wayland for 
windowing" ON)
   mark_as_advanced(WITH_GHOST_WAYLAND)
 endif()

___
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] [13c05973e2e] wl_default2: GHOST/wayland: try Wayland only when 'BLENDER_WAYLAND' is set

2021-07-12 Thread Christian Rauch
Commit: 13c05973e2e53304e92b8fa910f7c831393444df
Author: Christian Rauch
Date:   Thu Jun 3 21:12:09 2021 +0100
Branches: wl_default2
https://developer.blender.org/rB13c05973e2e53304e92b8fa910f7c831393444df

GHOST/wayland: try Wayland only when 'BLENDER_WAYLAND' is set

===

M   intern/ghost/intern/GHOST_ISystem.cpp

===

diff --git a/intern/ghost/intern/GHOST_ISystem.cpp 
b/intern/ghost/intern/GHOST_ISystem.cpp
index 7c12bfe0306..5ef942efb59 100644
--- a/intern/ghost/intern/GHOST_ISystem.cpp
+++ b/intern/ghost/intern/GHOST_ISystem.cpp
@@ -55,11 +55,13 @@ GHOST_TSuccess GHOST_ISystem::createSystem()
 m_system = new GHOST_SystemNULL();
 #elif defined(WITH_GHOST_X11) && defined(WITH_GHOST_WAYLAND)
 /* Special case, try Wayland, fall back to X11. */
-try {
-  m_system = new GHOST_SystemWayland();
-}
-catch (const std::runtime_error &) {
-  /* fallback to X11. */
+if (std::getenv("BLENDER_WAYLAND")) {
+  try {
+m_system = new GHOST_SystemWayland();
+  }
+  catch (const std::runtime_error &) {
+/* fallback to X11. */
+  }
 }
 if (!m_system) {
   m_system = new GHOST_SystemX11();

___
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] [13c05973e2e] wl_default: GHOST/wayland: try Wayland only when 'BLENDER_WAYLAND' is set

2021-07-12 Thread Christian Rauch
Commit: 13c05973e2e53304e92b8fa910f7c831393444df
Author: Christian Rauch
Date:   Thu Jun 3 21:12:09 2021 +0100
Branches: wl_default
https://developer.blender.org/rB13c05973e2e53304e92b8fa910f7c831393444df

GHOST/wayland: try Wayland only when 'BLENDER_WAYLAND' is set

===

M   intern/ghost/intern/GHOST_ISystem.cpp

===

diff --git a/intern/ghost/intern/GHOST_ISystem.cpp 
b/intern/ghost/intern/GHOST_ISystem.cpp
index 7c12bfe0306..5ef942efb59 100644
--- a/intern/ghost/intern/GHOST_ISystem.cpp
+++ b/intern/ghost/intern/GHOST_ISystem.cpp
@@ -55,11 +55,13 @@ GHOST_TSuccess GHOST_ISystem::createSystem()
 m_system = new GHOST_SystemNULL();
 #elif defined(WITH_GHOST_X11) && defined(WITH_GHOST_WAYLAND)
 /* Special case, try Wayland, fall back to X11. */
-try {
-  m_system = new GHOST_SystemWayland();
-}
-catch (const std::runtime_error &) {
-  /* fallback to X11. */
+if (std::getenv("BLENDER_WAYLAND")) {
+  try {
+m_system = new GHOST_SystemWayland();
+  }
+  catch (const std::runtime_error &) {
+/* fallback to X11. */
+  }
 }
 if (!m_system) {
   m_system = new GHOST_SystemX11();

___
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] [bf1afbcee94] wl_default: cmake: enable Wayland by default

2021-07-12 Thread Christian Rauch
Commit: bf1afbcee94145f10ca3b8ffa35fc0b8a3964941
Author: Christian Rauch
Date:   Sun May 23 16:41:29 2021 +0100
Branches: wl_default
https://developer.blender.org/rBbf1afbcee94145f10ca3b8ffa35fc0b8a3964941

cmake: enable Wayland by default

===

M   CMakeLists.txt

===

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 91ac63d5e50..aeac178ffb8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -217,7 +217,7 @@ if(UNIX AND NOT (APPLE OR HAIKU))
   option(WITH_GHOST_X11 "Enable building Blender against X11 for windowing" ON)
   mark_as_advanced(WITH_GHOST_X11)
 
-  option(WITH_GHOST_WAYLAND "Enable building Blender against Wayland for 
windowing (under development)" OFF)
+  option(WITH_GHOST_WAYLAND "Enable building Blender against Wayland for 
windowing" ON)
   mark_as_advanced(WITH_GHOST_WAYLAND)
 endif()

___
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   >