[Bf-blender-cvs] [22c4323b216] master: Cleanup: remove commented code
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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!)
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
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
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
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
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"
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
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
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
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
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
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)
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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'
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
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
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
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
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
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
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
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
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
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
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
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