[Bf-blender-cvs] [0ce18561bc8] master: Fix (unreported) uv unwrap selected was splitting selection
Commit: 0ce18561bc82f533d248f0f7268263abc0fc6fe1 Author: Chris Blackbourn Date: Fri Nov 25 15:48:17 2022 +1300 Branches: master https://developer.blender.org/rB0ce18561bc82f533d248f0f7268263abc0fc6fe1 Fix (unreported) uv unwrap selected was splitting selection Add support for `pin_unselected` in new UV Packing API. Regression introduced by API change in rBe3075f3cf7ce. === M source/blender/editors/include/ED_uvedit.h M source/blender/editors/uvedit/uvedit_islands.cc M source/blender/editors/uvedit/uvedit_unwrap_ops.c === diff --git a/source/blender/editors/include/ED_uvedit.h b/source/blender/editors/include/ED_uvedit.h index 5fea8711a84..4a7081baa38 100644 --- a/source/blender/editors/include/ED_uvedit.h +++ b/source/blender/editors/include/ED_uvedit.h @@ -353,6 +353,7 @@ struct UVPackIsland_Params { uint use_seams : 1; uint correct_aspect : 1; bool ignore_pinned; /* Ignore islands which have any pinned UVs. */ + bool pin_unselected; /* Treat unselected UVs as if they were pinned. */ eUVPackIsland_MarginMethod margin_method; /* Which formula to use when scaling island margin. */ float margin; /* Additional space to add around each island. */ }; diff --git a/source/blender/editors/uvedit/uvedit_islands.cc b/source/blender/editors/uvedit/uvedit_islands.cc index d8e10435146..61fd1c53b95 100644 --- a/source/blender/editors/uvedit/uvedit_islands.cc +++ b/source/blender/editors/uvedit/uvedit_islands.cc @@ -618,7 +618,7 @@ static BoxPack *pack_islands_params(const blender::Vector &island_ return box_array; } -static bool island_has_pins(FaceIsland *island) +static bool island_has_pins(const Scene *scene, FaceIsland *island, const bool pin_unselected) { BMLoop *l; BMIter iter; @@ -629,6 +629,9 @@ static bool island_has_pins(FaceIsland *island) if (luv->flag & MLOOPUV_PINNED) { return true; } + if (pin_unselected && !uvedit_uv_select_test(scene, l, cd_loop_uv_offset)) { +return true; + } } } return false; @@ -675,12 +678,18 @@ void ED_uvedit_pack_islands_multi(const Scene *scene, } } +bool only_selected_faces = params->only_selected_faces; +bool only_selected_uvs = params->only_selected_uvs; +if (params->ignore_pinned && params->pin_unselected) { + only_selected_faces = false; + only_selected_uvs = false; +} ListBase island_list = {nullptr}; bm_mesh_calc_uv_islands(scene, bm, &island_list, -params->only_selected_faces, -params->only_selected_uvs, +only_selected_faces, +only_selected_uvs, params->use_seams, aspect_y, cd_loop_uv_offset); @@ -688,7 +697,7 @@ void ED_uvedit_pack_islands_multi(const Scene *scene, /* Remove from linked list and append to blender::Vector. */ LISTBASE_FOREACH_MUTABLE (struct FaceIsland *, island, &island_list) { BLI_remlink(&island_list, island); - if (params->ignore_pinned && island_has_pins(island)) { + if (params->ignore_pinned && island_has_pins(scene, island, params->pin_unselected)) { MEM_freeN(island->faces); MEM_freeN(island); continue; diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c index ce9a083dfeb..b310132bdd2 100644 --- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c +++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c @@ -1100,6 +1100,7 @@ static int pack_islands_exec(bContext *C, wmOperator *op) .use_seams = !options.topology_from_uvs || options.topology_from_uvs_use_seams, .correct_aspect = options.correct_aspect, .ignore_pinned = false, + .pin_unselected = options.pin_unselected, .margin_method = RNA_enum_get(op->ptr, "margin_method"), .margin = RNA_float_get(op->ptr, "margin"), }; @@ -1878,6 +1879,7 @@ void ED_uvedit_live_unwrap(const Scene *scene, Object **objects, int objects_len .use_seams = !options.topology_from_uvs || options.topology_from_uvs_use_seams, .correct_aspect = options.correct_aspect, .ignore_pinned = true, +.pin_unselected = options.pin_unselected, .margin_method = ED_UVPACK_MARGIN_SCALED, .margin = scene->toolsettings->uvcalc_margin, }; @@ -2025,6 +2027,7 @@ static int unwrap_exec(bContext *C, wmOperator *op) .use_seams = !options.topology_from_uvs || options.topology_from_uvs_use_seams, .correct_aspect = options.correct_aspect, .ignore_pinned = true, + .pin_unselected = options.pin_u
[Bf-blender-cvs] [851906744e6] master: Merge branch 'blender-v3.4-release'
Commit: 851906744e61af52c652e1f05601da6bfea6aedd Author: Hans Goudey Date: Thu Nov 24 15:14:12 2022 -0600 Branches: master https://developer.blender.org/rB851906744e61af52c652e1f05601da6bfea6aedd Merge branch 'blender-v3.4-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] [c4cfa1b23ee] blender-v3.4-release: Fix T102611: Unable to change file output node sockets from python
Commit: c4cfa1b23ee661a941e46c52e9fb8df1e43e74d4 Author: Hans Goudey Date: Fri Nov 18 14:01:40 2022 -0600 Branches: blender-v3.4-release https://developer.blender.org/rBc4cfa1b23ee661a941e46c52e9fb8df1e43e74d4 Fix T102611: Unable to change file output node sockets from python Similar to 84c66fe9db932b82ebf === M source/blender/makesrna/intern/rna_nodetree.c === diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index c32e5b7d4db..c8c76061f37 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -2419,7 +2419,7 @@ static void rna_Node_name_set(PointerRNA *ptr, const char *value) static bool allow_changing_sockets(bNode *node) { - return ELEM(node->type, NODE_CUSTOM, SH_NODE_SCRIPT); + return ELEM(node->type, NODE_CUSTOM, SH_NODE_SCRIPT, CMP_NODE_OUTPUT_FILE); } static bNodeSocket *rna_Node_inputs_new(ID *id, ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [0710ec485e4] master: Cleanup: Remove unused IMB tile cache code (part 2)
Commit: 0710ec485e4075bee9b1d1f70bed38c6ecb189f3 Author: Jesse Yurkovich Date: Thu Nov 24 12:40:18 2022 -0800 Branches: master https://developer.blender.org/rB0710ec485e4075bee9b1d1f70bed38c6ecb189f3 Cleanup: Remove unused IMB tile cache code (part 2) Missed in the first commit[1]. Initially it was reported that the `flags` parameter was unused on `imb_cache_filename` but it turns out another swath of code was unused related to that same function. Clean this up now too. [1] 38573d515e49f3e0b22b0e58c7b0357bae107a4d === M source/blender/imbuf/IMB_imbuf_types.h M source/blender/imbuf/intern/readimage.c === diff --git a/source/blender/imbuf/IMB_imbuf_types.h b/source/blender/imbuf/IMB_imbuf_types.h index 0851aaa8669..06f7770d267 100644 --- a/source/blender/imbuf/IMB_imbuf_types.h +++ b/source/blender/imbuf/IMB_imbuf_types.h @@ -233,8 +233,6 @@ typedef struct ImBuf { ImbFormatOptions foptions; /** filename associated with this image */ char name[IMB_FILENAME_SIZE]; - /** full filename used for reading from cache */ - char cachename[IMB_FILENAME_SIZE]; /* memory cache limiter */ /** handle for cache limiter */ diff --git a/source/blender/imbuf/intern/readimage.c b/source/blender/imbuf/intern/readimage.c index 36714fa90a2..c9b6a6f6f56 100644 --- a/source/blender/imbuf/intern/readimage.c +++ b/source/blender/imbuf/intern/readimage.c @@ -186,34 +186,22 @@ ImBuf *IMB_loadifffile( return ibuf; } -static void imb_cache_filename(char *filepath, const char *name, int flags) -{ - BLI_strncpy(filepath, name, IMB_FILENAME_SIZE); -} - ImBuf *IMB_loadiffname(const char *filepath, int flags, char colorspace[IM_MAX_SPACE]) { ImBuf *ibuf; int file; - char filepath_tx[IMB_FILENAME_SIZE]; BLI_assert(!BLI_path_is_rel(filepath)); - imb_cache_filename(filepath_tx, filepath, flags); - - file = BLI_open(filepath_tx, O_BINARY | O_RDONLY, 0); + file = BLI_open(filepath, O_BINARY | O_RDONLY, 0); if (file == -1) { return NULL; } - ibuf = IMB_loadifffile(file, filepath, flags, colorspace, filepath_tx); + ibuf = IMB_loadifffile(file, filepath, flags, colorspace, filepath); if (ibuf) { BLI_strncpy(ibuf->name, filepath, sizeof(ibuf->name)); -BLI_strncpy(ibuf->cachename, filepath_tx, sizeof(ibuf->cachename)); -for (int a = 1; a < ibuf->miptot; a++) { - BLI_strncpy(ibuf->mipmap[a - 1]->cachename, filepath_tx, sizeof(ibuf->cachename)); -} } close(file); @@ -280,23 +268,19 @@ ImBuf *IMB_testiffname(const char *filepath, int flags) { ImBuf *ibuf; int file; - char filepath_tx[IMB_FILENAME_SIZE]; char colorspace[IM_MAX_SPACE] = "\0"; BLI_assert(!BLI_path_is_rel(filepath)); - imb_cache_filename(filepath_tx, filepath, flags); - - file = BLI_open(filepath_tx, O_BINARY | O_RDONLY, 0); + file = BLI_open(filepath, O_BINARY | O_RDONLY, 0); if (file == -1) { return NULL; } - ibuf = IMB_loadifffile(file, filepath, flags | IB_test | IB_multilayer, colorspace, filepath_tx); + ibuf = IMB_loadifffile(file, filepath, flags | IB_test | IB_multilayer, colorspace, filepath); if (ibuf) { BLI_strncpy(ibuf->name, filepath, sizeof(ibuf->name)); -BLI_strncpy(ibuf->cachename, filepath_tx, sizeof(ibuf->cachename)); } close(file); ___ 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] [5dde38214fe] refactor-mesh-uv-map-generic: Cleanup: clang-format
Commit: 5dde38214fe51fce52d2d72b92918816cdaff91a Author: Martijn Versteegh Date: Thu Nov 24 21:36:11 2022 +0100 Branches: refactor-mesh-uv-map-generic https://developer.blender.org/rB5dde38214fe51fce52d2d72b92918816cdaff91a Cleanup: clang-format === M source/blender/bmesh/intern/bmesh_mesh_convert.cc M source/blender/draw/intern/draw_manager_data.cc M source/blender/editors/sculpt_paint/paint_image_proj.cc M source/blender/editors/uvedit/uvedit_ops.c M source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_ico_sphere.cc M source/blender/python/bmesh/bmesh_py_types_customdata.c === diff --git a/source/blender/bmesh/intern/bmesh_mesh_convert.cc b/source/blender/bmesh/intern/bmesh_mesh_convert.cc index 08d971f48be..58ae011e093 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc +++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc @@ -151,33 +151,33 @@ void BM_mesh_bm_from_me(BMesh *bm, const Mesh *me, const struct BMeshFromMeshPar blender::Vector temporary_layers_to_delete; - for (size_t l = 0; l < CustomData_number_of_layers(&mesh_ldata, CD_PROP_FLOAT2); l++) - { + for (size_t l = 0; l < CustomData_number_of_layers(&mesh_ldata, CD_PROP_FLOAT2); l++) { char name[MAX_CUSTOMDATA_LAYER_NAME]; -get_uv_map_vert_selection_name(CustomData_get_layer_name(&mesh_ldata, CD_PROP_FLOAT2, l), name); -if (CustomData_get_named_layer_index(&mesh_ldata, CD_PROP_BOOL, name) < 0) -{ -CustomData_add_layer_named(&mesh_ldata, CD_PROP_BOOL, CD_SET_DEFAULT, nullptr, me->totloop, name); -temporary_layers_to_delete.append(std::string(name)); +get_uv_map_vert_selection_name(CustomData_get_layer_name(&mesh_ldata, CD_PROP_FLOAT2, l), + name); +if (CustomData_get_named_layer_index(&mesh_ldata, CD_PROP_BOOL, name) < 0) { + CustomData_add_layer_named( + &mesh_ldata, CD_PROP_BOOL, CD_SET_DEFAULT, nullptr, me->totloop, name); + temporary_layers_to_delete.append(std::string(name)); } -get_uv_map_edge_selection_name(CustomData_get_layer_name(&mesh_ldata, CD_PROP_FLOAT2, l), name); -if (CustomData_get_named_layer_index(&mesh_ldata, CD_PROP_BOOL, name) < 0) -{ -CustomData_add_layer_named(&mesh_ldata, CD_PROP_BOOL, CD_SET_DEFAULT, nullptr, me->totloop, name); -temporary_layers_to_delete.append(std::string(name)); +get_uv_map_edge_selection_name(CustomData_get_layer_name(&mesh_ldata, CD_PROP_FLOAT2, l), + name); +if (CustomData_get_named_layer_index(&mesh_ldata, CD_PROP_BOOL, name) < 0) { + CustomData_add_layer_named( + &mesh_ldata, CD_PROP_BOOL, CD_SET_DEFAULT, nullptr, me->totloop, name); + temporary_layers_to_delete.append(std::string(name)); } get_uv_map_pin_name(CustomData_get_layer_name(&mesh_ldata, CD_PROP_FLOAT2, l), name); -if (CustomData_get_named_layer_index(&mesh_ldata, CD_PROP_BOOL, name) < 0) -{ -CustomData_add_layer_named(&mesh_ldata, CD_PROP_BOOL, CD_SET_DEFAULT, nullptr, me->totloop, name); -temporary_layers_to_delete.append(std::string(name)); +if (CustomData_get_named_layer_index(&mesh_ldata, CD_PROP_BOOL, name) < 0) { + CustomData_add_layer_named( + &mesh_ldata, CD_PROP_BOOL, CD_SET_DEFAULT, nullptr, me->totloop, name); + temporary_layers_to_delete.append(std::string(name)); } } BLI_SCOPED_DEFER([&]() { -for (auto n : temporary_layers_to_delete) -{ -CustomData_free_layer_named(&mesh_ldata, n.c_str(), me->totloop); +for (auto n : temporary_layers_to_delete) { + CustomData_free_layer_named(&mesh_ldata, n.c_str(), me->totloop); } MEM_SAFE_FREE(mesh_vdata.layers); diff --git a/source/blender/draw/intern/draw_manager_data.cc b/source/blender/draw/intern/draw_manager_data.cc index b398acd9aab..dfbe8355cb3 100644 --- a/source/blender/draw/intern/draw_manager_data.cc +++ b/source/blender/draw/intern/draw_manager_data.cc @@ -695,7 +695,7 @@ static void drw_call_obinfos_init(DRWObjectInfos *ob_infos, Object *ob) drw_call_calc_orco(ob, ob_infos->orcotexfac); /* Random float value. */ uint random = (DST.dupli_source) ? - DST.dupli_source->random_id : +DST.dupli_source->random_id : /* TODO(fclem): this is rather costly to do at runtime. Maybe we can * put it in ob->runtime and make depsgraph ensure it is up to date. */ BLI_hash_int_2d(BLI_hash_string(ob->id.name + 2), 0); diff --git a/source/blender/editors/sculpt_paint/paint_image_proj.cc b/source/blender/editors/sculpt_paint/paint_image_proj.cc index 60728f26e79..45ffdcebc08 100644 --- a/source/blender/editors/sculpt_paint/paint_image_proj.cc +++ b/source/blender/edit
[Bf-blender-cvs] [2d5c8b0a9cb] refactor-mesh-uv-map-generic: Merge branch 'master' into refactor-mesh-uv-map-generic
Commit: 2d5c8b0a9cb02db756fb252f49229a17cbc4afb8 Author: Martijn Versteegh Date: Thu Nov 24 21:28:31 2022 +0100 Branches: refactor-mesh-uv-map-generic https://developer.blender.org/rB2d5c8b0a9cb02db756fb252f49229a17cbc4afb8 Merge branch 'master' into refactor-mesh-uv-map-generic === === diff --cc source/blender/blenkernel/intern/mesh.cc index 35ac5634af9,02d375bd782..d26f381cbdc --- a/source/blender/blenkernel/intern/mesh.cc +++ b/source/blender/blenkernel/intern/mesh.cc @@@ -276,12 -275,10 +276,14 @@@ static void mesh_blend_write(BlendWrite CustomData_blend_write_prepare(mesh->edata, edge_layers, names_to_skip); CustomData_blend_write_prepare(mesh->ldata, loop_layers, names_to_skip); CustomData_blend_write_prepare(mesh->pdata, poly_layers, names_to_skip); + +if (!BLO_write_is_undo(writer)) { + BKE_mesh_legacy_convert_uvs_to_struct(mesh, temp_arrays_for_legacy_format, loop_layers); +} } + mesh->runtime = nullptr; + BLO_write_id_struct(writer, Mesh, id_address, &mesh->id); BKE_id_blend_write(writer, &mesh->id); diff --cc source/blender/bmesh/intern/bmesh_interp.c index fdae1d71f04,8ceefc94d8a..ab7978d7d70 --- a/source/blender/bmesh/intern/bmesh_interp.c +++ b/source/blender/bmesh/intern/bmesh_interp.c @@@ -874,58 -864,17 +866,54 @@@ void BM_data_layer_add_named(BMesh *bm } } +void BM_data_layer_ensure_named(BMesh *bm, CustomData *data, int type, const char *name) +{ + if (CustomData_get_named_layer_index(data, type, name) == -1) { +BM_data_layer_add_named(bm, data, type, name); + } +} + +void BM_uv_map_ensure_selection_pin_attributes(BMesh *bm, const char *uv_map_name) +{ + char name[MAX_CUSTOMDATA_LAYER_NAME]; + BM_data_layer_ensure_named( + bm, &bm->ldata, CD_PROP_BOOL, get_uv_map_vert_selection_name(uv_map_name, name)); + BM_data_layer_ensure_named( + bm, &bm->ldata, CD_PROP_BOOL, get_uv_map_edge_selection_name(uv_map_name, name)); + BM_data_layer_ensure_named(bm, &bm->ldata, CD_PROP_BOOL, get_uv_map_pin_name(uv_map_name, name)); +} + +void BM_uv_map_ensure_vert_selection_attribute(BMesh *bm, const char *uv_map_name) +{ + char name[MAX_CUSTOMDATA_LAYER_NAME]; + BM_data_layer_ensure_named( + bm, &bm->ldata, CD_PROP_BOOL, get_uv_map_vert_selection_name(uv_map_name, name)); +} + +void BM_uv_map_ensure_edge_selection_attribute(BMesh *bm, const char *uv_map_name) +{ + char name[MAX_CUSTOMDATA_LAYER_NAME]; + BM_data_layer_ensure_named( + bm, &bm->ldata, CD_PROP_BOOL, get_uv_map_edge_selection_name(uv_map_name, name)); +} + +void BM_uv_map_ensure_pin_attribute(BMesh *bm, const char *uv_map_name) +{ + char name[MAX_CUSTOMDATA_LAYER_NAME]; + BM_data_layer_ensure_named(bm, &bm->ldata, CD_PROP_BOOL, get_uv_map_pin_name(uv_map_name, name)); +} + void BM_data_layer_free(BMesh *bm, CustomData *data, int type) { - CustomData olddata; - bool has_layer; - - olddata = *data; + CustomData olddata = *data; olddata.layers = (olddata.layers) ? MEM_dupallocN(olddata.layers) : NULL; - - /* the pool is now owned by olddata and must not be shared */ + /* The pool is now owned by `olddata` and must not be shared. */ data->pool = NULL; - has_layer = CustomData_free_layer_active(data, type, 0); + const bool had_layer = CustomData_free_layer_active(data, type, 0); /* Assert because its expensive to realloc - better not do if layer isn't present. */ - BLI_assert(has_layer != false); - UNUSED_VARS_NDEBUG(has_layer); + BLI_assert(had_layer != false); + UNUSED_VARS_NDEBUG(had_layer); update_data_blocks(bm, &olddata, data); if (olddata.layers) { diff --cc source/blender/editors/include/ED_mesh.h index 76f7e3b2c3e,bab1f7e4c5e..b717a9d4b4e --- a/source/blender/editors/include/ED_mesh.h +++ b/source/blender/editors/include/ED_mesh.h @@@ -552,13 -552,8 +552,15 @@@ void ED_mesh_geometry_clear(struct Mes void ED_mesh_update(struct Mesh *mesh, struct bContext *C, bool calc_edges, bool calc_edges_loose); +bool *ED_mesh_uv_map_ensure_vert_selection(struct Mesh *mesh, int uv_index); +bool *ED_mesh_uv_map_ensure_edge_selection(struct Mesh *mesh, int uv_index); +bool *ED_mesh_uv_map_ensure_pin(struct Mesh *mesh, int uv_index); +const bool *ED_mesh_uv_map_get_vert_selection(const struct Mesh *mesh, int uv_index); +const bool *ED_mesh_uv_map_get_edge_selection(const struct Mesh *mesh, int uv_index); +const bool *ED_mesh_uv_map_get_pin(const struct Mesh *mesh, int uv_index); + + bool ED_mesh_edge_is_loose(const struct Mesh *mesh, int index); + void ED_mesh_uv_ensure(struct Mesh *me, const char *name); int ED_mesh_uv_add( struct Mesh *me, const char *name, bool active_set, bool do_init, struct ReportList *reports); diff --cc source/blender/editors/sculpt_paint/paint_image_proj.cc index 7cb
[Bf-blender-cvs] [49129180b2c] master: Merge branch 'blender-v3.4-release'
Commit: 49129180b2c98fd7970e0601a7eee60a2dc78117 Author: Germano Cavalcante Date: Thu Nov 24 17:30:54 2022 -0300 Branches: master https://developer.blender.org/rB49129180b2c98fd7970e0601a7eee60a2dc78117 Merge branch 'blender-v3.4-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] [cdc1c60f5ba] blender-v3.4-release: Fix T102466: push/pull doesn't work if applied to many vertices
Commit: cdc1c60f5bacea96d679384ecf46d93eb74d3a93 Author: Germano Cavalcante Date: Thu Nov 24 17:29:06 2022 -0300 Branches: blender-v3.4-release https://developer.blender.org/rBcdc1c60f5bacea96d679384ecf46d93eb74d3a93 Fix T102466: push/pull doesn't work if applied to many vertices The assignment of member`distance` was missing in rB2d4ec9049744. === M source/blender/editors/transform/transform_mode_push_pull.c === diff --git a/source/blender/editors/transform/transform_mode_push_pull.c b/source/blender/editors/transform/transform_mode_push_pull.c index 87309b45231..b7806b3519e 100644 --- a/source/blender/editors/transform/transform_mode_push_pull.c +++ b/source/blender/editors/transform/transform_mode_push_pull.c @@ -152,6 +152,8 @@ static void applyPushPull(TransInfo *t, const int UNUSED(mval[2])) struct TransDataArgs_PushPull data = { .t = t, .tc = tc, + + .distance = distance, .axis_global = {UNPACK3(axis_global)}, .is_lock_constraint = is_lock_constraint, .is_data_space = is_data_space, ___ 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] [58c8c4fde35] master: Animation: Improve performance of Bake Action operator
Commit: 58c8c4fde35c158407ca2ba0c0bc099d1455f691 Author: Colin Basnett Date: Thu Nov 24 11:26:17 2022 -0800 Branches: master https://developer.blender.org/rB58c8c4fde35c158407ca2ba0c0bc099d1455f691 Animation: Improve performance of Bake Action operator This dramatically improves baking performance by batch-adding keyframes instead of adding them individually, reducing unnecessary overhead. Testing indicates an approximate 4x performance uplift. Reviewed By: sybren, RiggingDojo Differential Revision: https://developer.blender.org/D8808 === M release/scripts/modules/bpy_extras/anim_utils.py === diff --git a/release/scripts/modules/bpy_extras/anim_utils.py b/release/scripts/modules/bpy_extras/anim_utils.py index f66dfd6eb0a..7bc9125a767 100644 --- a/release/scripts/modules/bpy_extras/anim_utils.py +++ b/release/scripts/modules/bpy_extras/anim_utils.py @@ -9,7 +9,13 @@ __all__ = ( ) import bpy +from typing import Mapping, List, Tuple, Sequence +# (fcurve.data_path, fcurve.array_index) +FCurveKey = Tuple[str, int] +# [frame0, value0, frame1, value1, ...] +ListKeyframes = List[float] +Action = bpy.types.Action def bake_action( obj, @@ -143,6 +149,18 @@ def bake_action_iter( 'bbone_scalein', 'bbone_scaleout', 'bbone_easein', 'bbone_easeout' ] +BBONE_PROPS_LENGTHS = { +"bbone_curveinx": 1, +"bbone_curveoutx": 1, +"bbone_curveinz": 1, +"bbone_curveoutz": 1, +"bbone_rollin": 1, +"bbone_rollout": 1, +"bbone_scalein": 3, +"bbone_scaleout": 3, +"bbone_easein": 1, +"bbone_easeout": 1, +} def pose_frame_info(obj): matrix = {} @@ -225,7 +243,8 @@ def bake_action_iter( # in case animation data hasn't been created atd = obj.animation_data_create() -if action is None: +is_new_action = action is None +if is_new_action: action = bpy.data.actions.new("Action") # Only leave tweak mode if we actually need to modify the action (T57159) @@ -244,6 +263,7 @@ def bake_action_iter( # Apply transformations to action # pose +lookup_fcurves = {(fcurve.data_path, fcurve.array_index): fcurve for fcurve in action.fcurves} if do_pose: for name, pbone in obj.pose.bones.items(): if only_selected and not pbone.bone.select: @@ -257,12 +277,32 @@ def bake_action_iter( euler_prev = None quat_prev = None +base_fcurve_path = pbone.path_from_id() + "." +path_location = base_fcurve_path + "location" +path_quaternion = base_fcurve_path + "rotation_quaternion" +path_axis_angle = base_fcurve_path + "rotation_axis_angle" +path_euler = base_fcurve_path + "rotation_euler" +path_scale = base_fcurve_path + "scale" +paths_bbprops = [(base_fcurve_path + bbprop) for bbprop in BBONE_PROPS] + +keyframes = KeyframesCo() +keyframes.add_paths(path_location, 3) +keyframes.add_paths(path_quaternion, 4) +keyframes.add_paths(path_axis_angle, 4) +keyframes.add_paths(path_euler, 3) +keyframes.add_paths(path_scale, 3) + +if pbone.bone.bbone_segments > 1: +for prop_name, path in zip(BBONE_PROPS, paths_bbprops): +keyframes.add_paths(path, BBONE_PROPS_LENGTHS[prop_name]) + +rotation_mode = pbone.rotation_mode +total_new_keys = len(pose_info) for (f, matrix, bbones) in pose_info: pbone.matrix_basis = matrix[name].copy() -pbone.keyframe_insert("location", index=-1, frame=f, group=name) +keyframes.extend_co_values(path_location, 3, f, pbone.location) -rotation_mode = pbone.rotation_mode if rotation_mode == 'QUATERNION': if quat_prev is not None: quat = pbone.rotation_quaternion.copy() @@ -272,26 +312,37 @@ def bake_action_iter( del quat else: quat_prev = pbone.rotation_quaternion.copy() -pbone.keyframe_insert("rotation_quaternion", index=-1, frame=f, group=name) +keyframes.extend_co_values(path_quaternion, 4, f, pbone.rotation_quaternion) elif rotation_mode == 'AXIS_ANGLE': -pbone.keyframe_insert("rotation_axis_angle", index=-1, frame=f, group=name) +keyframes.extend_co_values(path_axis_angle, 4, f, pbone.rotation_axis_angle) else: # euler, XYZ, ZXY etc if euler_prev is not None: euler = pbone.matrix_basis.to_euler(pbone.rotation_mode, euler_prev) pbone.rotati
[Bf-blender-cvs] [f1a1c37fd70] soc-2022-many-lights-sampling: Use min importance in volumes
Commit: f1a1c37fd708567d5f4337d6993a485f3f1ca555 Author: Alaska Date: Thu Nov 24 19:12:18 2022 +0100 Branches: soc-2022-many-lights-sampling https://developer.blender.org/rBf1a1c37fd708567d5f4337d6993a485f3f1ca555 Use min importance in volumes Use both the max and min importance for deciding which branch of the light tree to traverse down when in volumetric materials. Here are some comparisons: ||Current soc-2022-many-lights-sampling|This patch|Not using the light tree| |4 samples per pixel|{F13959168}|{F13959166}|{F13959170}| |1024 samples per pixel|{F13959211}|{F13959213}|{F13959215}| Reviewed By: brecht, weizhen Differential Revision: https://developer.blender.org/D16575 === M intern/cycles/kernel/light/tree.h === diff --git a/intern/cycles/kernel/light/tree.h b/intern/cycles/kernel/light/tree.h index f80935efd58..fff73a1392c 100644 --- a/intern/cycles/kernel/light/tree.h +++ b/intern/cycles/kernel/light/tree.h @@ -63,6 +63,7 @@ ccl_device void light_tree_cluster_importance(const float3 N_or_D, float cos_theta, cos_theta_i, sin_theta_i; /* cos(theta_i') in the paper, omitted for volume */ float cos_min_incidence_angle = 1.0f; + float cos_max_incidence_angle = 1.0f; /* when sampling the light tree for the second time in `shade_volume.h` and when query the pdf in * `sample.h` */ const bool in_volume = (dot(N_or_D, N_or_D) < 5e-4f); @@ -97,6 +98,10 @@ ccl_device void light_tree_cluster_importance(const float3 N_or_D, cos_min_incidence_angle = cos_theta_i > cos_theta_u ? 1.0f : cos_theta_i * cos_theta_u + sin_theta_i * sin_theta_u; + + /* cos_max_incidence_angle = cos(min{theta_i + theta_u, pi}) */ + cos_max_incidence_angle = fmaxf(cos_theta_i * cos_theta_u - sin_theta_i * sin_theta_u, 0.0f); + /* If the node is guaranteed to be behind the surface we're sampling, and the surface is * opaque, then we can give the node an importance of 0 as it contributes nothing to the * surface. This is more accurate than the bbox test if we are calculating the importance of @@ -142,16 +147,11 @@ ccl_device void light_tree_cluster_importance(const float3 N_or_D, (in_volume_segment ? min_distance : sqr(min_distance))); /* TODO: also min importance for volume? */ - if (in_volume_segment || in_volume) { + if (in_volume_segment) { min_importance = max_importance; return; } - /* compute mininum importance */ - /* cos_max_incidence_angle = cos(min{theta_i + theta_u, pi}) */ - const float cos_max_incidence_angle = fmaxf( - cos_theta_i * cos_theta_u - sin_theta_i * sin_theta_u, 0.0f); - /* cos(theta + theta_o + theta_u) if theta + theta_o + theta_u < theta_e, 0 otherwise */ float cos_max_outgoing_angle; const float cos_theta_plus_theta_u = cos_theta * cos_theta_u - sin_theta * sin_theta_u; ___ 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] [81754a0fc52] master: Cleanup: remove else after return.
Commit: 81754a0fc528a0934f37344bdfbe52933c780c0f Author: Joseph Eagar Date: Thu Nov 24 09:56:05 2022 -0800 Branches: master https://developer.blender.org/rB81754a0fc528a0934f37344bdfbe52933c780c0f Cleanup: remove else after return. === M source/blender/blenkernel/intern/pbvh.c === diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c index 6b1bdeef4af..3e49382371f 100644 --- a/source/blender/blenkernel/intern/pbvh.c +++ b/source/blender/blenkernel/intern/pbvh.c @@ -3563,9 +3563,8 @@ BLI_INLINE int face_iter_prim_to_face(PBVHFaceIter *fd, int prim_index) if (fd->subdiv_ccg_) { return BKE_subdiv_ccg_grid_to_face_index(fd->subdiv_ccg_, prim_index); } - else { -return fd->looptri_[prim_index].poly; - } + + return fd->looptri_[prim_index].poly; } static void pbvh_face_iter_step(PBVHFaceIter *fd, bool do_step) ___ 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] [412642865d1] master: Cleanup: Resolve a warning for the ambiguity on the parenthesis in oneAPI code
Commit: 412642865d1c5eaf271bdb769da4e377ae52094c Author: Nikita Sirgienko Date: Thu Nov 24 18:05:02 2022 +0100 Branches: master https://developer.blender.org/rB412642865d1c5eaf271bdb769da4e377ae52094c Cleanup: Resolve a warning for the ambiguity on the parenthesis in oneAPI code No functional changes. === M intern/cycles/device/oneapi/device_impl.cpp === diff --git a/intern/cycles/device/oneapi/device_impl.cpp b/intern/cycles/device/oneapi/device_impl.cpp index d0ddd69289c..bf8de8b5a12 100644 --- a/intern/cycles/device/oneapi/device_impl.cpp +++ b/intern/cycles/device/oneapi/device_impl.cpp @@ -430,9 +430,9 @@ void OneapiDevice::check_usm(SyclQueue *queue_, const void *usm_ptr, bool allow_ sycl::usm::alloc usm_type = get_pointer_type(usm_ptr, queue->get_context()); (void)usm_type; assert(usm_type == sycl::usm::alloc::device || - ((device_type == sycl::info::device_type::cpu || allow_host) && - usm_type == sycl::usm::alloc::host || - usm_type == sycl::usm::alloc::unknown)); + (usm_type == sycl::usm::alloc::host && + (allow_host || device_type == sycl::info::device_type::cpu)) || + usm_type == sycl::usm::alloc::unknown); # else /* Silence warning about unused arguments. */ (void)queue_; ___ 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] [14a0fb0cc65] master: Merge branch 'blender-v3.4-release'
Commit: 14a0fb0cc65daca0efaa8ef04d892e1c8a929b3a Author: Joseph Eagar Date: Thu Nov 24 09:02:23 2022 -0800 Branches: master https://developer.blender.org/rB14a0fb0cc65daca0efaa8ef04d892e1c8a929b3a Merge branch 'blender-v3.4-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] [959f3cd6450] blender-v3.4-release: Sculpt: fix T102436: missing null pointer check in automasking code
Commit: 959f3cd6450225a255839396029240f42817e61a Author: Joseph Eagar Date: Thu Nov 24 08:53:15 2022 -0800 Branches: blender-v3.4-release https://developer.blender.org/rB959f3cd6450225a255839396029240f42817e61a Sculpt: fix T102436: missing null pointer check in automasking code === M source/blender/editors/sculpt_paint/sculpt_automasking.cc M source/blender/editors/sculpt_paint/sculpt_intern.h === diff --git a/source/blender/editors/sculpt_paint/sculpt_automasking.cc b/source/blender/editors/sculpt_paint/sculpt_automasking.cc index f0b803ecfa1..211ff14c906 100644 --- a/source/blender/editors/sculpt_paint/sculpt_automasking.cc +++ b/source/blender/editors/sculpt_paint/sculpt_automasking.cc @@ -847,7 +847,10 @@ AutomaskingCache *SCULPT_automasking_cache_init(Sculpt *sd, Brush *brush, Object use_stroke_id = true; if (SCULPT_is_automasking_mode_enabled(sd, brush, BRUSH_AUTOMASKING_CAVITY_USE_CURVE)) { - BKE_curvemapping_init(brush->automasking_cavity_curve); + if (brush) { +BKE_curvemapping_init(brush->automasking_cavity_curve); + } + BKE_curvemapping_init(sd->automasking_cavity_curve); } diff --git a/source/blender/editors/sculpt_paint/sculpt_intern.h b/source/blender/editors/sculpt_paint/sculpt_intern.h index 7bc947fe215..46414cf6a0d 100644 --- a/source/blender/editors/sculpt_paint/sculpt_intern.h +++ b/source/blender/editors/sculpt_paint/sculpt_intern.h @@ -1356,6 +1356,7 @@ float SCULPT_automasking_factor_get(struct AutomaskingCache *automasking, * brushes and filter. */ struct AutomaskingCache *SCULPT_automasking_active_cache_get(SculptSession *ss); +/* Brush can be null. */ struct AutomaskingCache *SCULPT_automasking_cache_init(Sculpt *sd, Brush *brush, Object *ob); void SCULPT_automasking_cache_free(struct AutomaskingCache *automasking); ___ 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] [38c4f401595] blender-v3.4-release: Fix Cycles OSL issue with constant folding after recent fix
Commit: 38c4f401595d19ad33d5d0fb460e81226ad83cc2 Author: Brecht Van Lommel Date: Thu Nov 24 16:59:37 2022 +0100 Branches: blender-v3.4-release https://developer.blender.org/rB38c4f401595d19ad33d5d0fb460e81226ad83cc2 Fix Cycles OSL issue with constant folding after recent fix Constant folded values from linked nodes should override the OSL initializer. Ref T102450 === M intern/cycles/scene/osl.cpp === diff --git a/intern/cycles/scene/osl.cpp b/intern/cycles/scene/osl.cpp index 2ff36ff7fca..825831652f1 100644 --- a/intern/cycles/scene/osl.cpp +++ b/intern/cycles/scene/osl.cpp @@ -720,7 +720,7 @@ void OSLCompiler::add(ShaderNode *node, const char *name, bool isfilepath) if (node_skip_input(node, input)) { continue; } - if (input->flags() & SocketType::LINK_OSL_INITIALIZER) { + if ((input->flags() & SocketType::LINK_OSL_INITIALIZER) && !(input->constant_folded_in)) { continue; } ___ 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] [008cc625aaf] blender-v3.4-release: Fix T102250: Cycles path guiding issue with equiangular sampling
Commit: 008cc625aaf798b76155eb9880d6f0ae16ff36c5 Author: Sebastian Herholz Date: Thu Nov 24 17:03:45 2022 +0100 Branches: blender-v3.4-release https://developer.blender.org/rB008cc625aaf798b76155eb9880d6f0ae16ff36c5 Fix T102250: Cycles path guiding issue with equiangular sampling The wrong guiding distribution was used when direct and indirect light scattering happened at different locations. Now use a different distribution for each location. Recording is not quite correct since OpenPGL does not support spliting the path like this, instead recording at the start of the volume ray. In practice this seems to make little difference. Differential Revision: https://developer.blender.org/D16448 === M intern/cycles/kernel/integrator/shade_volume.h M intern/cycles/kernel/integrator/volume_shader.h M intern/cycles/kernel/types.h === diff --git a/intern/cycles/kernel/integrator/shade_volume.h b/intern/cycles/kernel/integrator/shade_volume.h index a8324cda2dc..46d13f59c6a 100644 --- a/intern/cycles/kernel/integrator/shade_volume.h +++ b/intern/cycles/kernel/integrator/shade_volume.h @@ -34,6 +34,9 @@ typedef struct VolumeIntegrateResult { Spectrum direct_throughput; float direct_t; ShaderVolumePhases direct_phases; +# ifdef __PATH_GUIDING__ + VolumeSampleMethod direct_sample_method; +# endif /* Throughput and offset for indirect light scattering. */ bool indirect_scatter; @@ -580,6 +583,9 @@ ccl_device_forceinline void volume_integrate_heterogeneous( result.direct_t = volume_equiangular_sample( ray, equiangular_light_P, vstate.rscatter, &vstate.equiangular_pdf); } +# ifdef __PATH_GUIDING__ + result.direct_sample_method = vstate.direct_sample_method; +# endif # ifdef __DENOISING_FEATURES__ const bool write_denoising_features = (INTEGRATOR_STATE(state, path, flag) & @@ -719,6 +725,9 @@ ccl_device_forceinline void integrate_volume_direct_light( ccl_private const RNGState *ccl_restrict rng_state, const float3 P, ccl_private const ShaderVolumePhases *ccl_restrict phases, +# ifdef __PATH_GUIDING__ +ccl_private const Spectrum unlit_throughput, +# endif ccl_private const Spectrum throughput, ccl_private LightSample *ccl_restrict ls) { @@ -851,7 +860,7 @@ ccl_device_forceinline void integrate_volume_direct_light( kernel_data.background.lightgroup + 1; # ifdef __PATH_GUIDING__ - INTEGRATOR_STATE_WRITE(shadow_state, shadow_path, unlit_throughput) = throughput; + INTEGRATOR_STATE_WRITE(shadow_state, shadow_path, unlit_throughput) = unlit_throughput; INTEGRATOR_STATE_WRITE(shadow_state, shadow_path, path_segment) = INTEGRATOR_STATE( state, guiding, path_segment); # endif @@ -990,7 +999,13 @@ ccl_device VolumeIntegrateEvent volume_integrate(KernelGlobals kg, const float step_size = volume_stack_step_size(kg, volume_read_lambda_pass); # if defined(__PATH_GUIDING__) && PATH_GUIDING_LEVEL >= 1 + /* The current path throughput which is used later to calculate per-segment throughput.*/ const float3 initial_throughput = INTEGRATOR_STATE(state, path, throughput); + /* The path throughput used to calculate the throughput for direct light. */ + float3 unlit_throughput = initial_throughput; + /* If a new path segment is generated at the direct scatter position.*/ + bool guiding_generated_new_segment = false; + float rand_phase_guiding = 0.5f; # endif /* TODO: expensive to zero closures? */ @@ -1018,41 +1033,48 @@ ccl_device VolumeIntegrateEvent volume_integrate(KernelGlobals kg, return VOLUME_PATH_MISSED; } -# if defined(__PATH_GUIDING__) && PATH_GUIDING_LEVEL >= 1 - bool guiding_generated_new_segment = false; - if (kernel_data.integrator.use_guiding) { -/* Record transmittance using change in throughput. */ -float3 transmittance_weight = spectrum_to_rgb( -safe_divide_color(result.indirect_throughput, initial_throughput)); -guiding_record_volume_transmission(kg, state, transmittance_weight); - -if (result.indirect_scatter) { - const float3 P = ray->P + result.indirect_t * ray->D; - - /* Record volume segment up to direct scatter position. - * TODO: volume segment is wrong when direct_t and indirect_t. */ - if (result.direct_scatter && (result.direct_t == result.indirect_t)) { -guiding_record_volume_segment(kg, state, P, sd.I); + /* Direct light. */ + if (result.direct_scatter) { +const float3 direct_P = ray->P + result.direct_t * ray->D; + +# ifdef __PATH_GUIDING__ +if (kernel_data.integrator.use_guiding) { +#if PATH_GUIDING_LEVEL >= 1 + if (result.direct_sample_method == VOLUME_SAMPLE_DISTANCE) { +/* If the direct scatter event is generated using VOLUME_SAMPLE_DISTANCE the direct event + * will happen at the
[Bf-blender-cvs] [1f3233374b7] tmp-libs-2.93-lts: Build: update various libraries for 2.93, fixing bugs and security issues
Commit: 1f3233374b7ad8f4631ef27fbbab8b9ca7aa0a42 Author: Brecht Van Lommel Date: Mon Nov 7 17:57:22 2022 +0100 Branches: tmp-libs-2.93-lts https://developer.blender.org/rB1f3233374b7ad8f4631ef27fbbab8b9ca7aa0a42 Build: update various libraries for 2.93, fixing bugs and security issues This is based on similar updates in 3.3 and 3.4 from D16269. expat 2.5.0 ffmpeg 4.4.3 flac 1.3.4 freetype 2.12.1 imath 3.1.5 numpy 1.22.0 ogg 1.3.5 openexr 2.5.8 openjpeg 2.5.0 python 3.9.15 sndfile 1.1.0 sqlite 3.37.2 ssl 1.1.1q tiff 4.4.0 vorbis 1.3.7 vpx 1.11.0 webp 1.2.2 xml2 2.10.3 zlib 1.2.13 === M build_files/build_environment/CMakeLists.txt M build_files/build_environment/cmake/cve_check.cmake M build_files/build_environment/cmake/cve_check.csv.in M build_files/build_environment/cmake/download.cmake M build_files/build_environment/cmake/ffmpeg.cmake M build_files/build_environment/cmake/freetype.cmake M build_files/build_environment/cmake/gmp.cmake M build_files/build_environment/cmake/harvest.cmake M build_files/build_environment/cmake/llvm.cmake M build_files/build_environment/cmake/opencollada.cmake M build_files/build_environment/cmake/osl.cmake M build_files/build_environment/cmake/png.cmake M build_files/build_environment/cmake/python.cmake M build_files/build_environment/cmake/sndfile.cmake M build_files/build_environment/cmake/sqlite.cmake M build_files/build_environment/cmake/ssl.cmake M build_files/build_environment/cmake/tiff.cmake M build_files/build_environment/cmake/versions.cmake M build_files/build_environment/cmake/xml2.cmake M build_files/build_environment/dependencies.dot A build_files/build_environment/patches/aom.diff M build_files/build_environment/patches/ffmpeg.diff A build_files/build_environment/patches/gmp.diff M build_files/build_environment/patches/opencollada.diff M build_files/build_environment/patches/osl.diff D build_files/build_environment/patches/sndfile.diff D build_files/build_environment/patches/sqlite.diff A build_files/build_environment/patches/ssl.diff M build_files/cmake/platform/platform_win32.cmake === diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt index a679eeddc2f..2175e9aa2f9 100644 --- a/build_files/build_environment/CMakeLists.txt +++ b/build_files/build_environment/CMakeLists.txt @@ -104,6 +104,8 @@ include(cmake/pugixml.cmake) include(cmake/ispc.cmake) include(cmake/openimagedenoise.cmake) include(cmake/embree.cmake) +include(cmake/xml2.cmake) + if(NOT APPLE) include(cmake/xr_openxr.cmake) endif() @@ -144,7 +146,6 @@ if(NOT WIN32 OR ENABLE_MINGW64) endif() if(UNIX) include(cmake/flac.cmake) - include(cmake/xml2.cmake) if(NOT APPLE) include(cmake/spnav.cmake) include(cmake/jemalloc.cmake) diff --git a/build_files/build_environment/cmake/cve_check.cmake b/build_files/build_environment/cmake/cve_check.cmake index dfb190bcffa..ac42444aef1 100644 --- a/build_files/build_environment/cmake/cve_check.cmake +++ b/build_files/build_environment/cmake/cve_check.cmake @@ -27,10 +27,12 @@ get_cmake_property(_variableNames VARIABLES) foreach (_variableName ${_variableNames}) if(_variableName MATCHES "CPE$") string(REPLACE ":" ";" CPE_LIST ${${_variableName}}) + string(REPLACE "_CPE" "_ID" CPE_DEPNAME ${_variableName}) list(GET CPE_LIST 3 CPE_VENDOR) list(GET CPE_LIST 4 CPE_NAME) list(GET CPE_LIST 5 CPE_VERSION) - set(SBOMCONTENTS "${SBOMCONTENTS}${CPE_VENDOR},${CPE_NAME},${CPE_VERSION}\n") + set(${CPE_DEPNAME} "${CPE_VENDOR},${CPE_NAME},${CPE_VERSION}") + set(SBOMCONTENTS "${SBOMCONTENTS}${CPE_VENDOR},${CPE_NAME},${CPE_VERSION},,,\n") endif() endforeach() configure_file(${CMAKE_SOURCE_DIR}/cmake/cve_check.csv.in ${CMAKE_CURRENT_BINARY_DIR}/cve_check.csv @ONLY) diff --git a/build_files/build_environment/cmake/cve_check.csv.in b/build_files/build_environment/cmake/cve_check.csv.in index 6e7e8db5609..946dda5ab17 100644 --- a/build_files/build_environment/cmake/cve_check.csv.in +++ b/build_files/build_environment/cmake/cve_check.csv.in @@ -1,2 +1,29 @@ -vendor,product,version +vendor,product,version,cve_number,remarks,comment +@OPENJPEG_ID@,CVE-2016-9675,Ignored,issue in convert command line tool not used by blender +@PYTHON_ID@,CVE-2009-2940,Ignored,issue in pygresql not used by blender +@PYTHON_ID@,CVE-2020-29396,Ignored,issue in odoo not used by blender +@PYTHON_ID@,CVE-2021-32052,Ignored,issue in django not used by blender +@PYTHON_ID@,CVE-2009-3720,Ignored,already fixed in libexpat version used +@SSL_ID@,CVE-2009-1390,Ignored,issue in mutt not used by blender +@SSL_ID@,CVE-2009-3765,Ignored,issue in mut
[Bf-blender-cvs] [7bc5193f5e8] tmp-libs-2.93-lts: deps_builder: Add support for cve-bin-tool
Commit: 7bc5193f5e8a35e3e2d75ddb97ca38c4d05c8600 Author: Ray Molenkamp Date: Mon Oct 10 11:48:05 2022 -0600 Branches: tmp-libs-2.93-lts https://developer.blender.org/rB7bc5193f5e8a35e3e2d75ddb97ca38c4d05c8600 deps_builder: Add support for cve-bin-tool This change adds support for intels cve-bin-tool [1] in the deps builder. This adds 2 new targets to the builder that do not build automatically but can be build on demand when required. `make cve_check` will output to the console. `make cve_check_html` will output a html file that can be shared with other people. Requirements: - A working installation of cve-bin-tool on the system Not required but higly recommended: - Obtaining a key from the nvd [2] to speed up the database download. you can pass the key to cmake using `-DCVE_CHECK_NVD_KEY=your_api_key` [1] https://github.com/intel/cve-bin-tool [2] https://nvd.nist.gov/developers/request-an-api-key Reviewed By: brecht Differential Revision: https://developer.blender.org/D16160 === M build_files/build_environment/CMakeLists.txt A build_files/build_environment/cmake/cve_check.cmake A build_files/build_environment/cmake/cve_check.csv.in M build_files/build_environment/cmake/versions.cmake === diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt index a3d694b4bc3..a679eeddc2f 100644 --- a/build_files/build_environment/CMakeLists.txt +++ b/build_files/build_environment/CMakeLists.txt @@ -167,3 +167,4 @@ if(UNIX AND NOT APPLE) endif() include(cmake/harvest.cmake) +include(cmake/cve_check.cmake) diff --git a/build_files/build_environment/cmake/cve_check.cmake b/build_files/build_environment/cmake/cve_check.cmake new file mode 100644 index 000..dfb190bcffa --- /dev/null +++ b/build_files/build_environment/cmake/cve_check.cmake @@ -0,0 +1,73 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +# CVE Check requirements +# +# - A working installation of intels cve-bin-tool [1] has to be available in +# your path +# +# - Not strictly required, but highly recommended is obtaining a NVD key from +# nist since it significantly speeds up downloading/updating the required +# databases one can request a key on the following website: +# https://nvd.nist.gov/developers/request-an-api-key + +# Bill of Materials construction +# +# This constructs a CSV cve-bin-tool [1] can read and process. Sadly +# cve-bin-tool at this point does not take a list of CPE's and output a check +# based on that list. so we need to pick apart the CPE retrieve the vendor, +# product and version tokens and generate a CSV. +# +# [1] https://github.com/intel/cve-bin-tool + +# Because not all deps are downloaded (ie python packages) but can still have a +# xxx_CPE declared loop over all variables and look for variables ending in CPE. + +set(SBOMCONTENTS) +get_cmake_property(_variableNames VARIABLES) +foreach (_variableName ${_variableNames}) + if(_variableName MATCHES "CPE$") + string(REPLACE ":" ";" CPE_LIST ${${_variableName}}) + list(GET CPE_LIST 3 CPE_VENDOR) + list(GET CPE_LIST 4 CPE_NAME) + list(GET CPE_LIST 5 CPE_VERSION) + set(SBOMCONTENTS "${SBOMCONTENTS}${CPE_VENDOR},${CPE_NAME},${CPE_VERSION}\n") + endif() +endforeach() +configure_file(${CMAKE_SOURCE_DIR}/cmake/cve_check.csv.in ${CMAKE_CURRENT_BINARY_DIR}/cve_check.csv @ONLY) + +# Custom Targets +# +# This defines two new custom targets one could run in the build folder +# `cve_check` which will output the report to the console, and `cve_check_html` +# which will write out blender_dependencies.html in the build folder that one +# could share with other people or be used to get more information on the +# reported CVE's. +# +# cve-bin-tool takes data from the nist nvd database which rate limits +# unauthenticated requests to 1 requests per 6 seconds making the database +# download take "quite a bit" of time. +# +# When adding -DCVE_CHECK_NVD_KEY=your_api_key_here to your cmake invocation +# this key will be passed on to cve-bin-tool speeding up the process. +# +if(DEFINED CVE_CHECK_NVD_KEY) + set(NVD_ARGS --nvd-api-key ${CVE_CHECK_NVD_KEY}) +endif() + +# This will just report to the console +add_custom_target(cve_check + COMMAND cve-bin-tool +${NVD_ARGS} +-i ${CMAKE_CURRENT_BINARY_DIR}/cve_check.csv +--affected-versions + SOURCES ${CMAKE_CURRENT_BINARY_DIR}/cve_check.csv +) + +# This will write out blender_dependencies.html +add_custom_target(cve_check_html + COMMAND cve-bin-tool +${NVD_ARGS} +-i ${CMAKE_CURRENT_BINARY_DIR}/cve_check.csv +-f html + SOURCES ${CMAKE_CURRENT_BINARY_DIR}/cve_check.csv +) diff --git a/build_files/build_environment/cmake/cve_check.csv.in b/build_files/build_environment/cmake/cve_check.csv.in new file mode 100644 index 000..6e7e8db5609 --- /dev/null +++ b/build_fi
[Bf-blender-cvs] [e2ffa583206] tmp-libs-2.93-lts: Build: get make deps working with Xcode command line tools
Commit: e2ffa58320628eab5d1e9c5f65cbc7513d0f8def Author: Brecht Van Lommel Date: Mon Oct 3 16:47:03 2022 +0200 Branches: tmp-libs-2.93-lts https://developer.blender.org/rBe2ffa58320628eab5d1e9c5f65cbc7513d0f8def Build: get make deps working with Xcode command line tools Deduplicating code with Xcode detection for Blender builds. === M build_files/build_environment/cmake/options.cmake === diff --git a/build_files/build_environment/cmake/options.cmake b/build_files/build_environment/cmake/options.cmake index b9a2e8d259d..994a616bcb4 100644 --- a/build_files/build_environment/cmake/options.cmake +++ b/build_files/build_environment/cmake/options.cmake @@ -116,30 +116,16 @@ else() set(LIBPREFIX "lib") if(APPLE) -# Let's get the current Xcode dir, to support xcode-select -execute_process( - COMMAND xcode-select --print-path - OUTPUT_VARIABLE XCODE_DEV_PATH OUTPUT_STRIP_TRAILING_WHITESPACE -) -execute_process( - COMMAND xcodebuild -version -sdk macosx SDKVersion - OUTPUT_VARIABLE MACOSX_SDK_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) - -if(NOT CMAKE_OSX_ARCHITECTURES) - execute_process(COMMAND uname -m OUTPUT_VARIABLE ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE) - message(STATUS "Detected native architecture ${ARCHITECTURE}.") - set(CMAKE_OSX_ARCHITECTURES "${ARCHITECTURE}") -endif() -if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "x86_64") - set(OSX_DEPLOYMENT_TARGET 10.13) -else() - set(OSX_DEPLOYMENT_TARGET 11.00) +# Use same Xcode detection as Blender itself. +include(../cmake/platform/platform_apple_xcode.cmake) + +if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64") + set(BLENDER_PLATFORM_ARM ON) endif() -set(OSX_SYSROOT ${XCODE_DEV_PATH}/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk) -set(PLATFORM_CFLAGS "-isysroot ${OSX_SYSROOT} -mmacosx-version-min=${OSX_DEPLOYMENT_TARGET} -arch ${CMAKE_OSX_ARCHITECTURES}") -set(PLATFORM_CXXFLAGS "-isysroot ${OSX_SYSROOT} -mmacosx-version-min=${OSX_DEPLOYMENT_TARGET} -std=c++11 -stdlib=libc++ -arch ${CMAKE_OSX_ARCHITECTURES}") -set(PLATFORM_LDFLAGS "-isysroot ${OSX_SYSROOT} -mmacosx-version-min=${OSX_DEPLOYMENT_TARGET} -arch ${CMAKE_OSX_ARCHITECTURES}") +set(PLATFORM_CFLAGS "-isysroot ${CMAKE_OSX_SYSROOT} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -arch ${CMAKE_OSX_ARCHITECTURES}") +set(PLATFORM_CXXFLAGS "-isysroot ${CMAKE_OSX_SYSROOT} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -std=c++11 -stdlib=libc++ -arch ${CMAKE_OSX_ARCHITECTURES}") +set(PLATFORM_LDFLAGS "-isysroot ${CMAKE_OSX_SYSROOT} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -arch ${CMAKE_OSX_ARCHITECTURES}") if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "x86_64") set(PLATFORM_BUILD_TARGET --build=x86_64-apple-darwin17.0.0) # OS X 10.13 else() @@ -147,8 +133,8 @@ else() endif() set(PLATFORM_CMAKE_FLAGS -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES} - -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${OSX_DEPLOYMENT_TARGET} - -DCMAKE_OSX_SYSROOT:PATH=${OSX_SYSROOT} + -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${CMAKE_OSX_DEPLOYMENT_TARGET} + -DCMAKE_OSX_SYSROOT:PATH=${CMAKE_OSX_SYSROOT} ) else() set(PLATFORM_CFLAGS "-fPIC") @@ -178,8 +164,8 @@ else() set(BLENDER_CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DNDEBUG ${PLATFORM_CXXFLAGS}") set(CONFIGURE_ENV -export MACOSX_DEPLOYMENT_TARGET=${OSX_DEPLOYMENT_TARGET} && -export MACOSX_SDK_VERSION=${OSX_DEPLOYMENT_TARGET} && +export MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET} && +export MACOSX_SDK_VERSION=${CMAKE_OSX_DEPLOYMENT_TARGET} && export CFLAGS=${PLATFORM_CFLAGS} && export CXXFLAGS=${PLATFORM_CXXFLAGS} && export LDFLAGS=${PLATFORM_LDFLAGS} ___ 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] [c9df21fac7a] tmp-libs-2.93-lts: deps_builder: harden the package download process
Commit: c9df21fac7af91090684227e195f4a20c642659a Author: Ray Molenkamp Date: Wed Oct 5 12:05:26 2022 -0600 Branches: tmp-libs-2.93-lts https://developer.blender.org/rBc9df21fac7af91090684227e195f4a20c642659a deps_builder: harden the package download process During the 3.3 release some packages were missing in SVN during the release and it ended up building the release tarball without issues when re-running the `make source_archive_complete` command after it failed initially. The tarball however had 0 byte files for the missing packages not good. This diff hardens the download process by : 1) Validating all required variables are set. This catches the erroneously attempt at downloading the nanovdb package even though we have removed it from versions.cmake but neglected to remove it from download.cmake 2) When a download fails (due to either a missing package, or bad download URL) FILE Download will warn about a hash mismatch but will carry on happily, you then have to go into the file system go delete the 0 byte file to retry the download. We know for a fact the file is bad when it is 0 bytes, just delete it. 3) When we are using the blender repository (and likely building a source archive) explicitly validate the hash of all packages. Normally the build process does this, however when building a source archive the build does not actually run for a dep. So preform this check during the configuration stage. Reviewed By: brecht Differential Revision: https://developer.blender.org/D16124 === M build_files/build_environment/cmake/download.cmake === diff --git a/build_files/build_environment/cmake/download.cmake b/build_files/build_environment/cmake/download.cmake index 27351ddee45..37ad8f77372 100644 --- a/build_files/build_environment/cmake/download.cmake +++ b/build_files/build_environment/cmake/download.cmake @@ -7,6 +7,20 @@ function(download_source dep) else() set(TARGET_URI https://svn.blender.org/svnroot/bf-blender/trunk/lib/packages/${TARGET_FILE}) endif() + # Validate all required variables are set and give an explicit error message + # rather than CMake erroring out later on with a more ambigious error. + if (NOT DEFINED TARGET_FILE) +message(FATAL_ERROR "${dep}_FILE variable not set") + endif() + if (NOT DEFINED TARGET_HASH) +message(FATAL_ERROR "${dep}_HASH variable not set") + endif() + if (NOT DEFINED TARGET_HASH_TYPE) +message(FATAL_ERROR "${dep}_HASH_TYPE variable not set") + endif() + if (NOT DEFINED TARGET_URI) +message(FATAL_ERROR "${dep}_URI variable not set") + endif() set(TARGET_FILE ${PACKAGE_DIR}/${TARGET_FILE}) message("Checking source : ${dep} (${TARGET_FILE})") if(NOT EXISTS ${TARGET_FILE}) @@ -18,6 +32,36 @@ function(download_source dep) SHOW_PROGRESS ) endif() + if(EXISTS ${TARGET_FILE}) +# Sometimes the download fails, but that is not a +# fail condition for "file(DOWNLOAD" it will warn about +# a crc mismatch and just carry on, we need to explicitly +# catch this and remove the bogus 0 byte file so we can +# retry without having to go find the file and manually +# delete it. +file (SIZE ${TARGET_FILE} TARGET_SIZE) +if(${TARGET_SIZE} EQUAL 0) + file(REMOVE ${TARGET_FILE}) + message(FATAL_ERROR "for ${TARGET_FILE} file size 0, download likely failed, deleted...") +endif() + +# If we are using sources from the blender repo also +# validate that the hashes match, this takes a +# little more time, but protects us when we are +# building a release package and one of the packages +# is missing or incorrect. +# +# For regular platform maintenaince this is not needed +# since the actual build of the dep will notify the +# platform maintainer if there is a problem with the +# source package and refuse to build. +if(NOT PACKAGE_USE_UPSTREAM_SOURCES) + file(${TARGET_HASH_TYPE} ${TARGET_FILE} LOCAL_HASH) + if(NOT ${TARGET_HASH} STREQUAL ${LOCAL_HASH}) +message(FATAL_ERROR "${TARGET_FILE} ${TARGET_HASH_TYPE} mismatch\nExpected\t: ${TARGET_HASH}\nActual\t: ${LOCAL_HASH}") + endif() +endif() + endif() endfunction(download_source) download_source(ZLIB) @@ -48,7 +92,6 @@ download_source(OSL) download_source(PYTHON) download_source(TBB) download_source(OPENVDB) -download_source(NANOVDB) download_source(NUMPY) download_source(LAME) download_source(OGG) ___ 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] [137eae06ade] tmp-libs-2.93-lts: Cleanup: remove unnecessary argument to else() in CMake
Commit: 137eae06ade5a4e320329d343a1ed19cbbe3e1c7 Author: Campbell Barton Date: Tue Sep 27 08:42:52 2022 +1000 Branches: tmp-libs-2.93-lts https://developer.blender.org/rB137eae06ade5a4e320329d343a1ed19cbbe3e1c7 Cleanup: remove unnecessary argument to else() in CMake We have moved away from duplicating arguments in else() and endif() commands. === M build_files/build_environment/cmake/jpeg.cmake M build_files/build_environment/cmake/options.cmake M build_files/cmake/packaging.cmake === diff --git a/build_files/build_environment/cmake/jpeg.cmake b/build_files/build_environment/cmake/jpeg.cmake index d9eca5ed5cd..7f52f9a8e8c 100644 --- a/build_files/build_environment/cmake/jpeg.cmake +++ b/build_files/build_environment/cmake/jpeg.cmake @@ -41,7 +41,7 @@ if(WIN32) else() set(JPEG_LIBRARY jpeg-staticd${LIBEXT}) endif() -else(WIN32) +else() # cmake for unix set(JPEG_EXTRA_ARGS -DWITH_JPEG8=ON diff --git a/build_files/build_environment/cmake/options.cmake b/build_files/build_environment/cmake/options.cmake index 486b3d1a802..b9a2e8d259d 100644 --- a/build_files/build_environment/cmake/options.cmake +++ b/build_files/build_environment/cmake/options.cmake @@ -32,7 +32,7 @@ message("BuildMode = ${BUILD_MODE}") if(BUILD_MODE STREQUAL "Debug") set(LIBDIR ${CMAKE_CURRENT_BINARY_DIR}/Debug) -else(BUILD_MODE STREQUAL "Debug") +else() set(LIBDIR ${CMAKE_CURRENT_BINARY_DIR}/Release) endif() diff --git a/build_files/cmake/packaging.cmake b/build_files/cmake/packaging.cmake index 4a0a4f2493d..a8c17754f90 100644 --- a/build_files/cmake/packaging.cmake +++ b/build_files/cmake/packaging.cmake @@ -46,7 +46,7 @@ if(MSVC) else() set(PACKAGE_ARCH windows32) endif() -else(MSVC) +else() set(PACKAGE_ARCH ${CMAKE_SYSTEM_PROCESSOR}) 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] [3c3f4aceaf9] tmp-libs-2.93-lts: Cleanup: correct indentation of harvest.cmake
Commit: 3c3f4aceaf9ebdba622315dc6e5dc52efb910a9c Author: Campbell Barton Date: Tue Sep 27 08:48:28 2022 +1000 Branches: tmp-libs-2.93-lts https://developer.blender.org/rB3c3f4aceaf9ebdba622315dc6e5dc52efb910a9c Cleanup: correct indentation of harvest.cmake === M build_files/build_environment/cmake/harvest.cmake === diff --git a/build_files/build_environment/cmake/harvest.cmake b/build_files/build_environment/cmake/harvest.cmake index 23d0dcbab7b..c12d29715cd 100644 --- a/build_files/build_environment/cmake/harvest.cmake +++ b/build_files/build_environment/cmake/harvest.cmake @@ -27,173 +27,172 @@ message("HARVEST_TARGET = ${HARVEST_TARGET}") if(WIN32) -if(BUILD_MODE STREQUAL Release) - add_custom_target(Harvest_Release_Results -COMMAND # jpeg rename libfile + copy include -${CMAKE_COMMAND} -E copy ${LIBDIR}/jpg/lib/jpeg-static.lib ${HARVEST_TARGET}/jpeg/lib/libjpeg.lib && -${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/jpg/include/ ${HARVEST_TARGET}/jpeg/include/ && -# png -${CMAKE_COMMAND} -E copy ${LIBDIR}/png/lib/libpng16_static.lib ${HARVEST_TARGET}/png/lib/libpng.lib && -${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/png/include/ ${HARVEST_TARGET}/png/include/ && -# freeglut-> opengl -${CMAKE_COMMAND} -E copy ${LIBDIR}/freeglut/lib/freeglut_static.lib ${HARVEST_TARGET}/opengl/lib/freeglut_static.lib && -${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/freeglut/include/ ${HARVEST_TARGET}/opengl/include/ && -# glew-> opengl -${CMAKE_COMMAND} -E copy ${LIBDIR}/glew/lib/libglew32.lib ${HARVEST_TARGET}/opengl/lib/glew.lib && -${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/glew/include/ ${HARVEST_TARGET}/opengl/include/ && -# tiff -${CMAKE_COMMAND} -E copy ${LIBDIR}/tiff/lib/tiff.lib ${HARVEST_TARGET}/tiff/lib/libtiff.lib && -${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/tiff/include/ ${HARVEST_TARGET}/tiff/include/ -DEPENDS - ) -endif() + if(BUILD_MODE STREQUAL Release) +add_custom_target(Harvest_Release_Results + COMMAND # jpeg rename libfile + copy include + ${CMAKE_COMMAND} -E copy ${LIBDIR}/jpg/lib/jpeg-static.lib ${HARVEST_TARGET}/jpeg/lib/libjpeg.lib && + ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/jpg/include/ ${HARVEST_TARGET}/jpeg/include/ && + # png + ${CMAKE_COMMAND} -E copy ${LIBDIR}/png/lib/libpng16_static.lib ${HARVEST_TARGET}/png/lib/libpng.lib && + ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/png/include/ ${HARVEST_TARGET}/png/include/ && + # freeglut-> opengl + ${CMAKE_COMMAND} -E copy ${LIBDIR}/freeglut/lib/freeglut_static.lib ${HARVEST_TARGET}/opengl/lib/freeglut_static.lib && + ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/freeglut/include/ ${HARVEST_TARGET}/opengl/include/ && + # glew-> opengl + ${CMAKE_COMMAND} -E copy ${LIBDIR}/glew/lib/libglew32.lib ${HARVEST_TARGET}/opengl/lib/glew.lib && + ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/glew/include/ ${HARVEST_TARGET}/opengl/include/ && + # tiff + ${CMAKE_COMMAND} -E copy ${LIBDIR}/tiff/lib/tiff.lib ${HARVEST_TARGET}/tiff/lib/libtiff.lib && + ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/tiff/include/ ${HARVEST_TARGET}/tiff/include/ + DEPENDS +) + endif() else(WIN32) -function(harvest from to) - set(pattern "") - foreach(f ${ARGN}) -set(pattern ${f}) - endforeach() + function(harvest from to) +set(pattern "") +foreach(f ${ARGN}) + set(pattern ${f}) +endforeach() - if(pattern STREQUAL "") -get_filename_component(dirpath ${to} DIRECTORY) -get_filename_component(filename ${to} NAME) -install( - FILES ${LIBDIR}/${from} - DESTINATION ${HARVEST_TARGET}/${dirpath} - RENAME ${filename}) - else() -install( - DIRECTORY ${LIBDIR}/${from}/ - DESTINATION ${HARVEST_TARGET}/${to} - USE_SOURCE_PERMISSIONS - FILES_MATCHING PATTERN ${pattern} - PATTERN "pkgconfig" EXCLUDE - PATTERN "cmake" EXCLUDE - PATTERN "__pycache__" EXCLUDE - PATTERN "tests" EXCLUDE) - endif() -endfunction() +if(pattern STREQUAL "") + get_filename_component(dirpath ${to} DIRECTORY) + get_filename_component(filename ${to} NAME) + install( +FILES ${LIBDIR}/${from} +DESTINATION ${HARVEST_TARGET}/${dirpath} +RENAME ${filename}) +else() + install( +DIRECTORY ${LIBDIR}/${from}/ +DESTINATION ${HARVEST_TARGET}/${to} +USE_SOURCE_PERMISSIONS +FILES_MATCHING PATTERN ${pattern} +PATTERN "pkgconfig" EXCLUDE +PATTERN "cmake" EXCLUDE +PATTERN "__pycache__" EXCLUDE +PATTERN "tests" EXCLUDE) +endif() -harvest(alembic/include alembic/include "*.h") -harvest(a
[Bf-blender-cvs] [de27925aeab] master: Fix (unreported) inconsistent `name_map` during file reading.
Commit: de27925aeabf45e057734426626374450eb89740 Author: Bastien Montagne Date: Thu Nov 24 16:45:48 2022 +0100 Branches: master https://developer.blender.org/rBde27925aeabf45e057734426626374450eb89740 Fix (unreported) inconsistent `name_map` during file reading. Swapping some ID lists between Mains must invalidate the name_map cache. Note that in theory, at least WM type could be ignored by name_map cache, since it is a singleton. However, don't think it's worth adding extra complication here, for really marginal benefits. The overhead of rebuilding the name cache here is extremly small. For some reason, this issue did not show so far in master, only appeared in some branch work on improving (in)direct status of linked IDs... Go figure. === M source/blender/blenkernel/intern/blendfile.c M source/blender/windowmanager/intern/wm_files.c === diff --git a/source/blender/blenkernel/intern/blendfile.c b/source/blender/blenkernel/intern/blendfile.c index 8b0d3f2e92e..fb50de47881 100644 --- a/source/blender/blenkernel/intern/blendfile.c +++ b/source/blender/blenkernel/intern/blendfile.c @@ -42,6 +42,7 @@ #include "BKE_lib_id.h" #include "BKE_lib_override.h" #include "BKE_main.h" +#include "BKE_main_namemap.h" #include "BKE_preferences.h" #include "BKE_report.h" #include "BKE_scene.h" @@ -212,6 +213,12 @@ static void setup_app_data(bContext *C, SWAP(ListBase, bmain->wm, bfd->main->wm); SWAP(ListBase, bmain->workspaces, bfd->main->workspaces); SWAP(ListBase, bmain->screens, bfd->main->screens); +if (bmain->name_map != NULL) { + BKE_main_namemap_destroy(&bmain->name_map); +} +if (bfd->main->name_map != NULL) { + BKE_main_namemap_destroy(&bfd->main->name_map); +} /* In case of actual new file reading without loading UI, we need to regenerate the session * uuid of the UI-related datablocks we are keeping from previous session, otherwise their uuid diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index dd3f6db6297..af16f40ff92 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -206,6 +206,9 @@ static void wm_window_match_init(bContext *C, ListBase *wmlist) } BLI_listbase_clear(&G_MAIN->wm); + if (G_MAIN->name_map != NULL) { +BKE_main_namemap_destroy(&G_MAIN->name_map); + } /* reset active window */ CTX_wm_window_set(C, active_win); ___ 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] [5c718884b72] soc-2022-many-lights-sampling: Fix normalized vector used when computing `closest_point`
Commit: 5c718884b72b35e5350382f193d6883c4b87c2ec Author: Weizhen Huang Date: Thu Nov 24 17:04:38 2022 +0100 Branches: soc-2022-many-lights-sampling https://developer.blender.org/rB5c718884b72b35e5350382f193d6883c4b87c2ec Fix normalized vector used when computing `closest_point` === M intern/cycles/kernel/light/tree.h === diff --git a/intern/cycles/kernel/light/tree.h b/intern/cycles/kernel/light/tree.h index dc7c1b3219a..f80935efd58 100644 --- a/intern/cycles/kernel/light/tree.h +++ b/intern/cycles/kernel/light/tree.h @@ -290,7 +290,7 @@ ccl_device void light_tree_emitter_importance(KernelGlobals kg, /* TODO: better measure for single emitter */ if (in_volume_segment) { const float3 D = N_or_D; -const float3 closest_point = P + D * dot(point_to_centroid, D); +const float3 closest_point = P + distance * dot(point_to_centroid, D) * D; /* minimal distance of the ray to the cluster */ min_distance = len(centroid - closest_point); max_distance = min_distance; @@ -367,7 +367,7 @@ ccl_device void light_tree_node_importance(KernelGlobals kg, if (in_volume_segment) { const float3 D = N_or_D; -const float3 closest_point = P + D * dot(point_to_centroid, D); +const float3 closest_point = P + distance * dot(point_to_centroid, D) * D; /* minimal distance of the ray to the cluster */ distance = len(centroid - closest_point); point_to_centroid = centroid - P; ___ 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] [b5ea0d2f411] geometry-nodes-simulation: Add frame around nodes in simulation
Commit: b5ea0d2f411ba88ae5e1c3253e3ad9e813b02279 Author: Jacques Lucke Date: Thu Nov 24 16:35:40 2022 +0100 Branches: geometry-nodes-simulation https://developer.blender.org/rBb5ea0d2f411ba88ae5e1c3253e3ad9e813b02279 Add frame around nodes in simulation === M source/blender/editors/space_node/CMakeLists.txt M source/blender/editors/space_node/drawnode.cc M source/blender/editors/space_node/node_draw.cc === diff --git a/source/blender/editors/space_node/CMakeLists.txt b/source/blender/editors/space_node/CMakeLists.txt index f8289b42463..10e44455842 100644 --- a/source/blender/editors/space_node/CMakeLists.txt +++ b/source/blender/editors/space_node/CMakeLists.txt @@ -12,6 +12,7 @@ set(INC ../../depsgraph ../../draw ../../functions + ../../geometry ../../gpu ../../imbuf ../../makesdna diff --git a/source/blender/editors/space_node/drawnode.cc b/source/blender/editors/space_node/drawnode.cc index 708efc0c7a6..944fbb25a37 100644 --- a/source/blender/editors/space_node/drawnode.cc +++ b/source/blender/editors/space_node/drawnode.cc @@ -2209,8 +2209,10 @@ void node_draw_link(const bContext &C, node_draw_link_bezier(C, v2d, snode, link, th_col1, th_col2, th_col3, selected); } -static std::array node_link_bezier_points_dragged(const SpaceNode &snode, - const bNodeLink &link) +std::array node_link_bezier_points_dragged(const SpaceNode &snode, + const bNodeLink &link); +std::array node_link_bezier_points_dragged(const SpaceNode &snode, + const bNodeLink &link) { const float2 cursor = snode.runtime->cursor * UI_DPI_FAC; std::array points; diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc index 67adf3865be..7e2d57e1d52 100644 --- a/source/blender/editors/space_node/node_draw.cc +++ b/source/blender/editors/space_node/node_draw.cc @@ -22,6 +22,7 @@ #include "DNA_world_types.h" #include "BLI_array.hh" +#include "BLI_convexhull_2d.h" #include "BLI_map.hh" #include "BLI_set.hh" #include "BLI_span.hh" @@ -32,6 +33,7 @@ #include "BKE_compute_contexts.hh" #include "BKE_context.h" +#include "BKE_curves.hh" #include "BKE_idtype.h" #include "BKE_lib_id.h" #include "BKE_main.h" @@ -77,6 +79,8 @@ #include "FN_field.hh" #include "FN_field_cpp_type.hh" +#include "GEO_fillet_curves.hh" + #include "node_intern.hh" /* own include */ namespace geo_log = blender::nodes::geo_eval_log; @@ -90,6 +94,14 @@ extern void ui_draw_dropshadow( const rctf *rct, float radius, float aspect, float alpha, int select); } +namespace blender::ed::space_node { +struct SubContext { + float3 color; + Vector input_nodes; + Vector output_nodes; +}; +} // namespace blender::ed::space_node + /** * This is passed to many functions which draw the node editor. */ @@ -111,6 +123,8 @@ struct TreeDrawContext { * True if there is an active realtime compositor using the node tree, false otherwise. */ bool used_by_realtime_compositor = false; + + Vector sub_contexts; }; float ED_node_grid_size() @@ -2100,7 +2114,9 @@ static void node_draw_basis(const bContext &C, } /* Shadow. */ - node_draw_shadow(snode, node, BASIS_RAD, 1.0f); + if (!ELEM(node.type, GEO_NODE_SIMULATION_INPUT, GEO_NODE_SIMULATION_OUTPUT)) { +node_draw_shadow(snode, node, BASIS_RAD, 1.0f); + } const rctf &rct = node.runtime->totr; float color[4]; @@ -2369,6 +2385,23 @@ static void node_draw_basis(const bContext &C, else if (nodeTypeUndefined(&node)) { UI_GetThemeColor4fv(TH_REDALERT, color_outline); } +else if (ELEM(node.type, GEO_NODE_SIMULATION_INPUT, GEO_NODE_SIMULATION_OUTPUT)) { + const SubContext *context = [&]() -> const SubContext * { +for (const SubContext &context : tree_draw_ctx.sub_contexts) { + if (context.input_nodes.contains(&node) || context.output_nodes.contains(&node)) { +return &context; + } +} +return nullptr; + }(); + if (context == nullptr) { +UI_GetThemeColor4fv(TH_REDALERT, color_outline); + } + else { +copy_v3_v3(color_outline, context->color); +color_outline[3] = 1.0f; + } +} else { UI_GetThemeColorBlendShade4fv(TH_BACK, TH_NODE, 0.4f, -20, color_outline); } @@ -2988,6 +3021,149 @@ static void node_draw(const bContext &C, } } +static Set find_nodes_in_sub_context(const Span context_inputs, +const Span context_outputs) +{ + Set nodes_in_context; + Stack nodes_to_check; + + nodes_in_context.add_multiple(context_inputs); + nodes_in_context.add_multiple(context_outputs); + nodes_to_
[Bf-blender-cvs] [f47daa7ec9e] master: Merge branch 'blender-v3.4-release'
Commit: f47daa7ec9ea32e29acdfbce166799d17c5489e1 Author: Thomas Dinges Date: Thu Nov 24 15:33:25 2022 +0100 Branches: master https://developer.blender.org/rBf47daa7ec9ea32e29acdfbce166799d17c5489e1 Merge branch 'blender-v3.4-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] [2124bfb2113] blender-v3.3-release: Windows: Run blender-launcher.exe instead of blender.exe
Commit: 2124bfb2113902b027fc5479c37e7c5425f626d2 Author: Thomas Dinges Date: Wed Nov 23 15:14:13 2022 +0100 Branches: blender-v3.3-release https://developer.blender.org/rB2124bfb2113902b027fc5479c37e7c5425f626d2 Windows: Run blender-launcher.exe instead of blender.exe With this change Blender, delivered via the Microsoft store, will launch without the console window flashing. Ref T88613 Differential Revision: https://developer.blender.org/D16589 === M release/windows/msix/AppxManifest.xml.template === diff --git a/release/windows/msix/AppxManifest.xml.template b/release/windows/msix/AppxManifest.xml.template index e1b267472a3..5bf56f5a50a 100644 --- a/release/windows/msix/AppxManifest.xml.template +++ b/release/windows/msix/AppxManifest.xml.template @@ -17,7 +17,7 @@ - + - + - + ___ 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] [6e37f14489e] blender-v3.4-release: Windows: Run blender-launcher.exe instead of blender.exe
Commit: 6e37f14489e4eb4b08fa1ed3346c246128304a98 Author: Thomas Dinges Date: Wed Nov 23 15:14:13 2022 +0100 Branches: blender-v3.4-release https://developer.blender.org/rB6e37f14489e4eb4b08fa1ed3346c246128304a98 Windows: Run blender-launcher.exe instead of blender.exe With this change Blender, delivered via the Microsoft store, will launch without the console window flashing. Ref T88613 Differential Revision: https://developer.blender.org/D16589 === M release/windows/msix/AppxManifest.xml.template === diff --git a/release/windows/msix/AppxManifest.xml.template b/release/windows/msix/AppxManifest.xml.template index e1b267472a3..5bf56f5a50a 100644 --- a/release/windows/msix/AppxManifest.xml.template +++ b/release/windows/msix/AppxManifest.xml.template @@ -17,7 +17,7 @@ - + - + - + ___ 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] [bb665ef8d2b] master: Merge branch 'blender-v3.4-release'
Commit: bb665ef8d2b0aab3c5244e279f59b0179b3ef6f4 Author: Christoph Lendenfeld Date: Thu Nov 24 15:20:30 2022 +0100 Branches: master https://developer.blender.org/rBbb665ef8d2b0aab3c5244e279f59b0179b3ef6f4 Merge branch 'blender-v3.4-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] [705fe08b611] blender-v3.4-release: Fix T99400: "Jump to Keyframe" preserves subframe offset
Commit: 705fe08b6113683d46b196442ef3bf484359d478 Author: Christoph Lendenfeld Date: Thu Nov 24 15:19:48 2022 +0100 Branches: blender-v3.4-release https://developer.blender.org/rB705fe08b6113683d46b196442ef3bf484359d478 Fix T99400: "Jump to Keyframe" preserves subframe offset Previously when using the "Jump To Keyframe" operator in conjunction with subframes, the decimal part would be kept. Meaning that it wouldn't jump exactly to the frame. This fix also makes it so it is possible to jump to keyframes that are on subframes. Reviewed by: Sybren Differential Revision: https://developer.blender.org/D16595 === M release/datafiles/locale M release/scripts/addons M release/scripts/addons_contrib M source/blender/editors/screen/screen_ops.c === diff --git a/release/datafiles/locale b/release/datafiles/locale index fe221a8bc93..ef57e2c2c65 16 --- a/release/datafiles/locale +++ b/release/datafiles/locale @@ -1 +1 @@ -Subproject commit fe221a8bc934385d9f302c46a5c7cbeacddafe3b +Subproject commit ef57e2c2c65933a68811d58b40ed62b775e9b4b0 diff --git a/release/scripts/addons b/release/scripts/addons index 5a818af9508..946b62da3f9 16 --- a/release/scripts/addons +++ b/release/scripts/addons @@ -1 +1 @@ -Subproject commit 5a818af95080cccf04dfa8317f0e966bff515c64 +Subproject commit 946b62da3f9c93b4add8596aef836bf3a29ea27c diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib index c43c0b2bcf0..69b1305f4b7 16 --- a/release/scripts/addons_contrib +++ b/release/scripts/addons_contrib @@ -1 +1 @@ -Subproject commit c43c0b2bcf08c34d933c3b56f096c9a23c8eff68 +Subproject commit 69b1305f4b74fbd7e847acc6a5566755b9803d78 diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 6a910170e44..9c0963d0fb1 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -3106,7 +3106,9 @@ static int keyframe_jump_exec(bContext *C, wmOperator *op) while ((ak != NULL) && (done == false)) { if (scene->r.cfra != (int)ak->cfra) { /* this changes the frame, so set the frame and we're done */ - scene->r.cfra = (int)ak->cfra; + const int whole_frame = (int)ak->cfra; + scene->r.cfra = whole_frame; + scene->r.subframe = ak->cfra - whole_frame; done = true; } 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] [1b7b996e160] master: Merge branch 'blender-v3.4-release'
Commit: 1b7b996e160c0df69d7fab4981c750344bb3bd84 Author: Miguel Pozo Date: Thu Nov 24 13:36:48 2022 +0100 Branches: master https://developer.blender.org/rB1b7b996e160c0df69d7fab4981c750344bb3bd84 Merge branch 'blender-v3.4-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] [2a53e0f4376] blender-v3.4-release: FIX T102076: Add support for int attributes to draw manager.
Commit: 2a53e0f4376d8c3f91fb404893b2d4040efe3046 Author: Miguel Pozo Date: Thu Nov 24 13:29:53 2022 +0100 Branches: blender-v3.4-release https://developer.blender.org/rB2a53e0f4376d8c3f91fb404893b2d4040efe3046 FIX T102076: Add support for int attributes to draw manager. Add int attributes interpolation support for GPU subdivision. Ensure cached shaders match their intended defines. (The defines parameter was ignored when requesting a second time the same shader with different defines) De-duplicate the extract_attr_init code for subdiv/non-subdiv. Reviewed By: jbakker, fclem Maniphest Tasks: T102076 Differential Revision: https://developer.blender.org/D16420 === M source/blender/draw/intern/draw_cache_impl_subdivision.cc M source/blender/draw/intern/draw_subdivision.h M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_pos_nor.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_sculpt_data.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_weights.cc M source/blender/draw/intern/shaders/common_subdiv_custom_data_interp_comp.glsl M source/blender/gpu/GPU_vertex_format.h === diff --git a/source/blender/draw/intern/draw_cache_impl_subdivision.cc b/source/blender/draw/intern/draw_cache_impl_subdivision.cc index 6a9e6c126e9..b99075b1edd 100644 --- a/source/blender/draw/intern/draw_cache_impl_subdivision.cc +++ b/source/blender/draw/intern/draw_cache_impl_subdivision.cc @@ -70,6 +70,7 @@ enum { SHADER_BUFFER_TRIS_MULTIPLE_MATERIALS, SHADER_BUFFER_NORMALS_ACCUMULATE, SHADER_BUFFER_NORMALS_FINALIZE, + SHADER_BUFFER_CUSTOM_NORMALS_FINALIZE, SHADER_PATCH_EVALUATION, SHADER_PATCH_EVALUATION_FVAR, SHADER_PATCH_EVALUATION_FACE_DOTS, @@ -88,6 +89,10 @@ enum { static GPUShader *g_subdiv_shaders[NUM_SHADERS]; +#define SHADER_CUSTOM_DATA_INTERP_MAX_DIMENSIONS 4 +static GPUShader + *g_subdiv_custom_data_shaders[SHADER_CUSTOM_DATA_INTERP_MAX_DIMENSIONS][GPU_COMP_MAX]; + static const char *get_shader_code(int shader_type) { switch (shader_type) { @@ -208,7 +213,12 @@ static GPUShader *get_patch_evaluation_shader(int shader_type) const char *compute_code = get_shader_code(shader_type); const char *defines = nullptr; -if (shader_type == SHADER_PATCH_EVALUATION_FVAR) { +if (shader_type == SHADER_PATCH_EVALUATION) { + defines = + "#define OSD_PATCH_BASIS_GLSL\n" + "#define OPENSUBDIV_GLSL_COMPUTE_USE_1ST_DERIVATIVES\n"; +} +else if (shader_type == SHADER_PATCH_EVALUATION_FVAR) { defines = "#define OSD_PATCH_BASIS_GLSL\n" "#define OPENSUBDIV_GLSL_COMPUTE_USE_1ST_DERIVATIVES\n" @@ -234,9 +244,7 @@ static GPUShader *get_patch_evaluation_shader(int shader_type) "#define ORCO_EVALUATION\n"; } else { - defines = - "#define OSD_PATCH_BASIS_GLSL\n" - "#define OPENSUBDIV_GLSL_COMPUTE_USE_1ST_DERIVATIVES\n"; + BLI_assert_unreachable(); } /* Merge OpenSubdiv library code with our own library code. */ @@ -258,7 +266,7 @@ static GPUShader *get_patch_evaluation_shader(int shader_type) return g_subdiv_shaders[shader_type]; } -static GPUShader *get_subdiv_shader(int shader_type, const char *defines) +static GPUShader *get_subdiv_shader(int shader_type) { if (ELEM(shader_type, SHADER_PATCH_EVALUATION, @@ -267,14 +275,86 @@ static GPUShader *get_subdiv_shader(int shader_type, const char *defines) SHADER_PATCH_EVALUATION_ORCO)) { return get_patch_evaluation_shader(shader_type); } + + BLI_assert(!ELEM(shader_type, + SHADER_COMP_CUSTOM_DATA_INTERP_1D, + SHADER_COMP_CUSTOM_DATA_INTERP_2D, + SHADER_COMP_CUSTOM_DATA_INTERP_3D, + SHADER_COMP_CUSTOM_DATA_INTERP_4D)); + if (g_subdiv_shaders[shader_type] == nullptr) { const char *compute_code = get_shader_code(shader_type); +const char *defines = nullptr; + +if (ELEM(shader_type, + SHADER_BUFFER_LINES, + SHADER_BUFFER_LNOR, + SHADER_BUFFER_TRIS, + SHADER_BUFFER_UV_STRETCH_AREA)) { + defines = "#define SUBDIV_POLYGON_OFFSET\n"; +} +else if (shader_type == SHADER_BUFFER_TRIS_MULTIPLE_MATERIALS) { + defines = + "#define SUBDIV_POLYGON_OFFSET\n" + "#define SINGLE_MATERIAL\n"; +} +else if (shader_type == SHADER_BUFFER_LINES_LOOSE) { + defines = "#define LINES_LOOSE\n"; +} +else if (shader_type == SHADER_BUFFER_EDGE_FAC) { + /* No separate shader for the AMD driver case as we assume that the GPU will not change + * during t
[Bf-blender-cvs] [17e562311f9] blender-v3.4-release: Draw: Use 32-bit floats for custom color attributes
Commit: 17e562311f9f273f842bd169c22062dba0ecc618 Author: Miguel Pozo Date: Thu Nov 24 13:36:11 2022 +0100 Branches: blender-v3.4-release https://developer.blender.org/rB17e562311f9f273f842bd169c22062dba0ecc618 Draw: Use 32-bit floats for custom color attributes === M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc === diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc index 39f6fb6d9a2..f1a0636ceba 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc @@ -117,7 +117,6 @@ static GPUVertFetchMode get_fetch_mode_for_type(eCustomDataType type) case CD_PROP_INT8: case CD_PROP_INT32: return GPU_FETCH_INT_TO_FLOAT; -case CD_PROP_COLOR: case CD_PROP_BYTE_COLOR: return GPU_FETCH_INT_TO_FLOAT_UNIT; default: @@ -131,8 +130,9 @@ static GPUVertCompType get_comp_type_for_type(eCustomDataType type) case CD_PROP_INT8: case CD_PROP_INT32: return GPU_COMP_I32; -case CD_PROP_COLOR: case CD_PROP_BYTE_COLOR: + /* This should be u8, + * but u16 is required to store the color in linear space without precission loss */ return GPU_COMP_U16; default: return GPU_COMP_F32; @@ -309,7 +309,7 @@ static void extract_attr(const MeshRenderData *mr, extract_attr_generic(mr, vbo, request); break; case CD_PROP_COLOR: - extract_attr_generic(mr, vbo, request); + extract_attr_generic(mr, vbo, request); break; case CD_PROP_BYTE_COLOR: extract_attr_generic(mr, vbo, request); ___ 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] [71ac20ef187] refactor-mesh-uv-map-generic: Create associated UV bool layers on BMesh creation.
Commit: 71ac20ef187ae80ec76a2a6c16f8a35bc4b8f227 Author: Martijn Versteegh Date: Thu Nov 24 13:02:46 2022 +0100 Branches: refactor-mesh-uv-map-generic https://developer.blender.org/rB71ac20ef187ae80ec76a2a6c16f8a35bc4b8f227 Create associated UV bool layers on BMesh creation. Because on-demand allocation of the associated bool layers can lead to problems for the BMesh python api (adding layers in a BMesh reallocates the CustomData blocks, thus making existing pointers in python objects invalid) always create the layers when converting to a BMesh. === M source/blender/bmesh/intern/bmesh_mesh_convert.cc === diff --git a/source/blender/bmesh/intern/bmesh_mesh_convert.cc b/source/blender/bmesh/intern/bmesh_mesh_convert.cc index d4be23a44a8..e7f5e0b8faa 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc +++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc @@ -148,7 +148,38 @@ void BM_mesh_bm_from_me(BMesh *bm, const Mesh *me, const struct BMeshFromMeshPar mask.pmask); CustomData mesh_ldata = CustomData_shallow_copy_remove_non_bmesh_attributes(&me->ldata, mask.lmask); + + blender::Vector temporary_layers_to_delete; + + for (size_t l = 0; l < CustomData_number_of_layers(&mesh_ldata, CD_PROP_FLOAT2); l++) + { +char name[MAX_CUSTOMDATA_LAYER_NAME]; +get_uv_map_vert_selection_name(CustomData_get_layer_name(&mesh_ldata, CD_PROP_FLOAT2, l), name); +if (CustomData_get_named_layer_index(&mesh_ldata, CD_PROP_BOOL, name) < 0) +{ +CustomData_add_layer_named(&mesh_ldata, CD_PROP_BOOL, CD_SET_DEFAULT, nullptr, me->totloop, name); +temporary_layers_to_delete.append(std::string(name)); +} +get_uv_map_edge_selection_name(CustomData_get_layer_name(&mesh_ldata, CD_PROP_FLOAT2, l), name); +if (CustomData_get_named_layer_index(&mesh_ldata, CD_PROP_BOOL, name) < 0) +{ +CustomData_add_layer_named(&mesh_ldata, CD_PROP_BOOL, CD_SET_DEFAULT, nullptr, me->totloop, name); +temporary_layers_to_delete.append(std::string(name)); +} +get_uv_map_pin_name(CustomData_get_layer_name(&mesh_ldata, CD_PROP_FLOAT2, l), name); +if (CustomData_get_named_layer_index(&mesh_ldata, CD_PROP_BOOL, name) < 0) +{ +CustomData_add_layer_named(&mesh_ldata, CD_PROP_BOOL, CD_SET_DEFAULT, nullptr, me->totloop, name); +temporary_layers_to_delete.append(std::string(name)); +} + } + BLI_SCOPED_DEFER([&]() { +for (auto n : temporary_layers_to_delete) +{ +CustomData_free_layer_named(&mesh_ldata, n.c_str(), me->totloop); +} + MEM_SAFE_FREE(mesh_vdata.layers); MEM_SAFE_FREE(mesh_edata.layers); MEM_SAFE_FREE(mesh_pdata.layers); ___ 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] [c988561debd] refactor-mesh-uv-map-generic: Remove lazy bool attribute allocation for BMesh.
Commit: c988561debd5e30b560e0b96d71ca8217c2ba8ed Author: Martijn Versteegh Date: Thu Nov 24 13:06:37 2022 +0100 Branches: refactor-mesh-uv-map-generic https://developer.blender.org/rBc988561debd5e30b560e0b96d71ca8217c2ba8ed Remove lazy bool attribute allocation for BMesh. === M source/blender/bmesh/bmesh_class.h M source/blender/bmesh/intern/bmesh_interp.c M source/blender/bmesh/intern/bmesh_interp.h M source/blender/draw/intern/mesh_extractors/extract_mesh.cc M source/blender/editors/mesh/mesh_data.cc M source/blender/editors/sculpt_paint/sculpt_uv.c M source/blender/editors/uvedit/uvedit_ops.c M source/blender/editors/uvedit/uvedit_rip.c M source/blender/editors/uvedit/uvedit_select.c M source/blender/editors/uvedit/uvedit_unwrap_ops.c M source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_ico_sphere.cc M source/blender/python/bmesh/bmesh_py_types_meshdata.c === diff --git a/source/blender/bmesh/bmesh_class.h b/source/blender/bmesh/bmesh_class.h index ab6c17f92d7..a724a8783d4 100644 --- a/source/blender/bmesh/bmesh_class.h +++ b/source/blender/bmesh/bmesh_class.h @@ -533,9 +533,6 @@ typedef bool (*BMLoopPairFilterFunc)(const BMLoop *, const BMLoop *, void *user_ #define BM_ELEM_CD_GET_BOOL(ele, offset) \ (BLI_assert(offset != -1), *((bool *)((char *)(ele)->head.data + (offset -#define BM_ELEM_CD_GET_OPT_BOOL(ele, offset) \ - (offset == -1 ? false : *((bool *)((char *)(ele)->head.data + (offset - #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) # define BM_ELEM_CD_GET_BOOL_P(ele, offset) \ (BLI_assert(offset != -1), \ @@ -549,20 +546,6 @@ typedef bool (*BMLoopPairFilterFunc)(const BMLoop *, const BMLoop *, void *user_ (BLI_assert(offset != -1), (bool *)((char *)(ele)->head.data + (offset))) #endif -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) -# define BM_ELEM_CD_GET_OPT_BOOL_P(ele, offset) \ -((offset != -1) ? \ - _Generic(ele, \ - GENERIC_TYPE_ANY((bool *)POINTER_OFFSET((ele)->head.data, offset), \ - _BM_GENERIC_TYPE_ELEM_NONCONST), \ - GENERIC_TYPE_ANY((const bool *)POINTER_OFFSET((ele)->head.data, offset), \ - _BM_GENERIC_TYPE_ELEM_CONST)) : \ - NULL) -#else -# define BM_ELEM_CD_GET_OPT_BOOL_P(ele, offset) \ -((offset != -1) ? (bool *)((char *)(ele)->head.data + (offset)) : NULL) -#endif - #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) # define BM_ELEM_CD_GET_VOID_P(ele, offset) \ (BLI_assert(offset != -1), \ diff --git a/source/blender/bmesh/intern/bmesh_interp.c b/source/blender/bmesh/intern/bmesh_interp.c index 86f86d79fac..fdae1d71f04 100644 --- a/source/blender/bmesh/intern/bmesh_interp.c +++ b/source/blender/bmesh/intern/bmesh_interp.c @@ -881,6 +881,16 @@ void BM_data_layer_ensure_named(BMesh *bm, CustomData *data, int type, const cha } } +void BM_uv_map_ensure_selection_pin_attributes(BMesh *bm, const char *uv_map_name) +{ + char name[MAX_CUSTOMDATA_LAYER_NAME]; + BM_data_layer_ensure_named( + bm, &bm->ldata, CD_PROP_BOOL, get_uv_map_vert_selection_name(uv_map_name, name)); + BM_data_layer_ensure_named( + bm, &bm->ldata, CD_PROP_BOOL, get_uv_map_edge_selection_name(uv_map_name, name)); + BM_data_layer_ensure_named(bm, &bm->ldata, CD_PROP_BOOL, get_uv_map_pin_name(uv_map_name, name)); +} + void BM_uv_map_ensure_vert_selection_attribute(BMesh *bm, const char *uv_map_name) { char name[MAX_CUSTOMDATA_LAYER_NAME]; diff --git a/source/blender/bmesh/intern/bmesh_interp.h b/source/blender/bmesh/intern/bmesh_interp.h index cebf47910e1..f8bb45af1e7 100644 --- a/source/blender/bmesh/intern/bmesh_interp.h +++ b/source/blender/bmesh/intern/bmesh_interp.h @@ -65,6 +65,7 @@ void BM_data_layer_add_named(BMesh *bm, CustomData *data, int type, const char * void BM_data_layer_ensure_named(BMesh *bm, CustomData *data, int type, const char *name); void BM_data_layer_free(BMesh *bm, CustomData *data, int type); +void BM_uv_map_ensure_selection_pin_attributes(BMesh *bm, const char *uv_map_name); void BM_uv_map_ensure_vert_selection_attribute(BMesh *bm, const char *uv_map_name); void BM_uv_map_ensure_edge_selection_attribute(BMesh *bm, const char *uv_map_name); void BM_uv_map_ensure_pin_attribute(BMesh *bm, const char *uv_map_name); diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh.cc index 42336f7b416..98edb1c4e3c 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh.cc @@ -127,7 +127,7 @@ void mesh_render_data_loop_flag(const MeshRenderData *mr, if (offsets.uv == -1) { return;
[Bf-blender-cvs] [5f626ac331e] master: Cleanup: use more concise function names in function nodes
Commit: 5f626ac331ef8bc48d6db30d43aaa3d54f931987 Author: Jacques Lucke Date: Thu Nov 24 12:49:17 2022 +0100 Branches: master https://developer.blender.org/rB5f626ac331ef8bc48d6db30d43aaa3d54f931987 Cleanup: use more concise function names in function nodes This is the same naming convention that's used for geometry nodes. === M source/blender/nodes/function/nodes/node_fn_align_euler_to_vector.cc M source/blender/nodes/function/nodes/node_fn_boolean_math.cc M source/blender/nodes/function/nodes/node_fn_combine_color.cc M source/blender/nodes/function/nodes/node_fn_compare.cc M source/blender/nodes/function/nodes/node_fn_float_to_int.cc M source/blender/nodes/function/nodes/node_fn_input_bool.cc M source/blender/nodes/function/nodes/node_fn_input_color.cc M source/blender/nodes/function/nodes/node_fn_input_int.cc M source/blender/nodes/function/nodes/node_fn_input_special_characters.cc M source/blender/nodes/function/nodes/node_fn_input_string.cc M source/blender/nodes/function/nodes/node_fn_input_vector.cc M source/blender/nodes/function/nodes/node_fn_random_value.cc M source/blender/nodes/function/nodes/node_fn_replace_string.cc M source/blender/nodes/function/nodes/node_fn_rotate_euler.cc M source/blender/nodes/function/nodes/node_fn_separate_color.cc M source/blender/nodes/function/nodes/node_fn_slice_string.cc M source/blender/nodes/function/nodes/node_fn_string_length.cc M source/blender/nodes/function/nodes/node_fn_value_to_string.cc === diff --git a/source/blender/nodes/function/nodes/node_fn_align_euler_to_vector.cc b/source/blender/nodes/function/nodes/node_fn_align_euler_to_vector.cc index 9e21fc86871..20180971127 100644 --- a/source/blender/nodes/function/nodes/node_fn_align_euler_to_vector.cc +++ b/source/blender/nodes/function/nodes/node_fn_align_euler_to_vector.cc @@ -12,7 +12,7 @@ namespace blender::nodes::node_fn_align_euler_to_vector_cc { -static void fn_node_align_euler_to_vector_declare(NodeDeclarationBuilder &b) +static void node_declare(NodeDeclarationBuilder &b) { b.is_function_node(); b.add_input(N_("Rotation")).subtype(PROP_EULER).hide_value(); @@ -25,9 +25,7 @@ static void fn_node_align_euler_to_vector_declare(NodeDeclarationBuilder &b) b.add_output(N_("Rotation")).subtype(PROP_EULER); } -static void fn_node_align_euler_to_vector_layout(uiLayout *layout, - bContext * /*C*/, - PointerRNA *ptr) +static void node_layout(uiLayout *layout, bContext * /*C*/, PointerRNA *ptr) { uiItemR(layout, ptr, "axis", UI_ITEM_R_EXPAND, nullptr, ICON_NONE); uiLayoutSetPropSep(layout, true); @@ -188,7 +186,7 @@ class MF_AlignEulerToVector : public fn::MultiFunction { } }; -static void fn_node_align_euler_to_vector_build_multi_function(NodeMultiFunctionBuilder &builder) +static void node_build_multi_function(NodeMultiFunctionBuilder &builder) { const bNode &node = builder.node(); builder.construct_and_set_matching_fn(node.custom1, node.custom2); @@ -204,8 +202,8 @@ void register_node_type_fn_align_euler_to_vector() fn_node_type_base( &ntype, FN_NODE_ALIGN_EULER_TO_VECTOR, "Align Euler to Vector", NODE_CLASS_CONVERTER); - ntype.declare = file_ns::fn_node_align_euler_to_vector_declare; - ntype.draw_buttons = file_ns::fn_node_align_euler_to_vector_layout; - ntype.build_multi_function = file_ns::fn_node_align_euler_to_vector_build_multi_function; + ntype.declare = file_ns::node_declare; + ntype.draw_buttons = file_ns::node_layout; + ntype.build_multi_function = file_ns::node_build_multi_function; nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/function/nodes/node_fn_boolean_math.cc b/source/blender/nodes/function/nodes/node_fn_boolean_math.cc index 3027a81807b..849e03ca77f 100644 --- a/source/blender/nodes/function/nodes/node_fn_boolean_math.cc +++ b/source/blender/nodes/function/nodes/node_fn_boolean_math.cc @@ -14,7 +14,7 @@ namespace blender::nodes::node_fn_boolean_math_cc { -static void fn_node_boolean_math_declare(NodeDeclarationBuilder &b) +static void node_declare(NodeDeclarationBuilder &b) { b.is_function_node(); b.add_input(N_("Boolean"), "Boolean"); @@ -22,22 +22,19 @@ static void fn_node_boolean_math_declare(NodeDeclarationBuilder &b) b.add_output(N_("Boolean")); } -static void fn_node_boolean_math_layout(uiLayout *layout, bContext * /*C*/, PointerRNA *ptr) +static void node_layout(uiLayout *layout, bContext * /*C*/, PointerRNA *ptr) { uiItemR(layout, ptr, "operation", 0, "", ICON_NONE); } -static void node_boolean_math_update(bNodeTree *ntree, bNode *node) +static void node_update(bNodeTree *ntree, bNode *node) { bNodeSocket *sockB = (bNodeSocket *)BL
[Bf-blender-cvs] [369914e7b19] master: Liblink: Add test over direct vs indirect link status.
Commit: 369914e7b1971806a77da982213e82c1df737557 Author: Bastien Montagne Date: Thu Nov 24 10:50:58 2022 +0100 Branches: master https://developer.blender.org/rB369914e7b1971806a77da982213e82c1df737557 Liblink: Add test over direct vs indirect link status. Some checks are currently commented out, since Blender will never 'clear' the directly linked status of an ID once it has been used by local data. === M tests/python/bl_blendfile_liblink.py === diff --git a/tests/python/bl_blendfile_liblink.py b/tests/python/bl_blendfile_liblink.py index a4ca845da4e..c0ca18e1b1e 100644 --- a/tests/python/bl_blendfile_liblink.py +++ b/tests/python/bl_blendfile_liblink.py @@ -188,6 +188,90 @@ class TestBlendLibLinkSaveLoadBasic(TestBlendLibLinkHelper): assert orig_data == read_data +class TestBlendLibLinkIndirect(TestBlendLibLinkHelper): + +def __init__(self, args): +self.args = args + +def test_append(self): +output_dir = self.args.output_dir +output_lib_path = self.init_lib_data_indirect_lib() + +# Simple link of a single ObData. +self.reset_blender() + +link_dir = os.path.join(output_lib_path, "Mesh") +bpy.ops.wm.link(directory=link_dir, filename="LibMesh", instance_object_data=False) + +assert len(bpy.data.materials) == 1 +assert len(bpy.data.meshes) == 1 +assert len(bpy.data.objects) == 0 +assert len(bpy.data.collections) == 0 # Scene's master collection is not listed here + +mesh = bpy.data.meshes[0] +material = bpy.data.materials[0] + +assert material.library is not None +assert material.use_fake_user is True +assert material.users == 2 # Fake user is not cleared when linking. +assert material.is_library_indirect == True + +assert mesh.library is not None +assert mesh.use_fake_user is False +assert mesh.users == 0 +assert mesh.is_library_indirect == False # IDs explicitely linked by the user are forcefully considered directly linked. + +ob = bpy.data.objects.new("LocalMesh", mesh) +coll = bpy.data.collections.new("LocalMesh") +coll.objects.link(ob) +bpy.context.scene.collection.children.link(coll) + +assert material.users == 2 +assert material.is_library_indirect == True +assert mesh.users == 1 +assert mesh.is_library_indirect == False + +ob.material_slots[0].link = 'OBJECT' +ob.material_slots[0].material = material + +assert material.users == 3 +assert material.is_library_indirect == False + +ob.material_slots[0].material = None + +assert material.users == 2 +assert material.is_library_indirect == False # This is not properly updated whene removing a local user of linked data. + +output_work_path = os.path.join(output_dir, self.unique_blendfile_name("blendfile")) +bpy.ops.wm.save_as_mainfile(filepath=output_work_path, check_existing=False, compress=False) + +assert material.users == 2 +# Currently linked data which has no more local user never gets reset to indirectly linked status. +# ~ assert material.is_library_indirect == True + +bpy.ops.wm.open_mainfile(filepath=output_work_path, load_ui=False) + +assert len(bpy.data.materials) == 1 +assert len(bpy.data.meshes) == 1 +assert len(bpy.data.objects) == 1 +assert len(bpy.data.collections) == 1 # Scene's master collection is not listed here + +mesh = bpy.data.meshes[0] +material = bpy.data.materials[0] + +assert material.library is not None +assert material.use_fake_user is True +assert material.users == 2 # Fake user is not cleared when linking. +# Currently even re-reading the .blend file will not properly reset tag for indirectly linked data, +# if their reference was written in the .blend file. +# ~ assert material.is_library_indirect == True + +assert mesh.library is not None +assert mesh.use_fake_user is False +assert mesh.users == 1 +assert mesh.is_library_indirect == False + + class TestBlendLibAppendBasic(TestBlendLibLinkHelper): def __init__(self, args): @@ -204,13 +288,6 @@ class TestBlendLibAppendBasic(TestBlendLibLinkHelper): bpy.ops.wm.append(directory=link_dir, filename="LibMesh", instance_object_data=False, set_fake=False, use_recursive=False, do_reuse_local_id=False) -print( -bpy.data.materials[:], -bpy.data.materials[0].library, -bpy.data.materials[0].users, -bpy.data.materials[0].use_fake_user, -) - assert len(bpy.data.materials) == 1 assert bpy.data.materials[0].library is not None
[Bf-blender-cvs] [b7b9e670ce0] blender-v3.3-release: Fix T101020: Cycles Add Performance Preset is broken
Commit: b7b9e670ce0a6b6b167fb74e556bbef39f6e895d Author: Thomas Dinges Date: Thu Nov 24 10:13:57 2022 +0100 Branches: blender-v3.3-release https://developer.blender.org/rBb7b9e670ce0a6b6b167fb74e556bbef39f6e895d Fix T101020: Cycles Add Performance Preset is broken === M intern/cycles/blender/addon/presets.py === diff --git a/intern/cycles/blender/addon/presets.py b/intern/cycles/blender/addon/presets.py index e1f08c07eaf..6ad22d765aa 100644 --- a/intern/cycles/blender/addon/presets.py +++ b/intern/cycles/blender/addon/presets.py @@ -91,7 +91,7 @@ class AddPresetPerformance(AddPresetBase, Operator): preset_menu = "CYCLES_PT_performance_presets" preset_defines = [ -"render = bpy.context.scene.render" +"render = bpy.context.scene.render", "cycles = bpy.context.scene.cycles" ] ___ 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] [bbf09eb59ce] master: Merge branch 'blender-v3.4-release'
Commit: bbf09eb59ce22efbfc170bb7e7465b2eb7546e69 Author: Thomas Dinges Date: Thu Nov 24 10:15:36 2022 +0100 Branches: master https://developer.blender.org/rBbbf09eb59ce22efbfc170bb7e7465b2eb7546e69 Merge branch 'blender-v3.4-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] [b3daf61ddfc] blender-v3.4-release: Fix T101020: Cycles Add Performance Preset is broken
Commit: b3daf61ddfc0471f9d06d9f84428300462779f12 Author: Thomas Dinges Date: Thu Nov 24 10:13:57 2022 +0100 Branches: blender-v3.4-release https://developer.blender.org/rBb3daf61ddfc0471f9d06d9f84428300462779f12 Fix T101020: Cycles Add Performance Preset is broken === M intern/cycles/blender/addon/presets.py === diff --git a/intern/cycles/blender/addon/presets.py b/intern/cycles/blender/addon/presets.py index e1f08c07eaf..6ad22d765aa 100644 --- a/intern/cycles/blender/addon/presets.py +++ b/intern/cycles/blender/addon/presets.py @@ -91,7 +91,7 @@ class AddPresetPerformance(AddPresetBase, Operator): preset_menu = "CYCLES_PT_performance_presets" preset_defines = [ -"render = bpy.context.scene.render" +"render = bpy.context.scene.render", "cycles = bpy.context.scene.cycles" ] ___ 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] [459784b878b] asset-lite-greasepencil: Merge branch 'master' into asset-lite-greasepencil
Commit: 459784b878bbf0b69e4768b6a8ac5a22e7643602 Author: Antonio Vazquez Date: Thu Nov 24 10:10:48 2022 +0100 Branches: asset-lite-greasepencil https://developer.blender.org/rB459784b878bbf0b69e4768b6a8ac5a22e7643602 Merge branch 'master' into asset-lite-greasepencil === === ___ 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