From 7957c1a22b3bce07002c51c98b187802afac2325 Mon Sep 17 00:00:00 2001 From: Chris Blackbourn Date: Sat, 11 Feb 2023 20:09:16 +1300 Subject: [PATCH 001/182] Fix #104374: Simplify UV Face Selection and UV Island Selection Like in the 3D viewport, UV Face Selection was previously based on distance to the face center. Instead, measure distance to nearest edge instead, which is more consistent with a 2D viewport. --- source/blender/editors/uvedit/uvedit_intern.h | 25 +--- source/blender/editors/uvedit/uvedit_path.c | 2 +- source/blender/editors/uvedit/uvedit_select.c | 114 ++++++++---------- 3 files changed, 52 insertions(+), 89 deletions(-) diff --git a/source/blender/editors/uvedit/uvedit_intern.h b/source/blender/editors/uvedit/uvedit_intern.h index c090d8b95b71..36fc4848deb7 100644 --- a/source/blender/editors/uvedit/uvedit_intern.h +++ b/source/blender/editors/uvedit/uvedit_intern.h @@ -80,34 +80,11 @@ bool uv_find_nearest_edge_multi(struct Scene *scene, float penalty, struct UvNearestHit *hit); -/** - * \param only_in_face: when true, only hit faces which `co` is inside. - * This gives users a result they might expect, especially when zoomed in. - * - * \note Concave faces can cause odd behavior, although in practice this isn't often an issue. - * The center can be outside the face, in this case the distance to the center - * could cause the face to be considered too far away. - * If this becomes an issue we could track the distance to the faces closest edge. - */ -bool uv_find_nearest_face_ex(struct Scene *scene, - struct Object *obedit, - const float co[2], - struct UvNearestHit *hit, - bool only_in_face); -bool uv_find_nearest_face(struct Scene *scene, - struct Object *obedit, - const float co[2], - struct UvNearestHit *hit); -bool uv_find_nearest_face_multi_ex(struct Scene *scene, - struct Object **objects, - uint objects_len, - const float co[2], - struct UvNearestHit *hit, - bool only_in_face); bool uv_find_nearest_face_multi(struct Scene *scene, struct Object **objects, uint objects_len, const float co[2], + float penalty, struct UvNearestHit *hit); BMLoop *uv_find_nearest_loop_from_vert(struct Scene *scene, diff --git a/source/blender/editors/uvedit/uvedit_path.c b/source/blender/editors/uvedit/uvedit_path.c index 274196f79a4d..d37c860b67a4 100644 --- a/source/blender/editors/uvedit/uvedit_path.c +++ b/source/blender/editors/uvedit/uvedit_path.c @@ -577,7 +577,7 @@ static int uv_shortest_path_pick_invoke(bContext *C, wmOperator *op, const wmEve UvNearestHit hit = UV_NEAREST_HIT_INIT_MAX(®ion->v2d); bool hit_found = false; if (uv_selectmode == UV_SELECT_FACE) { - if (uv_find_nearest_face_multi(scene, objects, objects_len, co, &hit)) { + if (uv_find_nearest_face_multi(scene, objects, objects_len, co, 0.0f, &hit)) { hit_found = true; } } diff --git a/source/blender/editors/uvedit/uvedit_select.c b/source/blender/editors/uvedit/uvedit_select.c index 1796f6d34b63..3e070d41dc09 100644 --- a/source/blender/editors/uvedit/uvedit_select.c +++ b/source/blender/editors/uvedit/uvedit_select.c @@ -876,8 +876,8 @@ bool uv_find_nearest_edge_multi(Scene *scene, return found; } -bool uv_find_nearest_face_ex( - Scene *scene, Object *obedit, const float co[2], UvNearestHit *hit, const bool only_in_face) +static bool uv_find_nearest_face( + Scene *scene, Object *obedit, const float co[2], const float penalty, UvNearestHit *hit) { BLI_assert((hit->scale[0] > 0.0f) && (hit->scale[1] > 0.0f)); BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -893,60 +893,63 @@ bool uv_find_nearest_face_ex( continue; } - float cent[2]; - BM_face_uv_calc_center_median(efa, cd_loop_uv_offset, cent); - - float delta[2]; - sub_v2_v2v2(delta, co, cent); - mul_v2_v2(delta, hit->scale); - - const float dist_test_sq = len_squared_v2(delta); - - if (dist_test_sq < hit->dist_sq) { - - if (only_in_face) { - if (!BM_face_uv_point_inside_test(efa, co, cd_loop_uv_offset)) { - continue; - } - } - + if (BM_face_uv_point_inside_test(efa, co, cd_loop_uv_offset)) { hit->ob = obedit; hit->efa = efa; - hit->dist_sq = dist_test_sq; - found = true; + hit->dist_sq = 0; + return true; + } + + const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm); + + BMLoop *l; + BMIter liter; + int i; + BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) { + float *luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset); + float *luv_next = BM_ELEM_CD_GET_VOID_P(l->next, cd_loop_uv_offset); + + float delta[2]; + closest_to_line_segment_v2(delta, co, luv, luv_next); + + sub_v2_v2(delta, co); + mul_v2_v2(delta, hit->scale); + + float dist_test_sq = len_squared_v2(delta); + + /* Ensures that successive selection attempts will select other edges sharing the same + * UV coordinates as the previous selection. */ + if ((penalty != 0.0f) && uvedit_edge_select_test(scene, l, offsets)) { + dist_test_sq = square_f(sqrtf(dist_test_sq) + penalty); + } + if (dist_test_sq < hit->dist_sq) { + hit->ob = obedit; + hit->efa = efa; + + hit->l = l; + + hit->dist_sq = dist_test_sq; + found = true; + } } } return found; } -bool uv_find_nearest_face(Scene *scene, Object *obedit, const float co[2], UvNearestHit *hit) -{ - return uv_find_nearest_face_ex(scene, obedit, co, hit, false); -} - -bool uv_find_nearest_face_multi_ex(Scene *scene, - Object **objects, - const uint objects_len, - const float co[2], - UvNearestHit *hit, - const bool only_in_face) +bool uv_find_nearest_face_multi(Scene *scene, + Object **objects, + uint objects_len, + const float co[2], + const float penalty, + UvNearestHit *hit) { bool found = false; - for (uint ob_index = 0; ob_index < objects_len; ob_index++) { - Object *obedit = objects[ob_index]; - if (uv_find_nearest_face_ex(scene, obedit, co, hit, only_in_face)) { - found = true; - } + for (int ob_index = 0; ob_index < objects_len; ob_index++) { + found |= uv_find_nearest_face(scene, objects[ob_index], co, penalty, hit); } return found; } -bool uv_find_nearest_face_multi( - Scene *scene, Object **objects, const uint objects_len, const float co[2], UvNearestHit *hit) -{ - return uv_find_nearest_face_multi_ex(scene, objects, objects_len, co, hit, false); -} - static bool uv_nearest_between(const BMLoop *l, const float co[2], const int cd_loop_uv_offset) { const float *uv_prev = BM_ELEM_CD_GET_FLOAT_P(l->prev, cd_loop_uv_offset); @@ -2484,30 +2487,14 @@ static bool uv_mouse_select_multi(bContext *C, } else if (selectmode == UV_SELECT_FACE) { /* find face */ - found_item = uv_find_nearest_face_multi(scene, objects, objects_len, co, &hit); - - if (!found_item) { - /* Fallback, perform a second pass without a limited threshold, - * which succeeds as long as the cursor is inside the UV face. - * Useful when zoomed in, to select faces with distant screen-space face centers. */ - hit.dist_sq = FLT_MAX; - found_item = uv_find_nearest_face_multi_ex(scene, objects, objects_len, co, &hit, true); - } - + found_item = uv_find_nearest_face_multi(scene, objects, objects_len, co, penalty_dist, &hit); if (found_item) { BMesh *bm = BKE_editmesh_from_object(hit.ob)->bm; BM_mesh_active_face_set(bm, hit.efa); } } else if (selectmode == UV_SELECT_ISLAND) { - found_item = uv_find_nearest_edge_multi(scene, objects, objects_len, co, 0.0f, &hit); - - if (!found_item) { - /* Without this, we can be within the face of an island but too far from an edge, - * see face selection comment for details. */ - hit.dist_sq = FLT_MAX; - found_item = uv_find_nearest_face_multi_ex(scene, objects, objects_len, co, &hit, true); - } + found_item = uv_find_nearest_face_multi(scene, objects, objects_len, co, penalty_dist, &hit); } bool found = found_item; @@ -2528,9 +2515,8 @@ static bool uv_mouse_select_multi(bContext *C, is_selected = uvedit_edge_select_test(scene, hit.l, offsets); } else { - /* Vertex or island. For island (if we were using #uv_find_nearest_face_multi_ex, see above), - * `hit.l` is NULL, use `hit.efa` instead. */ - if (hit.l != NULL) { + /* Vertex or island. */ + if (hit.l) { is_selected = uvedit_uv_select_test(scene, hit.l, offsets); } else { -- 2.30.2 From 31f03b96073d841d63e8fb2140017774fd6f726e Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Sat, 11 Feb 2023 13:25:59 +0100 Subject: [PATCH 002/182] Geometry Nodes: use smooth normals in Distribute Points on Faces node Previously, the node used the "true" normal of every looptri. Now it uses the "loop normals" which includes e.g. smooth faces and custom normals. The true normal can still be used on the points by capturing it before the Distribute node. We do intend to expose the smooth normals separately in geometry nodes as well, but this is an important first step. It's also necessary to generate child hair between guide hair strands that don't have visible artifacts at face boundaries. For perfect backward compatibility, the node still has a "Legacy Normal" option in the side bar. Creating the exact same behavior with existing nodes isn't really possible unfortunately because of the specifics of how the Distribute node used to compute the normals using looptris. Pull Request #104414 --- .../blender/blenkernel/BKE_blender_version.h | 2 +- .../blenloader/intern/versioning_300.cc | 15 +++ source/blender/makesrna/intern/rna_nodetree.c | 8 ++ .../node_geo_distribute_points_on_faces.cc | 118 +++++++++++++----- 4 files changed, 114 insertions(+), 29 deletions(-) diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h index f5514fcc6320..395a0c34538e 100644 --- a/source/blender/blenkernel/BKE_blender_version.h +++ b/source/blender/blenkernel/BKE_blender_version.h @@ -25,7 +25,7 @@ extern "C" { /* Blender file format version. */ #define BLENDER_FILE_VERSION BLENDER_VERSION -#define BLENDER_FILE_SUBVERSION 8 +#define BLENDER_FILE_SUBVERSION 9 /* Minimum Blender version that supports reading file written with the current * version. Older Blender versions will test this and show a warning if the file diff --git a/source/blender/blenloader/intern/versioning_300.cc b/source/blender/blenloader/intern/versioning_300.cc index 4cadc4ff0285..3db5ecafe12e 100644 --- a/source/blender/blenloader/intern/versioning_300.cc +++ b/source/blender/blenloader/intern/versioning_300.cc @@ -3892,6 +3892,21 @@ void blo_do_versions_300(FileData *fd, Library * /*lib*/, Main *bmain) } } + if (!MAIN_VERSION_ATLEAST(bmain, 305, 9)) { + /* Enable legacy normal and rotation outputs in Distribute Points on Faces node. */ + LISTBASE_FOREACH (bNodeTree *, ntree, &bmain->nodetrees) { + if (ntree->type != NTREE_GEOMETRY) { + continue; + } + LISTBASE_FOREACH (bNode *, node, &ntree->nodes) { + if (node->type != GEO_NODE_DISTRIBUTE_POINTS_ON_FACES) { + continue; + } + node->custom2 = true; + } + } + } + /** * Versioning code until next subversion bump goes here. * diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index ed7ca84bda33..b7dc865bcdf2 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -9645,6 +9645,14 @@ static void def_geo_distribute_points_on_faces(StructRNA *srna) RNA_def_property_enum_default(prop, GEO_NODE_POINT_DISTRIBUTE_POINTS_ON_FACES_RANDOM); RNA_def_property_ui_text(prop, "Distribution Method", "Method to use for scattering points"); RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update"); + + prop = RNA_def_property(srna, "use_legacy_normal", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "custom2", 1); + RNA_def_property_ui_text(prop, + "Legacy Normal", + "Output the normal and rotation values that have been output " + "before the node started taking smooth normals into account"); + RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update"); } static void def_geo_curve_spline_type(StructRNA *srna) diff --git a/source/blender/nodes/geometry/nodes/node_geo_distribute_points_on_faces.cc b/source/blender/nodes/geometry/nodes/node_geo_distribute_points_on_faces.cc index d37f36e17a5f..0e459566d479 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_distribute_points_on_faces.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_distribute_points_on_faces.cc @@ -67,6 +67,11 @@ static void node_layout(uiLayout *layout, bContext * /*C*/, PointerRNA *ptr) uiItemR(layout, ptr, "distribute_method", 0, "", ICON_NONE); } +static void node_layout_ex(uiLayout *layout, bContext * /*C*/, PointerRNA *ptr) +{ + uiItemR(layout, ptr, "use_legacy_normal", 0, nullptr, ICON_NONE); +} + static void node_point_distribute_points_on_faces_update(bNodeTree *ntree, bNode *node) { bNodeSocket *sock_distance_min = static_cast(BLI_findlink(&node->inputs, 2)); @@ -325,11 +330,73 @@ struct AttributeOutputs { }; } // namespace +static void compute_normal_outputs(const Mesh &mesh, + const Span bary_coords, + const Span looptri_indices, + MutableSpan r_normals) +{ + Array corner_normals(mesh.totloop); + BKE_mesh_calc_normals_split_ex( + const_cast(&mesh), nullptr, reinterpret_cast(corner_normals.data())); + + const Span looptris = mesh.looptris(); + + threading::parallel_for(bary_coords.index_range(), 512, [&](const IndexRange range) { + for (const int i : range) { + const int looptri_index = looptri_indices[i]; + const MLoopTri &looptri = looptris[looptri_index]; + const float3 &bary_coord = bary_coords[i]; + + const float3 normal = math::normalize( + bke::mesh_surface_sample::sample_corner_attrribute_with_bary_coords( + bary_coord, looptri, corner_normals.as_span())); + + r_normals[i] = normal; + } + }); +} + +static void compute_legacy_normal_outputs(const Mesh &mesh, + const Span bary_coords, + const Span looptri_indices, + MutableSpan r_normals) +{ + const Span positions = mesh.vert_positions(); + const Span loops = mesh.loops(); + const Span looptris = mesh.looptris(); + + for (const int i : bary_coords.index_range()) { + const int looptri_index = looptri_indices[i]; + const MLoopTri &looptri = looptris[looptri_index]; + + const int v0_index = loops[looptri.tri[0]].v; + const int v1_index = loops[looptri.tri[1]].v; + const int v2_index = loops[looptri.tri[2]].v; + const float3 v0_pos = positions[v0_index]; + const float3 v1_pos = positions[v1_index]; + const float3 v2_pos = positions[v2_index]; + + float3 normal; + normal_tri_v3(normal, v0_pos, v1_pos, v2_pos); + r_normals[i] = normal; + } +} + +static void compute_rotation_output(const Span normals, MutableSpan r_rotations) +{ + threading::parallel_for(normals.index_range(), 256, [&](const IndexRange range) { + for (const int i : range) { + r_rotations[i] = normal_to_euler_rotation(normals[i]); + } + }); +} + BLI_NOINLINE static void compute_attribute_outputs(const Mesh &mesh, PointCloud &points, const Span bary_coords, const Span looptri_indices, - const AttributeOutputs &attribute_outputs) + const AttributeOutputs &attribute_outputs, + const bool use_legacy_normal) { MutableAttributeAccessor point_attributes = points.attributes_for_write(); @@ -348,33 +415,24 @@ BLI_NOINLINE static void compute_attribute_outputs(const Mesh &mesh, attribute_outputs.rotation_id.get(), ATTR_DOMAIN_POINT); } - const Span positions = mesh.vert_positions(); - const Span loops = mesh.loops(); - const Span looptris = mesh.looptris(); - - for (const int i : bary_coords.index_range()) { - const int looptri_index = looptri_indices[i]; - const MLoopTri &looptri = looptris[looptri_index]; - const float3 &bary_coord = bary_coords[i]; - - const int v0_index = loops[looptri.tri[0]].v; - const int v1_index = loops[looptri.tri[1]].v; - const int v2_index = loops[looptri.tri[2]].v; - const float3 v0_pos = positions[v0_index]; - const float3 v1_pos = positions[v1_index]; - const float3 v2_pos = positions[v2_index]; - - ids.span[i] = noise::hash(noise::hash_float(bary_coord), looptri_index); - - float3 normal; - if (!normals.span.is_empty() || !rotations.span.is_empty()) { - normal_tri_v3(normal, v0_pos, v1_pos, v2_pos); + threading::parallel_for(bary_coords.index_range(), 1024, [&](const IndexRange range) { + for (const int i : range) { + const int looptri_index = looptri_indices[i]; + const float3 &bary_coord = bary_coords[i]; + ids.span[i] = noise::hash(noise::hash_float(bary_coord), looptri_index); } - if (!normals.span.is_empty()) { - normals.span[i] = normal; + }); + + if (normals) { + if (use_legacy_normal) { + compute_legacy_normal_outputs(mesh, bary_coords, looptri_indices, normals.span); } - if (!rotations.span.is_empty()) { - rotations.span[i] = normal_to_euler_rotation(normal); + else { + compute_normal_outputs(mesh, bary_coords, looptri_indices, normals.span); + } + + if (rotations) { + compute_rotation_output(normals.span, rotations.span); } } @@ -507,7 +565,9 @@ static void point_distribution_calculate(GeometrySet &geometry_set, propagate_existing_attributes(mesh, attributes, *pointcloud, bary_coords, looptri_indices); - compute_attribute_outputs(mesh, *pointcloud, bary_coords, looptri_indices, attribute_outputs); + const bool use_legacy_normal = params.node().custom2 != 0; + compute_attribute_outputs( + mesh, *pointcloud, bary_coords, looptri_indices, attribute_outputs, use_legacy_normal); } static void node_geo_exec(GeoNodeExecParams params) @@ -521,8 +581,9 @@ static void node_geo_exec(GeoNodeExecParams params) const Field selection_field = params.extract_input>("Selection"); AttributeOutputs attribute_outputs; - attribute_outputs.normal_id = params.get_output_anonymous_attribute_id_if_needed("Normal"); attribute_outputs.rotation_id = params.get_output_anonymous_attribute_id_if_needed("Rotation"); + attribute_outputs.normal_id = params.get_output_anonymous_attribute_id_if_needed( + "Normal", bool(attribute_outputs.rotation_id)); lazy_threading::send_hint(); @@ -567,5 +628,6 @@ void register_node_type_geo_distribute_points_on_faces() ntype.declare = file_ns::node_declare; ntype.geometry_node_execute = file_ns::node_geo_exec; ntype.draw_buttons = file_ns::node_layout; + ntype.draw_buttons_ex = file_ns::node_layout_ex; nodeRegisterType(&ntype); } -- 2.30.2 From 5f8f8135b0c82b62dbcaa8061e1f6c00b85ad1c3 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Sat, 11 Feb 2023 13:46:37 +0100 Subject: [PATCH 003/182] Curves: initial surface collision for curves sculpt mode During hair grooming in curves sculpt mode, it is very useful when hair strands are prevented from intersecting with the surface mesh. Unfortunately, it also decreases performance significantly so we don't want it to be turned on all the time. The surface collision is used by the Comb, Pinch and Puff brushes currently. It can be turned on or off on a per-geometry basis. The intersection prevention quality of this patch is not perfect yet. This can be improved over time using a better solver. Overall, perfect collision detection at the cost of bad performance is not necessary for interactive sculpting, because the user can fix small mistakes very quickly. Nevertheless, the quality can probably still be improved significantly without too big slow-downs depending on the use case. This can be done separately from this patch. Pull Request #104469 --- release/scripts/startup/bl_ui/space_view3d.py | 2 + source/blender/blenlib/BLI_index_mask_ops.hh | 5 + source/blender/blenlib/intern/index_mask.cc | 9 +- .../sculpt_paint/curves_sculpt_brush.cc | 38 ++++ .../sculpt_paint/curves_sculpt_comb.cc | 80 ++------- .../sculpt_paint/curves_sculpt_intern.hh | 21 +++ .../sculpt_paint/curves_sculpt_pinch.cc | 60 ++----- .../sculpt_paint/curves_sculpt_puff.cc | 59 ++---- source/blender/geometry/CMakeLists.txt | 2 + .../blender/geometry/GEO_curve_constraints.hh | 27 +++ .../geometry/intern/curve_constraints.cc | 168 ++++++++++++++++++ source/blender/makesdna/DNA_curves_types.h | 1 + source/blender/makesrna/intern/rna_curves.c | 7 + 13 files changed, 329 insertions(+), 150 deletions(-) create mode 100644 source/blender/geometry/GEO_curve_constraints.hh create mode 100644 source/blender/geometry/intern/curve_constraints.cc diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index d74dc27843e7..7b3f7278d0bc 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -161,6 +161,8 @@ class VIEW3D_HT_tool_header(Header): sub.prop(context.object.data, "use_mirror_y", text="Y", toggle=True) sub.prop(context.object.data, "use_mirror_z", text="Z", toggle=True) + layout.prop(context.object.data, "use_sculpt_collision", icon='MOD_PHYSICS', icon_only=True, toggle=True) + # Expand panels from the side-bar as popovers. popover_kw = {"space_type": 'VIEW_3D', "region_type": 'UI', "category": "Tool"} diff --git a/source/blender/blenlib/BLI_index_mask_ops.hh b/source/blender/blenlib/BLI_index_mask_ops.hh index e4eece11e83a..51c80bafe3ed 100644 --- a/source/blender/blenlib/BLI_index_mask_ops.hh +++ b/source/blender/blenlib/BLI_index_mask_ops.hh @@ -71,4 +71,9 @@ IndexMask find_indices_from_virtual_array(IndexMask indices_to_check, int64_t parallel_grain_size, Vector &r_indices); +/** + * Find the true indices in a boolean span. + */ +IndexMask find_indices_from_array(Span array, Vector &r_indices); + } // namespace blender::index_mask_ops diff --git a/source/blender/blenlib/intern/index_mask.cc b/source/blender/blenlib/intern/index_mask.cc index adcc2de8bdb1..bc58707b4793 100644 --- a/source/blender/blenlib/intern/index_mask.cc +++ b/source/blender/blenlib/intern/index_mask.cc @@ -208,8 +208,7 @@ IndexMask find_indices_from_virtual_array(const IndexMask indices_to_check, } if (virtual_array.is_span()) { const Span span = virtual_array.get_internal_span(); - return find_indices_based_on_predicate( - indices_to_check, 4096, r_indices, [&](const int64_t i) { return span[i]; }); + return find_indices_from_array(span, r_indices); } threading::EnumerableThreadSpecific> materialize_buffers; @@ -241,4 +240,10 @@ IndexMask find_indices_from_virtual_array(const IndexMask indices_to_check, return detail::find_indices_based_on_predicate__merge(indices_to_check, sub_masks, r_indices); } +IndexMask find_indices_from_array(const Span array, Vector &r_indices) +{ + return find_indices_based_on_predicate( + array.index_range(), 4096, r_indices, [array](const int64_t i) { return array[i]; }); +} + } // namespace blender::index_mask_ops diff --git a/source/blender/editors/sculpt_paint/curves_sculpt_brush.cc b/source/blender/editors/sculpt_paint/curves_sculpt_brush.cc index b9e1673742ec..c3d7734dd36d 100644 --- a/source/blender/editors/sculpt_paint/curves_sculpt_brush.cc +++ b/source/blender/editors/sculpt_paint/curves_sculpt_brush.cc @@ -22,6 +22,8 @@ #include "BLT_translation.h" +#include "GEO_curve_constraints.hh" + /** * The code below uses a prefix naming convention to indicate the coordinate space: * cu: Local space of the curves object that is being edited. @@ -431,4 +433,40 @@ void report_invalid_uv_map(ReportList *reports) BKE_report(reports, RPT_WARNING, TIP_("Invalid UV map: UV islands must not overlap")); } +void CurvesConstraintSolver::initialize(const bke::CurvesGeometry &curves, + const IndexMask curve_selection, + const bool use_surface_collision) +{ + use_surface_collision_ = use_surface_collision; + segment_lengths_.reinitialize(curves.points_num()); + geometry::curve_constraints::compute_segment_lengths( + curves.points_by_curve(), curves.positions(), curve_selection, segment_lengths_); + if (use_surface_collision_) { + start_positions_ = curves.positions(); + } +} + +void CurvesConstraintSolver::solve_step(bke::CurvesGeometry &curves, + const IndexMask curve_selection, + const Mesh *surface, + const CurvesSurfaceTransforms &transforms) +{ + if (use_surface_collision_ && surface != nullptr) { + geometry::curve_constraints::solve_length_and_collision_constraints( + curves.points_by_curve(), + curve_selection, + segment_lengths_, + start_positions_, + *surface, + transforms, + curves.positions_for_write()); + start_positions_ = curves.positions(); + } + else { + geometry::curve_constraints::solve_length_constraints( + curves.points_by_curve(), curve_selection, segment_lengths_, curves.positions_for_write()); + } + curves.tag_positions_changed(); +} + } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/curves_sculpt_comb.cc b/source/blender/editors/sculpt_paint/curves_sculpt_comb.cc index 24a6a47555ca..89a7d926fe95 100644 --- a/source/blender/editors/sculpt_paint/curves_sculpt_comb.cc +++ b/source/blender/editors/sculpt_paint/curves_sculpt_comb.cc @@ -66,8 +66,8 @@ class CombOperation : public CurvesSculptStrokeOperation { /** Only used when a 3D brush is used. */ CurvesBrush3D brush_3d_; - /** Length of each segment indexed by the index of the first point in the segment. */ - Array segment_lengths_cu_; + /** Solver for length and collision constraints. */ + CurvesConstraintSolver constraint_solver_; friend struct CombOperationExecutor; @@ -144,12 +144,13 @@ struct CombOperationExecutor { if (falloff_shape_ == PAINT_FALLOFF_SHAPE_SPHERE) { this->initialize_spherical_brush_reference_point(); } - this->initialize_segment_lengths(); + self_->constraint_solver_.initialize( + *curves_orig_, curve_selection_, curves_id_orig_->flag & CV_SCULPT_COLLISION_ENABLED); /* Combing does nothing when there is no mouse movement, so return directly. */ return; } - EnumerableThreadSpecific> changed_curves; + Array changed_curves(curves_orig_->curves_num(), false); if (falloff_shape_ == PAINT_FALLOFF_SHAPE_TUBE) { this->comb_projected_with_symmetry(changed_curves); @@ -161,7 +162,14 @@ struct CombOperationExecutor { BLI_assert_unreachable(); } - this->restore_segment_lengths(changed_curves); + const Mesh *surface = curves_id_orig_->surface && curves_id_orig_->surface->type == OB_MESH ? + static_cast(curves_id_orig_->surface->data) : + nullptr; + + Vector indices; + const IndexMask changed_curves_mask = index_mask_ops::find_indices_from_array(changed_curves, + indices); + self_->constraint_solver_.solve_step(*curves_orig_, changed_curves_mask, surface, transforms_); curves_orig_->tag_positions_changed(); DEG_id_tag_update(&curves_id_orig_->id, ID_RECALC_GEOMETRY); @@ -172,7 +180,7 @@ struct CombOperationExecutor { /** * Do combing in screen space. */ - void comb_projected_with_symmetry(EnumerableThreadSpecific> &r_changed_curves) + void comb_projected_with_symmetry(MutableSpan r_changed_curves) { const Vector symmetry_brush_transforms = get_symmetry_brush_transforms( eCurvesSymmetryType(curves_id_orig_->symmetry)); @@ -181,8 +189,7 @@ struct CombOperationExecutor { } } - void comb_projected(EnumerableThreadSpecific> &r_changed_curves, - const float4x4 &brush_transform) + void comb_projected(MutableSpan r_changed_curves, const float4x4 &brush_transform) { const float4x4 brush_transform_inv = math::invert(brush_transform); @@ -198,7 +205,6 @@ struct CombOperationExecutor { const float brush_radius_sq_re = pow2f(brush_radius_re); threading::parallel_for(curve_selection_.index_range(), 256, [&](const IndexRange range) { - Vector &local_changed_curves = r_changed_curves.local(); for (const int curve_i : curve_selection_.slice(range)) { bool curve_changed = false; const IndexRange points = points_by_curve[curve_i]; @@ -246,7 +252,7 @@ struct CombOperationExecutor { curve_changed = true; } if (curve_changed) { - local_changed_curves.append(curve_i); + r_changed_curves[curve_i] = true; } } }); @@ -255,7 +261,7 @@ struct CombOperationExecutor { /** * Do combing in 3D space. */ - void comb_spherical_with_symmetry(EnumerableThreadSpecific> &r_changed_curves) + void comb_spherical_with_symmetry(MutableSpan r_changed_curves) { float4x4 projection; ED_view3d_ob_project_mat_get(ctx_.rv3d, curves_ob_orig_, projection.ptr()); @@ -289,7 +295,7 @@ struct CombOperationExecutor { } } - void comb_spherical(EnumerableThreadSpecific> &r_changed_curves, + void comb_spherical(MutableSpan r_changed_curves, const float3 &brush_start_cu, const float3 &brush_end_cu, const float brush_radius_cu) @@ -303,7 +309,6 @@ struct CombOperationExecutor { const OffsetIndices points_by_curve = curves_orig_->points_by_curve(); threading::parallel_for(curve_selection_.index_range(), 256, [&](const IndexRange range) { - Vector &local_changed_curves = r_changed_curves.local(); for (const int curve_i : curve_selection_.slice(range)) { bool curve_changed = false; const IndexRange points = points_by_curve[curve_i]; @@ -335,7 +340,7 @@ struct CombOperationExecutor { curve_changed = true; } if (curve_changed) { - local_changed_curves.append(curve_i); + r_changed_curves[curve_i] = true; } } }); @@ -357,53 +362,6 @@ struct CombOperationExecutor { self_->brush_3d_ = *brush_3d; } } - - /** - * Remember the initial length of all curve segments. This allows restoring the length after - * combing. - */ - void initialize_segment_lengths() - { - const Span positions_cu = curves_orig_->positions(); - const OffsetIndices points_by_curve = curves_orig_->points_by_curve(); - self_->segment_lengths_cu_.reinitialize(curves_orig_->points_num()); - threading::parallel_for(curves_orig_->curves_range(), 128, [&](const IndexRange range) { - for (const int curve_i : range) { - const IndexRange points = points_by_curve[curve_i]; - for (const int point_i : points.drop_back(1)) { - const float3 &p1_cu = positions_cu[point_i]; - const float3 &p2_cu = positions_cu[point_i + 1]; - const float length_cu = math::distance(p1_cu, p2_cu); - self_->segment_lengths_cu_[point_i] = length_cu; - } - } - }); - } - - /** - * Restore previously stored length for each segment in the changed curves. - */ - void restore_segment_lengths(EnumerableThreadSpecific> &changed_curves) - { - const Span expected_lengths_cu = self_->segment_lengths_cu_; - const OffsetIndices points_by_curve = curves_orig_->points_by_curve(); - MutableSpan positions_cu = curves_orig_->positions_for_write(); - - threading::parallel_for_each(changed_curves, [&](const Vector &changed_curves) { - threading::parallel_for(changed_curves.index_range(), 256, [&](const IndexRange range) { - for (const int curve_i : changed_curves.as_span().slice(range)) { - const IndexRange points = points_by_curve[curve_i]; - for (const int segment_i : points.drop_back(1)) { - const float3 &p1_cu = positions_cu[segment_i]; - float3 &p2_cu = positions_cu[segment_i + 1]; - const float3 direction = math::normalize(p2_cu - p1_cu); - const float expected_length_cu = expected_lengths_cu[segment_i]; - p2_cu = p1_cu + direction * expected_length_cu; - } - } - }); - }); - } }; void CombOperation::on_stroke_extended(const bContext &C, const StrokeExtension &stroke_extension) diff --git a/source/blender/editors/sculpt_paint/curves_sculpt_intern.hh b/source/blender/editors/sculpt_paint/curves_sculpt_intern.hh index eb670d089e5a..10e4d08763ba 100644 --- a/source/blender/editors/sculpt_paint/curves_sculpt_intern.hh +++ b/source/blender/editors/sculpt_paint/curves_sculpt_intern.hh @@ -144,4 +144,25 @@ void report_missing_uv_map_on_original_surface(ReportList *reports); void report_missing_uv_map_on_evaluated_surface(ReportList *reports); void report_invalid_uv_map(ReportList *reports); +/** + * Utility class to make it easy for brushes to implement length preservation and surface + * collision. + */ +struct CurvesConstraintSolver { + private: + bool use_surface_collision_; + Array start_positions_; + Array segment_lengths_; + + public: + void initialize(const bke::CurvesGeometry &curves, + const IndexMask curve_selection, + const bool use_surface_collision); + + void solve_step(bke::CurvesGeometry &curves, + const IndexMask curve_selection, + const Mesh *surface, + const CurvesSurfaceTransforms &transforms); +}; + } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/curves_sculpt_pinch.cc b/source/blender/editors/sculpt_paint/curves_sculpt_pinch.cc index 9e3528d96eb5..dc854dc166d1 100644 --- a/source/blender/editors/sculpt_paint/curves_sculpt_pinch.cc +++ b/source/blender/editors/sculpt_paint/curves_sculpt_pinch.cc @@ -4,6 +4,7 @@ #include "curves_sculpt_intern.hh" +#include "BLI_index_mask_ops.hh" #include "BLI_math_matrix_types.hh" #include "BLI_task.hh" #include "BLI_vector.hh" @@ -42,7 +43,9 @@ namespace blender::ed::sculpt_paint { class PinchOperation : public CurvesSculptStrokeOperation { private: bool invert_pinch_; - Array segment_lengths_cu_; + + /** Solver for length and collision constraints. */ + CurvesConstraintSolver constraint_solver_; /** Only used when a 3D brush is used. */ CurvesBrush3D brush_3d_; @@ -115,8 +118,6 @@ struct PinchOperationExecutor { brush_->falloff_shape); if (stroke_extension.is_first) { - this->initialize_segment_lengths(); - if (falloff_shape == PAINT_FALLOFF_SHAPE_SPHERE) { self_->brush_3d_ = *sample_curves_3d_brush(*ctx_.depsgraph, *ctx_.region, @@ -126,6 +127,9 @@ struct PinchOperationExecutor { brush_pos_re_, brush_radius_base_re_); } + + self_->constraint_solver_.initialize( + *curves_, curve_selection_, curves_id_->flag & CV_SCULPT_COLLISION_ENABLED); } Array changed_curves(curves_->curves_num(), false); @@ -139,7 +143,14 @@ struct PinchOperationExecutor { BLI_assert_unreachable(); } - this->restore_segment_lengths(changed_curves); + Vector indices; + const IndexMask changed_curves_mask = index_mask_ops::find_indices_from_array(changed_curves, + indices); + const Mesh *surface = curves_id_->surface && curves_id_->surface->type == OB_MESH ? + static_cast(curves_id_->surface->data) : + nullptr; + self_->constraint_solver_.solve_step(*curves_, changed_curves_mask, surface, transforms_); + curves_->tag_positions_changed(); DEG_id_tag_update(&curves_id_->id, ID_RECALC_GEOMETRY); WM_main_add_notifier(NC_GEOM | ND_DATA, &curves_id_->id); @@ -270,47 +281,6 @@ struct PinchOperationExecutor { } }); } - - void initialize_segment_lengths() - { - const Span positions_cu = curves_->positions(); - const OffsetIndices points_by_curve = curves_->points_by_curve(); - self_->segment_lengths_cu_.reinitialize(curves_->points_num()); - threading::parallel_for(curve_selection_.index_range(), 256, [&](const IndexRange range) { - for (const int curve_i : curve_selection_.slice(range)) { - const IndexRange points = points_by_curve[curve_i]; - for (const int point_i : points.drop_back(1)) { - const float3 &p1_cu = positions_cu[point_i]; - const float3 &p2_cu = positions_cu[point_i + 1]; - const float length_cu = math::distance(p1_cu, p2_cu); - self_->segment_lengths_cu_[point_i] = length_cu; - } - } - }); - } - - void restore_segment_lengths(const Span changed_curves) - { - const Span expected_lengths_cu = self_->segment_lengths_cu_; - const OffsetIndices points_by_curve = curves_->points_by_curve(); - MutableSpan positions_cu = curves_->positions_for_write(); - - threading::parallel_for(changed_curves.index_range(), 256, [&](const IndexRange range) { - for (const int curve_i : range) { - if (!changed_curves[curve_i]) { - continue; - } - const IndexRange points = points_by_curve[curve_i]; - for (const int segment_i : IndexRange(points.size() - 1)) { - const float3 &p1_cu = positions_cu[points[segment_i]]; - float3 &p2_cu = positions_cu[points[segment_i] + 1]; - const float3 direction = math::normalize(p2_cu - p1_cu); - const float expected_length_cu = expected_lengths_cu[points[segment_i]]; - p2_cu = p1_cu + direction * expected_length_cu; - } - } - }); - } }; void PinchOperation::on_stroke_extended(const bContext &C, const StrokeExtension &stroke_extension) diff --git a/source/blender/editors/sculpt_paint/curves_sculpt_puff.cc b/source/blender/editors/sculpt_paint/curves_sculpt_puff.cc index 503639614ded..26af897c0bf6 100644 --- a/source/blender/editors/sculpt_paint/curves_sculpt_puff.cc +++ b/source/blender/editors/sculpt_paint/curves_sculpt_puff.cc @@ -19,6 +19,7 @@ #include "WM_api.h" +#include "BLI_index_mask_ops.hh" #include "BLI_length_parameterize.hh" #include "BLI_math_matrix.hh" #include "BLI_task.hh" @@ -34,8 +35,8 @@ class PuffOperation : public CurvesSculptStrokeOperation { /** Only used when a 3D brush is used. */ CurvesBrush3D brush_3d_; - /** Length of each segment indexed by the index of the first point in the segment. */ - Array segment_lengths_cu_; + /** Solver for length and collision constraints. */ + CurvesConstraintSolver constraint_solver_; friend struct PuffOperationExecutor; @@ -130,7 +131,6 @@ struct PuffOperationExecutor { BLI_SCOPED_DEFER([&]() { free_bvhtree_from_mesh(&surface_bvh_); }); if (stroke_extension.is_first) { - this->initialize_segment_lengths(); if (falloff_shape_ == PAINT_FALLOFF_SHAPE_SPHERE) { self.brush_3d_ = *sample_curves_3d_brush(*ctx_.depsgraph, *ctx_.region, @@ -140,6 +140,9 @@ struct PuffOperationExecutor { brush_pos_re_, brush_radius_base_re_); } + + self_->constraint_solver_.initialize( + *curves_, curve_selection_, curves_id_->flag & CV_SCULPT_COLLISION_ENABLED); } Array curve_weights(curve_selection_.size(), 0.0f); @@ -155,7 +158,17 @@ struct PuffOperationExecutor { } this->puff(curve_weights); - this->restore_segment_lengths(); + + Vector changed_curves_indices; + changed_curves_indices.reserve(curve_selection_.size()); + for (int64_t select_i : curve_selection_.index_range()) { + if (curve_weights[select_i] > 0.0f) { + changed_curves_indices.append(curve_selection_[select_i]); + } + } + + self_->constraint_solver_.solve_step( + *curves_, IndexMask(changed_curves_indices), surface_, transforms_); curves_->tag_positions_changed(); DEG_id_tag_update(&curves_id_->id, ID_RECALC_GEOMETRY); @@ -344,44 +357,6 @@ struct PuffOperationExecutor { } }); } - - void initialize_segment_lengths() - { - const OffsetIndices points_by_curve = curves_->points_by_curve(); - const Span positions_cu = curves_->positions(); - self_->segment_lengths_cu_.reinitialize(curves_->points_num()); - threading::parallel_for(curves_->curves_range(), 128, [&](const IndexRange range) { - for (const int curve_i : range) { - const IndexRange points = points_by_curve[curve_i]; - for (const int point_i : points.drop_back(1)) { - const float3 &p1_cu = positions_cu[point_i]; - const float3 &p2_cu = positions_cu[point_i + 1]; - const float length_cu = math::distance(p1_cu, p2_cu); - self_->segment_lengths_cu_[point_i] = length_cu; - } - } - }); - } - - void restore_segment_lengths() - { - const Span expected_lengths_cu = self_->segment_lengths_cu_; - const OffsetIndices points_by_curve = curves_->points_by_curve(); - MutableSpan positions_cu = curves_->positions_for_write(); - - threading::parallel_for(curves_->curves_range(), 256, [&](const IndexRange range) { - for (const int curve_i : range) { - const IndexRange points = points_by_curve[curve_i]; - for (const int segment_i : points.drop_back(1)) { - const float3 &p1_cu = positions_cu[segment_i]; - float3 &p2_cu = positions_cu[segment_i + 1]; - const float3 direction = math::normalize(p2_cu - p1_cu); - const float expected_length_cu = expected_lengths_cu[segment_i]; - p2_cu = p1_cu + direction * expected_length_cu; - } - } - }); - } }; void PuffOperation::on_stroke_extended(const bContext &C, const StrokeExtension &stroke_extension) diff --git a/source/blender/geometry/CMakeLists.txt b/source/blender/geometry/CMakeLists.txt index e3c0c0c898de..6e0dec8f4f6b 100644 --- a/source/blender/geometry/CMakeLists.txt +++ b/source/blender/geometry/CMakeLists.txt @@ -16,6 +16,7 @@ set(INC set(SRC intern/add_curves_on_mesh.cc + intern/curve_constraints.cc intern/fillet_curves.cc intern/mesh_merge_by_distance.cc intern/mesh_primitive_cuboid.cc @@ -32,6 +33,7 @@ set(SRC intern/uv_parametrizer.cc GEO_add_curves_on_mesh.hh + GEO_curve_constraints.hh GEO_fillet_curves.hh GEO_mesh_merge_by_distance.hh GEO_mesh_primitive_cuboid.hh diff --git a/source/blender/geometry/GEO_curve_constraints.hh b/source/blender/geometry/GEO_curve_constraints.hh new file mode 100644 index 000000000000..0cec5d3ebf2a --- /dev/null +++ b/source/blender/geometry/GEO_curve_constraints.hh @@ -0,0 +1,27 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#include "BKE_curves.hh" + +namespace blender::geometry::curve_constraints { + +void compute_segment_lengths(OffsetIndices points_by_curve, + Span positions, + IndexMask curve_selection, + MutableSpan r_segment_lengths); + +void solve_length_constraints(OffsetIndices points_by_curve, + IndexMask curve_selection, + Span segment_lenghts, + MutableSpan positions); + +void solve_length_and_collision_constraints(OffsetIndices points_by_curve, + IndexMask curve_selection, + Span segment_lengths, + Span start_positions, + const Mesh &surface, + const bke::CurvesSurfaceTransforms &transforms, + MutableSpan positions); + +} // namespace blender::geometry::curve_constraints diff --git a/source/blender/geometry/intern/curve_constraints.cc b/source/blender/geometry/intern/curve_constraints.cc new file mode 100644 index 000000000000..e2f77ed54f0f --- /dev/null +++ b/source/blender/geometry/intern/curve_constraints.cc @@ -0,0 +1,168 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include "BLI_math_matrix.hh" +#include "BLI_task.hh" + +#include "GEO_curve_constraints.hh" + +#include "BKE_bvhutils.h" + +/** + * The code below uses a prefix naming convention to indicate the coordinate space: + * `cu`: Local space of the curves object that is being edited. + * `su`: Local space of the surface object. + * `wo`: World space. + */ + +namespace blender::geometry::curve_constraints { + +void compute_segment_lengths(const OffsetIndices points_by_curve, + const Span positions, + const IndexMask curve_selection, + MutableSpan r_segment_lengths) +{ + BLI_assert(r_segment_lengths.size() == points_by_curve.total_size()); + + threading::parallel_for(curve_selection.index_range(), 256, [&](const IndexRange range) { + for (const int curve_i : curve_selection.slice(range)) { + const IndexRange points = points_by_curve[curve_i].drop_back(1); + for (const int point_i : points) { + const float3 &p1 = positions[point_i]; + const float3 &p2 = positions[point_i + 1]; + const float length = math::distance(p1, p2); + r_segment_lengths[point_i] = length; + } + } + }); +} + +void solve_length_constraints(const OffsetIndices points_by_curve, + const IndexMask curve_selection, + const Span segment_lenghts, + MutableSpan positions) +{ + BLI_assert(segment_lenghts.size() == points_by_curve.total_size()); + + threading::parallel_for(curve_selection.index_range(), 256, [&](const IndexRange range) { + for (const int curve_i : curve_selection.slice(range)) { + const IndexRange points = points_by_curve[curve_i].drop_back(1); + for (const int point_i : points) { + const float3 &p1 = positions[point_i]; + float3 &p2 = positions[point_i + 1]; + const float3 direction = math::normalize(p2 - p1); + const float goal_length = segment_lenghts[point_i]; + p2 = p1 + direction * goal_length; + } + } + }); +} + +void solve_length_and_collision_constraints(const OffsetIndices points_by_curve, + const IndexMask curve_selection, + const Span segment_lengths_cu, + const Span start_positions_cu, + const Mesh &surface, + const bke::CurvesSurfaceTransforms &transforms, + MutableSpan positions_cu) +{ + solve_length_constraints(points_by_curve, curve_selection, segment_lengths_cu, positions_cu); + + BVHTreeFromMesh surface_bvh; + BKE_bvhtree_from_mesh_get(&surface_bvh, &surface, BVHTREE_FROM_LOOPTRI, 2); + BLI_SCOPED_DEFER([&]() { free_bvhtree_from_mesh(&surface_bvh); }); + + const float radius = 0.001f; + const int max_collisions = 5; + + threading::parallel_for(curve_selection.index_range(), 64, [&](const IndexRange range) { + for (const int curve_i : curve_selection.slice(range)) { + const IndexRange points = points_by_curve[curve_i]; + + /* Sometimes not all collisions can be handled. This happens relatively rarely, but if it + * happens it's better to just not to move the curve instead of going into the surface. */ + bool revert_curve = false; + for (const int point_i : points.drop_front(1)) { + const float goal_segment_length_cu = segment_lengths_cu[point_i - 1]; + const float3 &prev_pos_cu = positions_cu[point_i - 1]; + const float3 &start_pos_cu = start_positions_cu[point_i]; + + int used_iterations = 0; + for ([[maybe_unused]] const int iteration : IndexRange(max_collisions)) { + used_iterations++; + const float3 &old_pos_cu = positions_cu[point_i]; + if (start_pos_cu == old_pos_cu) { + /* The point did not move, done. */ + break; + } + + /* Check if the point moved through a surface. */ + const float3 start_pos_su = math::transform_point(transforms.curves_to_surface, + start_pos_cu); + const float3 old_pos_su = math::transform_point(transforms.curves_to_surface, + old_pos_cu); + const float3 pos_diff_su = old_pos_su - start_pos_su; + float max_ray_length_su; + const float3 ray_direction_su = math::normalize_and_get_length(pos_diff_su, + max_ray_length_su); + BVHTreeRayHit hit; + hit.index = -1; + hit.dist = max_ray_length_su + radius; + BLI_bvhtree_ray_cast(surface_bvh.tree, + start_pos_su, + ray_direction_su, + radius, + &hit, + surface_bvh.raycast_callback, + &surface_bvh); + if (hit.index == -1) { + break; + } + const float3 hit_pos_su = hit.co; + const float3 hit_normal_su = hit.no; + if (math::dot(hit_normal_su, ray_direction_su) > 0.0f) { + /* Moving from the inside to the outside is ok. */ + break; + } + + /* The point was moved through a surface. Now put it back on the correct side of the + * surface and slide it on the surface to keep the length the same. */ + + const float3 hit_pos_cu = math::transform_point(transforms.surface_to_curves, + hit_pos_su); + const float3 hit_normal_cu = math::normalize( + math::transform_direction(transforms.surface_to_curves_normal, hit_normal_su)); + + /* Slide on a plane that is slightly above the surface. */ + const float3 plane_pos_cu = hit_pos_cu + hit_normal_cu * radius; + const float3 plane_normal_cu = hit_normal_cu; + + /* Decompose the current segment into the part normal and tangent to the collision + * surface. */ + const float3 collided_segment_cu = plane_pos_cu - prev_pos_cu; + const float3 slide_normal_cu = plane_normal_cu * + math::dot(collided_segment_cu, plane_normal_cu); + const float3 slide_direction_cu = collided_segment_cu - slide_normal_cu; + + float slide_direction_length_cu; + const float3 normalized_slide_direction_cu = math::normalize_and_get_length( + slide_direction_cu, slide_direction_length_cu); + + /* Use pythagorian theorem to determine how far to slide. */ + const float slide_distance_cu = std::sqrt(pow2f(goal_segment_length_cu) - + math::length_squared(slide_normal_cu)) - + slide_direction_length_cu; + positions_cu[point_i] = plane_pos_cu + normalized_slide_direction_cu * slide_distance_cu; + } + if (used_iterations == max_collisions) { + revert_curve = true; + break; + } + } + if (revert_curve) { + positions_cu.slice(points).copy_from(start_positions_cu.slice(points)); + } + } + }); +} + +} // namespace blender::geometry::curve_constraints diff --git a/source/blender/makesdna/DNA_curves_types.h b/source/blender/makesdna/DNA_curves_types.h index 3ee2ba2797d7..cef5f70b7327 100644 --- a/source/blender/makesdna/DNA_curves_types.h +++ b/source/blender/makesdna/DNA_curves_types.h @@ -197,6 +197,7 @@ typedef struct Curves { /** #Curves.flag */ enum { HA_DS_EXPAND = (1 << 0), + CV_SCULPT_COLLISION_ENABLED = (1 << 1), }; /** #Curves.symmetry */ diff --git a/source/blender/makesrna/intern/rna_curves.c b/source/blender/makesrna/intern/rna_curves.c index 7560e1a60cb9..5a49aca119c3 100644 --- a/source/blender/makesrna/intern/rna_curves.c +++ b/source/blender/makesrna/intern/rna_curves.c @@ -453,6 +453,13 @@ static void rna_def_curves(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_update(prop, 0, "rna_Curves_update_data"); + prop = RNA_def_property(srna, "use_sculpt_collision", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", CV_SCULPT_COLLISION_ENABLED); + RNA_def_property_ui_text( + prop, "Use Sculpt Collision", "Enable collision with the surface while sculpting"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_update(prop, 0, "rna_Curves_update_draw"); + /* attributes */ rna_def_attributes_common(srna); -- 2.30.2 From 18f69d3b3248be351130492bb2ed3d700664fc29 Mon Sep 17 00:00:00 2001 From: Falk David Date: Sat, 11 Feb 2023 15:05:55 +0100 Subject: [PATCH 004/182] Cleanup: Remove const keyword in declarations --- source/blender/editors/include/ED_curves.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/source/blender/editors/include/ED_curves.h b/source/blender/editors/include/ED_curves.h index aee355c3769a..2bfe99ea2bd6 100644 --- a/source/blender/editors/include/ED_curves.h +++ b/source/blender/editors/include/ED_curves.h @@ -111,8 +111,8 @@ IndexMask retrieve_selected_points(const Curves &curves_id, Vector &r_i * If the ".selection" attribute doesn't exist, create it with the requested type (bool or float). */ bke::GSpanAttributeWriter ensure_selection_attribute(bke::CurvesGeometry &curves, - const eAttrDomain selection_domain, - const eCustomDataType create_type); + eAttrDomain selection_domain, + eCustomDataType create_type); /** * (De)select all the curves. @@ -120,7 +120,7 @@ bke::GSpanAttributeWriter ensure_selection_attribute(bke::CurvesGeometry &curves * \param action: One of SEL_TOGGLE, SEL_SELECT, SEL_DESELECT, or SEL_INVERT. See * "ED_select_utils.h". */ -void select_all(bke::CurvesGeometry &curves, const eAttrDomain selection_domain, int action); +void select_all(bke::CurvesGeometry &curves, eAttrDomain selection_domain, int action); /** * Select the ends (front or back) of all the curves. @@ -143,7 +143,7 @@ void select_linked(bke::CurvesGeometry &curves); * will be selected, if set to 1.0 everything will be selected. */ void select_random(bke::CurvesGeometry &curves, - const eAttrDomain selection_domain, + eAttrDomain selection_domain, uint32_t random_seed, float probability); @@ -152,18 +152,18 @@ void select_random(bke::CurvesGeometry &curves, */ bool select_pick(const ViewContext &vc, bke::CurvesGeometry &curves, - const eAttrDomain selection_domain, + eAttrDomain selection_domain, const SelectPick_Params ¶ms, - const int2 coord); + int2 coord); /** * Select points or curves in a (screen-space) rectangle. */ bool select_box(const ViewContext &vc, bke::CurvesGeometry &curves, - const eAttrDomain selection_domain, + eAttrDomain selection_domain, const rcti &rect, - const eSelectOp sel_op); + eSelectOp sel_op); /** * Select points or curves in a (screen-space) poly shape. -- 2.30.2 From e60a54ac2d1b555802c3cf4eb7c99ab70423b3b1 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Sat, 11 Feb 2023 16:11:10 +0100 Subject: [PATCH 005/182] Geometry Nodes: Add option to hide input in modifier When building a node group that's meant to be used directly in the node editor as well as in the modifier, it's useful to be able to have some inputs that are only meant for the node editor, like inputs that only make sense when combined with other nodes. In the future we might have the ability to only display certain assets in the modifier and the node editor, but until then this simple solution allows a bit more customization. Pull Request #104517 --- source/blender/editors/space_node/drawnode.cc | 5 +++++ source/blender/makesdna/DNA_node_types.h | 4 ++++ source/blender/makesrna/intern/rna_nodetree.c | 8 ++++++++ source/blender/modifiers/intern/MOD_nodes.cc | 4 +++- 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/source/blender/editors/space_node/drawnode.cc b/source/blender/editors/space_node/drawnode.cc index d84f1100c79d..319ec71cb541 100644 --- a/source/blender/editors/space_node/drawnode.cc +++ b/source/blender/editors/space_node/drawnode.cc @@ -1465,6 +1465,11 @@ static void std_node_socket_interface_draw(bContext * /*C*/, uiLayout *layout, P } uiItemR(layout, ptr, "hide_value", DEFAULT_FLAGS, nullptr, 0); + + const bNodeTree *node_tree = reinterpret_cast(ptr->owner_id); + if (sock->in_out == SOCK_IN && node_tree->type == NTREE_GEOMETRY) { + uiItemR(col, ptr, "hide_in_modifier", DEFAULT_FLAGS, nullptr, 0); + } } static void node_socket_virtual_draw_color(bContext * /*C*/, diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h index 8f9ae28b441d..a2e4c0a0991f 100644 --- a/source/blender/makesdna/DNA_node_types.h +++ b/source/blender/makesdna/DNA_node_types.h @@ -282,6 +282,10 @@ typedef enum eNodeSocketFlag { * type is obvious and the name takes up too much space. */ SOCK_HIDE_LABEL = (1 << 12), + /** + * Only used for geometry nodes. Don't show the socket value in the modifier interface. + */ + SOCK_HIDE_IN_MODIFIER = (1 << 13), } eNodeSocketFlag; typedef struct bNode { diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index b7dc865bcdf2..71d6c72c05d6 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -11219,6 +11219,14 @@ static void rna_def_node_socket_interface(BlenderRNA *brna) prop, "Hide Value", "Hide the socket input value even when the socket is not connected"); RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update"); + prop = RNA_def_property(srna, "hide_in_modifier", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", SOCK_HIDE_IN_MODIFIER); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_ui_text(prop, + "Hide in Modifier", + "Don't show the input value in the geometry nodes modifier interface"); + RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update"); + prop = RNA_def_property(srna, "attribute_domain", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, rna_enum_attribute_domain_items); RNA_def_property_ui_text( diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc index 6ecd2c74462c..15aab38bed7d 100644 --- a/source/blender/modifiers/intern/MOD_nodes.cc +++ b/source/blender/modifiers/intern/MOD_nodes.cc @@ -1736,7 +1736,9 @@ static void panel_draw(const bContext *C, Panel *panel) int socket_index; LISTBASE_FOREACH_INDEX (bNodeSocket *, socket, &nmd->node_group->inputs, socket_index) { - draw_property_for_socket(*C, layout, nmd, &bmain_ptr, ptr, *socket, socket_index); + if (!(socket->flag & SOCK_HIDE_IN_MODIFIER)) { + draw_property_for_socket(*C, layout, nmd, &bmain_ptr, ptr, *socket, socket_index); + } } } -- 2.30.2 From 59e1b3a8b5db06e57ddc2ee2bfa181fc9bf352bd Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Sat, 11 Feb 2023 16:14:38 +0100 Subject: [PATCH 006/182] Nodes: change order of Hide Value and Hide in Modifier Based on the review comment in #104517. --- source/blender/editors/space_node/drawnode.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/blender/editors/space_node/drawnode.cc b/source/blender/editors/space_node/drawnode.cc index 319ec71cb541..efe3adb2fa55 100644 --- a/source/blender/editors/space_node/drawnode.cc +++ b/source/blender/editors/space_node/drawnode.cc @@ -1464,7 +1464,8 @@ static void std_node_socket_interface_draw(bContext * /*C*/, uiLayout *layout, P } } - uiItemR(layout, ptr, "hide_value", DEFAULT_FLAGS, nullptr, 0); + col = uiLayoutColumn(layout, false); + uiItemR(col, ptr, "hide_value", DEFAULT_FLAGS, nullptr, 0); const bNodeTree *node_tree = reinterpret_cast(ptr->owner_id); if (sock->in_out == SOCK_IN && node_tree->type == NTREE_GEOMETRY) { -- 2.30.2 From dac8e1c7db6ed721d6988febac33df7b08fdf0c1 Mon Sep 17 00:00:00 2001 From: mano-wii Date: Sat, 11 Feb 2023 13:43:31 -0300 Subject: [PATCH 007/182] Fix transform gizmos not changing in Automatic Constraint mode --- source/blender/editors/transform/transform_constraints.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c index 095c59f783b0..bbfae63b1b99 100644 --- a/source/blender/editors/transform/transform_constraints.c +++ b/source/blender/editors/transform/transform_constraints.c @@ -1165,6 +1165,7 @@ void setNearestAxis(TransInfo *t) if (mode_prev != t->con.mode) { projection_matrix_calc(t, t->con.pmtx); + transform_gizmo_3d_model_from_constraint_and_mode_set(t); } } -- 2.30.2 From 528f9c467d465c08d8163a426a73709fa0151f6a Mon Sep 17 00:00:00 2001 From: mano-wii Date: Sat, 11 Feb 2023 14:50:37 -0300 Subject: [PATCH 008/182] Fix #104587: 'Extrude To Cursor' snapping ignoring 'Target Selection' Although not a transform operator, `Extrude to Cursor` depends on some snapping settings. So it should use the `Target Selection` options as well. --- source/blender/editors/mesh/editmesh_utils.c | 47 ++++++++++++-------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c index cde57c7226b2..94567919316c 100644 --- a/source/blender/editors/mesh/editmesh_utils.c +++ b/source/blender/editors/mesh/editmesh_utils.c @@ -1924,31 +1924,40 @@ void EDBM_project_snap_verts( ED_view3d_init_mats_rv3d(obedit, region->regiondata); - struct SnapObjectContext *snap_context = ED_transform_snap_object_context_create( - CTX_data_scene(C), 0); + Scene *scene = CTX_data_scene(C); + struct SnapObjectContext *snap_context = ED_transform_snap_object_context_create(scene, 0); + + eSnapTargetOP target_op = SCE_SNAP_TARGET_NOT_ACTIVE; + const int snap_flag = scene->toolsettings->snap_flag; + + SET_FLAG_FROM_TEST( + target_op, !(snap_flag & SCE_SNAP_TO_INCLUDE_EDITED), SCE_SNAP_TARGET_NOT_EDITED); + SET_FLAG_FROM_TEST( + target_op, !(snap_flag & SCE_SNAP_TO_INCLUDE_NONEDITED), SCE_SNAP_TARGET_NOT_NONEDITED); + SET_FLAG_FROM_TEST( + target_op, (snap_flag & SCE_SNAP_TO_ONLY_SELECTABLE), SCE_SNAP_TARGET_ONLY_SELECTABLE); BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { float mval[2], co_proj[3]; if (ED_view3d_project_float_object(region, eve->co, mval, V3D_PROJ_TEST_NOP) == V3D_PROJ_RET_OK) { - if (ED_transform_snap_object_project_view3d( - snap_context, - depsgraph, - region, - CTX_wm_view3d(C), - SCE_SNAP_MODE_FACE_RAYCAST, - &(const struct SnapObjectParams){ - .snap_target_select = SCE_SNAP_TARGET_NOT_ACTIVE, - .edit_mode_type = SNAP_GEOM_FINAL, - .use_occlusion_test = true, - }, - NULL, - mval, - NULL, - NULL, - co_proj, - NULL)) { + if (ED_transform_snap_object_project_view3d(snap_context, + depsgraph, + region, + CTX_wm_view3d(C), + SCE_SNAP_MODE_FACE_RAYCAST, + &(const struct SnapObjectParams){ + .snap_target_select = target_op, + .edit_mode_type = SNAP_GEOM_FINAL, + .use_occlusion_test = true, + }, + NULL, + mval, + NULL, + NULL, + co_proj, + NULL)) { mul_v3_m4v3(eve->co, obedit->world_to_object, co_proj); } } -- 2.30.2 From 19b1957f8f316e6d41a825d0f6ee11b8aba6a132 Mon Sep 17 00:00:00 2001 From: mano-wii Date: Sat, 11 Feb 2023 15:20:38 -0300 Subject: [PATCH 009/182] Fix circular transform gizmo always displaying Global orientation The Global orientation comes from the mode's default orientation (without the constraints). It's not really exposed. --- source/blender/editors/transform/transform.h | 12 +++++++----- .../blender/editors/transform/transform_gizmo_3d.cc | 10 ++++++---- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index d548cf631f17..dede02b219ff 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -211,6 +211,12 @@ typedef enum { HLP_TRACKBALL = 6, } eTHelpline; +typedef enum { + O_DEFAULT = 0, + O_SCENE, + O_SET, +} eTOType; + /** \} */ /* -------------------------------------------------------------------- */ @@ -607,11 +613,7 @@ typedef struct TransInfo { float matrix[3][3]; } orient[3]; - enum { - O_DEFAULT = 0, - O_SCENE, - O_SET, - } orient_curr; + eTOType orient_curr; /** * All values from `TransInfo.orient[].type` converted into a flag diff --git a/source/blender/editors/transform/transform_gizmo_3d.cc b/source/blender/editors/transform/transform_gizmo_3d.cc index dd4d9ef6a12b..826e853579c9 100644 --- a/source/blender/editors/transform/transform_gizmo_3d.cc +++ b/source/blender/editors/transform/transform_gizmo_3d.cc @@ -2776,15 +2776,17 @@ void transform_gizmo_3d_model_from_constraint_and_mode_set(TransInfo *t) wmGizmo *gizmo_modal_current = WM_gizmomap_get_modal(t->region->gizmo_map); if (axis_idx != -1) { RegionView3D *rv3d = static_cast(t->region->regiondata); - bool update_orientation = !(equals_v3v3(rv3d->twmat[0], t->spacemtx[0]) && - equals_v3v3(rv3d->twmat[1], t->spacemtx[1]) && - equals_v3v3(rv3d->twmat[2], t->spacemtx[2])); + float(*mat_cmp)[3] = t->orient[t->orient_curr != O_DEFAULT ? t->orient_curr : O_SCENE].matrix; + + bool update_orientation = !(equals_v3v3(rv3d->twmat[0], mat_cmp[0]) && + equals_v3v3(rv3d->twmat[1], mat_cmp[1]) && + equals_v3v3(rv3d->twmat[2], mat_cmp[2])); GizmoGroup *ggd = static_cast(gzgroup_xform->customdata); wmGizmo *gizmo_expected = ggd->gizmos[axis_idx]; if (update_orientation || gizmo_modal_current != gizmo_expected) { if (update_orientation) { - copy_m4_m3(rv3d->twmat, t->spacemtx); + copy_m4_m3(rv3d->twmat, mat_cmp); copy_v3_v3(rv3d->twmat[3], t->center_global); } -- 2.30.2 From 23964e6ed491bd9f5b19192ebe52e3fee649611a Mon Sep 17 00:00:00 2001 From: mano-wii Date: Sat, 11 Feb 2023 15:22:57 -0300 Subject: [PATCH 010/182] Transform: Hide trackball gizmo while dragging It was accidentally displayed in a38d99e0b289. --- source/blender/editors/transform/transform_gizmo_3d.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/transform/transform_gizmo_3d.cc b/source/blender/editors/transform/transform_gizmo_3d.cc index 826e853579c9..4ffde75a701f 100644 --- a/source/blender/editors/transform/transform_gizmo_3d.cc +++ b/source/blender/editors/transform/transform_gizmo_3d.cc @@ -2730,7 +2730,7 @@ void transform_gizmo_3d_model_from_constraint_and_mode_set(TransInfo *t) int axis_idx = -1; if (t->mode == TFM_TRACKBALL) { - axis_idx = MAN_AXIS_ROT_T; + /* Pass. Do not display gizmo. */ } else if (ELEM(t->mode, TFM_TRANSLATION, TFM_ROTATION, TFM_RESIZE)) { const int axis_map[3][7] = { -- 2.30.2 From f815ae44abe0b4b387fe570fc56d1165a8e39c9c Mon Sep 17 00:00:00 2001 From: Falk David Date: Sat, 11 Feb 2023 19:23:30 +0100 Subject: [PATCH 011/182] Fix curves selection toggling --- source/blender/editors/curves/intern/curves_selection.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/curves/intern/curves_selection.cc b/source/blender/editors/curves/intern/curves_selection.cc index c896e0a2d336..818e275b210c 100644 --- a/source/blender/editors/curves/intern/curves_selection.cc +++ b/source/blender/editors/curves/intern/curves_selection.cc @@ -331,7 +331,7 @@ static void apply_selection_operation_at_index(GMutableSpan selection, selection_typed[index] = false; break; case SEL_OP_XOR: - selection_typed[index] ^= selection_typed[index]; + selection_typed[index] = !selection_typed[index]; break; default: break; -- 2.30.2 From 55d3de4faf26c538dc17466fe6d28432e40bb912 Mon Sep 17 00:00:00 2001 From: Ray molenkamp Date: Sat, 11 Feb 2023 19:48:47 +0100 Subject: [PATCH 012/182] Cleanup: remove whole-archive linking for USD Since USD is no longer statically linked these linker tricks are no longer needed. Co-authored-by: Ray Molenkamp Pull Request #104627 --- source/blender/io/usd/CMakeLists.txt | 23 ++--------------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/source/blender/io/usd/CMakeLists.txt b/source/blender/io/usd/CMakeLists.txt index b123eb251abd..ac9e22ee6310 100644 --- a/source/blender/io/usd/CMakeLists.txt +++ b/source/blender/io/usd/CMakeLists.txt @@ -127,6 +127,8 @@ list(APPEND LIB ${BOOST_LIBRARIES} ${BOOST_PYTHON_LIBRARIES} ${PYTHON_LIBRARIES} + ${USD_LIBRARIES} + ${TBB_LIBRARIES} ) if(WITH_OPENVDB) @@ -141,27 +143,6 @@ endif() blender_add_lib(bf_usd "${SRC}" "${INC}" "${INC_SYS}" "${LIB}") -if(WIN32) - set_property(TARGET bf_usd APPEND_STRING PROPERTY INTERFACE_LINK_OPTIONS "$<$:/WHOLEARCHIVE:${USD_DEBUG_LIB}>") - set_property(TARGET bf_usd APPEND_STRING PROPERTY INTERFACE_LINK_OPTIONS "$<$:/WHOLEARCHIVE:${USD_RELEASE_LIB}>") - set_property(TARGET bf_usd APPEND_STRING PROPERTY INTERFACE_LINK_OPTIONS "$<$:/WHOLEARCHIVE:${USD_RELEASE_LIB}>") - set_property(TARGET bf_usd APPEND_STRING PROPERTY INTERFACE_LINK_OPTIONS "$<$:/WHOLEARCHIVE:${USD_RELEASE_LIB}>") -endif() - -# Source: -# https://github.com/PixarAnimationStudios/USD/blob/master/BUILDING.md#linking-whole-archives -if(WIN32) - target_link_libraries(bf_usd INTERFACE ${USD_LIBRARIES}) -elseif(APPLE) - target_link_libraries(bf_usd INTERFACE -Wl,-force_load ${USD_LIBRARIES}) -elseif(UNIX) - target_link_libraries(bf_usd INTERFACE "-Wl,--whole-archive ${USD_LIBRARIES} -Wl,--no-whole-archive ${TBB_LIBRARIES}") -else() - message(FATAL_ERROR "Unknown how to link USD with your compiler ${CMAKE_CXX_COMPILER_ID}") -endif() - -target_link_libraries(bf_usd INTERFACE ${TBB_LIBRARIES}) - if(WITH_GTESTS) set(TEST_SRC tests/usd_stage_creation_test.cc -- 2.30.2 From affe15b20ccad289e61f660cfa01e71163d4edcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Sun, 12 Feb 2023 01:21:37 +0100 Subject: [PATCH 013/182] Cleanup: GPU: Remove commented lines without any comments or purpose These were added during a big refactor. They were supposed to be uncommented at some point but the new code does not even need a default world. --- source/blender/gpu/intern/gpu_codegen.cc | 1 - source/blender/gpu/intern/gpu_material.c | 1 - 2 files changed, 2 deletions(-) diff --git a/source/blender/gpu/intern/gpu_codegen.cc b/source/blender/gpu/intern/gpu_codegen.cc index 38f80760d615..7991f845ffd5 100644 --- a/source/blender/gpu/intern/gpu_codegen.cc +++ b/source/blender/gpu/intern/gpu_codegen.cc @@ -889,7 +889,6 @@ void gpu_codegen_init(void) void gpu_codegen_exit(void) { - // BKE_world_defaults_free_gpu(); BKE_material_defaults_free_gpu(); GPU_shader_free_builtin_shaders(); } diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c index 89db541a3653..d0881ea48144 100644 --- a/source/blender/gpu/intern/gpu_material.c +++ b/source/blender/gpu/intern/gpu_material.c @@ -835,7 +835,6 @@ void GPU_materials_free(Main *bmain) GPU_material_free(&wo->gpumaterial); } - // BKE_world_defaults_free_gpu(); BKE_material_defaults_free_gpu(); } -- 2.30.2 From 13e926719a15211d439280760d878d77a694514c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Sun, 12 Feb 2023 01:41:54 +0100 Subject: [PATCH 014/182] Cleanup: EEVEE-Next: Add LIGHT_FOREACH macros to clang-format exceptions --- .clang-format | 2 ++ .../engines/eevee_next/shaders/eevee_light_eval_lib.glsl | 6 ++---- .../engines/eevee_next/shaders/eevee_shadow_debug_frag.glsl | 3 +-- .../eevee_next/shaders/eevee_shadow_tag_usage_lib.glsl | 6 ++---- .../shaders/eevee_shadow_tilemap_bounds_comp.glsl | 3 +-- 5 files changed, 8 insertions(+), 12 deletions(-) diff --git a/.clang-format b/.clang-format index 7e67aae1111d..967cb046a11c 100644 --- a/.clang-format +++ b/.clang-format @@ -236,6 +236,8 @@ ForEachMacros: - LOOP_UNSELECTED_POINTS - LOOP_VISIBLE_KEYS - LOOP_VISIBLE_POINTS + - LIGHT_FOREACH_BEGIN_DIRECTIONAL + - LIGHT_FOREACH_BEGIN_LOCAL - LISTBASE_CIRCULAR_BACKWARD_BEGIN - LISTBASE_CIRCULAR_FORWARD_BEGIN - LISTBASE_FOREACH diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_light_eval_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_light_eval_lib.glsl index d270768acb30..4a57a850d340 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_light_eval_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_light_eval_lib.glsl @@ -95,8 +95,7 @@ void light_eval(ClosureDiffuse diffuse, uv = uv * UTIL_TEX_UV_SCALE + UTIL_TEX_UV_BIAS; vec4 ltc_mat = utility_tx_sample(utility_tx, uv, UTIL_LTC_MAT_LAYER); - LIGHT_FOREACH_BEGIN_DIRECTIONAL(light_cull_buf, l_idx) - { + LIGHT_FOREACH_BEGIN_DIRECTIONAL (light_cull_buf, l_idx) { light_eval_ex(diffuse, reflection, true, @@ -113,8 +112,7 @@ void light_eval(ClosureDiffuse diffuse, LIGHT_FOREACH_END vec2 px = gl_FragCoord.xy; - LIGHT_FOREACH_BEGIN_LOCAL(light_cull_buf, light_zbin_buf, light_tile_buf, px, vP_z, l_idx) - { + LIGHT_FOREACH_BEGIN_LOCAL (light_cull_buf, light_zbin_buf, light_tile_buf, px, vP_z, l_idx) { light_eval_ex(diffuse, reflection, false, diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_debug_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_debug_frag.glsl index afcc8b2d243b..bbdcb7334ad0 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_debug_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_debug_frag.glsl @@ -82,8 +82,7 @@ LightData debug_light_get() } LIGHT_FOREACH_END - LIGHT_FOREACH_BEGIN_DIRECTIONAL(light_cull_buf, l_idx) - { + LIGHT_FOREACH_BEGIN_DIRECTIONAL (light_cull_buf, l_idx) { LightData light = light_buf[l_idx]; if (light.tilemap_index == debug_tilemap_index) { return light; diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_lib.glsl index a3371cb4b0b7..ad305d867449 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_lib.glsl @@ -92,14 +92,12 @@ void shadow_tag_usage(vec3 vP, vec3 P, vec2 pixel) { float dist_to_cam = length(vP); - LIGHT_FOREACH_BEGIN_DIRECTIONAL(light_cull_buf, l_idx) - { + LIGHT_FOREACH_BEGIN_DIRECTIONAL (light_cull_buf, l_idx) { shadow_tag_usage_tilemap(l_idx, P, dist_to_cam, true); } LIGHT_FOREACH_END - LIGHT_FOREACH_BEGIN_LOCAL(light_cull_buf, light_zbin_buf, light_tile_buf, pixel, vP.z, l_idx) - { + LIGHT_FOREACH_BEGIN_LOCAL (light_cull_buf, light_zbin_buf, light_tile_buf, pixel, vP.z, l_idx) { shadow_tag_usage_tilemap(l_idx, P, dist_to_cam, false); } LIGHT_FOREACH_END diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_bounds_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_bounds_comp.glsl index 005dbffed858..67559eeb47c6 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_bounds_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_bounds_comp.glsl @@ -29,8 +29,7 @@ void main() bounds.bounding_corners[2].xyz, bounds.bounding_corners[3].xyz); - LIGHT_FOREACH_BEGIN_DIRECTIONAL(light_cull_buf, l_idx) - { + LIGHT_FOREACH_BEGIN_DIRECTIONAL (light_cull_buf, l_idx) { LightData light = light_buf[l_idx]; float local_min = FLT_MAX; -- 2.30.2 From 90f1b12b50d9fd987adc638f920d0823e0c9690e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 12 Feb 2023 14:20:52 +1100 Subject: [PATCH 015/182] Fix crash selecting faces in wire-frame mode Regression in [0] didn't account for the mesh not having subdivision surface is applied. [0]: 75db4c082ba7bd3d311bd0f65b75934109199ee6 --- source/blender/editors/space_view3d/view3d_iterators.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/space_view3d/view3d_iterators.cc b/source/blender/editors/space_view3d/view3d_iterators.cc index 09ff3fa6574a..08d5509bbe14 100644 --- a/source/blender/editors/space_view3d/view3d_iterators.cc +++ b/source/blender/editors/space_view3d/view3d_iterators.cc @@ -577,12 +577,13 @@ void mesh_foreachScreenFace( BM_mesh_elem_table_ensure(vc->em->bm, BM_FACE); - if (me->runtime->subsurf_face_dot_tags.size() == me->totvert) { - BKE_mesh_foreach_mapped_face_center( + const int face_dot_tags_num = me->runtime->subsurf_face_dot_tags.size(); + if (face_dot_tags_num && (face_dot_tags_num != me->totvert)) { + BKE_mesh_foreach_mapped_subdiv_face_center( me, mesh_foreachScreenFace__mapFunc, &data, MESH_FOREACH_NOP); } else { - BKE_mesh_foreach_mapped_subdiv_face_center( + BKE_mesh_foreach_mapped_face_center( me, mesh_foreachScreenFace__mapFunc, &data, MESH_FOREACH_NOP); } } -- 2.30.2 From a2a470d2df2b02433d8833a06c024a57599c15b5 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 12 Feb 2023 14:23:16 +1100 Subject: [PATCH 016/182] Cleanup: spelling in comments --- source/blender/io/collada/GeometryExporter.cpp | 2 +- source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc | 2 +- source/blender/nodes/shader/nodes/node_shader_bump.cc | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/source/blender/io/collada/GeometryExporter.cpp b/source/blender/io/collada/GeometryExporter.cpp index 51fc8377c0cf..b95c6110a0ec 100644 --- a/source/blender/io/collada/GeometryExporter.cpp +++ b/source/blender/io/collada/GeometryExporter.cpp @@ -101,7 +101,7 @@ void GeometryExporter::operator()(Object *ob) createLooseEdgeList(ob, me, geom_id); - /* Only create Polylists if number of faces > 0 */ + /* Only create poly-lists if number of faces > 0. */ if (me->totface > 0) { /* XXX slow */ if (ob->totcol) { diff --git a/source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc b/source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc index e2ad7de7291b..3f8a21cc5ab8 100644 --- a/source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc +++ b/source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc @@ -186,7 +186,7 @@ int OBJMesh::ith_smooth_group(const int poly_index) const void OBJMesh::ensure_mesh_normals() const { - /* Const cast can be removed when calculating face corner normals lazily is possible. */ + /* Constant cast can be removed when calculating face corner normals lazily is possible. */ BKE_mesh_calc_normals_split(const_cast(export_mesh_)); } diff --git a/source/blender/nodes/shader/nodes/node_shader_bump.cc b/source/blender/nodes/shader/nodes/node_shader_bump.cc index a9affe745288..86c5aa990133 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bump.cc +++ b/source/blender/nodes/shader/nodes/node_shader_bump.cc @@ -62,11 +62,11 @@ static int gpu_shader_bump(GPUMaterial *mat, /* TODO (Miguel Pozo): * Currently, this doesn't compute the actual differentials, just the height at dX and dY * offsets. The actual differentials are computed inside the GLSL node_bump function by - * substracting the height input. This avoids redundant computations when the height input is + * subtracting the height input. This avoids redundant computations when the height input is * also needed by regular nodes as part in the main function (See #103903 for context). * A better option would be to add a "value" input socket (in this case the height) to the - * differentiate node, but currently this kind of intermediate nodes are pruned in the codegen - * process (see #104265), so we need to fix that first. */ + * differentiate node, but currently this kind of intermediate nodes are pruned in the + * code generation process (see #104265), so we need to fix that first. */ GPUNodeLink *dheight = GPU_differentiate_float_function(height_function); float invert = (node->custom1) ? -1.0 : 1.0; -- 2.30.2 From cf0de1ced6ae094a88ca9f84bab098451e2e38cc Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 12 Feb 2023 14:37:16 +1100 Subject: [PATCH 017/182] Cleanup: use '#' prefix for issues instead of 'T' Match the convention from Gitea instead of Phabricator's T for tasks. --- build_files/build_environment/cmake/gmp.cmake | 2 +- build_files/cmake/macros.cmake | 2 +- .../cmake/platform/platform_apple.cmake | 2 +- .../cmake/platform/platform_win32.cmake | 2 +- doc/python_api/sphinx_doc_gen.py | 4 +- intern/cycles/blender/addon/ui.py | 2 +- intern/cycles/blender/image.cpp | 4 +- intern/cycles/blender/light.cpp | 2 +- intern/cycles/blender/session.cpp | 2 +- intern/cycles/blender/sync.cpp | 2 +- intern/cycles/device/hip/device_impl.cpp | 2 +- intern/cycles/device/metal/device_impl.mm | 2 +- .../cycles/kernel/device/cpu/kernel_avx2.cpp | 2 +- .../cycles/kernel/device/cpu/kernel_sse2.cpp | 2 +- .../cycles/kernel/device/cpu/kernel_sse41.cpp | 2 +- intern/cycles/kernel/device/gpu/kernel.h | 2 +- intern/cycles/scene/osl.cpp | 2 +- intern/cycles/session/tile.cpp | 2 +- intern/cycles/util/math_fast.h | 2 +- intern/ghost/intern/GHOST_ContextCGL.mm | 2 +- intern/ghost/intern/GHOST_ContextGLX.cpp | 2 +- intern/ghost/intern/GHOST_NDOFManager.cpp | 2 +- intern/ghost/intern/GHOST_SystemWayland.cpp | 16 +++--- intern/ghost/intern/GHOST_SystemWayland.h | 2 +- intern/ghost/intern/GHOST_SystemWin32.cpp | 8 +-- intern/ghost/intern/GHOST_SystemX11.cpp | 14 ++--- intern/ghost/intern/GHOST_SystemX11.h | 4 +- intern/ghost/intern/GHOST_WindowWayland.cpp | 6 +-- intern/ghost/intern/GHOST_WindowWayland.h | 2 +- intern/ghost/intern/GHOST_WindowWin32.cpp | 2 +- intern/ghost/intern/GHOST_WindowX11.cpp | 4 +- intern/locale/boost_locale_wrapper.cpp | 2 +- intern/locale/osx_user_locale.mm | 2 +- intern/opencolorio/ocio_impl_glsl.cc | 2 +- release/datafiles/userdef/userdef_default.c | 2 +- .../modules/freestyle/chainingiterators.py | 2 +- .../autocomplete/intellisense.py | 2 +- release/scripts/modules/bpy/ops.py | 2 +- .../scripts/modules/bpy_extras/anim_utils.py | 6 +-- .../scripts/modules/bpy_extras/io_utils.py | 2 +- release/scripts/modules/bpy_types.py | 2 +- release/scripts/presets/keyconfig/Blender.py | 4 +- .../keyconfig/keymap_data/blender_default.py | 10 ++-- .../scripts/startup/bl_operators/object.py | 2 +- .../scripts/startup/bl_operators/userpref.py | 2 +- .../startup/bl_operators/uvcalc_lightmap.py | 2 +- .../startup/bl_operators/vertexpaint_dirt.py | 2 +- .../scripts/startup/bl_operators/view3d.py | 6 +-- release/scripts/startup/bl_operators/wm.py | 2 +- .../startup/bl_ui/properties_texture.py | 2 +- release/scripts/startup/bl_ui/space_node.py | 2 +- .../scripts/startup/bl_ui/space_sequencer.py | 4 +- release/scripts/startup/bl_ui/space_topbar.py | 2 +- release/scripts/startup/bl_ui/space_view3d.py | 6 +-- .../scripts/startup/keyingsets_builtins.py | 2 +- source/blender/blenfont/intern/blf.c | 2 +- source/blender/blenkernel/BKE_action.h | 2 +- source/blender/blenkernel/BKE_animsys.h | 2 +- source/blender/blenkernel/BKE_main.h | 2 +- source/blender/blenkernel/BKE_mesh.h | 2 +- source/blender/blenkernel/BKE_mesh_types.h | 2 +- source/blender/blenkernel/BKE_node.h | 2 +- source/blender/blenkernel/BKE_object.h | 2 +- source/blender/blenkernel/BKE_pbvh.h | 2 +- .../blender/blenkernel/intern/DerivedMesh.cc | 8 +-- source/blender/blenkernel/intern/action.c | 2 +- source/blender/blenkernel/intern/anim_data.c | 2 +- source/blender/blenkernel/intern/anim_sys.c | 4 +- .../blenkernel/intern/armature_update.c | 2 +- source/blender/blenkernel/intern/blendfile.cc | 2 +- .../blenkernel/intern/blendfile_link_append.c | 14 ++--- source/blender/blenkernel/intern/camera.c | 2 +- source/blender/blenkernel/intern/colorband.c | 2 +- source/blender/blenkernel/intern/constraint.c | 16 +++--- .../blender/blenkernel/intern/crazyspace.cc | 2 +- source/blender/blenkernel/intern/curve.cc | 10 ++-- .../blender/blenkernel/intern/customdata.cc | 16 +++--- source/blender/blenkernel/intern/displist.cc | 2 +- source/blender/blenkernel/intern/effect.c | 2 +- source/blender/blenkernel/intern/fcurve.c | 16 +++--- .../blender/blenkernel/intern/fcurve_driver.c | 4 +- .../blender/blenkernel/intern/fcurve_test.cc | 2 +- source/blender/blenkernel/intern/fluid.cc | 6 +-- source/blender/blenkernel/intern/image.cc | 2 +- source/blender/blenkernel/intern/key.cc | 2 +- source/blender/blenkernel/intern/layer.cc | 2 +- source/blender/blenkernel/intern/lib_id.c | 4 +- .../blender/blenkernel/intern/lib_override.cc | 6 +-- .../intern/lib_override_proxy_conversion.c | 4 +- source/blender/blenkernel/intern/lib_query.c | 2 +- source/blender/blenkernel/intern/lib_remap.c | 2 +- source/blender/blenkernel/intern/material.cc | 4 +- source/blender/blenkernel/intern/mesh.cc | 2 +- .../blenkernel/intern/mesh_calc_edges.cc | 2 +- .../blenkernel/intern/mesh_evaluate.cc | 2 +- .../blenkernel/intern/mesh_legacy_convert.cc | 2 +- .../blender/blenkernel/intern/mesh_mirror.cc | 4 +- .../blender/blenkernel/intern/mesh_normals.cc | 2 +- .../blender/blenkernel/intern/mesh_remap.cc | 2 +- source/blender/blenkernel/intern/modifier.cc | 2 +- .../blenkernel/intern/multires_reshape_ccg.cc | 2 +- source/blender/blenkernel/intern/nla.c | 7 ++- source/blender/blenkernel/intern/node.cc | 8 +-- .../intern/node_tree_field_inferencing.cc | 2 +- source/blender/blenkernel/intern/object.cc | 8 +-- .../blender/blenkernel/intern/object_dupli.cc | 2 +- .../blenkernel/intern/object_update.cc | 2 +- source/blender/blenkernel/intern/packedFile.c | 2 +- source/blender/blenkernel/intern/paint.cc | 2 +- source/blender/blenkernel/intern/particle.cc | 6 +-- .../blenkernel/intern/particle_distribute.c | 4 +- .../blenkernel/intern/particle_system.c | 4 +- source/blender/blenkernel/intern/pbvh.cc | 2 +- .../blender/blenkernel/intern/pbvh_bmesh.cc | 2 +- source/blender/blenkernel/intern/rigidbody.c | 2 +- source/blender/blenkernel/intern/scene.cc | 2 +- source/blender/blenkernel/intern/sound.c | 4 +- .../blender/blenkernel/intern/subsurf_ccg.cc | 4 +- source/blender/blenkernel/intern/text.c | 4 +- .../blender/blenkernel/intern/undo_system.cc | 6 +-- source/blender/blenkernel/intern/vfont.c | 10 ++-- .../blenkernel/intern/volume_to_mesh.cc | 2 +- .../blender/blenkernel/intern/writeffmpeg.c | 4 +- source/blender/blenlib/BLI_math_base.h | 2 +- source/blender/blenlib/BLI_math_matrix.h | 4 +- source/blender/blenlib/BLI_math_matrix.hh | 10 ++-- source/blender/blenlib/BLI_path_util.h | 2 +- source/blender/blenlib/BLI_task.h | 2 +- source/blender/blenlib/intern/fileops.c | 2 +- .../blender/blenlib/intern/filereader_zstd.c | 2 +- source/blender/blenlib/intern/kdtree_impl.h | 2 +- source/blender/blenlib/intern/math_geom.c | 10 ++-- source/blender/blenlib/intern/math_matrix.c | 4 +- source/blender/blenlib/intern/math_matrix.cc | 2 +- source/blender/blenlib/intern/math_rotation.c | 6 +-- source/blender/blenlib/intern/mesh_boolean.cc | 2 +- .../blenlib/intern/polyfill_2d_beautify.c | 4 +- source/blender/blenlib/intern/quadric.c | 2 +- source/blender/blenlib/intern/scanfill.c | 10 ++-- .../blenlib/tests/BLI_math_rotation_test.cc | 2 +- .../blenlib/tests/BLI_polyfill_2d_test.cc | 12 ++--- source/blender/blenloader/intern/readfile.cc | 26 ++++----- .../blenloader/intern/versioning_250.c | 2 +- .../blenloader/intern/versioning_260.c | 2 +- .../blenloader/intern/versioning_270.c | 8 +-- .../blenloader/intern/versioning_280.c | 4 +- .../blenloader/intern/versioning_290.cc | 6 +-- .../blenloader/intern/versioning_300.cc | 10 ++-- .../blenloader/intern/versioning_defaults.cc | 2 +- source/blender/blenloader/intern/writefile.cc | 4 +- source/blender/bmesh/intern/bmesh_interp.c | 2 +- .../blender/bmesh/intern/bmesh_iterators.cc | 2 +- source/blender/bmesh/intern/bmesh_iterators.h | 2 +- source/blender/bmesh/intern/bmesh_log.c | 2 +- source/blender/bmesh/intern/bmesh_marking.c | 2 +- .../bmesh/intern/bmesh_mesh_convert.cc | 8 +-- .../blender/bmesh/intern/bmesh_mesh_convert.h | 2 +- .../bmesh/intern/bmesh_mesh_normals.cc | 4 +- source/blender/bmesh/intern/bmesh_mods.c | 2 +- .../bmesh/intern/bmesh_polygon_edgenet.c | 12 ++--- source/blender/bmesh/intern/bmesh_query.c | 2 +- source/blender/bmesh/intern/bmesh_query.h | 2 +- .../blender/bmesh/intern/bmesh_walkers_impl.c | 2 +- source/blender/bmesh/operators/bmo_bridge.c | 6 +-- source/blender/bmesh/operators/bmo_connect.c | 2 +- .../bmesh/operators/bmo_connect_pair.c | 6 +-- source/blender/bmesh/operators/bmo_dupe.c | 2 +- source/blender/bmesh/operators/bmo_edgenet.c | 2 +- source/blender/bmesh/operators/bmo_extrude.c | 8 +-- .../blender/bmesh/operators/bmo_fill_grid.c | 2 +- source/blender/bmesh/operators/bmo_inset.c | 6 +-- .../blender/bmesh/operators/bmo_primitive.c | 2 +- .../bmesh/operators/bmo_smooth_laplacian.c | 2 +- .../blender/bmesh/operators/bmo_subdivide.c | 4 +- .../bmesh/operators/bmo_subdivide_edgering.c | 2 +- .../blender/bmesh/operators/bmo_symmetrize.c | 2 +- source/blender/bmesh/tools/bmesh_bevel.c | 8 +-- .../bmesh/tools/bmesh_decimate_collapse.c | 6 +-- source/blender/bmesh/tools/bmesh_intersect.c | 6 +-- .../blender/bmesh/tools/bmesh_path_region.c | 2 +- .../bmesh/tools/bmesh_path_region_uv.c | 2 +- .../compositor/nodes/COM_BokehBlurNode.cc | 2 +- .../blender/compositor/nodes/COM_ImageNode.cc | 2 +- .../operations/COM_CompositorOperation.cc | 2 +- .../COM_ConvertDepthToRadiusOperation.cc | 8 +-- .../operations/COM_CurveBaseOperation.cc | 2 +- .../intern/builder/deg_builder_relations.cc | 2 +- .../builder/deg_builder_relations_drivers.cc | 2 +- .../depsgraph/intern/depsgraph_eval.cc | 2 +- .../depsgraph/intern/depsgraph_query_iter.cc | 2 +- .../blender/depsgraph/intern/eval/deg_eval.cc | 2 +- .../intern/eval/deg_eval_copy_on_write.cc | 2 +- .../blender/draw/engines/basic/basic_engine.c | 2 +- .../blender/draw/engines/eevee/eevee_data.c | 2 +- .../draw/engines/eevee/eevee_effects.c | 2 +- .../blender/draw/engines/eevee/eevee_engine.c | 2 +- .../draw/engines/eevee/eevee_lightcache.c | 2 +- .../draw/engines/eevee/eevee_private.h | 4 +- .../blender/draw/engines/eevee/eevee_render.c | 4 +- .../draw/engines/eevee/eevee_sampling.c | 8 +-- .../engines/eevee/eevee_temporal_sampling.c | 4 +- .../draw/engines/eevee/eevee_volumes.c | 2 +- .../eevee/shaders/ambient_occlusion_lib.glsl | 2 +- .../shaders/closure_eval_diffuse_lib.glsl | 2 +- .../shaders/closure_eval_glossy_lib.glsl | 2 +- .../shaders/closure_eval_refraction_lib.glsl | 2 +- .../shaders/closure_eval_translucent_lib.glsl | 2 +- .../eevee/shaders/effect_downsample_frag.glsl | 2 +- .../eevee/shaders/effect_minmaxz_frag.glsl | 2 +- .../draw/engines/eevee/shaders/ltc_lib.glsl | 2 +- .../engines/eevee/shaders/surface_frag.glsl | 2 +- .../shaders/volumetric_integration_frag.glsl | 2 +- .../eevee_next/shaders/eevee_ltc_lib.glsl | 2 +- .../draw/engines/overlay/overlay_armature.cc | 6 +-- .../draw/engines/overlay/overlay_edit_mesh.cc | 2 +- .../draw/engines/overlay/overlay_edit_uv.cc | 2 +- .../draw/engines/overlay/overlay_engine.cc | 2 +- .../draw/engines/overlay/overlay_extra.cc | 2 +- .../draw/engines/overlay/overlay_image.cc | 2 +- .../shaders/overlay_edit_mesh_geom.glsl | 4 +- .../overlay/shaders/overlay_grid_frag.glsl | 2 +- .../overlay/shaders/overlay_image_vert.glsl | 2 +- .../draw/engines/select/select_draw_utils.c | 4 +- .../shaders/workbench_merge_infront_frag.glsl | 2 +- .../draw/engines/workbench/workbench_shadow.c | 2 +- .../engines/workbench/workbench_shadow.cc | 2 +- source/blender/draw/intern/draw_attributes.h | 2 +- source/blender/draw/intern/draw_cache.c | 2 +- .../draw/intern/draw_cache_impl_mesh.cc | 8 +-- .../intern/draw_cache_impl_subdivision.cc | 2 +- source/blender/draw/intern/draw_curves.cc | 4 +- source/blender/draw/intern/draw_hair.cc | 4 +- source/blender/draw/intern/draw_manager.c | 10 ++-- .../blender/draw/intern/draw_manager_data.cc | 4 +- .../blender/draw/intern/draw_manager_exec.c | 2 +- .../blender/draw/intern/draw_manager_text.cc | 2 +- .../extract_mesh_vbo_edit_data.cc | 2 +- .../extract_mesh_vbo_edituv_stretch_angle.cc | 4 +- .../mesh_extractors/extract_mesh_vbo_tan.cc | 2 +- .../mesh_extractors/extract_mesh_vbo_uv.cc | 2 +- .../intern/shaders/common_gpencil_lib.glsl | 2 +- .../draw/intern/shaders/common_hair_lib.glsl | 2 +- .../draw/intern/shaders/common_math_lib.glsl | 2 +- .../shaders/draw_resource_finalize_comp.glsl | 2 +- .../editors/animation/anim_channels_defines.c | 2 +- .../editors/animation/anim_channels_edit.c | 10 ++-- source/blender/editors/animation/anim_deps.c | 2 +- .../blender/editors/animation/anim_filter.c | 10 ++-- .../editors/animation/anim_ipo_utils.c | 2 +- .../blender/editors/animation/anim_markers.c | 2 +- source/blender/editors/animation/drivers.c | 2 +- .../editors/animation/keyframes_general.c | 2 +- source/blender/editors/animation/keyframing.c | 6 +-- source/blender/editors/animation/keyingsets.c | 2 +- .../blender/editors/armature/armature_edit.c | 4 +- .../editors/armature/armature_naming.c | 2 +- .../blender/editors/armature/armature_ops.c | 2 +- .../editors/armature/armature_skinning.c | 4 +- .../blender/editors/armature/armature_utils.c | 4 +- source/blender/editors/armature/pose_select.c | 2 +- .../blender/editors/armature/pose_transform.c | 2 +- .../blender/editors/curve/editcurve_paint.c | 2 +- .../blender/editors/gpencil/annotate_paint.c | 20 +++---- source/blender/editors/gpencil/drawgpencil.c | 2 +- .../editors/gpencil/gpencil_armature.c | 2 +- .../blender/editors/gpencil/gpencil_convert.c | 2 +- .../blender/editors/gpencil/gpencil_paint.c | 12 ++--- .../blender/editors/gpencil/gpencil_select.c | 2 +- .../blender/editors/include/ED_fileselect.h | 2 +- .../blender/editors/include/ED_keyframing.h | 2 +- source/blender/editors/include/ED_mesh.h | 2 +- source/blender/editors/include/ED_undo.h | 4 +- source/blender/editors/include/ED_view3d.h | 4 +- source/blender/editors/include/UI_interface.h | 4 +- .../interface/eyedroppers/eyedropper_color.cc | 2 +- .../eyedroppers/eyedropper_colorband.cc | 2 +- .../eyedroppers/eyedropper_datablock.cc | 2 +- .../interface/eyedroppers/eyedropper_depth.cc | 2 +- .../eyedroppers/eyedropper_driver.cc | 2 +- source/blender/editors/interface/interface.cc | 14 ++--- .../editors/interface/interface_align.cc | 4 +- .../editors/interface/interface_anim.cc | 2 +- .../interface/interface_context_menu.cc | 2 +- .../editors/interface/interface_draw.cc | 2 +- .../editors/interface/interface_handlers.cc | 54 +++++++++---------- .../editors/interface/interface_layout.cc | 9 ++-- .../editors/interface/interface_ops.cc | 2 +- .../editors/interface/interface_panel.cc | 4 +- .../interface/interface_region_menu_popup.cc | 4 +- .../interface/interface_region_popup.cc | 4 +- .../interface_template_search_menu.cc | 4 +- .../editors/interface/interface_templates.cc | 6 +-- .../editors/interface/interface_utils.cc | 2 +- .../editors/interface/interface_widgets.cc | 6 +-- source/blender/editors/interface/view2d.cc | 4 +- .../blender/editors/interface/view2d_ops.cc | 2 +- source/blender/editors/io/io_alembic.c | 2 +- source/blender/editors/io/io_usd.c | 2 +- .../mesh/editmesh_extrude_spin_gizmo.c | 2 +- source/blender/editors/mesh/editmesh_knife.c | 18 +++---- .../blender/editors/mesh/editmesh_loopcut.c | 4 +- .../editors/mesh/editmesh_mask_extract.cc | 2 +- source/blender/editors/mesh/editmesh_rip.c | 2 +- .../blender/editors/mesh/editmesh_select.cc | 2 +- .../editors/mesh/editmesh_select_similar.c | 2 +- source/blender/editors/mesh/editmesh_tools.c | 8 +-- source/blender/editors/mesh/editmesh_undo.cc | 4 +- source/blender/editors/mesh/editmesh_utils.c | 6 +-- source/blender/editors/mesh/meshtools.cc | 4 +- source/blender/editors/object/object_add.cc | 10 ++-- source/blender/editors/object/object_edit.c | 8 +-- .../blender/editors/object/object_modifier.cc | 6 +-- .../blender/editors/object/object_relations.c | 16 +++--- .../blender/editors/object/object_vgroup.cc | 8 +-- .../blender/editors/physics/particle_edit.c | 2 +- .../blender/editors/physics/particle_object.c | 4 +- .../blender/editors/physics/physics_fluid.c | 2 +- .../blender/editors/render/render_internal.cc | 4 +- .../blender/editors/render/render_preview.cc | 4 +- .../blender/editors/render/render_shading.cc | 10 ++-- .../blender/editors/render/render_update.cc | 2 +- source/blender/editors/screen/area.c | 14 ++--- source/blender/editors/screen/screen_draw.c | 2 +- source/blender/editors/screen/screen_edit.c | 6 +-- source/blender/editors/screen/screen_ops.c | 6 +-- .../editors/sculpt_paint/paint_cursor.cc | 2 +- .../editors/sculpt_paint/paint_image_proj.cc | 6 +-- .../editors/sculpt_paint/paint_intern.h | 2 +- .../editors/sculpt_paint/paint_mask.cc | 2 +- .../editors/sculpt_paint/paint_stroke.cc | 2 +- .../editors/sculpt_paint/paint_vertex.cc | 2 +- source/blender/editors/sculpt_paint/sculpt.cc | 10 ++-- .../sculpt_paint/sculpt_brush_types.cc | 2 +- .../editors/sculpt_paint/sculpt_dyntopo.cc | 4 +- .../editors/sculpt_paint/sculpt_ops.cc | 2 +- .../editors/sculpt_paint/sculpt_undo.cc | 2 +- .../blender/editors/sculpt_paint/sculpt_uv.c | 2 +- .../editors/space_action/action_edit.c | 2 +- .../editors/space_action/action_select.c | 2 +- .../editors/space_action/space_action.c | 6 +-- .../editors/space_buttons/buttons_context.c | 2 +- .../editors/space_buttons/buttons_ops.c | 2 +- .../blender/editors/space_clip/clip_editor.c | 2 +- .../blender/editors/space_clip/space_clip.c | 2 +- source/blender/editors/space_file/file_ops.c | 6 +-- source/blender/editors/space_file/filelist.cc | 8 +-- source/blender/editors/space_file/filesel.cc | 6 +-- source/blender/editors/space_file/fsmenu.c | 4 +- .../editors/space_graph/graph_buttons.c | 4 +- .../blender/editors/space_graph/graph_draw.c | 4 +- .../blender/editors/space_graph/graph_edit.c | 2 +- .../editors/space_graph/graph_select.c | 2 +- .../blender/editors/space_graph/space_graph.c | 2 +- .../blender/editors/space_image/image_ops.c | 2 +- .../blender/editors/space_image/space_image.c | 2 +- .../blender/editors/space_nla/nla_channels.c | 2 +- .../blender/editors/space_node/node_edit.cc | 2 +- .../blender/editors/space_node/node_group.cc | 2 +- .../editors/space_node/node_relationships.cc | 2 +- .../blender/editors/space_node/node_select.cc | 2 +- .../blender/editors/space_node/node_view.cc | 2 +- .../blender/editors/space_node/space_node.cc | 2 +- .../editors/space_outliner/outliner_select.cc | 6 +-- .../editors/space_outliner/outliner_tree.cc | 2 +- .../editors/space_outliner/space_outliner.cc | 2 +- .../editors/space_script/script_edit.c | 2 +- .../editors/space_sequencer/sequencer_draw.c | 2 +- .../editors/space_sequencer/sequencer_edit.c | 2 +- .../editors/space_view3d/space_view3d.cc | 4 +- .../editors/space_view3d/view3d_buttons.c | 4 +- .../editors/space_view3d/view3d_draw.cc | 4 +- .../editors/space_view3d/view3d_edit.c | 4 +- .../view3d_gizmo_preselect_type.cc | 2 +- .../editors/space_view3d/view3d_gizmo_ruler.c | 2 +- .../space_view3d/view3d_gizmo_tool_generic.c | 2 +- .../editors/space_view3d/view3d_intern.h | 2 +- .../editors/space_view3d/view3d_iterators.cc | 2 +- .../editors/space_view3d/view3d_navigate.c | 2 +- .../space_view3d/view3d_navigate_ndof.c | 2 +- .../space_view3d/view3d_navigate_roll.c | 2 +- .../editors/space_view3d/view3d_select.cc | 16 +++--- .../editors/space_view3d/view3d_view.c | 6 +-- source/blender/editors/transform/transform.c | 10 ++-- .../editors/transform/transform_constraints.c | 2 +- .../editors/transform/transform_convert.c | 10 ++-- .../transform/transform_convert_armature.c | 12 ++--- .../transform/transform_convert_curve.c | 4 +- .../transform/transform_convert_mesh.c | 8 +-- .../editors/transform/transform_convert_nla.c | 2 +- .../transform/transform_convert_object.c | 6 +-- .../editors/transform/transform_generics.c | 4 +- .../editors/transform/transform_gizmo_3d.cc | 6 +-- .../editors/transform/transform_input.c | 2 +- .../editors/transform/transform_mode.c | 4 +- .../transform/transform_mode_edge_slide.c | 6 +-- .../editors/transform/transform_mode_resize.c | 4 +- .../transform/transform_mode_translate.c | 4 +- .../blender/editors/transform/transform_ops.c | 4 +- .../transform/transform_orientations.c | 6 +-- .../editors/transform/transform_snap.cc | 4 +- .../transform/transform_snap_object.cc | 8 +-- source/blender/editors/undo/ed_undo.cc | 10 ++-- source/blender/editors/util/ed_transverts.c | 2 +- source/blender/editors/util/ed_util.cc | 8 +-- source/blender/editors/util/numinput.c | 4 +- source/blender/editors/uvedit/uvedit_rip.c | 2 +- source/blender/editors/uvedit/uvedit_select.c | 8 +-- .../editors/uvedit/uvedit_smart_stitch.c | 2 +- .../blender_interface/BlenderFileLoader.cpp | 2 +- .../freestyle/intern/python/BPy_Convert.cpp | 2 +- .../freestyle/intern/winged_edge/WEdge.cpp | 2 +- .../geometry/intern/uv_parametrizer.cc | 6 +-- .../intern/lineart/lineart_cpu.cc | 2 +- source/blender/gpu/GPU_matrix.h | 2 +- source/blender/gpu/intern/gpu_codegen.cc | 2 +- source/blender/gpu/intern/gpu_immediate.cc | 2 +- .../gpu/intern/gpu_index_buffer_private.hh | 2 +- .../gpu/intern/gpu_select_sample_query.cc | 4 +- .../gpu/intern/gpu_shader_dependency.cc | 4 +- source/blender/gpu/intern/gpu_state.cc | 2 +- source/blender/gpu/intern/gpu_viewport.c | 2 +- .../blender/gpu/metal/mtl_shader_generator.mm | 2 +- source/blender/gpu/opengl/gl_backend.cc | 24 ++++----- source/blender/gpu/opengl/gl_batch.cc | 2 +- source/blender/gpu/opengl/gl_immediate.cc | 2 +- source/blender/gpu/opengl/gl_immediate.hh | 2 +- source/blender/gpu/opengl/gl_shader.cc | 6 +-- source/blender/gpu/opengl/gl_texture.cc | 10 ++-- source/blender/gpu/opengl/gl_vertex_array.cc | 2 +- .../common/gpu_shader_math_matrix_lib.glsl | 6 +-- .../infos/gpu_shader_2D_widget_info.hh | 2 +- .../gpu_shader_material_principled.glsl | 2 +- .../blender/ikplugin/intern/iksolver_plugin.c | 2 +- source/blender/imbuf/IMB_imbuf_types.h | 2 +- source/blender/imbuf/intern/anim_movie.c | 11 ++-- source/blender/imbuf/intern/colormanagement.c | 2 +- .../imbuf/intern/openexr/openexr_api.cpp | 2 +- source/blender/imbuf/intern/scaling.c | 16 +++--- source/blender/imbuf/intern/thumbs.c | 2 +- .../io/alembic/exporter/abc_writer_mesh.cc | 2 +- .../io/alembic/intern/abc_customdata.cc | 2 +- .../io/alembic/intern/abc_reader_archive.h | 2 +- .../io/alembic/intern/abc_reader_mesh.cc | 8 +-- .../blender/io/collada/AnimationImporter.cpp | 4 +- .../blender/io/collada/DocumentImporter.cpp | 2 +- .../importer/obj_import_file_reader.cc | 12 ++--- source/blender/makesdna/DNA_ID.h | 2 +- source/blender/makesdna/DNA_ID_enums.h | 2 +- source/blender/makesdna/DNA_brush_defaults.h | 2 +- source/blender/makesdna/DNA_node_types.h | 2 +- source/blender/makesdna/DNA_object_types.h | 2 +- source/blender/makesdna/DNA_particle_types.h | 2 +- .../blender/makesdna/DNA_pointcache_types.h | 2 +- source/blender/makesdna/DNA_scene_types.h | 4 +- source/blender/makesdna/DNA_space_types.h | 2 +- source/blender/makesdna/DNA_view3d_types.h | 2 +- .../makesdna/DNA_windowmanager_types.h | 4 +- source/blender/makesrna/RNA_types.h | 4 +- source/blender/makesrna/intern/rna_ID.c | 4 +- source/blender/makesrna/intern/rna_access.c | 4 +- source/blender/makesrna/intern/rna_action.c | 2 +- source/blender/makesrna/intern/rna_color.c | 2 +- source/blender/makesrna/intern/rna_define.c | 2 +- .../blender/makesrna/intern/rna_depsgraph.c | 4 +- source/blender/makesrna/intern/rna_fcurve.c | 8 +-- source/blender/makesrna/intern/rna_image.c | 2 +- source/blender/makesrna/intern/rna_object.c | 8 +-- source/blender/makesrna/intern/rna_path.cc | 6 +-- .../blender/makesrna/intern/rna_scene_api.c | 2 +- source/blender/makesrna/intern/rna_screen.c | 8 +-- .../makesrna/intern/rna_sculpt_paint.c | 2 +- .../blender/makesrna/intern/rna_sequencer.c | 2 +- source/blender/makesrna/intern/rna_space.c | 2 +- source/blender/makesrna/intern/rna_ui.c | 4 +- source/blender/makesrna/intern/rna_userdef.c | 4 +- source/blender/makesrna/intern/rna_wm.c | 4 +- source/blender/makesrna/intern/rna_wm_api.c | 2 +- source/blender/makesrna/intern/rna_wm_gizmo.c | 4 +- .../blender/modifiers/intern/MOD_boolean.cc | 2 +- .../modifiers/intern/MOD_datatransfer.cc | 2 +- .../modifiers/intern/MOD_meshsequencecache.cc | 2 +- .../modifiers/intern/MOD_normal_edit.cc | 4 +- source/blender/modifiers/intern/MOD_remesh.cc | 2 +- .../modifiers/intern/MOD_simpledeform.c | 2 +- source/blender/modifiers/intern/MOD_skin.c | 4 +- .../modifiers/intern/MOD_solidify_extrude.cc | 4 +- .../modifiers/intern/MOD_surfacedeform.cc | 4 +- .../nodes/node_composite_output_file.cc | 2 +- .../function/nodes/node_fn_random_value.cc | 2 +- .../geometry/nodes/node_geo_dual_mesh.cc | 2 +- .../geometry/nodes/node_geo_uv_unwrap.cc | 2 +- .../blender/nodes/shader/node_shader_tree.cc | 6 +-- .../nodes/node_shader_bsdf_principled.cc | 2 +- .../shader/nodes/node_shader_geometry.cc | 2 +- .../shader/nodes/node_shader_tex_coord.cc | 2 +- .../nodes/shader/nodes/node_shader_uvmap.cc | 2 +- .../shader/nodes/node_shader_vertex_color.cc | 2 +- .../texture/nodes/node_texture_common.cc | 4 +- source/blender/python/BPY_extern.h | 2 +- source/blender/python/generic/idprop_py_api.c | 4 +- source/blender/python/generic/py_capi_utils.c | 2 +- source/blender/python/gpu/gpu_py_offscreen.c | 4 +- source/blender/python/intern/bpy_app.c | 4 +- .../blender/python/intern/bpy_app_alembic.c | 2 +- .../python/intern/bpy_app_build_options.c | 2 +- source/blender/python/intern/bpy_app_ffmpeg.c | 2 +- .../blender/python/intern/bpy_app_handlers.c | 2 +- source/blender/python/intern/bpy_app_ocio.c | 2 +- source/blender/python/intern/bpy_app_oiio.c | 2 +- .../python/intern/bpy_app_opensubdiv.c | 2 +- .../blender/python/intern/bpy_app_openvdb.c | 2 +- source/blender/python/intern/bpy_app_sdl.c | 2 +- .../python/intern/bpy_app_translations.c | 4 +- source/blender/python/intern/bpy_app_usd.c | 2 +- source/blender/python/intern/bpy_driver.c | 8 +-- source/blender/python/intern/bpy_interface.c | 8 +-- .../blender/python/intern/bpy_interface_run.c | 4 +- source/blender/python/intern/bpy_props.c | 2 +- source/blender/python/intern/bpy_rna.c | 6 +-- .../blender/python/intern/bpy_rna_context.c | 2 +- source/blender/python/intern/bpy_rna_driver.c | 2 +- source/blender/python/intern/bpy_traceback.c | 2 +- .../python/mathutils/mathutils_Vector.c | 4 +- source/blender/render/intern/bake.cc | 2 +- source/blender/render/intern/texture_image.c | 4 +- .../blender/render/intern/texture_margin.cc | 2 +- source/blender/sequencer/intern/sequencer.c | 4 +- source/blender/sequencer/intern/strip_add.c | 2 +- .../sequencer/intern/strip_transform.c | 4 +- .../simulation/intern/SIM_mass_spring.cpp | 4 +- source/blender/windowmanager/WM_api.h | 4 +- source/blender/windowmanager/WM_types.h | 2 +- .../gizmo/intern/wm_gizmo_group.c | 4 +- .../windowmanager/gizmo/intern/wm_gizmo_map.c | 2 +- source/blender/windowmanager/intern/wm.c | 2 +- .../blender/windowmanager/intern/wm_cursors.c | 2 +- .../windowmanager/intern/wm_dragdrop.cc | 2 +- source/blender/windowmanager/intern/wm_draw.c | 8 +-- .../windowmanager/intern/wm_event_query.c | 4 +- .../windowmanager/intern/wm_event_system.cc | 40 +++++++------- .../blender/windowmanager/intern/wm_files.cc | 20 +++---- .../windowmanager/intern/wm_gesture_ops.c | 2 +- .../windowmanager/intern/wm_init_exit.cc | 10 ++-- .../blender/windowmanager/intern/wm_keymap.c | 12 ++--- .../windowmanager/intern/wm_operator_type.c | 2 +- .../windowmanager/intern/wm_operators.c | 4 +- .../windowmanager/intern/wm_playanim.c | 2 +- .../windowmanager/intern/wm_splash_screen.c | 2 +- .../blender/windowmanager/intern/wm_stereo.c | 4 +- .../windowmanager/intern/wm_toolsystem.c | 2 +- .../blender/windowmanager/intern/wm_window.c | 14 ++--- source/blender/windowmanager/wm_files.h | 2 +- source/creator/creator.c | 2 +- source/creator/creator_args.c | 2 +- tests/python/alembic_export_tests.py | 2 +- tests/python/bl_id_management.py | 2 +- tests/python/bl_keymap_completeness.py | 4 +- tests/python/bl_rigging_symmetrize.py | 4 +- tests/python/cycles_render_tests.py | 2 +- tests/python/operators.py | 2 +- .../test_evaluation_render_settings_a.py | 2 +- .../test_evaluation_render_settings_b.py | 2 +- .../test_evaluation_render_settings_c.py | 2 +- .../test_evaluation_render_settings_d.py | 2 +- .../test_evaluation_render_settings_e.py | 2 +- .../test_evaluation_render_settings_f.py | 2 +- .../test_evaluation_render_settings_g.py | 2 +- .../test_evaluation_render_settings_h.py | 2 +- .../test_evaluation_render_settings_i.py | 2 +- 569 files changed, 1112 insertions(+), 1115 deletions(-) diff --git a/build_files/build_environment/cmake/gmp.cmake b/build_files/build_environment/cmake/gmp.cmake index ffab5ed00e56..f19d2ea3c636 100644 --- a/build_files/build_environment/cmake/gmp.cmake +++ b/build_files/build_environment/cmake/gmp.cmake @@ -22,7 +22,7 @@ elseif(UNIX AND NOT APPLE) ) endif() -# Boolean crashes with Arm assembly, see T103423. +# Boolean crashes with Arm assembly, see #103423. if(BLENDER_PLATFORM_ARM) set(GMP_OPTIONS ${GMP_OPTIONS} diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index dc7c101f91a2..fe3bb9d4737e 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -544,7 +544,7 @@ endfunction() function(setup_platform_linker_libs target ) - # jemalloc must be early in the list, to be before pthread (see T57998) + # jemalloc must be early in the list, to be before pthread (see #57998). if(WITH_MEM_JEMALLOC) target_link_libraries(${target} ${JEMALLOC_LIBRARIES}) endif() diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake index 0b7ae0532d88..ca0585ce9ad6 100644 --- a/build_files/cmake/platform/platform_apple.cmake +++ b/build_files/cmake/platform/platform_apple.cmake @@ -440,7 +440,7 @@ string(APPEND PLATFORM_LINKFLAGS " -stdlib=libc++") # Make stack size more similar to Embree, required for Embree. string(APPEND PLATFORM_LINKFLAGS_EXECUTABLE " -Wl,-stack_size,0x100000") -# Suppress ranlib "has no symbols" warnings (workaround for T48250) +# Suppress ranlib "has no symbols" warnings (workaround for #48250). set(CMAKE_C_ARCHIVE_CREATE " Scr ") set(CMAKE_CXX_ARCHIVE_CREATE " Scr ") # llvm-ranlib doesn't support this flag. Xcode's libtool does. diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake index 82bfa53b5a30..675429deb770 100644 --- a/build_files/cmake/platform/platform_win32.cmake +++ b/build_files/cmake/platform/platform_win32.cmake @@ -121,7 +121,7 @@ if(WITH_WINDOWS_BUNDLE_CRT) include(InstallRequiredSystemLibraries) # ucrtbase(d).dll cannot be in the manifest, due to the way windows 10 handles - # redirects for this dll, for details see T88813. + # redirects for this dll, for details see #88813. foreach(lib ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}) string(FIND ${lib} "ucrtbase" pos) if(NOT pos EQUAL -1) diff --git a/doc/python_api/sphinx_doc_gen.py b/doc/python_api/sphinx_doc_gen.py index 745acbdc5b58..480dddb9c206 100644 --- a/doc/python_api/sphinx_doc_gen.py +++ b/doc/python_api/sphinx_doc_gen.py @@ -476,7 +476,7 @@ MODULE_GROUPING = { # -------------------------------BLENDER---------------------------------------- -# converting bytes to strings, due to T30154 +# Converting bytes to strings, due to #30154. BLENDER_REVISION = str(bpy.app.build_hash, 'utf_8') BLENDER_REVISION_TIMESTAMP = bpy.app.build_commit_timestamp @@ -2200,7 +2200,7 @@ def write_rst_enum_items(basepath, key, key_no_prefix, enum_items): Write a single page for a static enum in RST. This helps avoiding very large lists being in-lined in many places which is an issue - especially with icons in ``bpy.types.UILayout``. See T87008. + especially with icons in ``bpy.types.UILayout``. See #87008. """ filepath = os.path.join(basepath, "%s.rst" % key_no_prefix) with open(filepath, "w", encoding="utf-8") as fh: diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py index 81f940529d13..a162b3218532 100644 --- a/intern/cycles/blender/addon/ui.py +++ b/intern/cycles/blender/addon/ui.py @@ -20,7 +20,7 @@ class CyclesPresetPanel(PresetPanel, Panel): @staticmethod def post_cb(context): # Modify an arbitrary built-in scene property to force a depsgraph - # update, because add-on properties don't. (see T62325) + # update, because add-on properties don't. (see #62325) render = context.scene.render render.filter_size = render.filter_size diff --git a/intern/cycles/blender/image.cpp b/intern/cycles/blender/image.cpp index ecea06fb1cdb..32633f47c0b0 100644 --- a/intern/cycles/blender/image.cpp +++ b/intern/cycles/blender/image.cpp @@ -20,7 +20,7 @@ BlenderImageLoader::BlenderImageLoader(BL::Image b_image, : b_image(b_image), frame(frame), tile_number(tile_number), - /* Don't free cache for preview render to avoid race condition from T93560, to be fixed + /* Don't free cache for preview render to avoid race condition from #93560, to be fixed * properly later as we are close to release. */ free_cache(!is_preview_render && !b_image.has_data()) { @@ -72,7 +72,7 @@ bool BlenderImageLoader::load_metadata(const ImageDeviceFeatures &, ImageMetaDat metadata.colorspace = u_colorspace_raw; } else { - /* In some cases (e.g. T94135), the colorspace setting in Blender gets updated as part of the + /* In some cases (e.g. #94135), the colorspace setting in Blender gets updated as part of the * metadata queries in this function, so update the colorspace setting here. */ PointerRNA colorspace_ptr = b_image.colorspace_settings().ptr; metadata.colorspace = get_enum_identifier(colorspace_ptr, "name"); diff --git a/intern/cycles/blender/light.cpp b/intern/cycles/blender/light.cpp index d5aba2041ad7..49545047d9e5 100644 --- a/intern/cycles/blender/light.cpp +++ b/intern/cycles/blender/light.cpp @@ -24,7 +24,7 @@ void BlenderSync::sync_light(BL::Object &b_parent, Light *light = light_map.find(key); /* Check if the transform was modified, in case a linked collection is moved we do not get a - * specific depsgraph update (T88515). This also mimics the behavior for Objects. */ + * specific depsgraph update (#88515). This also mimics the behavior for Objects. */ const bool tfm_updated = (light && light->get_tfm() != tfm); /* Update if either object or light data changed. */ diff --git a/intern/cycles/blender/session.cpp b/intern/cycles/blender/session.cpp index 7dfacec8fc9c..ab0190ad235d 100644 --- a/intern/cycles/blender/session.cpp +++ b/intern/cycles/blender/session.cpp @@ -404,7 +404,7 @@ void BlenderSession::render(BL::Depsgraph &b_depsgraph_) * point we know that we've got everything to render current view layer. */ /* At the moment we only free if we are not doing multi-view - * (or if we are rendering the last view). See T58142/D4239 for discussion. + * (or if we are rendering the last view). See #58142/D4239 for discussion. */ if (view_index == num_views - 1) { free_blender_memory_if_possible(); diff --git a/intern/cycles/blender/sync.cpp b/intern/cycles/blender/sync.cpp index 7df2a8cf30f1..ee008bc6dcad 100644 --- a/intern/cycles/blender/sync.cpp +++ b/intern/cycles/blender/sync.cpp @@ -766,7 +766,7 @@ void BlenderSync::free_data_after_sync(BL::Depsgraph &b_depsgraph) (BlenderSession::headless || is_interface_locked) && /* Baking re-uses the depsgraph multiple times, clearing crashes * reading un-evaluated mesh data which isn't aligned with the - * geometry we're baking, see T71012. */ + * geometry we're baking, see #71012. */ !scene->bake_manager->get_baking() && /* Persistent data must main caches for performance and correctness. */ !is_persistent_data; diff --git a/intern/cycles/device/hip/device_impl.cpp b/intern/cycles/device/hip/device_impl.cpp index b9bcd7edcab4..010470c23aee 100644 --- a/intern/cycles/device/hip/device_impl.cpp +++ b/intern/cycles/device/hip/device_impl.cpp @@ -906,7 +906,7 @@ bool HIPDevice::should_use_graphics_interop() * possible, but from the empiric measurements it can be considerably slower than using naive * pixels copy. */ - /* Disable graphics interop for now, because of driver bug in 21.40. See T92972 */ + /* Disable graphics interop for now, because of driver bug in 21.40. See #92972 */ # if 0 HIPContextScope scope(this); diff --git a/intern/cycles/device/metal/device_impl.mm b/intern/cycles/device/metal/device_impl.mm index ba673c461b2d..0d836e7c2d55 100644 --- a/intern/cycles/device/metal/device_impl.mm +++ b/intern/cycles/device/metal/device_impl.mm @@ -586,7 +586,7 @@ void MetalDevice::erase_allocation(device_memory &mem) if (it != metal_mem_map.end()) { MetalMem *mmem = it->second.get(); - /* blank out reference to MetalMem* in the launch params (fixes crash T94736) */ + /* blank out reference to MetalMem* in the launch params (fixes crash #94736) */ if (mmem->pointer_index >= 0) { device_ptr *pointers = (device_ptr *)&launch_params; pointers[mmem->pointer_index] = 0; diff --git a/intern/cycles/kernel/device/cpu/kernel_avx2.cpp b/intern/cycles/kernel/device/cpu/kernel_avx2.cpp index a1644fb0dfe3..9d63be143f57 100644 --- a/intern/cycles/kernel/device/cpu/kernel_avx2.cpp +++ b/intern/cycles/kernel/device/cpu/kernel_avx2.cpp @@ -10,7 +10,7 @@ #ifndef WITH_CYCLES_OPTIMIZED_KERNEL_AVX2 # define KERNEL_STUB #else -/* SSE optimization disabled for now on 32 bit, see bug T36316. */ +/* SSE optimization disabled for now on 32 bit, see bug #36316. */ # if !(defined(__GNUC__) && (defined(i386) || defined(_M_IX86))) # define __KERNEL_SSE__ # define __KERNEL_SSE2__ diff --git a/intern/cycles/kernel/device/cpu/kernel_sse2.cpp b/intern/cycles/kernel/device/cpu/kernel_sse2.cpp index 6f420274e4a5..9a2e5cb7c3b3 100644 --- a/intern/cycles/kernel/device/cpu/kernel_sse2.cpp +++ b/intern/cycles/kernel/device/cpu/kernel_sse2.cpp @@ -10,7 +10,7 @@ #ifndef WITH_CYCLES_OPTIMIZED_KERNEL_SSE2 # define KERNEL_STUB #else -/* SSE optimization disabled for now on 32 bit, see bug T36316. */ +/* SSE optimization disabled for now on 32 bit, see bug #36316. */ # if !(defined(__GNUC__) && (defined(i386) || defined(_M_IX86))) # define __KERNEL_SSE2__ # endif diff --git a/intern/cycles/kernel/device/cpu/kernel_sse41.cpp b/intern/cycles/kernel/device/cpu/kernel_sse41.cpp index 1cfea5dc2301..2e511c226475 100644 --- a/intern/cycles/kernel/device/cpu/kernel_sse41.cpp +++ b/intern/cycles/kernel/device/cpu/kernel_sse41.cpp @@ -10,7 +10,7 @@ #ifndef WITH_CYCLES_OPTIMIZED_KERNEL_SSE41 # define KERNEL_STUB #else -/* SSE optimization disabled for now on 32 bit, see bug T36316. */ +/* SSE optimization disabled for now on 32 bit, see bug #36316. */ # if !(defined(__GNUC__) && (defined(i386) || defined(_M_IX86))) # define __KERNEL_SSE2__ # define __KERNEL_SSE3__ diff --git a/intern/cycles/kernel/device/gpu/kernel.h b/intern/cycles/kernel/device/gpu/kernel.h index 821fc1eaf15d..0c2fd76fcbde 100644 --- a/intern/cycles/kernel/device/gpu/kernel.h +++ b/intern/cycles/kernel/device/gpu/kernel.h @@ -645,7 +645,7 @@ ccl_device_inline void kernel_gpu_film_convert_half_write(ccl_global uchar4 *rgb const int y, const half4 half_pixel) { - /* Work around HIP issue with half float display, see T92972. */ + /* Work around HIP issue with half float display, see #92972. */ #ifdef __KERNEL_HIP__ ccl_global half *out = ((ccl_global half *)rgba) + (rgba_offset + y * rgba_stride + x) * 4; out[0] = half_pixel.x; diff --git a/intern/cycles/scene/osl.cpp b/intern/cycles/scene/osl.cpp index 9260fbdcd8ef..9b65b780fe47 100644 --- a/intern/cycles/scene/osl.cpp +++ b/intern/cycles/scene/osl.cpp @@ -394,7 +394,7 @@ bool OSLShaderManager::osl_compile(const string &inputfile, const string &output /* Compile. * - * Mutex protected because the OSL compiler does not appear to be thread safe, see T92503. */ + * Mutex protected because the OSL compiler does not appear to be thread safe, see #92503. */ static thread_mutex osl_compiler_mutex; thread_scoped_lock lock(osl_compiler_mutex); diff --git a/intern/cycles/session/tile.cpp b/intern/cycles/session/tile.cpp index ab858e6f1921..371ca4728d45 100644 --- a/intern/cycles/session/tile.cpp +++ b/intern/cycles/session/tile.cpp @@ -520,7 +520,7 @@ bool TileManager::write_tile(const RenderBuffers &tile_buffers) /* If there is an overscan used for the tile copy pixels into single continuous block of memory * without any "gaps". * This is a workaround for bug in OIIO (https://github.com/OpenImageIO/oiio/pull/3176). - * Our task reference: T93008. */ + * Our task reference: #93008. */ if (tile_params.window_x || tile_params.window_y || tile_params.window_width != tile_params.width || tile_params.window_height != tile_params.height) { diff --git a/intern/cycles/util/math_fast.h b/intern/cycles/util/math_fast.h index c7d44739af99..4ebd50fdee37 100644 --- a/intern/cycles/util/math_fast.h +++ b/intern/cycles/util/math_fast.h @@ -421,7 +421,7 @@ ccl_device_inline float fast_expf(float x) #if !defined(__KERNEL_GPU__) && !defined(_MSC_VER) /* MSVC seems to have a code-gen bug here in at least SSE41/AVX, see - * T78047 and T78869 for details. Just disable for now, it only makes + * #78047 and #78869 for details. Just disable for now, it only makes * a small difference in denoising performance. */ ccl_device float4 fast_exp2f4(float4 x) { diff --git a/intern/ghost/intern/GHOST_ContextCGL.mm b/intern/ghost/intern/GHOST_ContextCGL.mm index 1aa0cb9def4e..4defd68b90ff 100644 --- a/intern/ghost/intern/GHOST_ContextCGL.mm +++ b/intern/ghost/intern/GHOST_ContextCGL.mm @@ -516,7 +516,7 @@ GHOST_TSuccess GHOST_ContextCGL::releaseNativeHandles() /* OpenGL on Metal * - * Use Metal layer to avoid Viewport lagging on macOS, see T60043. */ + * Use Metal layer to avoid Viewport lagging on macOS, see #60043. */ static const MTLPixelFormat METAL_FRAMEBUFFERPIXEL_FORMAT = MTLPixelFormatBGRA8Unorm; static const OSType METAL_CORE_VIDEO_PIXEL_FORMAT = kCVPixelFormatType_32BGRA; diff --git a/intern/ghost/intern/GHOST_ContextGLX.cpp b/intern/ghost/intern/GHOST_ContextGLX.cpp index d9f2df21ee03..71ec9d1c0095 100644 --- a/intern/ghost/intern/GHOST_ContextGLX.cpp +++ b/intern/ghost/intern/GHOST_ContextGLX.cpp @@ -141,7 +141,7 @@ GHOST_TSuccess GHOST_ContextGLX::initializeDrawingContext() /* -------------------------------------------------------------------- */ #else /* Important to initialize only GLXEW (_not_ GLEW), - * since this breaks w/ Mesa's `swrast`, see: T46431. */ + * since this breaks w/ Mesa's `swrast`, see: #46431. */ glxewInit(); #endif /* USE_GLXEW_INIT_WORKAROUND */ diff --git a/intern/ghost/intern/GHOST_NDOFManager.cpp b/intern/ghost/intern/GHOST_NDOFManager.cpp index e6e4ec25b294..d0309b4bba3c 100644 --- a/intern/ghost/intern/GHOST_NDOFManager.cpp +++ b/intern/ghost/intern/GHOST_NDOFManager.cpp @@ -302,7 +302,7 @@ bool GHOST_NDOFManager::setDevice(ushort vendor_id, ushort product_id) switch (product_id) { case 0xC62E: /* Plugged in. */ case 0xC62F: /* Wireless. */ - case 0xC658: /* Wireless (3DConnexion Universal Wireless Receiver in WIN32), see T82412. */ + case 0xC658: /* Wireless (3DConnexion Universal Wireless Receiver in WIN32), see #82412. */ { device_type_ = NDOF_SpaceMouseWireless; hid_map_button_num_ = 2; diff --git a/intern/ghost/intern/GHOST_SystemWayland.cpp b/intern/ghost/intern/GHOST_SystemWayland.cpp index c3c64bab4cfc..6ef593e277cb 100644 --- a/intern/ghost/intern/GHOST_SystemWayland.cpp +++ b/intern/ghost/intern/GHOST_SystemWayland.cpp @@ -141,7 +141,7 @@ constexpr size_t events_pending_default_size = 4096 / sizeof(void *); * \{ */ /** - * GNOME (mutter 42.2 had a bug with confine not respecting scale - Hi-DPI), See: T98793. + * GNOME (mutter 42.2 had a bug with confine not respecting scale - Hi-DPI), See: #98793. * Even though this has been fixed, at time of writing it's not yet in a release. * Workaround the problem by implementing confine with a software cursor. * While this isn't ideal, it's not adding a lot of overhead as software @@ -176,7 +176,7 @@ static bool use_gnome_confine_hack = false; /** * KDE (plasma 5.26.1) has a bug where the cursor surface needs to be committed - * (via `wl_surface_commit`) when it was hidden and is being set to visible again, see: T102048. + * (via `wl_surface_commit`) when it was hidden and is being set to visible again, see: #102048. * See: https://bugs.kde.org/show_bug.cgi?id=461001 */ #define USE_KDE_TABLET_HIDDEN_CURSOR_HACK @@ -197,8 +197,8 @@ static bool use_gnome_confine_hack = false; * \{ */ /** - * Fix short-cut part of keyboard reading code not properly handling some keys, see: T102194. - * \note This is similar to X11 workaround by the same name, see: T47228. + * Fix short-cut part of keyboard reading code not properly handling some keys, see: #102194. + * \note This is similar to X11 workaround by the same name, see: #47228. */ #define USE_NON_LATIN_KB_WORKAROUND @@ -1328,7 +1328,7 @@ static void ghost_wl_display_report_error(struct wl_display *display) * So in practice re-connecting to the display server isn't an option. * * Exit since leaving the process open will simply flood the output and do nothing. - * Although as the process is in a valid state, auto-save for e.g. is possible, see: T100855. */ + * Although as the process is in a valid state, auto-save for e.g. is possible, see: #100855. */ ::exit(-1); } @@ -1442,7 +1442,7 @@ static GHOST_TKey xkb_map_gkey(const xkb_keysym_t sym) /* Additional keys for non US layouts. */ - /* Uses the same physical key as #XKB_KEY_KP_Decimal for QWERTZ layout, see: T102287. */ + /* Uses the same physical key as #XKB_KEY_KP_Decimal for QWERTZ layout, see: #102287. */ GXMAP(gkey, XKB_KEY_KP_Separator, GHOST_kKeyNumpadPeriod); default: @@ -3810,7 +3810,7 @@ static xkb_keysym_t xkb_state_key_get_one_sym_without_modifiers( /* NOTE(@ideasman42): Only perform the number-locked lookup as a fallback * when a number-pad key has been pressed. This is important as some key-maps use number lock - * for switching other layers (in particular `de(neo_qwertz)` turns on layer-4), see: T96170. + * for switching other layers (in particular `de(neo_qwertz)` turns on layer-4), see: #96170. * Alternative solutions could be to inspect the layout however this could get involved * and turning on the number-lock is only needed for a limited set of keys. */ @@ -4467,7 +4467,7 @@ static void xdg_output_handle_logical_size(void *data, #ifdef USE_GNOME_CONFINE_HACK /* Use a bug in GNOME to check GNOME is in use. If the bug is fixed this won't cause an issue - * as T98793 has been fixed up-stream too, but not in a release at time of writing. */ + * as #98793 has been fixed up-stream too, but not in a release at time of writing. */ use_gnome_confine_hack = true; #endif diff --git a/intern/ghost/intern/GHOST_SystemWayland.h b/intern/ghost/intern/GHOST_SystemWayland.h index 153931a0a39f..61c7f3a045ce 100644 --- a/intern/ghost/intern/GHOST_SystemWayland.h +++ b/intern/ghost/intern/GHOST_SystemWayland.h @@ -208,7 +208,7 @@ class GHOST_SystemWayland : public GHOST_System { * Clear all references to this output. * * \note The compositor should have already called the `wl_surface_listener.leave` callback, - * however some compositors may not (see T103586). + * however some compositors may not (see #103586). * So remove references to the output before it's destroyed to avoid crashing. * * \return true when any references were removed. diff --git a/intern/ghost/intern/GHOST_SystemWin32.cpp b/intern/ghost/intern/GHOST_SystemWin32.cpp index 4a1fec6f8fdc..9fc69dabe002 100644 --- a/intern/ghost/intern/GHOST_SystemWin32.cpp +++ b/intern/ghost/intern/GHOST_SystemWin32.cpp @@ -565,8 +565,8 @@ GHOST_TKey GHOST_SystemWin32::hardKey(RAWINPUT const &raw, bool *r_key_down) /** * \note this function can be extended to include other exotic cases as they arise. * - * This function was added in response to bug T25715. - * This is going to be a long list T42426. + * This function was added in response to bug #25715. + * This is going to be a long list #42426. */ GHOST_TKey GHOST_SystemWin32::processSpecialKey(short vKey, short scanCode) const { @@ -1083,7 +1083,7 @@ GHOST_EventCursor *GHOST_SystemWin32::processCursorEvent(GHOST_WindowWin32 *wind * so the box needs to small enough not to let the cursor escape the window but large * enough that the cursor isn't being warped every time. * If this was not the case it would be less trouble to simply warp the cursor to the - * center of the screen on every motion, see: D16558 (alternative fix for T102346). */ + * center of the screen on every motion, see: D16558 (alternative fix for #102346). */ const int32_t subregion_div = 4; /* One quarter of the region. */ const int32_t size[2] = {bounds.getWidth(), bounds.getHeight()}; const int32_t center[2] = {(bounds.m_l + bounds.m_r) / 2, (bounds.m_t + bounds.m_b) / 2}; @@ -1209,7 +1209,7 @@ GHOST_EventKey *GHOST_SystemWin32::processKeyEvent(GHOST_WindowWin32 *window, RA const bool ctrl_pressed = has_state && state[VK_CONTROL] & 0x80; const bool alt_pressed = has_state && state[VK_MENU] & 0x80; - /* We can be here with !key_down if processing dead keys (diacritics). See T103119. */ + /* We can be here with !key_down if processing dead keys (diacritics). See #103119. */ /* No text with control key pressed (Alt can be used to insert special characters though!). */ if (ctrl_pressed && !alt_pressed) { diff --git a/intern/ghost/intern/GHOST_SystemX11.cpp b/intern/ghost/intern/GHOST_SystemX11.cpp index 88f21c063c08..2de81ce46d5d 100644 --- a/intern/ghost/intern/GHOST_SystemX11.cpp +++ b/intern/ghost/intern/GHOST_SystemX11.cpp @@ -46,7 +46,7 @@ #ifdef WITH_X11_XFIXES # include -/* Workaround for XWayland grab glitch: T53004. */ +/* Workaround for XWayland grab glitch: #53004. */ # define WITH_XWAYLAND_HACK #endif @@ -71,11 +71,11 @@ # define USE_XINPUT_HOTPLUG #endif -/* see T34039 Fix Alt key glitch on Unity desktop */ +/* see #34039 Fix Alt key glitch on Unity desktop */ #define USE_UNITY_WORKAROUND /* Fix 'shortcut' part of keyboard reading code only ever using first defined key-map - * instead of active one. See T47228 and D1746 */ + * instead of active one. See #47228 and D1746 */ #define USE_NON_LATIN_KB_WORKAROUND static uchar bit_is_on(const uchar *ptr, int bit) @@ -928,7 +928,7 @@ void GHOST_SystemX11::processEvent(XEvent *xe) window->getClientBounds(bounds); /* TODO(@ideasman42): warp the cursor to `window->getCursorGrabInitPos`, - * on every motion event, see: D16557 (alternative fix for T102346). */ + * on every motion event, see: D16557 (alternative fix for #102346). */ const int32_t subregion_div = 4; /* One quarter of the region. */ const int32_t size[2] = {bounds.getWidth(), bounds.getHeight()}; const int32_t center[2] = { @@ -964,7 +964,7 @@ void GHOST_SystemX11::processEvent(XEvent *xe) if (x_new != xme.x_root || y_new != xme.y_root) { /* Use time of last event to avoid wrapping several times on the 'same' actual wrap. * Note that we need to deal with X and Y separately as those might wrap at the same time - * but still in two different events (corner case, see T74918). + * but still in two different events (corner case, see #74918). * We also have to add a few extra milliseconds of 'padding', as sometimes we get two * close events that will generate extra wrap on the same axis within those few * milliseconds. */ @@ -1028,7 +1028,7 @@ void GHOST_SystemX11::processEvent(XEvent *xe) /* XXX: Code below is kinda awfully convoluted... Issues are: * - In keyboards like Latin ones, numbers need a 'Shift' to be accessed but key_sym * is unmodified (or anyone swapping the keys with `xmodmap`). - * - #XLookupKeysym seems to always use first defined key-map (see T47228), which generates + * - #XLookupKeysym seems to always use first defined key-map (see #47228), which generates * key-codes unusable by ghost_key_from_keysym for non-Latin-compatible key-maps. * * To address this, we: @@ -1715,7 +1715,7 @@ GHOST_TSuccess GHOST_SystemX11::setCursorPosition(int32_t x, int32_t y) #if defined(WITH_X11_XINPUT) && defined(USE_X11_XINPUT_WARP) if ((m_xinput_version.present) && (m_xinput_version.major_version >= 2)) { - /* Needed to account for XInput "Coordinate Transformation Matrix", see T48901 */ + /* Needed to account for XInput "Coordinate Transformation Matrix", see #48901 */ int device_id; if (XIGetClientPointer(m_display, None, &device_id) != False) { XIWarpPointer(m_display, device_id, None, None, 0, 0, 0, 0, relx, rely); diff --git a/intern/ghost/intern/GHOST_SystemX11.h b/intern/ghost/intern/GHOST_SystemX11.h index 1f071da6da7f..4eff2850afd9 100644 --- a/intern/ghost/intern/GHOST_SystemX11.h +++ b/intern/ghost/intern/GHOST_SystemX11.h @@ -20,8 +20,8 @@ /* Disable XINPUT warp, currently not implemented by Xorg for multi-head display. * (see comment in XSERVER `Xi/xiwarppointer.c` -> `FIXME: panoramix stuff is missing` ~ v1.13.4) - * If this is supported we can add back XINPUT for warping (fixing T48901). - * For now disable (see T50383). */ + * If this is supported we can add back XINPUT for warping (fixing #48901). + * For now disable (see #50383). */ // # define USE_X11_XINPUT_WARP #endif diff --git a/intern/ghost/intern/GHOST_WindowWayland.cpp b/intern/ghost/intern/GHOST_WindowWayland.cpp index 961c84f71e47..066ff4aa03ab 100644 --- a/intern/ghost/intern/GHOST_WindowWayland.cpp +++ b/intern/ghost/intern/GHOST_WindowWayland.cpp @@ -812,12 +812,12 @@ GHOST_WindowWayland::GHOST_WindowWayland(GHOST_SystemWayland *system, * when the `window_->scale` changed. */ const int32_t size_min[2] = {320, 240}; - /* This value is expected to match the base name of the `.desktop` file. see T101805. + /* This value is expected to match the base name of the `.desktop` file. see #101805. * * NOTE: the XDG desktop-entry-spec defines that this should follow the "reverse DNS" convention. * For e.g. `org.blender.Blender` - however the `.desktop` file distributed with Blender is * simply called `blender.desktop`, so the it's important to follow that name. - * Other distributions such as SNAP & FLATPAK may need to change this value T101779. + * Other distributions such as SNAP & FLATPAK may need to change this value #101779. * Currently there isn't a way to configure this, we may want to support that. */ const char *xdg_app_id = ( #ifdef WITH_GHOST_WAYLAND_APP_ID @@ -1080,7 +1080,7 @@ GHOST_WindowWayland::~GHOST_WindowWayland() /* NOTE(@ideasman42): Flushing will often run the appropriate handlers event * (#wl_surface_listener.leave in particular) to avoid attempted access to the freed surfaces. - * This is not fool-proof though, hence the call to #window_surface_unref, see: T99078. */ + * This is not fool-proof though, hence the call to #window_surface_unref, see: #99078. */ wl_display_flush(system_->wl_display()); delete window_; diff --git a/intern/ghost/intern/GHOST_WindowWayland.h b/intern/ghost/intern/GHOST_WindowWayland.h index c5554f702004..04f247eef8d6 100644 --- a/intern/ghost/intern/GHOST_WindowWayland.h +++ b/intern/ghost/intern/GHOST_WindowWayland.h @@ -15,7 +15,7 @@ #include /* For #wl_fixed_t */ /** - * Define to workaround for a bug/limitation in WAYLAND, see: T100855 & upstream report: + * Define to workaround for a bug/limitation in WAYLAND, see: #100855 & upstream report: * https://gitlab.freedesktop.org/wayland/wayland/-/issues/159 * * Consume events from WAYLAND in a thread, this is needed because overflowing the event queue diff --git a/intern/ghost/intern/GHOST_WindowWin32.cpp b/intern/ghost/intern/GHOST_WindowWin32.cpp index 5086920be432..3e82f55c5839 100644 --- a/intern/ghost/intern/GHOST_WindowWin32.cpp +++ b/intern/ghost/intern/GHOST_WindowWin32.cpp @@ -154,7 +154,7 @@ GHOST_WindowWin32::GHOST_WindowWin32(GHOST_SystemWin32 *system, } if (parentwindow) { - /* Release any parent capture to allow immediate interaction (T90110). */ + /* Release any parent capture to allow immediate interaction (#90110). */ ::ReleaseCapture(); parentwindow->lostMouseCapture(); } diff --git a/intern/ghost/intern/GHOST_WindowX11.cpp b/intern/ghost/intern/GHOST_WindowX11.cpp index 00b0230888e9..393944eac973 100644 --- a/intern/ghost/intern/GHOST_WindowX11.cpp +++ b/intern/ghost/intern/GHOST_WindowX11.cpp @@ -418,7 +418,7 @@ void GHOST_WindowX11::refreshXInputDevices() for (GHOST_SystemX11::GHOST_TabletX11 &xtablet : m_system->GetXTablets()) { /* With modern XInput (XLIB 1.6.2 at least and/or EVDEV 2.9.0) and some 'no-name' tablets * like 'UC-LOGIC Tablet WP5540U', we also need to 'select' ButtonPress for motion event, - * otherwise we do not get any tablet motion event once pen is pressed... See T43367. + * otherwise we do not get any tablet motion event once pen is pressed... See #43367. */ XEventClass ev; @@ -1467,7 +1467,7 @@ GHOST_TSuccess GHOST_WindowX11::setWindowCursorGrab(GHOST_TGrabCursorMode mode) } } - /* Perform this last so to workaround XWayland bug, see: T53004. */ + /* Perform this last so to workaround XWayland bug, see: #53004. */ if (m_cursorGrab == GHOST_kGrabHide) { setWindowCursorVisibility(true); } diff --git a/intern/locale/boost_locale_wrapper.cpp b/intern/locale/boost_locale_wrapper.cpp index 80e8d89799a8..dc69a3740748 100644 --- a/intern/locale/boost_locale_wrapper.cpp +++ b/intern/locale/boost_locale_wrapper.cpp @@ -108,7 +108,7 @@ void bl_locale_set(const char *locale) } /* Extra catch on `std::runtime_error` is needed for macOS/Clang as it seems that exceptions * like `boost::locale::conv::conversion_error` (which inherit from `std::runtime_error`) are - * not caught by their ancestor `std::exception`. See T88877#1177108 */ + * not caught by their ancestor `std::exception`. See #88877#1177108 */ catch (std::runtime_error const &e) { std::cout << "bl_locale_set(" << locale << "): " << e.what() << " \n"; } diff --git a/intern/locale/osx_user_locale.mm b/intern/locale/osx_user_locale.mm index 92c9eb216056..f38717f24d3d 100644 --- a/intern/locale/osx_user_locale.mm +++ b/intern/locale/osx_user_locale.mm @@ -23,7 +23,7 @@ const char *osx_user_locale() [myNSLocale autorelease]; // This produces gettext-invalid locale in recent macOS versions (11.4), - // like `ko-Kore_KR` instead of `ko_KR`. See T88877. + // like `ko-Kore_KR` instead of `ko_KR`. See #88877. // NSString *nsIdentifier = [myNSLocale localeIdentifier]; const NSString *nsIdentifier = [myNSLocale languageCode]; diff --git a/intern/opencolorio/ocio_impl_glsl.cc b/intern/opencolorio/ocio_impl_glsl.cc index 6a72cd2aacb1..28c66021d232 100644 --- a/intern/opencolorio/ocio_impl_glsl.cc +++ b/intern/opencolorio/ocio_impl_glsl.cc @@ -193,7 +193,7 @@ static bool createGPUShader(OCIO_GPUShader &shader, info.fragment_source("gpu_shader_display_transform_frag.glsl"); info.fragment_source_generated = source; - /* T96502: Work around for incorrect OCIO GLSL code generation when using + /* #96502: Work around for incorrect OCIO GLSL code generation when using * GradingPrimaryTransform. Should be reevaluated when changing to a next version of OCIO. * (currently v2.1.1). */ info.define("inf 1e32"); diff --git a/release/datafiles/userdef/userdef_default.c b/release/datafiles/userdef/userdef_default.c index 24e093833c4a..d75a0974f748 100644 --- a/release/datafiles/userdef/userdef_default.c +++ b/release/datafiles/userdef/userdef_default.c @@ -145,7 +145,7 @@ const UserDef U_default = { .ndof_flag = (NDOF_MODE_ORBIT | NDOF_LOCK_HORIZON | NDOF_SHOULD_PAN | NDOF_SHOULD_ZOOM | NDOF_SHOULD_ROTATE | /* Software from the driver authors follows this convention - * so invert this by default, see: T67579. */ + * so invert this by default, see: #67579. */ NDOF_ROTX_INVERT_AXIS | NDOF_ROTY_INVERT_AXIS | NDOF_ROTZ_INVERT_AXIS | NDOF_PANX_INVERT_AXIS | NDOF_PANY_INVERT_AXIS | NDOF_PANZ_INVERT_AXIS | NDOF_ZOOM_INVERT | NDOF_CAMERA_PAN_ZOOM), diff --git a/release/scripts/freestyle/modules/freestyle/chainingiterators.py b/release/scripts/freestyle/modules/freestyle/chainingiterators.py index 656a5b09a373..fbe419293cac 100644 --- a/release/scripts/freestyle/modules/freestyle/chainingiterators.py +++ b/release/scripts/freestyle/modules/freestyle/chainingiterators.py @@ -286,7 +286,7 @@ class pySketchyChainingIterator(ChainingIterator): if not found: # This is a fatal error condition: self.current_edge must be found - # among the edges seen by the AdjacencyIterator [bug T35695]. + # among the edges seen by the AdjacencyIterator [bug #35695]. if bpy.app.debug_freestyle: print('pySketchyChainingIterator: current edge not found') return None diff --git a/release/scripts/modules/bl_console_utils/autocomplete/intellisense.py b/release/scripts/modules/bl_console_utils/autocomplete/intellisense.py index 7aff3596c42a..d2d00238ddf4 100644 --- a/release/scripts/modules/bl_console_utils/autocomplete/intellisense.py +++ b/release/scripts/modules/bl_console_utils/autocomplete/intellisense.py @@ -113,7 +113,7 @@ def expand(line, cursor, namespace, *, private=True): if len(matches) == 1: scrollback = '' else: - # causes blender bug T27495 since string keys may contain '.' + # causes blender bug #27495 since string keys may contain '.' # scrollback = ' '.join([m.split('.')[-1] for m in matches]) # add white space to align with the cursor diff --git a/release/scripts/modules/bpy/ops.py b/release/scripts/modules/bpy/ops.py index cb6ea0318a41..4295aa5f237d 100644 --- a/release/scripts/modules/bpy/ops.py +++ b/release/scripts/modules/bpy/ops.py @@ -32,7 +32,7 @@ class _BPyOpsSubModOp: # XXX You never quite know what you get from bpy.types, # with operators... Operator and OperatorProperties # are shadowing each other, and not in the same way for - # native ops and py ones! See T39158. + # native ops and py ones! See #39158. # op_class = getattr(bpy.types, idname) op_class = _op_get_rna_type(idname) descr = op_class.description diff --git a/release/scripts/modules/bpy_extras/anim_utils.py b/release/scripts/modules/bpy_extras/anim_utils.py index 3b90b18359e0..9bd5d9a83fac 100644 --- a/release/scripts/modules/bpy_extras/anim_utils.py +++ b/release/scripts/modules/bpy_extras/anim_utils.py @@ -259,15 +259,15 @@ def bake_action_iter( if is_new_action: action = bpy.data.actions.new("Action") - # Only leave tweak mode if we actually need to modify the action (T57159) + # Only leave tweak mode if we actually need to modify the action (#57159) if action != atd.action: - # Leave tweak mode before trying to modify the action (T48397) + # Leave tweak mode before trying to modify the action (#48397) if atd.use_tweak_mode: atd.use_tweak_mode = False atd.action = action - # Baking the action only makes sense in Replace mode, so force it (T69105) + # Baking the action only makes sense in Replace mode, so force it (#69105) if not atd.use_tweak_mode: atd.action_blend_type = 'REPLACE' diff --git a/release/scripts/modules/bpy_extras/io_utils.py b/release/scripts/modules/bpy_extras/io_utils.py index 04b536fce40c..794c39e07dc6 100644 --- a/release/scripts/modules/bpy_extras/io_utils.py +++ b/release/scripts/modules/bpy_extras/io_utils.py @@ -111,7 +111,7 @@ def orientation_helper(axis_forward='Y', axis_up='Z'): """ def wrapper(cls): # Without that, we may end up adding those fields to some **parent** class' __annotations__ property - # (like the ImportHelper or ExportHelper ones)! See T58772. + # (like the ImportHelper or ExportHelper ones)! See #58772. if "__annotations__" not in cls.__dict__: setattr(cls, "__annotations__", {}) diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py index d8d6a9123f2d..18dbab7c6249 100644 --- a/release/scripts/modules/bpy_types.py +++ b/release/scripts/modules/bpy_types.py @@ -564,7 +564,7 @@ class Mesh(bpy_types.ID): face_lengths = tuple(map(len, faces)) - # NOTE: check non-empty lists by length because of how `numpy` handles truth tests, see: T90268. + # NOTE: check non-empty lists by length because of how `numpy` handles truth tests, see: #90268. vertices_len = len(vertices) edges_len = len(edges) faces_len = len(faces) diff --git a/release/scripts/presets/keyconfig/Blender.py b/release/scripts/presets/keyconfig/Blender.py index e77fde4c39c7..52e4c2d42290 100644 --- a/release/scripts/presets/keyconfig/Blender.py +++ b/release/scripts/presets/keyconfig/Blender.py @@ -86,7 +86,7 @@ class Prefs(bpy.types.KeyConfigPreferences): update=update_fn, ) - # Experimental: only show with developer extras, see: T96544. + # Experimental: only show with developer extras, see: #96544. use_tweak_select_passthrough: BoolProperty( name="Tweak Select: Mouse Select & Move", description=( @@ -96,7 +96,7 @@ class Prefs(bpy.types.KeyConfigPreferences): default=False, update=update_fn, ) - # Experimental: only show with developer extras, see: T96544. + # Experimental: only show with developer extras, see: #96544. use_tweak_tool_lmb_interaction: BoolProperty( name="Tweak Tool: Left Mouse Select & Move", description=( diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py index b960c56ffe72..e18461eb4dfb 100644 --- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -37,7 +37,7 @@ class Params: # instead be bound to a binding that doesn't de-select all, this way: # - Click-drag moves the current selection. # - Click selects only the item at the cursor position. - # See: T97032. + # See: #97032. "use_tweak_select_passthrough", "use_tweak_tool_lmb_interaction", "use_mouse_emulate_3_button", @@ -465,7 +465,7 @@ def _template_items_tool_select( fallback=False, ): if not params.legacy and not fallback: - # Experimental support for LMB interaction for the tweak tool. see: T96544. + # Experimental support for LMB interaction for the tweak tool. see: #96544. # NOTE: For RMB-select this is a much bigger change as it disables 3D cursor placement on LMB. # For LMB-select this means an LMB -drag will not first de-select all (similar to node/graph editor). select_passthrough = False @@ -498,7 +498,7 @@ def _template_items_tool_select( {"properties": [("toggle", True), *operator_props]}), # Fallback key-map must transform as the primary tool is expected - # to be accessed via gizmos in this case. See: T96885. + # to be accessed via gizmos in this case. See: #96885. *(() if not fallback else ( ("transform.translate", {"type": 'LEFTMOUSE', "value": 'CLICK_DRAG'}, {"properties": [("release_confirm", True)]}), @@ -4730,7 +4730,7 @@ def _template_paint_radial_control(paint, rotation=False, secondary_rotation=Fal def _template_view3d_select(*, type, value, legacy, select_passthrough, exclude_mod=None): # NOTE: `exclude_mod` is needed since we don't want this tool to exclude Control-RMB actions when this is used - # as a tool key-map with RMB-select and `use_fallback_tool` is enabled with RMB select. See T92467. + # as a tool key-map with RMB-select and `use_fallback_tool` is enabled with RMB select. See #92467. props_vert_without_handles = () if select_passthrough: @@ -5683,7 +5683,7 @@ def km_object_non_modal(params): ]) else: items.extend([ - # NOTE: this shortcut (while not temporary) is not ideal, see: T89757. + # NOTE: this shortcut (while not temporary) is not ideal, see: #89757. ("object.transfer_mode", {"type": 'Q', "value": 'PRESS', "alt": True}, None), ]) diff --git a/release/scripts/startup/bl_operators/object.py b/release/scripts/startup/bl_operators/object.py index 6a130edbb380..810c40cb6875 100644 --- a/release/scripts/startup/bl_operators/object.py +++ b/release/scripts/startup/bl_operators/object.py @@ -790,7 +790,7 @@ class TransformsToDeltasAnim(Operator): continue # first pass over F-Curves: ensure that we don't have conflicting - # transforms already (e.g. if this was applied already) T29110. + # transforms already (e.g. if this was applied already) #29110. existingFCurves = {} for fcu in adt.action.fcurves: # get "delta" path - i.e. the final paths which may clash diff --git a/release/scripts/startup/bl_operators/userpref.py b/release/scripts/startup/bl_operators/userpref.py index dc8504c057e4..d0134bd076f1 100644 --- a/release/scripts/startup/bl_operators/userpref.py +++ b/release/scripts/startup/bl_operators/userpref.py @@ -700,7 +700,7 @@ class PREFERENCES_OT_addon_install(Operator): addons_new.discard("modules") # disable any addons we may have enabled previously and removed. - # this is unlikely but do just in case. bug T23978. + # this is unlikely but do just in case. bug #23978. for new_addon in addons_new: addon_utils.disable(new_addon, default_set=True) diff --git a/release/scripts/startup/bl_operators/uvcalc_lightmap.py b/release/scripts/startup/bl_operators/uvcalc_lightmap.py index ca309bff9e4f..6d1d0f1be991 100644 --- a/release/scripts/startup/bl_operators/uvcalc_lightmap.py +++ b/release/scripts/startup/bl_operators/uvcalc_lightmap.py @@ -581,7 +581,7 @@ class LightMapPack(Operator): # Proper solution would be to make undo stack aware of such things, # but for now just disable redo. Keep undo here so unwanted changes to uv # coords might be undone. - # This fixes infinite image creation reported there T30968 (sergey) + # This fixes infinite image creation reported there #30968 (sergey) bl_options = {'UNDO'} PREF_CONTEXT: bpy.props.EnumProperty( diff --git a/release/scripts/startup/bl_operators/vertexpaint_dirt.py b/release/scripts/startup/bl_operators/vertexpaint_dirt.py index 616e37d37e7a..0b948fa27636 100644 --- a/release/scripts/startup/bl_operators/vertexpaint_dirt.py +++ b/release/scripts/startup/bl_operators/vertexpaint_dirt.py @@ -90,7 +90,7 @@ def applyVertexDirt(me, blur_iterations, blur_strength, clamp_dirt, clamp_clean, tone_range = max_tone - min_tone if tone_range < 0.0001: - # weak, don't cancel, see T43345 + # weak, don't cancel, see #43345 tone_range = 0.0 else: tone_range = 1.0 / tone_range diff --git a/release/scripts/startup/bl_operators/view3d.py b/release/scripts/startup/bl_operators/view3d.py index bb0d163fdd67..6eee0ef84f03 100644 --- a/release/scripts/startup/bl_operators/view3d.py +++ b/release/scripts/startup/bl_operators/view3d.py @@ -42,7 +42,7 @@ class VIEW3D_OT_edit_mesh_extrude_individual_move(Operator): bpy.ops.mesh.extrude_vertices_move('INVOKE_REGION_WIN') # ignore return from operators above because they are 'RUNNING_MODAL', - # and cause this one not to be freed. T24671. + # and cause this one not to be freed. #24671. return {'FINISHED'} def invoke(self, context, _event): @@ -104,7 +104,7 @@ class VIEW3D_OT_edit_mesh_extrude_move(Operator): 'INVOKE_REGION_WIN', TRANSFORM_OT_translate={ # Don't set the constraint axis since users will expect MMB - # to use the user setting, see: T61637 + # to use the user setting, see: #61637 # "orient_type": 'NORMAL', # Not a popular choice, too restrictive for retopo. # "constraint_axis": (True, True, False)}) @@ -114,7 +114,7 @@ class VIEW3D_OT_edit_mesh_extrude_move(Operator): bpy.ops.mesh.extrude_region_move('INVOKE_REGION_WIN') # ignore return from operators above because they are 'RUNNING_MODAL', - # and cause this one not to be freed. T24671. + # and cause this one not to be freed. #24671. return {'FINISHED'} def execute(self, context): diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py index 6d47fef371c6..67858e53b621 100644 --- a/release/scripts/startup/bl_operators/wm.py +++ b/release/scripts/startup/bl_operators/wm.py @@ -1725,7 +1725,7 @@ class WM_OT_properties_edit(Operator): for nt in adt.nla_tracks: _update_strips(nt.strips) - # Otherwise existing buttons which reference freed memory may crash Blender (T26510). + # Otherwise existing buttons which reference freed memory may crash Blender (#26510). for win in context.window_manager.windows: for area in win.screen.areas: area.tag_redraw() diff --git a/release/scripts/startup/bl_ui/properties_texture.py b/release/scripts/startup/bl_ui/properties_texture.py index 8abd8b618392..4d97fe9cf62c 100644 --- a/release/scripts/startup/bl_ui/properties_texture.py +++ b/release/scripts/startup/bl_ui/properties_texture.py @@ -91,7 +91,7 @@ class TEXTURE_PT_preview(TextureButtonsPanel, Panel): else: layout.template_preview(tex, slot=slot) - # Show Alpha Button for Brush Textures, see T29502. + # Show Alpha Button for Brush Textures, see #29502. idblock = context_tex_datablock(context) if isinstance(idblock, Brush): layout.prop(tex, "use_preview_alpha") diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py index 7e221d63d4a0..c54dea94318c 100644 --- a/release/scripts/startup/bl_ui/space_node.py +++ b/release/scripts/startup/bl_ui/space_node.py @@ -62,7 +62,7 @@ class NODE_HT_header(Header): types_that_support_material = {'MESH', 'CURVE', 'SURFACE', 'FONT', 'META', 'GPENCIL', 'VOLUME', 'CURVES', 'POINTCLOUD'} - # disable material slot buttons when pinned, cannot find correct slot within id_from (T36589) + # disable material slot buttons when pinned, cannot find correct slot within id_from (#36589) # disable also when the selected object does not support materials has_material_slots = not snode.pin and ob_type in types_that_support_material diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py index 66a3ca8d95a0..cae06add9ef1 100644 --- a/release/scripts/startup/bl_ui/space_sequencer.py +++ b/release/scripts/startup/bl_ui/space_sequencer.py @@ -407,7 +407,7 @@ class SEQUENCER_MT_view(Menu): if st.view_type == 'PREVIEW': # Specifying the REGION_PREVIEW context is needed in preview-only # mode, else the lookup for the shortcut will fail in - # wm_keymap_item_find_props() (see T32595). + # wm_keymap_item_find_props() (see #32595). layout.operator_context = 'INVOKE_REGION_PREVIEW' layout.prop(st, "show_region_ui") layout.prop(st, "show_region_tool_header") @@ -429,7 +429,7 @@ class SEQUENCER_MT_view(Menu): layout.operator_context = 'INVOKE_REGION_WIN' if st.view_type == 'PREVIEW': - # See above (T32595) + # See above (#32595) layout.operator_context = 'INVOKE_REGION_PREVIEW' layout.operator("sequencer.view_selected", text="Frame Selected") diff --git a/release/scripts/startup/bl_ui/space_topbar.py b/release/scripts/startup/bl_ui/space_topbar.py index 50bb1e42602c..1872b3cbd518 100644 --- a/release/scripts/startup/bl_ui/space_topbar.py +++ b/release/scripts/startup/bl_ui/space_topbar.py @@ -326,7 +326,7 @@ class TOPBAR_MT_file_new(Menu): # Expand template paths. # Use a set to avoid duplicate user/system templates. - # This is a corner case, but users managed to do it! T76849. + # This is a corner case, but users managed to do it! #76849. app_templates = set() for path in template_paths: for d in os.listdir(path): diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 7b3f7278d0bc..97eb45462edf 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -892,7 +892,7 @@ class VIEW3D_HT_header(Header): row.active = (object_mode == 'EDIT') or (shading.type in {'WIREFRAME', 'SOLID'}) # While exposing `shading.show_xray(_wireframe)` is correct. - # this hides the key shortcut from users: T70433. + # this hides the key shortcut from users: #70433. if has_pose_mode: draw_depressed = overlay.show_xray_bone elif shading.type == 'WIREFRAME': @@ -2270,7 +2270,7 @@ class VIEW3D_MT_add(Menu): # NOTE: don't use 'EXEC_SCREEN' or operators won't get the `v3d` context. # NOTE: was `EXEC_AREA`, but this context does not have the `rv3d`, which prevents - # "align_view" to work on first call (see T32719). + # "align_view" to work on first call (see #32719). layout.operator_context = 'EXEC_REGION_WIN' # layout.operator_menu_enum("object.mesh_add", "type", text="Mesh", icon='OUTLINER_OB_MESH') @@ -5378,7 +5378,7 @@ class VIEW3D_MT_shading_ex_pie(Menu): pie.prop_enum(view.shading, "type", value='WIREFRAME') pie.prop_enum(view.shading, "type", value='SOLID') - # Note this duplicates "view3d.toggle_xray" logic, so we can see the active item: T58661. + # Note this duplicates "view3d.toggle_xray" logic, so we can see the active item: #58661. if context.pose_object: pie.prop(view.overlay, "show_xray_bone", icon='XRAY') else: diff --git a/release/scripts/startup/keyingsets_builtins.py b/release/scripts/startup/keyingsets_builtins.py index 37032657d7ae..6fc0b643552a 100644 --- a/release/scripts/startup/keyingsets_builtins.py +++ b/release/scripts/startup/keyingsets_builtins.py @@ -639,7 +639,7 @@ class BUILTIN_KSI_DeltaScale(KeyingSetInfo): # Note that this controls order of options in `insert keyframe` menu. # Better try to keep some logical order here beyond mere alphabetical one, also because of menu entries shortcut. -# See also T51867. +# See also #51867. classes = ( BUILTIN_KSI_Available, BUILTIN_KSI_Location, diff --git a/source/blender/blenfont/intern/blf.c b/source/blender/blenfont/intern/blf.c index d4f5be617fd4..a8cbb89c7ada 100644 --- a/source/blender/blenfont/intern/blf.c +++ b/source/blender/blenfont/intern/blf.c @@ -165,7 +165,7 @@ int BLF_load_unique(const char *name) /* XXX: Temporarily disable kerning in our main font. Kerning had been accidentally removed from * our font in 3.1. In 3.4 we disable kerning here in the new version to keep spacing the same - * (T101506). Enable again later with change of font, placement, or rendering - Harley. */ + * (#101506). Enable again later with change of font, placement, or rendering - Harley. */ if (font && BLI_str_endswith(filepath, BLF_DEFAULT_PROPORTIONAL_FONT)) { font->face_flags &= ~FT_FACE_FLAG_KERNING; } diff --git a/source/blender/blenkernel/BKE_action.h b/source/blender/blenkernel/BKE_action.h index 79d0fe6e20ad..8c875ec456d1 100644 --- a/source/blender/blenkernel/BKE_action.h +++ b/source/blender/blenkernel/BKE_action.h @@ -271,7 +271,7 @@ struct bPoseChannel *BKE_pose_channel_active_if_layer_visible(struct Object *ob) * In this case the active-selected is an obvious choice when finding the target for a * constraint for eg. however from the users perspective the active pose bone of the * active object is the _real_ active bone, so any other non-active selected bone - * is a candidate for being the other selected bone, see: T58447. + * is a candidate for being the other selected bone, see: #58447. */ struct bPoseChannel *BKE_pose_channel_active_or_first_selected(struct Object *ob); /** diff --git a/source/blender/blenkernel/BKE_animsys.h b/source/blender/blenkernel/BKE_animsys.h index 46aacf1e7fda..e0ffea9aadf9 100644 --- a/source/blender/blenkernel/BKE_animsys.h +++ b/source/blender/blenkernel/BKE_animsys.h @@ -37,7 +37,7 @@ struct bActionGroup; /* Container for data required to do FCurve and Driver evaluation. */ typedef struct AnimationEvalContext { /* For drivers, so that they have access to the dependency graph and the current view layer. See - * T77086. */ + * #77086. */ struct Depsgraph *depsgraph; /* FCurves and Drivers can be evaluated at a different time than the current scene time, for diff --git a/source/blender/blenkernel/BKE_main.h b/source/blender/blenkernel/BKE_main.h index 4030803dc1fa..daf394b811a0 100644 --- a/source/blender/blenkernel/BKE_main.h +++ b/source/blender/blenkernel/BKE_main.h @@ -134,7 +134,7 @@ typedef struct Main { /** * When linking, disallow creation of new data-blocks. - * Make sure we don't do this by accident, see T76738. + * Make sure we don't do this by accident, see #76738. */ bool is_locked_for_linking; diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h index 6b4553f7246d..be447ab0ecce 100644 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@ -812,7 +812,7 @@ struct Mesh *BKE_mesh_merge_verts(struct Mesh *mesh, * Account for custom-data such as UVs becoming detached because of imprecision * in custom-data interpolation. * Without running this operation subdivision surface can cause UVs to be disconnected, - * see: T81065. + * see: #81065. */ void BKE_mesh_merge_customdata_for_apply_modifier(struct Mesh *me); diff --git a/source/blender/blenkernel/BKE_mesh_types.h b/source/blender/blenkernel/BKE_mesh_types.h index 2fe8bd21b7ad..b9c62f39c570 100644 --- a/source/blender/blenkernel/BKE_mesh_types.h +++ b/source/blender/blenkernel/BKE_mesh_types.h @@ -132,7 +132,7 @@ struct MeshRuntime { * * Modifiers that edit the mesh data in-place must set this to false * (most #eModifierTypeType_NonGeometrical modifiers). Otherwise the edit-mesh - * data will be used for drawing, missing changes from modifiers. See T79517. + * data will be used for drawing, missing changes from modifiers. See #79517. */ bool is_original_bmesh = false; diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index f387122079b8..a0f6405a6ac4 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -995,7 +995,7 @@ void node_type_size(struct bNodeType *ntype, int width, int minwidth, int maxwid void node_type_size_preset(struct bNodeType *ntype, eNodeSizePreset size); /** * \warning Nodes defining a storage type _must_ allocate this for new nodes. - * Otherwise nodes will reload as undefined (T46619). + * Otherwise nodes will reload as undefined (#46619). */ void node_type_storage(struct bNodeType *ntype, const char *storagename, diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index c77faf98b25e..92ea5bd49867 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -370,7 +370,7 @@ void BKE_object_dimensions_get(struct Object *ob, float r_vec[3]); * typically this caused by parenting, constraints or delta-scale. * * Re-using these values from the object causes a feedback loop - * when multiple values are modified at once in some situations. see: T69536. + * when multiple values are modified at once in some situations. see: #69536. */ void BKE_object_dimensions_set_ex(struct Object *ob, const float value[3], diff --git a/source/blender/blenkernel/BKE_pbvh.h b/source/blender/blenkernel/BKE_pbvh.h index 367dc9a3035b..12a55151c9bb 100644 --- a/source/blender/blenkernel/BKE_pbvh.h +++ b/source/blender/blenkernel/BKE_pbvh.h @@ -775,7 +775,7 @@ void BKE_pbvh_node_get_bm_orco_data(PBVHNode *node, /** * \note doing a full search on all vertices here seems expensive, * however this is important to avoid having to recalculate bound-box & sync the buffers to the - * GPU (which is far more expensive!) See: T47232. + * GPU (which is far more expensive!) See: #47232. */ bool BKE_pbvh_node_has_vert_with_normal_update_tag(PBVH *pbvh, PBVHNode *node); diff --git a/source/blender/blenkernel/intern/DerivedMesh.cc b/source/blender/blenkernel/intern/DerivedMesh.cc index b17f58e68724..459db322b013 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.cc +++ b/source/blender/blenkernel/intern/DerivedMesh.cc @@ -911,7 +911,7 @@ static void mesh_calc_modifiers(struct Depsgraph *depsgraph, /* set the Mesh to only copy needed data */ CustomData_MeshMasks mask = md_datamask->mask; - /* needMapping check here fixes bug T28112, otherwise it's + /* needMapping check here fixes bug #28112, otherwise it's * possible that it won't be copied */ CustomData_MeshMasks_update(&mask, &append_mask); if (need_mapping) { @@ -1678,7 +1678,7 @@ void makeDerivedMesh(struct Depsgraph *depsgraph, BLI_assert(ob->type == OB_MESH); /* Evaluated meshes aren't supposed to be created on original instances. If you do, - * they aren't cleaned up properly on mode switch, causing crashes, e.g T58150. */ + * they aren't cleaned up properly on mode switch, causing crashes, e.g #58150. */ BLI_assert(ob->id.tag & LIB_TAG_COPIED_ON_WRITE); BKE_object_free_derived_caches(ob); @@ -1715,7 +1715,7 @@ Mesh *mesh_get_eval_final(struct Depsgraph *depsgraph, BLI_assert(DEG_is_evaluating(depsgraph) == false); /* Evaluated meshes aren't supposed to be created on original instances. If you do, - * they aren't cleaned up properly on mode switch, causing crashes, e.g T58150. */ + * they aren't cleaned up properly on mode switch, causing crashes, e.g #58150. */ BLI_assert(ob->id.tag & LIB_TAG_COPIED_ON_WRITE); /* if there's no evaluated mesh or the last data mask used doesn't include @@ -1757,7 +1757,7 @@ Mesh *mesh_get_eval_deform(struct Depsgraph *depsgraph, BLI_assert(DEG_is_evaluating(depsgraph) == false); /* Evaluated meshes aren't supposed to be created on original instances. If you do, - * they aren't cleaned up properly on mode switch, causing crashes, e.g T58150. */ + * they aren't cleaned up properly on mode switch, causing crashes, e.g #58150. */ BLI_assert(ob->id.tag & LIB_TAG_COPIED_ON_WRITE); /* if there's no derived mesh or the last data mask used doesn't include diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c index d4a7a7cbb1e1..8549f2df1dcb 100644 --- a/source/blender/blenkernel/intern/action.c +++ b/source/blender/blenkernel/intern/action.c @@ -1406,7 +1406,7 @@ void calc_action_range(const bAction *act, float *start, float *end, short incl_ * - no "selected only", since this is often used in the backend * - no "minimum length" (we will apply this later), otherwise * single-keyframe curves will increase the overall length by - * a phantom frame (T50354) + * a phantom frame (#50354) */ BKE_fcurve_calc_range(fcu, &nmin, &nmax, false, false); diff --git a/source/blender/blenkernel/intern/anim_data.c b/source/blender/blenkernel/intern/anim_data.c index 9b68c19c6e26..e84e08744843 100644 --- a/source/blender/blenkernel/intern/anim_data.c +++ b/source/blender/blenkernel/intern/anim_data.c @@ -1461,7 +1461,7 @@ void BKE_animdata_blend_read_data(BlendDataReader *reader, AnimData *adt) /* relink active track/strip - even though strictly speaking this should only be used * if we're in 'tweaking mode', we need to be able to have this loaded back for - * undo, but also since users may not exit tweak-mode before saving (T24535). + * undo, but also since users may not exit tweak-mode before saving (#24535). */ /* TODO: it's not really nice that anyone should be able to save the file in this * state, but it's going to be too hard to enforce this single case. */ diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 928626ecc7bf..09120a34d807 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -2880,7 +2880,7 @@ static void nlastrip_evaluate_meta(const int evaluation_mode, STRIP_EVAL_NOBLEND)); /* directly evaluate child strip into accumulation buffer... - * - there's no need to use a temporary buffer (as it causes issues [T40082]) + * - there's no need to use a temporary buffer (as it causes issues [#40082]) */ if (tmp_nes) { nlastrip_evaluate(evaluation_mode, @@ -4163,7 +4163,7 @@ void BKE_animsys_eval_driver(Depsgraph *depsgraph, ID *id, int driver_index, FCu const float curval = calculate_fcurve(&anim_rna, fcu, &anim_eval_context); ok = BKE_animsys_write_to_rna_path(&anim_rna, curval); - /* Flush results & status codes to original data for UI (T59984) */ + /* Flush results & status codes to original data for UI (#59984) */ if (ok && DEG_is_active(depsgraph)) { animsys_write_orig_anim_rna(&id_ptr, fcu->rna_path, fcu->array_index, curval); diff --git a/source/blender/blenkernel/intern/armature_update.c b/source/blender/blenkernel/intern/armature_update.c index 5f749472b2d6..6c809a8269d6 100644 --- a/source/blender/blenkernel/intern/armature_update.c +++ b/source/blender/blenkernel/intern/armature_update.c @@ -925,7 +925,7 @@ static void pose_channel_flush_to_orig_if_needed(struct Depsgraph *depsgraph, return; } bPoseChannel *pchan_orig = pchan->orig_pchan; - /* TODO(sergey): Using BKE_pose_copy_pchan_result() introduces T70901, but why? */ + /* TODO(sergey): Using BKE_pose_copy_pchan_result() introduces #70901, but why? */ copy_m4_m4(pchan_orig->pose_mat, pchan->pose_mat); copy_m4_m4(pchan_orig->chan_mat, pchan->chan_mat); copy_v3_v3(pchan_orig->pose_head, pchan->pose_mat[3]); diff --git a/source/blender/blenkernel/intern/blendfile.cc b/source/blender/blenkernel/intern/blendfile.cc index 4deaa6d21091..8f0e462cd27a 100644 --- a/source/blender/blenkernel/intern/blendfile.cc +++ b/source/blender/blenkernel/intern/blendfile.cc @@ -203,7 +203,7 @@ static void setup_app_data(bContext *C, * But if they close one of the screens, * undo will ensure that the scene being operated on will be activated * (otherwise we'd be undoing on an off-screen scene which isn't acceptable). - * see: T43424 + * see: #43424 */ wmWindow *win; bScreen *curscreen = nullptr; diff --git a/source/blender/blenkernel/intern/blendfile_link_append.c b/source/blender/blenkernel/intern/blendfile_link_append.c index 49b480fcb648..8b97ab4b061d 100644 --- a/source/blender/blenkernel/intern/blendfile_link_append.c +++ b/source/blender/blenkernel/intern/blendfile_link_append.c @@ -613,10 +613,10 @@ static void loose_data_instantiate_collection_process( } /* Forced instantiation of indirectly appended collections is not wanted. Users can now - * easily instantiate collections (and their objects) as needed by themselves. See T67032. */ + * easily instantiate collections (and their objects) as needed by themselves. See #67032. */ /* We need to check that objects in that collections are already instantiated in a scene. * Otherwise, it's better to add the collection to the scene's active collection, than to - * instantiate its objects in active scene's collection directly. See T61141. + * instantiate its objects in active scene's collection directly. See #61141. * * NOTE: We only check object directly into that collection, not recursively into its * children. @@ -625,7 +625,7 @@ static void loose_data_instantiate_collection_process( /* The collection could be linked/appended together with an Empty object instantiating it, * better not instantiate the collection in the view-layer in that case. * - * Can easily happen when copy/pasting such instantiating empty, see T93839. */ + * Can easily happen when copy/pasting such instantiating empty, see #93839. */ const bool collection_is_instantiated = collection_instantiated_by_any_object(bmain, collection); /* Always consider adding collections directly selected by the user. */ @@ -751,7 +751,7 @@ static void loose_data_instantiate_object_process(LooseDataInstantiateContext *i * While this is not ideal (in theory no object should remain un-owned), in case of indirectly * linked objects, the other solution would be to add them to a local collection, which would * make them directly linked. Think for now keeping them indirectly linked is more important. - * Ref. T93757. + * Ref. #93757. */ if (is_linking && (item->tag & LINK_APPEND_TAG_INDIRECT) != 0) { continue; @@ -935,7 +935,7 @@ static int foreach_libblock_link_append_callback(LibraryIDLinkCallbackData *cb_d * the dependency here. Indeed, either they are both linked in another way (through their own * meshes for shape keys e.g.), or this is an unsupported case (two shape-keys depending on * each-other need to be also 'linked' in by their respective meshes, independent shape-keys - * are not allowed). ref T96048. */ + * are not allowed). ref #96048. */ if (id != cb_data->id_self && BKE_idtype_idcode_is_linkable(GS(cb_data->id_self->name))) { BKE_library_foreach_ID_link( cb_data->bmain, id, foreach_libblock_link_append_callback, data, IDWALK_NOP); @@ -1244,7 +1244,7 @@ void BKE_blendfile_link(BlendfileLinkAppendContext *lapp_context, ReportList *re mainl = BLO_library_link_begin(&blo_handle, libname, lapp_context->params); lib = mainl->curlib; BLI_assert(lib != NULL); - /* In case lib was already existing but not found originally, see T99820. */ + /* In case lib was already existing but not found originally, see #99820. */ lib->id.tag &= ~LIB_TAG_MISSING; if (mainl->versionfile < 250) { @@ -1424,7 +1424,7 @@ void BKE_blendfile_library_relocate(BlendfileLinkAppendContext *lapp_context, /* All override rules need to be up to date, since there will be no do_version here, otherwise * older, now-invalid rules might be applied and likely fail, or some changes might be missing, - * etc. See T93353. */ + * etc. See #93353. */ BKE_lib_override_library_main_operations_create(bmain, true, NULL); /* Remove all IDs to be reloaded from Main. */ diff --git a/source/blender/blenkernel/intern/camera.c b/source/blender/blenkernel/intern/camera.c index 2d5dc9010bf4..47f031e8dca1 100644 --- a/source/blender/blenkernel/intern/camera.c +++ b/source/blender/blenkernel/intern/camera.c @@ -537,7 +537,7 @@ void BKE_camera_view_frame_ex(const Scene *scene, r_vec[3][2] = depth; if (do_clip) { - /* Ensure the frame isn't behind the near clipping plane, T62814. */ + /* Ensure the frame isn't behind the near clipping plane, #62814. */ float fac = ((camera->clip_start + 0.1f) / -r_vec[0][2]) * scale[2]; for (uint i = 0; i < 4; i++) { if (camera->type == CAM_ORTHO) { diff --git a/source/blender/blenkernel/intern/colorband.c b/source/blender/blenkernel/intern/colorband.c index d36b148f2d66..99236ed81ead 100644 --- a/source/blender/blenkernel/intern/colorband.c +++ b/source/blender/blenkernel/intern/colorband.c @@ -469,7 +469,7 @@ bool BKE_colorband_evaluate(const ColorBand *coba, float in, float out[4]) } else { /* was setting to 0.0 in 2.56 & previous, but this - * is incorrect for the last element, see T26732. */ + * is incorrect for the last element, see #26732. */ fac = (a != coba->tot) ? 0.0f : 1.0f; } diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index 81fae6f4b110..1ffae922408d 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -141,7 +141,7 @@ bConstraintOb *BKE_constraints_make_evalob( /* NOTE: Versions <= 2.76 assumed that "default" order * would always get used, so we may seem some rig * breakage as a result. However, this change here - * is needed to fix T46599 + * is needed to fix #46599 */ cob->rotOrder = ob->rotmode; } @@ -1222,7 +1222,7 @@ static void vectomat(const float vec[3], } /* NOTE: even though 'n' is normalized, don't use 'project_v3_v3v3_normalized' below - * because precision issues cause a problem in near degenerate states, see: T53455. */ + * because precision issues cause a problem in near degenerate states, see: #53455. */ /* project the up vector onto the plane specified by n */ project_v3_v3v3(proj, u, n); /* first u onto n... */ @@ -1953,7 +1953,7 @@ static void rotlike_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *tar /* To allow compatible rotations, must get both rotations in the order of the owner... */ mat4_to_eulO(obeul, rot_order, cob->matrix); /* We must get compatible eulers from the beginning because - * some of them can be modified below (see bug T21875). + * some of them can be modified below (see bug #21875). * Additionally, since this constraint is based on euler rotation math, it doesn't work well * with shear. The Y axis is chosen as the main axis when we orthogonalize the matrix because * constraints are used most commonly on bones. */ @@ -4024,7 +4024,7 @@ static void transform_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *t mat4_to_size(dvec, ct->matrix); if (is_negative_m4(ct->matrix)) { - /* Bugfix T27886: (this is a limitation that riggers will have to live with for now). + /* Bugfix #27886: (this is a limitation that riggers will have to live with for now). * We can't be sure which axis/axes are negative, * though we know that something is negative. * Assume we don't care about negativity of separate axes. */ @@ -4307,7 +4307,7 @@ static void shrinkwrap_get_tarmat(struct Depsgraph *UNUSED(depsgraph), /* Transform normal into requested space */ /* Note that in this specific case, we need to keep scaling in non-parented 'local2world' * object case, because SpaceTransform also takes it into account when handling normals. - * See T42447. */ + * See #42447. */ unit_m4(mat); BKE_constraint_mat_convertspace( cob->ob, cob->pchan, cob, mat, CONSTRAINT_SPACE_LOCAL, scon->projAxisSpace, true); @@ -5605,7 +5605,7 @@ bool BKE_constraint_remove_ex(ListBase *list, Object *ob, bConstraint *con, bool { const short type = con->type; if (BKE_constraint_remove(list, con)) { - /* ITASC needs to be rebuilt once a constraint is removed T26920. */ + /* ITASC needs to be rebuilt once a constraint is removed #26920. */ if (clear_dep && ELEM(type, CONSTRAINT_TYPE_KINEMATIC, CONSTRAINT_TYPE_SPLINEIK)) { BIK_clear_data(ob->pose); } @@ -5831,7 +5831,7 @@ static bConstraint *add_new_constraint(Object *ob, } case CONSTRAINT_TYPE_ACTION: { /* The Before or Split modes require computing in local space, but - * for objects the Local space doesn't make sense (T78462, D6095 etc). + * for objects the Local space doesn't make sense (#78462, D6095 etc). * So only default to Before (Split) if the constraint is on a bone. */ if (pchan) { bActionConstraint *data = con->data; @@ -6422,7 +6422,7 @@ void BKE_constraints_solve(struct Depsgraph *depsgraph, /* Interpolate the enforcement, to blend result of constraint into final owner transform * - all this happens in world-space to prevent any weirdness creeping in - * (T26014 and T25725), since some constraints may not convert the solution back to the input + * (#26014 and #25725), since some constraints may not convert the solution back to the input * space before blending but all are guaranteed to end up in good "world-space" result. */ /* NOTE: all kind of stuff here before (caused trouble), much easier to just interpolate, diff --git a/source/blender/blenkernel/intern/crazyspace.cc b/source/blender/blenkernel/intern/crazyspace.cc index 906d4c826237..d56aeeb79404 100644 --- a/source/blender/blenkernel/intern/crazyspace.cc +++ b/source/blender/blenkernel/intern/crazyspace.cc @@ -398,7 +398,7 @@ int BKE_sculpt_get_first_deform_matrices(struct Depsgraph *depsgraph, } else { /* More complex handling will continue in BKE_crazyspace_build_sculpt. - * Exiting the loop on a non-deform modifier causes issues - T71213. */ + * Exiting the loop on a non-deform modifier causes issues - #71213. */ BLI_assert(crazyspace_modifier_supports_deform(md)); break; } diff --git a/source/blender/blenkernel/intern/curve.cc b/source/blender/blenkernel/intern/curve.cc index 443e96a1ee0d..6a85e268bca6 100644 --- a/source/blender/blenkernel/intern/curve.cc +++ b/source/blender/blenkernel/intern/curve.cc @@ -2097,10 +2097,10 @@ static void bevel_list_calc_bisect(BevList *bl) } /* In the unlikely situation that handles define a zeroed direction, - * calculate it from the adjacent points, see T80742. + * calculate it from the adjacent points, see #80742. * * Only do this as a fallback since we typically want the end-point directions - * to be exactly aligned with the handles at the end-point, see T83117. */ + * to be exactly aligned with the handles at the end-point, see #83117. */ if (is_cyclic == false) { bevp0 = &bl->bevpoints[0]; bevp1 = &bl->bevpoints[1]; @@ -2252,7 +2252,7 @@ static void make_bevel_list_3D_minimum_twist(BevList *bl) float q[4]; const bool is_cyclic = bl->poly != -1; /* NOTE(@ideasman42): For non-cyclic curves only initialize the first direction - * (via `vec_to_quat`), necessary for symmetry, see T71137. + * (via `vec_to_quat`), necessary for symmetry, see #71137. * Otherwise initialize the first and second points before propagating rotation forward. * This is historical as changing this can cause significantly different output. * Specifically: `deform_modifiers` test: (`CurveMeshDeform`). @@ -2906,7 +2906,7 @@ void BKE_curve_bevelList_make(Object *ob, const ListBase *nurbs, const bool for_ continue; } - /* Scale the threshold so high resolution shapes don't get over reduced, see: T49850. */ + /* Scale the threshold so high resolution shapes don't get over reduced, see: #49850. */ const float threshold_resolu = 0.00001f / resolu; const bool is_cyclic = bl->poly != -1; nr = bl->nr; @@ -3284,7 +3284,7 @@ static void calchandleNurb_intern(BezTriple *bezt, } if (skip_align || - /* When one handle is free, aligning makes no sense, see: T35952 */ + /* When one handle is free, aligning makes no sense, see: #35952 */ ELEM(HD_FREE, bezt->h1, bezt->h2) || /* Also when no handles are aligned, skip this step. */ (!ELEM(HD_ALIGN, bezt->h1, bezt->h2) && !ELEM(HD_ALIGN_DOUBLESIDE, bezt->h1, bezt->h2))) { diff --git a/source/blender/blenkernel/intern/customdata.cc b/source/blender/blenkernel/intern/customdata.cc index 0e7e81a23836..50b3a1668d26 100644 --- a/source/blender/blenkernel/intern/customdata.cc +++ b/source/blender/blenkernel/intern/customdata.cc @@ -147,7 +147,7 @@ struct LayerTypeInfo { * \note in some cases \a dest pointer is in \a sources * so all functions have to take this into account and delay * applying changes while reading from sources. - * See bug T32395 - Campbell. + * See bug #32395 - Campbell. */ cd_interp interp; @@ -4356,7 +4356,7 @@ bool CustomData_verify_versions(CustomData *data, const int index) } /* This is a preemptive fix for cases that should not happen * (layers that should not be written in .blend files), - * but can happen due to bugs (see e.g. T62318). + * but can happen due to bugs (see e.g. #62318). * Also for forward compatibility, in future, * we may put into `.blend` file some currently un-written data types, * this should cover that case as well. @@ -4397,9 +4397,9 @@ static bool CustomData_layer_ensure_data_exists(CustomDataLayer *layer, size_t c switch (layer->type) { /* When more instances of corrupt files are found, add them here. */ - case CD_PROP_BOOL: /* See T84935. */ - case CD_MLOOPUV: /* See T90620. */ - case CD_PROP_FLOAT2: /* See T90620. */ + case CD_PROP_BOOL: /* See #84935. */ + case CD_MLOOPUV: /* See #90620. */ + case CD_PROP_FLOAT2: /* See #90620. */ layer->data = MEM_calloc_arrayN(count, typeInfo->size, layerType_getName(layer->type)); BLI_assert(layer->data); if (typeInfo->set_default_value) { @@ -5150,7 +5150,7 @@ void CustomData_blend_read(BlendDataReader *reader, CustomData *data, const int { BLO_read_data_address(reader, &data->layers); - /* Annoying workaround for bug T31079 loading legacy files with + /* Annoying workaround for bug #31079 loading legacy files with * no polygons _but_ have stale custom-data. */ if (UNLIKELY(count == 0 && data->layers == nullptr && data->totlayer != 0)) { CustomData_reset(data); @@ -5173,8 +5173,8 @@ void CustomData_blend_read(BlendDataReader *reader, CustomData *data, const int BLO_read_data_address(reader, &layer->data); if (CustomData_layer_ensure_data_exists(layer, count)) { /* Under normal operations, this shouldn't happen, but... - * For a CD_PROP_BOOL example, see T84935. - * For a CD_MLOOPUV example, see T90620. */ + * For a CD_PROP_BOOL example, see #84935. + * For a CD_MLOOPUV example, see #90620. */ CLOG_WARN(&LOG, "Allocated custom data layer that was not saved correctly for layer->type = %d.", layer->type); diff --git a/source/blender/blenkernel/intern/displist.cc b/source/blender/blenkernel/intern/displist.cc index 745db5e7fe58..49a2861afae1 100644 --- a/source/blender/blenkernel/intern/displist.cc +++ b/source/blender/blenkernel/intern/displist.cc @@ -1353,7 +1353,7 @@ void BKE_displist_make_curveTypes(Depsgraph *depsgraph, * but it doesn't seem to work in this case. * * Since the plan is to replace this legacy curve object with the curves data-block - * (see T95355), this somewhat hacky inefficient solution is relatively temporary. + * (see #95355), this somewhat hacky inefficient solution is relatively temporary. */ Curve &cow_curve = *reinterpret_cast( BKE_id_copy_ex(nullptr, &original_curve.id, nullptr, LIB_ID_COPY_LOCALIZE)); diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c index 3434f9bad4d6..6f03efe8137b 100644 --- a/source/blender/blenkernel/intern/effect.c +++ b/source/blender/blenkernel/intern/effect.c @@ -683,7 +683,7 @@ bool get_effector_data(EffectorCache *eff, bool ret = false; /* In case surface object is in Edit mode when loading the .blend, - * surface modifier is never executed and bvhtree never built, see T48415. */ + * surface modifier is never executed and bvhtree never built, see #48415. */ if (eff->pd && eff->pd->shape == PFIELD_SHAPE_SURFACE && eff->surmd && eff->surmd->runtime.bvhtree) { /* closest point in the object surface is an effector */ diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index d2550f9db0dd..304ac5c63a0e 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -1903,10 +1903,10 @@ static float fcurve_eval_keyframes_interpolate(const FCurve *fcu, * * The threshold here has the following constraints: * - 0.001 is too coarse: - * We get artifacts with 2cm driver movements at 1BU = 1m (see T40332). + * We get artifacts with 2cm driver movements at 1BU = 1m (see #40332). * * - 0.00001 is too fine: - * Weird errors, like selecting the wrong keyframe range (see T39207), occur. + * Weird errors, like selecting the wrong keyframe range (see #39207), occur. * This lower bound was established in b888a32eee8147b028464336ad2404d8155c64dd. */ a = BKE_fcurve_bezt_binarysearch_index_ex(bezts, evaltime, fcu->totvert, 0.0001, &exact); @@ -1914,7 +1914,7 @@ static float fcurve_eval_keyframes_interpolate(const FCurve *fcu, if (exact) { /* Index returned must be interpreted differently when it sits on top of an existing keyframe - * - That keyframe is the start of the segment we need (see action_bug_2.blend in T39207). + * - That keyframe is the start of the segment we need (see action_bug_2.blend in #39207). */ return bezt->vec[1][1]; } @@ -1925,7 +1925,7 @@ static float fcurve_eval_keyframes_interpolate(const FCurve *fcu, const BezTriple *prevbezt = (a > 0) ? (bezt - 1) : bezt; /* Use if the key is directly on the frame, in rare cases this is needed else we get 0.0 instead. - * XXX: consult T39207 for examples of files where failure of these checks can cause issues. */ + * XXX: consult #39207 for examples of files where failure of these checks can cause issues. */ if (fabsf(bezt->vec[1][0] - evaltime) < eps) { return bezt->vec[1][1]; } @@ -1976,7 +1976,7 @@ static float fcurve_eval_keyframes_interpolate(const FCurve *fcu, if (fabsf(v1[1] - v4[1]) < FLT_EPSILON && fabsf(v2[1] - v3[1]) < FLT_EPSILON && fabsf(v3[1] - v4[1]) < FLT_EPSILON) { /* Optimization: If all the handles are flat/at the same values, - * the value is simply the shared value (see T40372 -> F91346). + * the value is simply the shared value (see #40372 -> F91346). */ return v1[1]; } @@ -2285,7 +2285,7 @@ float evaluate_fcurve_driver(PathResolvedRNA *anim_rna, * XXX: additive is a bit more dicey; it really depends then if things are in range or not... */ LISTBASE_FOREACH (FModifier *, fcm, &fcu->modifiers) { - /* If there are range-restrictions, we must definitely block T36950. */ + /* If there are range-restrictions, we must definitely block #36950. */ if ((fcm->flag & FMODIFIER_FLAG_RANGERESTRICT) == 0 || (fcm->sfra <= evaltime && fcm->efra >= evaltime)) { /* Within range: here it probably doesn't matter, @@ -2507,7 +2507,7 @@ void BKE_fcurve_blend_read_data(BlendDataReader *reader, ListBase *fcurves) /* group */ BLO_read_data_address(reader, &fcu->grp); - /* clear disabled flag - allows disabled drivers to be tried again (T32155), + /* clear disabled flag - allows disabled drivers to be tried again (#32155), * but also means that another method for "reviving disabled F-Curves" exists */ fcu->flag &= ~FCURVE_DISABLED; @@ -2523,7 +2523,7 @@ void BKE_fcurve_blend_read_data(BlendDataReader *reader, ListBase *fcurves) driver->expr_simple = NULL; /* Give the driver a fresh chance - the operating environment may be different now - * (addons, etc. may be different) so the driver namespace may be sane now T32155. */ + * (addons, etc. may be different) so the driver namespace may be sane now #32155. */ driver->flag &= ~DRIVER_FLAG_INVALID; /* relink variables, targets and their paths */ diff --git a/source/blender/blenkernel/intern/fcurve_driver.c b/source/blender/blenkernel/intern/fcurve_driver.c index 3d1439b5530e..5b4a67360047 100644 --- a/source/blender/blenkernel/intern/fcurve_driver.c +++ b/source/blender/blenkernel/intern/fcurve_driver.c @@ -472,8 +472,8 @@ static float dvar_eval_transChan(ChannelDriver *driver, DriverVar *dvar) /* Check if object or bone, and get transform matrix accordingly: * - "use_eulers" code is used to prevent the problems associated with non-uniqueness - * of euler decomposition from matrices T20870. - * - "local-space" is for T21384, where parent results are not wanted + * of euler decomposition from matrices #20870. + * - "local-space" is for #21384, where parent results are not wanted * but #DTAR_FLAG_LOCAL_CONSTS is for all the common "corrective-shapes-for-limbs" situations. */ if (pchan) { diff --git a/source/blender/blenkernel/intern/fcurve_test.cc b/source/blender/blenkernel/intern/fcurve_test.cc index 285c6a0af4dc..66c4477ebc20 100644 --- a/source/blender/blenkernel/intern/fcurve_test.cc +++ b/source/blender/blenkernel/intern/fcurve_test.cc @@ -34,7 +34,7 @@ TEST(evaluate_fcurve, OnKeys) EXPECT_NEAR(evaluate_fcurve(fcu, 2.0f), 13.0f, EPSILON); /* hits 'between' function */ EXPECT_NEAR(evaluate_fcurve(fcu, 3.0f), 19.0f, EPSILON); /* hits 'on or after last' function */ - /* Also test within a specific time epsilon of the keys, as this was an issue in T39207. + /* Also test within a specific time epsilon of the keys, as this was an issue in #39207. * This epsilon is just slightly smaller than the epsilon given to * BKE_fcurve_bezt_binarysearch_index_ex() in fcurve_eval_between_keyframes(), so it should hit * the "exact" code path. */ diff --git a/source/blender/blenkernel/intern/fluid.cc b/source/blender/blenkernel/intern/fluid.cc index 70a5c90269b3..769fc63f2bb2 100644 --- a/source/blender/blenkernel/intern/fluid.cc +++ b/source/blender/blenkernel/intern/fluid.cc @@ -215,7 +215,7 @@ void BKE_fluid_reallocate_copy_fluid(FluidDomainSettings *fds, # if 0 /* Note (sebbas): * Disabling this "skip section" as not copying borders results in weird cut-off effects. - * It is possible that this cutting off is the reason for line effects as seen in T74559. + * It is possible that this cutting off is the reason for line effects as seen in #74559. * Since domain borders will be handled on the simulation side anyways, * copying border values should not be an issue. */ @@ -3812,7 +3812,7 @@ static void fluid_modifier_processDomain(FluidModifierData *fmd, /* When reading data from cache (has_config == true) ensure that active fields are allocated. * update_flowsflags() and update_obstacleflags() will not find flow sources hidden from renders. - * See also: T72192. */ + * See also: #72192. */ if (has_config) { ensure_flowsfields(fds); ensure_obstaclefields(fds); @@ -4169,7 +4169,7 @@ Mesh *BKE_fluid_modifier_do( * This does not seem particularly useful, but it's backwards compatible. * * Smoke simulation needs a texture space relative to the adaptive domain bounds, not the - * original mesh. So recompute it at this point in the modifier stack. See T58492. */ + * original mesh. So recompute it at this point in the modifier stack. See #58492. */ BKE_mesh_texspace_calc(result); return result; diff --git a/source/blender/blenkernel/intern/image.cc b/source/blender/blenkernel/intern/image.cc index 5e8a2cad99e8..7d25e5249282 100644 --- a/source/blender/blenkernel/intern/image.cc +++ b/source/blender/blenkernel/intern/image.cc @@ -313,7 +313,7 @@ static void image_foreach_path(ID *id, BPathForeachPathData *bpath_data) if (result) { if (flag & BKE_BPATH_FOREACH_PATH_RELOAD_EDITED) { if (!BKE_image_has_packedfile(ima) && - /* Image may have been painted onto (and not saved, T44543). */ + /* Image may have been painted onto (and not saved, #44543). */ !BKE_image_is_dirty(ima)) { BKE_image_signal(bpath_data->bmain, ima, nullptr, IMA_SIGNAL_RELOAD); } diff --git a/source/blender/blenkernel/intern/key.cc b/source/blender/blenkernel/intern/key.cc index 7d835c2464d9..7a9ef93734bc 100644 --- a/source/blender/blenkernel/intern/key.cc +++ b/source/blender/blenkernel/intern/key.cc @@ -1875,7 +1875,7 @@ KeyBlock *BKE_keyblock_add_ctime(Key *key, const char *name, const bool do_force /* In case of absolute keys, there is no point in adding more than one key with the same pos. * Hence only set new key-block pos to current time if none previous one already use it. * Now at least people just adding absolute keys without touching to ctime - * won't have to systematically use retiming func (and have ordering issues, too). See T39897. + * won't have to systematically use retiming func (and have ordering issues, too). See #39897. */ if (!do_force && (key->type != KEY_RELATIVE)) { KeyBlock *it_kb; diff --git a/source/blender/blenkernel/intern/layer.cc b/source/blender/blenkernel/intern/layer.cc index 9e452662055c..ee6290027adc 100644 --- a/source/blender/blenkernel/intern/layer.cc +++ b/source/blender/blenkernel/intern/layer.cc @@ -765,7 +765,7 @@ int BKE_layer_collection_findindex(ViewLayer *view_layer, const LayerCollection * regarding this resync process. * Proper fix would be to make resync itself lazy, i.e. only happen * when actually needed. - * See also T73411. + * See also #73411. * \{ */ static bool no_resync = false; diff --git a/source/blender/blenkernel/intern/lib_id.c b/source/blender/blenkernel/intern/lib_id.c index fcf585dfcfc5..d09511ec4b3a 100644 --- a/source/blender/blenkernel/intern/lib_id.c +++ b/source/blender/blenkernel/intern/lib_id.c @@ -1810,7 +1810,7 @@ void BKE_library_make_local(Main *bmain, /* Step 4: We have to remap local usages of old (linked) ID to new (local) * ID in a separated loop, * as lbarray ordering is not enough to ensure us we did catch all dependencies - * (e.g. if making local a parent object before its child...). See T48907. */ + * (e.g. if making local a parent object before its child...). See #48907. */ /* TODO: This is now the biggest step by far (in term of processing time). * We may be able to gain here by using again main->relations mapping, but... * this implies BKE_libblock_remap & co to be able to update main->relations on the fly. @@ -1828,7 +1828,7 @@ void BKE_library_make_local(Main *bmain, /* Special hack for groups... Thing is, since we can't instantiate them here, we need to * ensure they remain 'alive' (only instantiation is a real group 'user'... *sigh* See - * T49722. */ + * #49722. */ if (GS(id->name) == ID_GR && (id->tag & LIB_TAG_INDIRECT) != 0) { id_us_ensure_real(id->newid); } diff --git a/source/blender/blenkernel/intern/lib_override.cc b/source/blender/blenkernel/intern/lib_override.cc index 8a9440a8e321..065ee010e727 100644 --- a/source/blender/blenkernel/intern/lib_override.cc +++ b/source/blender/blenkernel/intern/lib_override.cc @@ -396,7 +396,7 @@ ID *BKE_lib_override_library_create_from_id(Main *bmain, ID *local_id = lib_override_library_create_from(bmain, nullptr, reference_id, 0); /* We cannot allow automatic hierarchy resync on this ID, it is highly likely to generate a giant * mess in case there are a lot of hidden, non-instantiated, non-properly organized dependencies. - * Ref T94650. */ + * Ref #94650. */ local_id->override_library->flag |= IDOVERRIDE_LIBRARY_FLAG_NO_HIERARCHY; local_id->override_library->flag &= ~IDOVERRIDE_LIBRARY_FLAG_SYSTEM_DEFINED; local_id->override_library->hierarchy_root = local_id; @@ -2105,7 +2105,7 @@ static bool lib_override_library_resync(Main *bmain, if (ID_IS_OVERRIDE_LIBRARY_REAL(id) && id->override_library->reference->lib->id.tag & LIB_TAG_MISSING) { /* Do not delete overrides which reference is missing because the library itself is missing - * (ref. T100586). */ + * (ref. #100586). */ } else if (!BKE_lib_override_library_is_user_edited(id)) { /* If user never edited them, we can delete them. */ @@ -2720,7 +2720,7 @@ void BKE_lib_override_library_main_resync(Main *bmain, /* Necessary to improve performances, and prevent layers matching override sub-collections to be * lost when re-syncing the parent override collection. - * Ref. T73411. */ + * Ref. #73411. */ BKE_layer_collection_resync_forbid(); int library_indirect_level = lib_override_libraries_index_define(bmain); diff --git a/source/blender/blenkernel/intern/lib_override_proxy_conversion.c b/source/blender/blenkernel/intern/lib_override_proxy_conversion.c index 88f6fbb0ead5..deb75441b542 100644 --- a/source/blender/blenkernel/intern/lib_override_proxy_conversion.c +++ b/source/blender/blenkernel/intern/lib_override_proxy_conversion.c @@ -45,7 +45,7 @@ bool BKE_lib_override_library_proxy_convert(Main *bmain, &ob_proxy->proxy->id; ID *id_instance_hint = is_override_instancing_object ? &ob_proxy_group->id : &ob_proxy->id; - /* In some cases the instance collection of a proxy object may be local (see e.g. T83875). Not + /* In some cases the instance collection of a proxy object may be local (see e.g. #83875). Not * sure this is a valid state, but for now just abort the overriding process. */ if (!ID_IS_OVERRIDABLE_LIBRARY_HIERARCHY(id_root)) { if (ob_proxy->proxy != NULL) { @@ -73,7 +73,7 @@ bool BKE_lib_override_library_proxy_convert(Main *bmain, /* In case of proxy conversion, remap all local ID usages to linked IDs to their newly created * overrides. Also do that for the IDs from the same lib as the proxy in case it is linked. * While this might not be 100% the desired behavior, it is likely to be the case most of the - * time. Ref: T91711. */ + * time. Ref: #91711. */ ID *id_iter; FOREACH_MAIN_ID_BEGIN (bmain, id_iter) { if (!ID_IS_LINKED(id_iter) || id_iter->lib == ob_proxy->id.lib) { diff --git a/source/blender/blenkernel/intern/lib_query.c b/source/blender/blenkernel/intern/lib_query.c index 124ba21d4065..4d6b78e67c4a 100644 --- a/source/blender/blenkernel/intern/lib_query.c +++ b/source/blender/blenkernel/intern/lib_query.c @@ -165,7 +165,7 @@ void BKE_library_foreach_ID_embedded(LibraryForeachIDData *data, ID **id_pp) } else if (flag & IDWALK_RECURSE) { /* Defer handling into main loop, recursively calling BKE_library_foreach_ID_link in - * IDWALK_RECURSE case is troublesome, see T49553. */ + * IDWALK_RECURSE case is troublesome, see #49553. */ /* XXX note that this breaks the 'owner id' thing now, we likely want to handle that * differently at some point, but for now it should not be a problem in practice. */ if (BLI_gset_add(data->ids_handled, id)) { diff --git a/source/blender/blenkernel/intern/lib_remap.c b/source/blender/blenkernel/intern/lib_remap.c index 127459508c20..4ef3bdabfaa4 100644 --- a/source/blender/blenkernel/intern/lib_remap.c +++ b/source/blender/blenkernel/intern/lib_remap.c @@ -608,7 +608,7 @@ static void libblock_remap_foreach_idpair_cb(ID *old_id, ID *new_id, void *user_ /* Node trees may virtually use any kind of data-block... */ /* XXX Yuck!!!! nodetree update can do pretty much any thing when talking about py nodes, - * including creating new data-blocks (see T50385), so we need to unlock main here. :( + * including creating new data-blocks (see #50385), so we need to unlock main here. :( * Why can't we have re-entrent locks? */ BKE_main_unlock(bmain); libblock_remap_data_postprocess_nodetree_update(bmain, new_id); diff --git a/source/blender/blenkernel/intern/material.cc b/source/blender/blenkernel/intern/material.cc index 941485f9cbc3..b34e92837a9e 100644 --- a/source/blender/blenkernel/intern/material.cc +++ b/source/blender/blenkernel/intern/material.cc @@ -877,7 +877,7 @@ void BKE_object_materials_test(Main *bmain, Object *ob, ID *id) /* Exception: In case the object is a valid data, but its obdata is an empty place-holder, * use object's material slots amount as reference. * This avoids losing materials in a local object when its linked obdata goes missing. - * See T92780. */ + * See #92780. */ BKE_id_material_resize(bmain, id, short(ob->totcol), false); } else { @@ -1311,7 +1311,7 @@ bool BKE_object_material_slot_remove(Main *bmain, Object *ob) for (Object *obt = static_cast(bmain->objects.first); obt; obt = static_cast(obt->id.next)) { if (obt->data == ob->data) { - /* Can happen when object material lists are used, see: T52953 */ + /* Can happen when object material lists are used, see: #52953 */ if (actcol > obt->totcol) { continue; } diff --git a/source/blender/blenkernel/intern/mesh.cc b/source/blender/blenkernel/intern/mesh.cc index ee1129f6b4ba..5b4c4edd0a28 100644 --- a/source/blender/blenkernel/intern/mesh.cc +++ b/source/blender/blenkernel/intern/mesh.cc @@ -907,7 +907,7 @@ void BKE_mesh_free_data_for_undo(Mesh *me) * * - Edit-Mesh (#Mesh.edit_mesh) * Since edit-mesh is tied to the objects mode, - * which crashes when called in edit-mode, see: T90972. + * which crashes when called in edit-mode, see: #90972. */ static void mesh_clear_geometry(Mesh *mesh) { diff --git a/source/blender/blenkernel/intern/mesh_calc_edges.cc b/source/blender/blenkernel/intern/mesh_calc_edges.cc index 033a52081baf..f186d89a4e58 100644 --- a/source/blender/blenkernel/intern/mesh_calc_edges.cc +++ b/source/blender/blenkernel/intern/mesh_calc_edges.cc @@ -176,7 +176,7 @@ static void update_edge_indices_in_poly_loops(Mesh *mesh, else { /* This is an invalid edge; normally this does not happen in Blender, * but it can be part of an imported mesh with invalid geometry. See - * T76514. */ + * #76514. */ edge_index = 0; } prev_loop->e = edge_index; diff --git a/source/blender/blenkernel/intern/mesh_evaluate.cc b/source/blender/blenkernel/intern/mesh_evaluate.cc index 3c25cd2e07e4..d6f40a472de5 100644 --- a/source/blender/blenkernel/intern/mesh_evaluate.cc +++ b/source/blender/blenkernel/intern/mesh_evaluate.cc @@ -154,7 +154,7 @@ static float UNUSED_FUNCTION(mesh_calc_poly_volume_centroid)(const MPoly *mpoly, /** * A version of mesh_calc_poly_volume_centroid that takes an initial reference center, * use this to increase numeric stability as the quality of the result becomes - * very low quality as the value moves away from 0.0, see: T65986. + * very low quality as the value moves away from 0.0, see: #65986. */ static float mesh_calc_poly_volume_centroid_with_reference_center(const MPoly *mpoly, const MLoop *loopstart, diff --git a/source/blender/blenkernel/intern/mesh_legacy_convert.cc b/source/blender/blenkernel/intern/mesh_legacy_convert.cc index dee96b42e57a..92197800aeaf 100644 --- a/source/blender/blenkernel/intern/mesh_legacy_convert.cc +++ b/source/blender/blenkernel/intern/mesh_legacy_convert.cc @@ -651,7 +651,7 @@ static void mesh_ensure_tessellation_customdata(Mesh *me) { if (UNLIKELY((me->totface != 0) && (me->totpoly == 0))) { /* Pass, otherwise this function clears 'mface' before - * versioning 'mface -> mpoly' code kicks in T30583. + * versioning 'mface -> mpoly' code kicks in #30583. * * Callers could also check but safer to do here - campbell */ } diff --git a/source/blender/blenkernel/intern/mesh_mirror.cc b/source/blender/blenkernel/intern/mesh_mirror.cc index 95f8008a4f91..3c603a5a1f3b 100644 --- a/source/blender/blenkernel/intern/mesh_mirror.cc +++ b/source/blender/blenkernel/intern/mesh_mirror.cc @@ -161,7 +161,7 @@ Mesh *BKE_mesh_mirror_apply_mirror_on_axis_for_modifier(MirrorModifierData *mmd, copy_v3_v3(plane_co, itmp[3]); copy_v3_v3(plane_no, itmp[axis]); - /* Account for non-uniform scale in `ob`, see: T87592. */ + /* Account for non-uniform scale in `ob`, see: #87592. */ float ob_scale[3] = { len_squared_v3(ob->object_to_world[0]), len_squared_v3(ob->object_to_world[1]), @@ -248,7 +248,7 @@ Mesh *BKE_mesh_mirror_apply_mirror_on_axis_for_modifier(MirrorModifierData *mmd, * generate a 1:1 mapping by scanning vertices from the beginning of the array * as is done in #BKE_editmesh_vert_coords_when_deformed. Without this, * the coordinates returned will sometimes point to the copied vertex locations, see: - * T91444. + * #91444. * * However, such a change also affects non-versionable things like some modifiers binding, so * we cannot enforce that behavior on existing modifiers, in which case we keep using the diff --git a/source/blender/blenkernel/intern/mesh_normals.cc b/source/blender/blenkernel/intern/mesh_normals.cc index 22b6ce5222cb..c83de7a843ae 100644 --- a/source/blender/blenkernel/intern/mesh_normals.cc +++ b/source/blender/blenkernel/intern/mesh_normals.cc @@ -1749,7 +1749,7 @@ static void mesh_normals_loop_custom_set(const float (*positions)[3], /* We also have to check between last and first loops, * otherwise we may miss some sharp edges here! * This is just a simplified version of above while loop. - * See T45984. */ + * See #45984. */ loops = lnors_spacearr.lspacearr[i]->loops; if (loops && org_nor) { const int lidx = POINTER_AS_INT(loops->link); diff --git a/source/blender/blenkernel/intern/mesh_remap.cc b/source/blender/blenkernel/intern/mesh_remap.cc index 5f3961398fbe..8c25315ab19b 100644 --- a/source/blender/blenkernel/intern/mesh_remap.cc +++ b/source/blender/blenkernel/intern/mesh_remap.cc @@ -1666,7 +1666,7 @@ void BKE_mesh_remap_calc_loops_from_mesh(const int mode, if (dot > best_nor_dot - 1e-6f) { /* We need something as fallback decision in case dest normal matches several - * source normals (see T44522), using distance between polys' centers here. */ + * source normals (see #44522), using distance between polys' centers here. */ float *pcent_src; float sqdist; diff --git a/source/blender/blenkernel/intern/modifier.cc b/source/blender/blenkernel/intern/modifier.cc index 580c08a51ba6..e82e9c0f559a 100644 --- a/source/blender/blenkernel/intern/modifier.cc +++ b/source/blender/blenkernel/intern/modifier.cc @@ -1045,7 +1045,7 @@ Mesh *BKE_modifier_get_evaluated_mesh_from_evaluated_object(Object *ob_eval) if ((ob_eval->type == OB_MESH) && (ob_eval->mode & OB_MODE_EDIT)) { /* In EditMode, evaluated mesh is stored in BMEditMesh, not the object... */ BMEditMesh *em = BKE_editmesh_from_object(ob_eval); - /* 'em' might not exist yet in some cases, just after loading a .blend file, see T57878. */ + /* 'em' might not exist yet in some cases, just after loading a .blend file, see #57878. */ if (em != nullptr) { me = BKE_object_get_editmesh_eval_final(ob_eval); } diff --git a/source/blender/blenkernel/intern/multires_reshape_ccg.cc b/source/blender/blenkernel/intern/multires_reshape_ccg.cc index 97be97ae3c1f..94751a37fc5d 100644 --- a/source/blender/blenkernel/intern/multires_reshape_ccg.cc +++ b/source/blender/blenkernel/intern/multires_reshape_ccg.cc @@ -64,7 +64,7 @@ bool multires_reshape_assign_final_coords_from_ccg(const MultiresReshapeContext * used by sculpt changes. In other use cases the code might not catch inconsistency and * silently do wrong decision. */ /* NOTE: There is a known bug in Undo code that results in first Sculpt step - * after a Memfile one to never be undone (see T83806). This might be the root cause of + * after a Memfile one to never be undone (see #83806). This might be the root cause of * this inconsistency. */ if (reshape_level_key.has_mask && grid_element.mask != nullptr) { *grid_element.mask = *CCG_grid_elem_mask(&reshape_level_key, ccg_grid, x, y); diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 6b631462ebdb..96d25f3b71fd 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -2009,8 +2009,7 @@ void BKE_nla_action_pushdown(AnimData *adt, const bool is_liboverride) /* copy current "action blending" settings from adt to the strip, * as it was keyframed with these settings, so omitting them will - * change the effect [T54233] - */ + * change the effect [#54233]. */ strip->blendmode = adt->act_blendmode; strip->influence = adt->act_influence; strip->extendmode = adt->act_extendmode; @@ -2058,7 +2057,7 @@ static void nla_tweakmode_find_active(const ListBase /* NlaTrack */ *nla_tracks, /* There are situations where we may have multiple strips selected and we want to enter * tweak-mode on all of those at once. Usually in those cases, * it will usually just be a single strip per AnimData. - * In such cases, compromise and take the last selected track and/or last selected strip, T28468. + * In such cases, compromise and take the last selected track and/or last selected strip, #28468. */ if (activeTrack == NULL) { /* try last selected track for active strip */ @@ -2178,7 +2177,7 @@ void BKE_nla_tweakmode_exit(AnimData *adt) /* sync the length of the user-strip with the new state of the action * but only if the user has explicitly asked for this to happen - * (see T34645 for things to be careful about) + * (see #34645 for things to be careful about) */ if ((adt->actstrip) && (adt->actstrip->flag & NLASTRIP_FLAG_SYNC_LENGTH)) { strip = adt->actstrip; diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index 0d18709a6d67..7c3055c41e56 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -406,7 +406,7 @@ static ID **node_owner_pointer_get(ID *id) if ((id->flag & LIB_EMBEDDED_DATA) == 0) { return nullptr; } - /* TODO: Sort this NO_MAIN or not for embedded node trees. See T86119. */ + /* TODO: Sort this NO_MAIN or not for embedded node trees. See #86119. */ // BLI_assert((id->tag & LIB_TAG_NO_MAIN) == 0); bNodeTree *ntree = reinterpret_cast(id); @@ -542,7 +542,7 @@ void ntreeBlendWrite(BlendWriter *writer, bNodeTree *ntree) /* pass */ } else if ((ntree->type == NTREE_COMPOSIT) && (node->type == CMP_NODE_GLARE)) { - /* Simple forward compatibility for fix for T50736. + /* Simple forward compatibility for fix for #50736. * Not ideal (there is no ideal solution here), but should do for now. */ NodeGlare *ndg = (NodeGlare *)node->storage; /* Not in undo case. */ @@ -838,7 +838,7 @@ static void lib_link_node_socket(BlendLibReader *reader, Library *lib, bNodeSock IDP_BlendReadLib(reader, lib, sock->prop); /* This can happen for all socket types when a file is saved in an older version of Blender than - * it was originally created in (T86298). Some socket types still require a default value. The + * it was originally created in (#86298). Some socket types still require a default value. The * default value of those sockets will be created in `ntreeSetTypes`. */ if (sock->default_value == nullptr) { return; @@ -3109,7 +3109,7 @@ static void free_localized_node_groups(bNodeTree *ntree) /* Only localized node trees store a copy for each node group tree. * Each node group tree in a localized node tree can be freed, * since it is a localized copy itself (no risk of accessing free'd - * data in main, see T37939). */ + * data in main, see #37939). */ if (!(ntree->id.tag & LIB_TAG_LOCALIZED)) { return; } diff --git a/source/blender/blenkernel/intern/node_tree_field_inferencing.cc b/source/blender/blenkernel/intern/node_tree_field_inferencing.cc index af2824856713..abe5f736ebad 100644 --- a/source/blender/blenkernel/intern/node_tree_field_inferencing.cc +++ b/source/blender/blenkernel/intern/node_tree_field_inferencing.cc @@ -119,7 +119,7 @@ static const FieldInferencingInterface &get_node_field_inferencing_interface(con return empty_interface; } if (!ntreeIsRegistered(group)) { - /* This can happen when there is a linked node group that was not found (see T92799). */ + /* This can happen when there is a linked node group that was not found (see #92799). */ return get_dummy_field_inferencing_interface(node, scope); } if (!group->runtime->field_inferencing_interface) { diff --git a/source/blender/blenkernel/intern/object.cc b/source/blender/blenkernel/intern/object.cc index 984de28394f3..97114c6c6241 100644 --- a/source/blender/blenkernel/intern/object.cc +++ b/source/blender/blenkernel/intern/object.cc @@ -622,7 +622,7 @@ static void object_blend_read_data(BlendDataReader *reader, ID *id) const bool is_undo = BLO_read_data_is_undo(reader); if (ob->id.tag & (LIB_TAG_EXTERN | LIB_TAG_INDIRECT)) { /* Do not allow any non-object mode for linked data. - * See T34776, T42780, T81027 for more information. */ + * See #34776, #42780, #81027 for more information. */ ob->mode &= ~OB_MODE_ALL_MODE_DATA; } else if (is_undo) { @@ -939,7 +939,7 @@ static void object_blend_read_lib(BlendLibReader *reader, ID *id) } /* When the object is local and the data is library its possible - * the material list size gets out of sync. T22663. */ + * the material list size gets out of sync. #22663. */ if (ob->data && ob->id.lib != ((ID *)ob->data)->lib) { BKE_object_materials_test(bmain, ob, (ID *)ob->data); } @@ -3151,7 +3151,7 @@ static bool ob_parcurve(Object *ob, Object *par, float r_mat[4][4]) * dependency cycles. We can't correct anything from here, since that would * cause threading conflicts. * - * TODO(sergey): Some of the legit looking cases like T56619 need to be + * TODO(sergey): Some of the legit looking cases like #56619 need to be * looked into, and maybe curve cache (and other dependencies) are to be * evaluated prior to conversion. */ if (par->runtime.curve_cache == nullptr) { @@ -3556,7 +3556,7 @@ void BKE_object_workob_calc_parent(Depsgraph *depsgraph, Scene *scene, Object *o * are supposed to be applied after the object's local loc/rot/scale. If the (inverted) effect of * constraints would be included in the parent inverse matrix, these would be applied before the * object's local loc/rot/scale instead of after. For example, a "Copy Rotation" constraint would - * rotate the object's local translation as well. See T82156. */ + * rotate the object's local translation as well. See #82156. */ BLI_strncpy(workob->parsubstr, ob->parsubstr, sizeof(workob->parsubstr)); diff --git a/source/blender/blenkernel/intern/object_dupli.cc b/source/blender/blenkernel/intern/object_dupli.cc index 76120e66e826..ebbd4bc61dae 100644 --- a/source/blender/blenkernel/intern/object_dupli.cc +++ b/source/blender/blenkernel/intern/object_dupli.cc @@ -1535,7 +1535,7 @@ static void make_duplis_particle_system(const DupliContext *ctx, ParticleSystem } if (part->ren_as == PART_DRAW_GR) { - /* Prevent divide by zero below T28336. */ + /* Prevent divide by zero below #28336. */ if (totcollection == 0) { continue; } diff --git a/source/blender/blenkernel/intern/object_update.cc b/source/blender/blenkernel/intern/object_update.cc index 5abd5188d1ef..e5bb1b529df8 100644 --- a/source/blender/blenkernel/intern/object_update.cc +++ b/source/blender/blenkernel/intern/object_update.cc @@ -149,7 +149,7 @@ void BKE_object_handle_data_update(Depsgraph *depsgraph, Scene *scene, Object *o cddata_masks.pmask |= CD_MASK_PROP_ALL; cddata_masks.lmask |= CD_MASK_PROP_ALL; - /* Make sure Freestyle edge/face marks appear in DM for render (see T40315). + /* Make sure Freestyle edge/face marks appear in DM for render (see #40315). * Due to Line Art implementation, edge marks should also be shown in viewport. */ #ifdef WITH_FREESTYLE cddata_masks.emask |= CD_MASK_FREESTYLE_EDGE; diff --git a/source/blender/blenkernel/intern/packedFile.c b/source/blender/blenkernel/intern/packedFile.c index 0c9d9f5b048f..4399a65276a0 100644 --- a/source/blender/blenkernel/intern/packedFile.c +++ b/source/blender/blenkernel/intern/packedFile.c @@ -878,7 +878,7 @@ void BKE_packedfile_blend_read(BlendDataReader *reader, PackedFile **pf_p) BLO_read_packed_address(reader, &pf->data); if (pf->data == NULL) { /* We cannot allow a PackedFile with a NULL data field, - * the whole code assumes this is not possible. See T70315. */ + * the whole code assumes this is not possible. See #70315. */ printf("%s: NULL packedfile data, cleaning up...\n", __func__); MEM_SAFE_FREE(pf); } diff --git a/source/blender/blenkernel/intern/paint.cc b/source/blender/blenkernel/intern/paint.cc index 0ee517311d2c..3ec6525ac6b3 100644 --- a/source/blender/blenkernel/intern/paint.cc +++ b/source/blender/blenkernel/intern/paint.cc @@ -1424,7 +1424,7 @@ void BKE_sculptsession_bm_to_me(Object *ob, bool reorder) sculptsession_bm_to_me_update_data_only(ob, reorder); /* Ensure the objects evaluated mesh doesn't hold onto arrays - * now realloc'd in the mesh T34473. */ + * now realloc'd in the mesh #34473. */ DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY); } } diff --git a/source/blender/blenkernel/intern/particle.cc b/source/blender/blenkernel/intern/particle.cc index fc350c1838a4..28be787a1914 100644 --- a/source/blender/blenkernel/intern/particle.cc +++ b/source/blender/blenkernel/intern/particle.cc @@ -847,7 +847,7 @@ void psys_find_group_weights(ParticleSettings *part) { /* Find object pointers based on index. If the collection is linked from * another library linking may not have the object pointers available on - * file load, so we have to retrieve them later. See T49273. */ + * file load, so we have to retrieve them later. See #49273. */ ListBase instance_collection_objects = {nullptr, nullptr}; if (part->instance_collection) { @@ -3035,7 +3035,7 @@ static void psys_thread_create_path(ParticleTask *task, */ cpa_num = ELEM(pa->num_dmcache, DMCACHE_ISCHILD, DMCACHE_NOTFOUND) ? pa->num : pa->num_dmcache; - /* XXX hack to avoid messed up particle num and subsequent crash (T40733) */ + /* XXX hack to avoid messed up particle num and subsequent crash (#40733) */ if (cpa_num > ctx->sim.psmd->mesh_final->totface) { cpa_num = 0; } @@ -5099,7 +5099,7 @@ void psys_get_dupli_texture(ParticleSystem *psys, * the entire scenes dupli's are scanned, which also looks into uncalculated data. * * For now just include this workaround as an alternative to crashing, - * but longer term meta-balls should behave in a more manageable way, see: T46622. */ + * but longer term meta-balls should behave in a more manageable way, see: #46622. */ uv[0] = uv[1] = 0.0f; diff --git a/source/blender/blenkernel/intern/particle_distribute.c b/source/blender/blenkernel/intern/particle_distribute.c index 085f2cc8ddb8..671a3e17cdf7 100644 --- a/source/blender/blenkernel/intern/particle_distribute.c +++ b/source/blender/blenkernel/intern/particle_distribute.c @@ -1206,12 +1206,12 @@ static int psys_thread_context_init_distribute(ParticleThreadContext *ctx, step = (totpart < 2) ? 0.5 : 1.0 / (double)totpart; /* This is to address tricky issues with vertex-emitting when user tries - * (and expects) exact 1-1 vert/part distribution (see T47983 and its two example files). + * (and expects) exact 1-1 vert/part distribution (see #47983 and its two example files). * It allows us to consider pos as 'midpoint between v and v+1' * (or 'p and p+1', depending whether we have more vertices than particles or not), * and avoid stumbling over float impression in element_sum. * NOTE: moved face and volume distribution to this as well (instead of starting at zero), - * for the same reasons, see T52682. */ + * for the same reasons, see #52682. */ pos = (totpart < totmapped) ? 0.5 / (double)totmapped : step * 0.5; /* We choose the smaller step. */ diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c index f131739287ed..1053bfaf875a 100644 --- a/source/blender/blenkernel/intern/particle_system.c +++ b/source/blender/blenkernel/intern/particle_system.c @@ -3536,12 +3536,12 @@ static void hair_step(ParticleSimulationData *sim, float cfra, const bool use_re } } - /* dynamics with cloth simulation, psys->particles can be NULL with 0 particles T25519. */ + /* dynamics with cloth simulation, psys->particles can be NULL with 0 particles #25519. */ if (psys->part->type == PART_HAIR && psys->flag & PSYS_HAIR_DYNAMICS && psys->particles) { do_hair_dynamics(sim); } - /* following lines were removed r29079 but cause bug T22811, see report for details */ + /* following lines were removed r29079 but cause bug #22811, see report for details */ psys_update_effectors(sim); psys_update_path_cache(sim, cfra, use_render_params); diff --git a/source/blender/blenkernel/intern/pbvh.cc b/source/blender/blenkernel/intern/pbvh.cc index 7c829d32a825..7d4769c6e25a 100644 --- a/source/blender/blenkernel/intern/pbvh.cc +++ b/source/blender/blenkernel/intern/pbvh.cc @@ -932,7 +932,7 @@ void BKE_pbvh_build_grids(PBVH *pbvh, /* Ensure leaf limit is at least 4 so there's room * to split at original face boundaries. - * Fixes T102209. + * Fixes #102209. */ pbvh->leaf_limit = max_ii(LEAF_LIMIT / (gridsize * gridsize), max_grids); diff --git a/source/blender/blenkernel/intern/pbvh_bmesh.cc b/source/blender/blenkernel/intern/pbvh_bmesh.cc index 35aa523c69c8..b5f5a3b7ce14 100644 --- a/source/blender/blenkernel/intern/pbvh_bmesh.cc +++ b/source/blender/blenkernel/intern/pbvh_bmesh.cc @@ -1417,7 +1417,7 @@ static void pbvh_bmesh_collapse_edge(PBVH *pbvh, normalize_v3(v_conn->no); /* Update bounding boxes attached to the connected vertex. - * Note that we can often get-away without this but causes T48779. */ + * Note that we can often get-away without this but causes #48779. */ BM_LOOPS_OF_VERT_ITER_BEGIN (l, v_conn) { PBVHNode *f_node = pbvh_bmesh_node_from_face(pbvh, l->f); f_node->flag |= PBVH_UpdateDrawBuffers | PBVH_UpdateNormals | PBVH_UpdateBB; diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c index 6f9abd4c48de..90169a94ebd2 100644 --- a/source/blender/blenkernel/intern/rigidbody.c +++ b/source/blender/blenkernel/intern/rigidbody.c @@ -1728,7 +1728,7 @@ static void rigidbody_update_simulation(Depsgraph *depsgraph, { /* update world */ /* Note physics_world can get NULL when undoing the deletion of the last object in it (see - * T70667). */ + * #70667). */ if (rebuild || rbw->shared->physics_world == NULL) { BKE_rigidbody_validate_sim_world(scene, rbw, rebuild); /* We have rebuilt the world so we need to make sure the rest is rebuilt as well. */ diff --git a/source/blender/blenkernel/intern/scene.cc b/source/blender/blenkernel/intern/scene.cc index 6a020343f55f..ccf62a6f899b 100644 --- a/source/blender/blenkernel/intern/scene.cc +++ b/source/blender/blenkernel/intern/scene.cc @@ -3083,7 +3083,7 @@ double BKE_scene_unit_scale(const UnitSettings *unit, const int unit_type, doubl return value * pow(unit->scale_length, 3); case B_UNIT_MASS: return value * pow(unit->scale_length, 3); - case B_UNIT_CAMERA: /* *Do not* use scene's unit scale for camera focal lens! See T42026. */ + case B_UNIT_CAMERA: /* *Do not* use scene's unit scale for camera focal lens! See #42026. */ default: return value; } diff --git a/source/blender/blenkernel/intern/sound.c b/source/blender/blenkernel/intern/sound.c index f6fab9164268..96e4fb941af1 100644 --- a/source/blender/blenkernel/intern/sound.c +++ b/source/blender/blenkernel/intern/sound.c @@ -854,7 +854,7 @@ static double get_cur_time(Scene *scene) { /* We divide by the current framelen to take into account time remapping. * Otherwise we will get the wrong starting time which will break A/V sync. - * See T74111 for further details. */ + * See #74111 for further details. */ return FRA2TIME((scene->r.cfra + scene->r.subframe) / (double)scene->r.framelen); } @@ -1230,7 +1230,7 @@ bool BKE_sound_info_get(struct Main *main, struct bSound *sound, SoundInfo *soun } /* TODO(sergey): Make it fully independent audio handle. */ /* Don't free waveforms during non-destructive queries. - * This causes unnecessary recalculation - see T69921 */ + * This causes unnecessary recalculation - see #69921 */ sound_load_audio(main, sound, false); const bool result = sound_info_from_playback_handle(sound->playback_handle, sound_info); sound_free_audio(sound); diff --git a/source/blender/blenkernel/intern/subsurf_ccg.cc b/source/blender/blenkernel/intern/subsurf_ccg.cc index 311c474cd0ab..47e2ecf98e8f 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.cc +++ b/source/blender/blenkernel/intern/subsurf_ccg.cc @@ -269,7 +269,7 @@ static int ss_sync_from_uv(CCGSubSurf *ss, limit[0] = limit[1] = STD_UV_CONNECT_LIMIT; /* previous behavior here is without accounting for winding, however this causes stretching in - * UV map in really simple cases with mirror + subsurf, see second part of T44530. + * UV map in really simple cases with mirror + subsurf, see second part of #44530. * Also, initially intention is to treat merged vertices from mirror modifier as seams. * This fixes a very old regression (2.49 was correct here) */ vmap = BKE_mesh_uv_vert_map_create( @@ -1885,7 +1885,7 @@ DerivedMesh *subsurf_make_derived_from_derived(DerivedMesh *dm, CCGDerivedMesh *result; /* NOTE: editmode calculation can only run once per - * modifier stack evaluation (uses freed cache) T36299. */ + * modifier stack evaluation (uses freed cache) #36299. */ if (flags & SUBSURF_FOR_EDIT_MODE) { int levels = (scene != nullptr && !ignore_simplify) ? get_render_subsurf_level(&scene->r, smd->levels, false) : diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c index 1a0c0716fcda..9b2f9c72c902 100644 --- a/source/blender/blenkernel/intern/text.c +++ b/source/blender/blenkernel/intern/text.c @@ -392,7 +392,7 @@ static void text_from_buf(Text *text, const uchar *buffer, const int len) * in this case content of such line would be used to fill text line buffer * - file is empty. in this case new line is needed to start editing from. * - last character in buffer is \n. in this case new line is needed to - * deal with newline at end of file. (see T28087) (sergey) */ + * deal with newline at end of file. (see #28087) (sergey) */ if (llen != 0 || lines_count == 0 || buffer[len - 1] == '\n') { TextLine *tmp; @@ -2225,7 +2225,7 @@ int txt_setcurr_tab_spaces(Text *text, int space) /* if we find a ':' on this line, then add a tab but not if it is: * 1) in a comment * 2) within an identifier - * 3) after the cursor (text->curc), i.e. when creating space before a function def T25414. + * 3) after the cursor (text->curc), i.e. when creating space before a function def #25414. */ int a; bool is_indent = false; diff --git a/source/blender/blenkernel/intern/undo_system.cc b/source/blender/blenkernel/intern/undo_system.cc index 946d94f15031..01235e718f3b 100644 --- a/source/blender/blenkernel/intern/undo_system.cc +++ b/source/blender/blenkernel/intern/undo_system.cc @@ -40,7 +40,7 @@ #define WITH_GLOBAL_UNDO_ENSURE_UPDATED /** - * Make sure we don't apply edits on top of a newer memfile state, see: T56163. + * Make sure we don't apply edits on top of a newer memfile state, see: #56163. * \note Keep an eye on this, could solve differently. */ #define WITH_GLOBAL_UNDO_CORRECT_ORDER @@ -183,7 +183,7 @@ static void undosys_step_decode(bContext *C, } else { /* Load the previous memfile state so any ID's referenced in this - * undo step will be correctly resolved, see: T56163. */ + * undo step will be correctly resolved, see: #56163. */ undosys_step_decode(C, bmain, ustack, us_iter, dir, false); /* May have been freed on memfile read. */ bmain = G_MAIN; @@ -564,7 +564,7 @@ eUndoPushReturn BKE_undosys_step_push_with_type(UndoStack *ustack, if (use_memfile_step) { /* Make this the user visible undo state, so redo always applies - * on top of the mem-file undo instead of skipping it. see: T67256. */ + * on top of the mem-file undo instead of skipping it. see: #67256. */ UndoStep *us_prev = ustack->step_active; const char *name_internal = us_prev->name; const bool ok = undosys_stack_push_main(ustack, name_internal, G_MAIN); diff --git a/source/blender/blenkernel/intern/vfont.c b/source/blender/blenkernel/intern/vfont.c index 9f48b9b9c4a9..5c468689e948 100644 --- a/source/blender/blenkernel/intern/vfont.c +++ b/source/blender/blenkernel/intern/vfont.c @@ -720,10 +720,10 @@ typedef struct VFontToCurveIter { * Wrap words that extends beyond the text-box width (enabled by default). * * Currently only disabled when scale-to-fit is enabled, - * so floating-point error doesn't cause unexpected wrapping, see T89241. + * so floating-point error doesn't cause unexpected wrapping, see #89241. * * \note This should only be set once, in the #VFONT_TO_CURVE_INIT pass - * otherwise iterations wont behave predictably, see T91401. + * otherwise iterations wont behave predictably, see #91401. */ bool word_wrap; int status; @@ -974,7 +974,7 @@ static bool vfont_to_curve(Object *ob, * * Floating precision error can cause the text to be slightly larger. * Assert this is a small value as large values indicate incorrect - * calculations with scale-to-fit which shouldn't be ignored. See T89241. */ + * calculations with scale-to-fit which shouldn't be ignored. See #89241. */ if (x_used > x_available) { BLI_assert_msg(compare_ff_relative(x_used, x_available, FLT_EPSILON, 64), "VFontToCurveIter.scale_to_fit not set correctly!"); @@ -993,7 +993,7 @@ static bool vfont_to_curve(Object *ob, * Typically when a text-box has any height and overflow is set to scale * the text will wrap to fit the width as necessary. When wrapping isn't * possible it's important to use the same code-path as zero-height lines. - * Without this exception a single word will not scale-to-fit (see: T95116). */ + * Without this exception a single word will not scale-to-fit (see: #95116). */ tb_scale.h = 0.0f; } break; @@ -1229,7 +1229,7 @@ static bool vfont_to_curve(Object *ob, if (cu->overflow == CU_OVERFLOW_TRUNCATE) { /* Ensure overflow doesn't truncate text, before centering vertically - * giving odd/buggy results, see: T66614. */ + * giving odd/buggy results, see: #66614. */ if ((tb_index == cu->totbox - 1) && (last_line != -1)) { lines = last_line - ct_first->linenr; } diff --git a/source/blender/blenkernel/intern/volume_to_mesh.cc b/source/blender/blenkernel/intern/volume_to_mesh.cc index 8fb8f40cbcc0..8cb59a310b61 100644 --- a/source/blender/blenkernel/intern/volume_to_mesh.cc +++ b/source/blender/blenkernel/intern/volume_to_mesh.cc @@ -99,7 +99,7 @@ struct VolumeToMeshOp { openvdb::tools::volumeToMesh( grid, this->verts, this->tris, this->quads, this->threshold, this->adaptivity); - /* Better align generated mesh with volume (see T85312). */ + /* Better align generated mesh with volume (see #85312). */ openvdb::Vec3s offset = grid.voxelSize() / 2.0f; for (openvdb::Vec3s &position : this->verts) { position += offset; diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c index baf14bab2671..6d5bacdb2d28 100644 --- a/source/blender/blenkernel/intern/writeffmpeg.c +++ b/source/blender/blenkernel/intern/writeffmpeg.c @@ -477,7 +477,7 @@ static const AVCodec *get_av1_encoder( switch (context->ffmpeg_preset) { case FFM_PRESET_BEST: /* `libaom-av1` may produce better VMAF-scoring videos in several cases, but there are cases - * where using a different encoder is desirable, such as in T103849. */ + * where using a different encoder is desirable, such as in #103849. */ codec = avcodec_find_encoder_by_name("librav1e"); if (!codec) { /* Fallback to `libaom-av1` if librav1e is not found. */ @@ -1666,7 +1666,7 @@ void BKE_ffmpeg_preset_set(RenderData *rd, int preset) rd->ffcodecdata.type = FFMPEG_MPEG2; rd->ffcodecdata.video_bitrate = 6000; -# if 0 /* Don't set resolution, see T21351. */ +# if 0 /* Don't set resolution, see #21351. */ rd->xsch = 720; rd->ysch = isntsc ? 480 : 576; # endif diff --git a/source/blender/blenlib/BLI_math_base.h b/source/blender/blenlib/BLI_math_base.h index c0c4594ddc03..70eb7a3cf06d 100644 --- a/source/blender/blenlib/BLI_math_base.h +++ b/source/blender/blenlib/BLI_math_base.h @@ -308,7 +308,7 @@ float ceil_power_of_10(float f); * check the vector is unit length, or zero length (which can't be helped in some cases). */ #ifndef NDEBUG -/** \note 0.0001 is too small because normals may be converted from short's: see T34322. */ +/** \note 0.0001 is too small because normals may be converted from short's: see #34322. */ # define BLI_ASSERT_UNIT_EPSILON 0.0002f # define BLI_ASSERT_UNIT_EPSILON_DB 0.0002 /** diff --git a/source/blender/blenlib/BLI_math_matrix.h b/source/blender/blenlib/BLI_math_matrix.h index 1278bc90e446..5724f590aa36 100644 --- a/source/blender/blenlib/BLI_math_matrix.h +++ b/source/blender/blenlib/BLI_math_matrix.h @@ -246,7 +246,7 @@ bool invert_m4_m4(float inverse[4][4], const float mat[4][4]); * * \note this has worse performance than #EIG_invert_m4_m4 (Eigen), but e.g. * for non-invertible scale matrices, finding a partial solution can - * be useful to have a valid local transform center, see T57767. + * be useful to have a valid local transform center, see #57767. */ bool invert_m4_m4_fallback(float inverse[4][4], const float mat[4][4]); @@ -519,7 +519,7 @@ void blend_m4_m4m4(float out[4][4], const float dst[4][4], const float src[4][4] * (it typically remains below 2 usec on an average i74700, * while #blend_m3_m3m3 remains below 0.4 usec). * However, it gives expected results even with non-uniformly scaled matrices, - * see T46418 for an example. + * see #46418 for an example. * * Based on "Matrix Animation and Polar Decomposition", by Ken Shoemake & Tom Duff * diff --git a/source/blender/blenlib/BLI_math_matrix.hh b/source/blender/blenlib/BLI_math_matrix.hh index 757f23113bc8..5b15920b136c 100644 --- a/source/blender/blenlib/BLI_math_matrix.hh +++ b/source/blender/blenlib/BLI_math_matrix.hh @@ -94,7 +94,7 @@ template * (it typically remains below 2 usec on an average i74700, * while naive implementation remains below 0.4 usec). * However, it gives expected results even with non-uniformly scaled matrices, - * see T46418 for an example. + * see #46418 for an example. * * Based on "Matrix Animation and Polar Decomposition", by Ken Shoemake & Tom Duff * @@ -125,7 +125,7 @@ template * * \note This code is about five times faster than the polar decomposition. * However, it gives un-expected results even with non-uniformly scaled matrices, - * see T46418 for an example. + * see #46418 for an example. * * \param A: Input matrix which is totally effective with `t = 0.0`. * \param B: Input matrix which is totally effective with `t = 1.0`. @@ -142,7 +142,7 @@ template * * \note This code is about five times faster than the polar decomposition. * However, it gives un-expected results even with non-uniformly scaled matrices, - * see T46418 for an example. + * see #46418 for an example. * * \param A: Input matrix which is totally effective with `t = 0.0`. * \param B: Input matrix which is totally effective with `t = 1.0`. @@ -693,7 +693,7 @@ extern template void normalized_to_eul2(const double3x3 &mat, template detail::Quaternion normalized_to_quat_fast(const MatBase &mat) { BLI_assert(math::is_unit_scale(mat)); - /* Caller must ensure matrices aren't negative for valid results, see: T24291, T94231. */ + /* Caller must ensure matrices aren't negative for valid results, see: #24291, #94231. */ BLI_assert(!math::is_negative(mat)); detail::Quaternion q; @@ -758,7 +758,7 @@ template detail::Quaternion normalized_to_quat_fast(const MatBase } else { /* NOTE(@ideasman42): A zero matrix will fall through to this block, - * needed so a zero scaled matrices to return a quaternion without rotation, see: T101848. + * needed so a zero scaled matrices to return a quaternion without rotation, see: #101848. */ const T trace = 1.0f + mat[0][0] + mat[1][1] + mat[2][2]; T s = 2.0f * math::sqrt(trace); diff --git a/source/blender/blenlib/BLI_path_util.h b/source/blender/blenlib/BLI_path_util.h index 78f8e5297406..3df5a85ca852 100644 --- a/source/blender/blenlib/BLI_path_util.h +++ b/source/blender/blenlib/BLI_path_util.h @@ -342,7 +342,7 @@ void BLI_path_normalize_dir(const char *relabase, char *dir, size_t dir_maxlen) * \note Space case ' ' is a bit of an edge case here - in theory it is allowed, * but again can be an issue in some cases, so we simply replace it by an underscore too * (good practice anyway). - * REMOVED based on popular demand (see T45900). + * REMOVED based on popular demand (see #45900). * Percent '%' char is a bit same case - not recommended to use it, * but supported by all decent file-systems/operating-systems around. * diff --git a/source/blender/blenlib/BLI_task.h b/source/blender/blenlib/BLI_task.h index 3be492009b01..b07e1f0a5bdf 100644 --- a/source/blender/blenlib/BLI_task.h +++ b/source/blender/blenlib/BLI_task.h @@ -426,7 +426,7 @@ void BLI_task_graph_edge_create(struct TaskNode *from_node, struct TaskNode *to_ * cannot run the tasks itself. On a single thread, that causes a deadlock already. When there are * multiple threads, another thread will typically run the task and avoid the deadlock. However, if * this situation happens on all threads at the same time, all threads will deadlock. This happened - * in T88598. + * in #88598. * \{ */ void BLI_task_isolate(void (*func)(void *userdata), void *userdata); diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c index 005de1f85b43..d7ab08d8bc88 100644 --- a/source/blender/blenlib/intern/fileops.c +++ b/source/blender/blenlib/intern/fileops.c @@ -526,7 +526,7 @@ int BLI_copy(const char *file, const char *to) # if 0 int BLI_create_symlink(const char *file, const char *to) { - /* See patch from T30870, should this ever become needed. */ + /* See patch from #30870, should this ever become needed. */ callLocalErrorCallBack("Linking files is unsupported on Windows"); (void)file; (void)to; diff --git a/source/blender/blenlib/intern/filereader_zstd.c b/source/blender/blenlib/intern/filereader_zstd.c index aeb000e9754f..960be159c9d1 100644 --- a/source/blender/blenlib/intern/filereader_zstd.c +++ b/source/blender/blenlib/intern/filereader_zstd.c @@ -281,7 +281,7 @@ static void zstd_close(FileReader *reader) if (zstd->reader.seek) { MEM_freeN(zstd->seek.uncompressed_ofs); MEM_freeN(zstd->seek.compressed_ofs); - /* When an error has occurred this may be NULL, see: T99744. */ + /* When an error has occurred this may be NULL, see: #99744. */ if (zstd->seek.cached_content) { MEM_freeN(zstd->seek.cached_content); } diff --git a/source/blender/blenlib/intern/kdtree_impl.h b/source/blender/blenlib/intern/kdtree_impl.h index f7993eb5adc9..53a3ea90285c 100644 --- a/source/blender/blenlib/intern/kdtree_impl.h +++ b/source/blender/blenlib/intern/kdtree_impl.h @@ -46,7 +46,7 @@ struct KDTree { /** * When set we know all values are unbalanced, - * otherwise clear them when re-balancing: see T62210. + * otherwise clear them when re-balancing: see #62210. */ #define KD_NODE_ROOT_IS_INIT ((uint)-2) diff --git a/source/blender/blenlib/intern/math_geom.c b/source/blender/blenlib/intern/math_geom.c index 5b0f744ea162..e55eb46235ae 100644 --- a/source/blender/blenlib/intern/math_geom.c +++ b/source/blender/blenlib/intern/math_geom.c @@ -1225,7 +1225,7 @@ int isect_seg_seg_v2_point_ex(const float v0[2], /* When 'd' approaches zero, float precision lets non-overlapping co-linear segments * detect as an intersection. So re-calculate 'v' to ensure the point overlaps both. - * see T45123 */ + * see #45123 */ /* inline since we have most vars already */ #if 0 @@ -2887,7 +2887,7 @@ int isect_line_line_epsilon_v3(const float v1[3], d = dot_v3v3(c, ab); div = dot_v3v3(ab, ab); - /* important not to use an epsilon here, see: T45919 */ + /* important not to use an epsilon here, see: #45919 */ /* test zero length line */ if (UNLIKELY(div == 0.0f)) { return 0; @@ -2962,7 +2962,7 @@ bool isect_line_line_strict_v3(const float v1[3], d = dot_v3v3(c, ab); div = dot_v3v3(ab, ab); - /* important not to use an epsilon here, see: T45919 */ + /* important not to use an epsilon here, see: #45919 */ /* test zero length line */ if (UNLIKELY(div == 0.0f)) { return false; @@ -4034,7 +4034,7 @@ static float mean_value_half_tan_v3(const struct Float3_Len *d_curr, float cross[3]; cross_v3_v3v3(cross, d_curr->dir, d_next->dir); const float area = len_v3(cross); - /* Compare against zero since 'FLT_EPSILON' can be too large, see: T73348. */ + /* Compare against zero since 'FLT_EPSILON' can be too large, see: #73348. */ if (LIKELY(area != 0.0f)) { const float dot = dot_v3v3(d_curr->dir, d_next->dir); const float len = d_curr->len * d_next->len; @@ -4060,7 +4060,7 @@ static double mean_value_half_tan_v2_db(const struct Double2_Len *d_curr, { /* Different from the 3d version but still correct. */ const double area = cross_v2v2_db(d_curr->dir, d_next->dir); - /* Compare against zero since 'FLT_EPSILON' can be too large, see: T73348. */ + /* Compare against zero since 'FLT_EPSILON' can be too large, see: #73348. */ if (LIKELY(area != 0.0)) { const double dot = dot_v2v2_db(d_curr->dir, d_next->dir); const double len = d_curr->len * d_next->len; diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c index e07675d683a2..c74a0322ac52 100644 --- a/source/blender/blenlib/intern/math_matrix.c +++ b/source/blender/blenlib/intern/math_matrix.c @@ -1663,7 +1663,7 @@ void orthogonalize_m4_stable(float R[4][4], int axis, bool normalize) * * \note If an object has a zero scaled axis, this function can be used to "clean" the matrix * to behave as if the scale on that axis was `unit_length`. So it can be inverted - * or used in matrix multiply without creating degenerate matrices, see: T50103 + * or used in matrix multiply without creating degenerate matrices, see: #50103 * \{ */ /** @@ -2412,7 +2412,7 @@ void interp_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3], con /* Quaternions cannot represent an axis flip. If such a singularity is detected, choose a * different decomposition of the matrix that still satisfies A = U_A * P_A but which has a - * positive determinant and thus no axis flips. This resolves T77154. + * positive determinant and thus no axis flips. This resolves #77154. * * Note that a flip of two axes is just a rotation of 180 degrees around the third axis, and * three flipped axes are just an 180 degree rotation + a single axis flip. It is thus sufficient diff --git a/source/blender/blenlib/intern/math_matrix.cc b/source/blender/blenlib/intern/math_matrix.cc index 122920923b24..f215b4600013 100644 --- a/source/blender/blenlib/intern/math_matrix.cc +++ b/source/blender/blenlib/intern/math_matrix.cc @@ -325,7 +325,7 @@ MatBase interpolate(const MatBase &A, const MatBase & /* Quaternions cannot represent an axis flip. If such a singularity is detected, choose a * different decomposition of the matrix that still satisfies A = U_A * P_A but which has a - * positive determinant and thus no axis flips. This resolves T77154. + * positive determinant and thus no axis flips. This resolves #77154. * * Note that a flip of two axes is just a rotation of 180 degrees around the third axis, and * three flipped axes are just an 180 degree rotation + a single axis flip. It is thus sufficient diff --git a/source/blender/blenlib/intern/math_rotation.c b/source/blender/blenlib/intern/math_rotation.c index 33f9fa1cde6f..f47bc2d8ed73 100644 --- a/source/blender/blenlib/intern/math_rotation.c +++ b/source/blender/blenlib/intern/math_rotation.c @@ -272,7 +272,7 @@ void quat_to_mat4(float m[4][4], const float q[4]) void mat3_normalized_to_quat_fast(float q[4], const float mat[3][3]) { BLI_ASSERT_UNIT_M3(mat); - /* Caller must ensure matrices aren't negative for valid results, see: T24291, T94231. */ + /* Caller must ensure matrices aren't negative for valid results, see: #24291, #94231. */ BLI_assert(!is_negative_m3(mat)); /* Method outlined by Mike Day, ref: https://math.stackexchange.com/a/3183435/220949 @@ -335,7 +335,7 @@ void mat3_normalized_to_quat_fast(float q[4], const float mat[3][3]) } else { /* NOTE(@ideasman42): A zero matrix will fall through to this block, - * needed so a zero scaled matrices to return a quaternion without rotation, see: T101848. */ + * needed so a zero scaled matrices to return a quaternion without rotation, see: #101848. */ const float trace = 1.0f + mat[0][0] + mat[1][1] + mat[2][2]; float s = 2.0f * sqrtf(trace); q[0] = 0.25f * s; @@ -964,7 +964,7 @@ void sin_cos_from_fraction(int numerator, int denominator, float *r_sin, float * /* By default, creating a circle from an integer: calling #sinf & #cosf on the fraction doesn't * create symmetrical values (because floats can't represent Pi exactly). * Resolve this when the rotation is calculated from a fraction by mapping the `numerator` - * to lower values so X/Y values for points around a circle are exactly symmetrical, see T87779. + * to lower values so X/Y values for points around a circle are exactly symmetrical, see #87779. * * Multiply both the `numerator` and `denominator` by eight to ensure we can divide the circle * into 8 octants. For each octant, we then use symmetry and negation to bring the `numerator` diff --git a/source/blender/blenlib/intern/mesh_boolean.cc b/source/blender/blenlib/intern/mesh_boolean.cc index 9de75de5ffa8..5c15975f393c 100644 --- a/source/blender/blenlib/intern/mesh_boolean.cc +++ b/source/blender/blenlib/intern/mesh_boolean.cc @@ -2761,7 +2761,7 @@ static IMesh raycast_tris_boolean(const IMesh &tm, * For most operations, even a hint of being inside * gives good results, but when shape is a cutter in a Difference * operation, we want to be pretty sure that the point is inside other_shape. - * E.g., T75827. + * E.g., #75827. * Also, when the operation is intersection, we also want high confidence. */ bool need_high_confidence = (op == BoolOpType::Difference && shape != 0) || diff --git a/source/blender/blenlib/intern/polyfill_2d_beautify.c b/source/blender/blenlib/intern/polyfill_2d_beautify.c index 38cf97d6a8f3..b6750a46c012 100644 --- a/source/blender/blenlib/intern/polyfill_2d_beautify.c +++ b/source/blender/blenlib/intern/polyfill_2d_beautify.c @@ -205,11 +205,11 @@ static void polyedge_beauty_cost_update_single(const float (*coords)[2], * which leads to infinite loop. Anyway, costs above that are not worth recomputing, * maybe we could even optimize it to a smaller limit? * Actually, FLT_EPSILON is too small in some cases, 1e-6f seems to work OK hopefully? - * See T43578, T49478. + * See #43578, #49478. * * In fact a larger epsilon can still fail when the area of the face is very large, * now the epsilon is scaled by the face area. - * See T56532. */ + * See #56532. */ if (cost < -1e-6f * max_ff(area, 1.0f)) { BLI_heap_insert_or_update(eheap, &eheap_table[i], cost, e); } diff --git a/source/blender/blenlib/intern/quadric.c b/source/blender/blenlib/intern/quadric.c index 4f057fb348d0..4492d8b46cfd 100644 --- a/source/blender/blenlib/intern/quadric.c +++ b/source/blender/blenlib/intern/quadric.c @@ -13,7 +13,7 @@ * even though input/output are floats in some cases. * * This is done because the cases quadrics are useful - * often need high precision, see T44780. + * often need high precision, see #44780. */ #include "BLI_math.h" diff --git a/source/blender/blenlib/intern/scanfill.c b/source/blender/blenlib/intern/scanfill.c index 4145125c1d75..04e6ed4a7bbf 100644 --- a/source/blender/blenlib/intern/scanfill.c +++ b/source/blender/blenlib/intern/scanfill.c @@ -524,11 +524,11 @@ static uint scanfill(ScanFillContext *sf_ctx, PolyFill *pf, const int flag) BLI_remlink(&sf_ctx->filledgebase, eed); /* This code is for handling zero-length edges that get * collapsed in step 0. It was removed for some time to - * fix trunk bug T4544, so if that comes back, this code + * fix trunk bug #4544, so if that comes back, this code * may need some work, or there will have to be a better - * fix to T4544. + * fix to #4544. * - * warning, this can hang on un-ordered edges, see: T33281. + * warning, this can hang on un-ordered edges, see: #33281. * for now disable 'BLI_SCANFILL_CALC_REMOVE_DOUBLES' for ngons. */ if (eed->v1->f == SF_VERT_ZERO_LEN) { @@ -660,7 +660,7 @@ static uint scanfill(ScanFillContext *sf_ctx, PolyFill *pf, const int flag) * (concave holes) we continue searching and pick the * one with sharpest corner. */ if (best_sc == NULL) { - /* even without holes we need to keep checking T35861. */ + /* even without holes we need to keep checking #35861. */ best_sc = sc1; } else { @@ -867,7 +867,7 @@ uint BLI_scanfill_calc_ex(ScanFillContext *sf_ctx, const int flag, const float n * which historically this function supports so better not change */ /* WARNING: this only gives stable direction with single polygons, - * ideally we'd calculate connectivity and each polys normal, see T41047 */ + * ideally we'd calculate connectivity and each polys normal, see #41047 */ const float *v_prev; zero_v3(n); diff --git a/source/blender/blenlib/tests/BLI_math_rotation_test.cc b/source/blender/blenlib/tests/BLI_math_rotation_test.cc index 140f499ca8e7..2d74b40a90da 100644 --- a/source/blender/blenlib/tests/BLI_math_rotation_test.cc +++ b/source/blender/blenlib/tests/BLI_math_rotation_test.cc @@ -140,7 +140,7 @@ TEST(math_rotation, quat_to_mat_to_quat_near_0001) test_quat_to_mat_to_quat(0.30f, -0.030f, -0.30f, 0.95f); } -/* A zeroed matrix converted to a quaternion and back should not add rotation, see: T101848 */ +/* A zeroed matrix converted to a quaternion and back should not add rotation, see: #101848 */ TEST(math_rotation, quat_to_mat_to_quat_zeroed_matrix) { float matrix_zeroed[3][3] = {{0.0f}}; diff --git a/source/blender/blenlib/tests/BLI_polyfill_2d_test.cc b/source/blender/blenlib/tests/BLI_polyfill_2d_test.cc index f3b66bedf88a..2a688bb512f1 100644 --- a/source/blender/blenlib/tests/BLI_polyfill_2d_test.cc +++ b/source/blender/blenlib/tests/BLI_polyfill_2d_test.cc @@ -654,7 +654,7 @@ TEST(polyfill2d, Issue1407_pt) TEST_POLYFILL_TEMPLATE_STATIC(poly, false); } -/* Simplified from Blender bug T40777 */ +/* Simplified from Blender bug #40777 */ TEST(polyfill2d, IssueT40777_colinear) { const float poly[][2] = { @@ -665,7 +665,7 @@ TEST(polyfill2d, IssueT40777_colinear) TEST_POLYFILL_TEMPLATE_STATIC(poly, false); } -/* Blender bug T41986 */ +/* Blender bug #41986 */ TEST(polyfill2d, IssueT41986_axis_align) { const float poly[][2] = { @@ -680,7 +680,7 @@ TEST(polyfill2d, IssueT41986_axis_align) TEST_POLYFILL_TEMPLATE_STATIC(poly, false); } -/* Blender bug T52834 */ +/* Blender bug #52834 */ TEST(polyfill2d, IssueT52834_axis_align_co_linear) { const float poly[][2] = { @@ -695,7 +695,7 @@ TEST(polyfill2d, IssueT52834_axis_align_co_linear) TEST_POLYFILL_TEMPLATE_STATIC(poly, false); } -/* Blender bug T67109 (version a). */ +/* Blender bug #67109 (version a). */ /* Multiple versions are offset & rotated, this fails in cases where others works. */ TEST(polyfill2d, IssueT67109_axis_align_co_linear_a) { @@ -714,7 +714,7 @@ TEST(polyfill2d, IssueT67109_axis_align_co_linear_a) TEST_POLYFILL_TEMPLATE_STATIC(poly, false); } -/* Blender bug T67109, (version b). */ +/* Blender bug #67109, (version b). */ TEST(polyfill2d, IssueT67109_axis_align_co_linear_b) { const float poly[][2] = { @@ -732,7 +732,7 @@ TEST(polyfill2d, IssueT67109_axis_align_co_linear_b) TEST_POLYFILL_TEMPLATE_STATIC(poly, false); } -/* Blender bug T67109 (version c). */ +/* Blender bug #67109 (version c). */ TEST(polyfill2d, IssueT67109_axis_align_co_linear_c) { const float poly[][2] = { diff --git a/source/blender/blenloader/intern/readfile.cc b/source/blender/blenloader/intern/readfile.cc index c440dbf8c7af..29730f7f10ad 100644 --- a/source/blender/blenloader/intern/readfile.cc +++ b/source/blender/blenloader/intern/readfile.cc @@ -162,7 +162,7 @@ * which keeps large arrays in memory from data-blocks we may not even use. * * \note This is disabled when using compression, - * while ZLIB supports seek it's unusably slow, see: T61880. + * while ZLIB supports seek it's unusably slow, see: #61880. */ #define USE_BHEAD_READ_ON_DEMAND @@ -2038,7 +2038,7 @@ static void direct_link_id_common( /* No-main and other types of special IDs should never be written in .blend files. */ /* NOTE: `NO_MAIN` is commented for now as some code paths may still generate embedded IDs with - * this tag, see T103389. Related to T88555. */ + * this tag, see #103389. Related to #88555. */ BLI_assert( (id->tag & (/*LIB_TAG_NO_MAIN |*/ LIB_TAG_NO_USER_REFCOUNT | LIB_TAG_NOT_ALLOCATED)) == 0); @@ -2111,7 +2111,7 @@ static void direct_link_id_common( /* Link direct data of overrides. */ if (id->override_library) { BLO_read_data_address(reader, &id->override_library); - /* Work around file corruption on writing, see T86853. */ + /* Work around file corruption on writing, see #86853. */ if (id->override_library != nullptr) { BLO_read_list_cb( reader, &id->override_library->properties, direct_link_id_override_property_cb); @@ -2471,7 +2471,7 @@ static void lib_link_workspace_layout_restore(IDNameLib_Map *id_map, sbuts->flag &= ~SB_PIN_CONTEXT; } - /* TODO: restore path pointers: T40046 + /* TODO: restore path pointers: #40046 * (complicated because this contains data pointers too, not just ID). */ MEM_SAFE_FREE(sbuts->path); break; @@ -2496,7 +2496,7 @@ static void lib_link_workspace_layout_restore(IDNameLib_Map *id_map, } /* force recalc of list of channels, potentially updating the active action - * while we're at it (as it can only be updated that way) T28962. + * while we're at it (as it can only be updated that way) #28962. */ saction->runtime.flag |= SACTION_RUNTIME_FLAG_NEED_CHAN_SYNC; break; @@ -2731,7 +2731,7 @@ void blo_lib_link_restore(Main *oldmain, /* Restore all ID pointers in Main database itself * (especially IDProperties might point to some word-space of other 'weirdly unchanged' ID - * pointers, see T69146). + * pointers, see #69146). * Note that this will re-apply again a few pointers in workspaces or so, * but since we are remapping final ones already set above, * that is just some minor harmless double-processing. */ @@ -2774,7 +2774,7 @@ static void direct_link_library(FileData *fd, Library *lib, Main *main) * where to add all non-library data-blocks found in file next, we have to switch that * 'dupli' found Main to latest position in the list! * Otherwise, you get weird disappearing linked data on a rather inconsistent basis. - * See also T53977 for reproducible case. */ + * See also #53977 for reproducible case. */ BLI_remlink(fd->mainlist, newmain); BLI_addtail(fd->mainlist, newmain); @@ -2817,7 +2817,7 @@ static void fix_relpaths_library(const char *basepath, Main *main) /* when loading a linked lib into a file which has not been saved, * there is nothing we can be relative to, so instead we need to make * it absolute. This can happen when appending an object with a relative - * link into an unsaved blend file. See T27405. + * link into an unsaved blend file. See #27405. * The remap relative option will make it relative again on save - campbell */ if (BLI_path_is_rel(lib->filepath)) { BLI_strncpy(lib->filepath, lib->filepath_abs, sizeof(lib->filepath)); @@ -3078,7 +3078,7 @@ static bool read_libblock_undo_restore_library(FileData *fd, Main *main, const I * (see BLO_read_from_memfile). * However, some needed by the snapshot being read may have been removed in previous one, * and would go missing. - * This leads e.g. to disappearing objects in some undo/redo case, see T34446. + * This leads e.g. to disappearing objects in some undo/redo case, see #34446. * That means we have to carefully check whether current lib or * libdata already exits in old main, if it does we merely copy it over into new main area, * otherwise we have to do a full read of that bhead... */ @@ -3982,8 +3982,8 @@ BlendFileData *blo_read_file_internal(FileData *fd, const char *filepath) BKE_lib_override_library_main_update(bfd->main); /* FIXME Temporary 'fix' to a problem in how temp ID are copied in - * `BKE_lib_override_library_main_update`, see T103062. - * Proper fix involves first addressing T90610. */ + * `BKE_lib_override_library_main_update`, see #103062. + * Proper fix involves first addressing #90610. */ BKE_main_collections_parent_relations_rebuild(bfd->main); fd->reports->duration.lib_overrides = PIL_check_seconds_timer() - @@ -4612,8 +4612,8 @@ static void library_link_end(Main *mainl, FileData **fd, const int flag) BKE_main_id_tag_all(mainvar, LIB_TAG_NEW, false); /* FIXME Temporary 'fix' to a problem in how temp ID are copied in - * `BKE_lib_override_library_main_update`, see T103062. - * Proper fix involves first addressing T90610. */ + * `BKE_lib_override_library_main_update`, see #103062. + * Proper fix involves first addressing #90610. */ BKE_main_collections_parent_relations_rebuild(mainvar); /* Make all relative paths, relative to the open blend file. */ diff --git a/source/blender/blenloader/intern/versioning_250.c b/source/blender/blenloader/intern/versioning_250.c index 5d2072e0fd94..fb806a0b1246 100644 --- a/source/blender/blenloader/intern/versioning_250.c +++ b/source/blender/blenloader/intern/versioning_250.c @@ -2115,7 +2115,7 @@ void blo_do_versions_250(FileData *fd, Library *lib, Main *bmain) } if (!MAIN_VERSION_ATLEAST(bmain, 258, 1)) { - /* screen view2d settings were not properly initialized T27164. + /* screen view2d settings were not properly initialized #27164. * v2d->scroll caused the bug but best reset other values too * which are in old blend files only. * Need to make less ugly - possibly an iterator? */ diff --git a/source/blender/blenloader/intern/versioning_260.c b/source/blender/blenloader/intern/versioning_260.c index 8cfd66576ff3..0a4211315c0c 100644 --- a/source/blender/blenloader/intern/versioning_260.c +++ b/source/blender/blenloader/intern/versioning_260.c @@ -1587,7 +1587,7 @@ void blo_do_versions_260(FileData *fd, Library *UNUSED(lib), Main *bmain) /* correction for files saved in blender version when BKE_pose_copy_data * didn't copy animation visualization, which lead to deadlocks on motion - * path calculation for proxied armatures, see T32742. + * path calculation for proxied armatures, see #32742. */ if (bmain->versionfile < 264) { Object *ob; diff --git a/source/blender/blenloader/intern/versioning_270.c b/source/blender/blenloader/intern/versioning_270.c index 5d966344717b..067918976c7a 100644 --- a/source/blender/blenloader/intern/versioning_270.c +++ b/source/blender/blenloader/intern/versioning_270.c @@ -409,7 +409,7 @@ static void do_version_bbone_easing_fcurve_fix(ID *UNUSED(id), FMod_Stepped *data = fcm->data; /* Modifier doesn't work if the modifier's copy of start/end frame are both 0 - * as those were only getting written to the fcm->data copy (T52009) + * as those were only getting written to the fcm->data copy (#52009) */ if ((fcm->sfra == fcm->efra) && (fcm->sfra == 0)) { fcm->sfra = data->start_frame; @@ -557,7 +557,7 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *bmain) if (!MAIN_VERSION_ATLEAST(bmain, 270, 4)) { /* ui_previews were not handled correctly when copying areas, - * leading to corrupted files (see T39847). + * leading to corrupted files (see #39847). * This will always reset situation to a valid state. */ bScreen *screen; @@ -1551,7 +1551,7 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *bmain) } } - /* Fix for T50736, Glare comp node using same var for two different things. */ + /* Fix for #50736, Glare comp node using same var for two different things. */ if (!DNA_struct_elem_find(fd->filesdna, "NodeGlare", "char", "star_45")) { FOREACH_NODETREE_BEGIN (bmain, ntree, id) { if (ntree->type == NTREE_COMPOSIT) { @@ -1602,7 +1602,7 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *bmain) } } - /* Fix related to VGroup modifiers creating named defgroup CD layers! See T51520. */ + /* Fix related to VGroup modifiers creating named defgroup CD layers! See #51520. */ for (Mesh *me = bmain->meshes.first; me; me = me->id.next) { CustomData_set_layer_name(&me->vdata, CD_MDEFORMVERT, 0, ""); } diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c index 2e9a16bc945e..ff8606776634 100644 --- a/source/blender/blenloader/intern/versioning_280.c +++ b/source/blender/blenloader/intern/versioning_280.c @@ -1206,7 +1206,7 @@ void do_versions_after_linking_280(Main *bmain, ReportList *UNUSED(reports)) } if (collection_hidden == NULL) { /* This should never happen (objects are always supposed to be instantiated in a - * scene), but it does sometimes, see e.g. T81168. + * scene), but it does sometimes, see e.g. #81168. * Just put them in first hidden collection in those cases. */ collection_hidden = &hidden_collection_array[0]; } @@ -1739,7 +1739,7 @@ void do_versions_after_linking_280(Main *bmain, ReportList *UNUSED(reports)) /* NOTE: This version patch is intended for versions < 2.52.2, * but was initially introduced in 2.27 already. * But in 2.79 another case generating non-unique names was discovered - * (see T55668, involving Meta strips). */ + * (see #55668, involving Meta strips). */ static void do_versions_seq_unique_name_all_strips(Scene *sce, ListBase *seqbasep) { for (Sequence *seq = seqbasep->first; seq != NULL; seq = seq->next) { diff --git a/source/blender/blenloader/intern/versioning_290.cc b/source/blender/blenloader/intern/versioning_290.cc index 9c968e905cf9..b90e7529bbc4 100644 --- a/source/blender/blenloader/intern/versioning_290.cc +++ b/source/blender/blenloader/intern/versioning_290.cc @@ -721,7 +721,7 @@ static void do_versions_point_attributes(CustomData *pdata) static void do_versions_point_attribute_names(CustomData *pdata) { - /* Change from capital initial letter to lower case (T82693). */ + /* Change from capital initial letter to lower case (#82693). */ for (int i = 0; i < pdata->totlayer; i++) { CustomDataLayer *layer = &pdata->layers[i]; if (layer->type == CD_PROP_FLOAT3 && STREQ(layer->name, "Position")) { @@ -841,7 +841,7 @@ void blo_do_versions_290(FileData *fd, Library * /*lib*/, Main *bmain) } } - /** Repair files from duplicate brushes added to blend files, see: T76738. */ + /** Repair files from duplicate brushes added to blend files, see: #76738. */ if (!MAIN_VERSION_ATLEAST(bmain, 290, 2)) { { short id_codes[] = {ID_BR, ID_PAL}; @@ -1156,7 +1156,7 @@ void blo_do_versions_290(FileData *fd, Library * /*lib*/, Main *bmain) } if (!MAIN_VERSION_ATLEAST(bmain, 291, 5)) { - /* Fix fcurves to allow for new bezier handles behavior (T75881 and D8752). */ + /* Fix fcurves to allow for new bezier handles behavior (#75881 and D8752). */ LISTBASE_FOREACH (bAction *, act, &bmain->actions) { LISTBASE_FOREACH (FCurve *, fcu, &act->curves) { /* Only need to fix Bezier curves with at least 2 key-frames. */ diff --git a/source/blender/blenloader/intern/versioning_300.cc b/source/blender/blenloader/intern/versioning_300.cc index 3db5ecafe12e..e8e7c6b552a4 100644 --- a/source/blender/blenloader/intern/versioning_300.cc +++ b/source/blender/blenloader/intern/versioning_300.cc @@ -2251,7 +2251,7 @@ void blo_do_versions_300(FileData *fd, Library * /*lib*/, Main *bmain) if (!MAIN_VERSION_ATLEAST(bmain, 300, 9)) { /* Fix a bug where reordering FCurves and bActionGroups could cause some corruption. Just * reconstruct all the action groups & ensure that the FCurves of a group are continuously - * stored (i.e. not mixed with other groups) to be sure. See T89435. */ + * stored (i.e. not mixed with other groups) to be sure. See #89435. */ LISTBASE_FOREACH (bAction *, act, &bmain->actions) { BKE_action_groups_reconstruct(act); } @@ -2363,7 +2363,7 @@ void blo_do_versions_300(FileData *fd, Library * /*lib*/, Main *bmain) } } - /* Font names were copied directly into ID names, see: T90417. */ + /* Font names were copied directly into ID names, see: #90417. */ if (!MAIN_VERSION_ATLEAST(bmain, 300, 16)) { ListBase *lb = which_libbase(bmain, ID_VF); BKE_main_id_repair_duplicate_names_listbase(bmain, lb); @@ -3606,7 +3606,7 @@ void blo_do_versions_300(FileData *fd, Library * /*lib*/, Main *bmain) } if (!MAIN_VERSION_ATLEAST(bmain, 303, 5)) { - /* Fix for T98925 - remove channels region, that was initialized in incorrect editor types. */ + /* Fix for #98925 - remove channels region, that was initialized in incorrect editor types. */ LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) { LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) { LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) { @@ -3636,7 +3636,7 @@ void blo_do_versions_300(FileData *fd, Library * /*lib*/, Main *bmain) } /* Disable 'show_bounds' option of curve objects. Option was set as there was no object mode - * outline implementation. See T95933. */ + * outline implementation. See #95933. */ LISTBASE_FOREACH (Object *, ob, &bmain->objects) { if (ob->type == OB_CURVES) { ob->dtx &= ~OB_DRAWBOUNDOX; @@ -3738,7 +3738,7 @@ void blo_do_versions_300(FileData *fd, Library * /*lib*/, Main *bmain) } if (!MAIN_VERSION_ATLEAST(bmain, 304, 5)) { - /* Fix for T101622 - update flags of sequence editor regions that were not initialized + /* Fix for #101622 - update flags of sequence editor regions that were not initialized * properly. */ LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) { LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) { diff --git a/source/blender/blenloader/intern/versioning_defaults.cc b/source/blender/blenloader/intern/versioning_defaults.cc index f6fe45ddcdf4..d19616223cd9 100644 --- a/source/blender/blenloader/intern/versioning_defaults.cc +++ b/source/blender/blenloader/intern/versioning_defaults.cc @@ -82,7 +82,7 @@ static void blo_update_defaults_screen(bScreen *screen, LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) { LISTBASE_FOREACH (ARegion *, region, &area->regionbase) { /* Some toolbars have been saved as initialized, - * we don't want them to have odd zoom-level or scrolling set, see: T47047 */ + * we don't want them to have odd zoom-level or scrolling set, see: #47047 */ if (ELEM(region->regiontype, RGN_TYPE_UI, RGN_TYPE_TOOLS, RGN_TYPE_TOOL_PROPS)) { region->v2d.flag &= ~V2D_IS_INIT; } diff --git a/source/blender/blenloader/intern/writefile.cc b/source/blender/blenloader/intern/writefile.cc index 57ac9d650d9b..a95e3180b677 100644 --- a/source/blender/blenloader/intern/writefile.cc +++ b/source/blender/blenloader/intern/writefile.cc @@ -788,7 +788,7 @@ static void current_screen_compat(Main *mainvar, if (wm) { if (use_active_win) { - /* write the active window into the file, needed for multi-window undo T43424 */ + /* write the active window into the file, needed for multi-window undo #43424 */ for (window = static_cast(wm->windows.first); window; window = window->next) { if (window->active) { break; @@ -1472,7 +1472,7 @@ bool BLO_write_file(Main *mainvar, if (remap_mode != BLO_WRITE_PATH_REMAP_NONE) { /* Some path processing (e.g. with libraries) may use the current `main->filepath`, if this * is not matching the path currently used for saving, unexpected paths corruptions can - * happen. See T98201. */ + * happen. See #98201. */ char mainvar_filepath_orig[FILE_MAX]; STRNCPY(mainvar_filepath_orig, mainvar->filepath); STRNCPY(mainvar->filepath, filepath); diff --git a/source/blender/bmesh/intern/bmesh_interp.c b/source/blender/bmesh/intern/bmesh_interp.c index 16db91595ec1..8f21ed63df24 100644 --- a/source/blender/bmesh/intern/bmesh_interp.c +++ b/source/blender/bmesh/intern/bmesh_interp.c @@ -827,7 +827,7 @@ static void update_data_blocks(BMesh *bm, CustomData *olddata, CustomData *data) } if (oldpool) { - /* this should never happen but can when dissolve fails - T28960. */ + /* this should never happen but can when dissolve fails - #28960. */ BLI_assert(data->pool != oldpool); BLI_mempool_destroy(oldpool); diff --git a/source/blender/bmesh/intern/bmesh_iterators.cc b/source/blender/bmesh/intern/bmesh_iterators.cc index 91ece97fa215..d712fe8c7313 100644 --- a/source/blender/bmesh/intern/bmesh_iterators.cc +++ b/source/blender/bmesh/intern/bmesh_iterators.cc @@ -352,7 +352,7 @@ int BM_iter_mesh_count_flag(const char itype, BMesh *bm, const char hflag, const * VERT OF MESH CALLBACKS */ -/* see bug T36923 for why we need this, +/* see bug #36923 for why we need this, * allow adding but not removing, this isn't _totally_ safe since * you could add/remove within the same loop, but catches common cases */ diff --git a/source/blender/bmesh/intern/bmesh_iterators.h b/source/blender/bmesh/intern/bmesh_iterators.h index e4319c23c4e7..d84f163f978f 100644 --- a/source/blender/bmesh/intern/bmesh_iterators.h +++ b/source/blender/bmesh/intern/bmesh_iterators.h @@ -77,7 +77,7 @@ extern const char bm_iter_itype_htype_map[BM_ITYPE_MAX]; BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_step(iter), (indexvar)++) /* a version of BM_ITER_MESH which keeps the next item in storage - * so we can delete the current item, see bug T36923. */ + * so we can delete the current item, see bug #36923. */ #ifdef DEBUG # define BM_ITER_MESH_MUTABLE(ele, ele_next, iter, bm, itype) \ for (BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_new(iter, bm, itype, NULL); \ diff --git a/source/blender/bmesh/intern/bmesh_log.c b/source/blender/bmesh/intern/bmesh_log.c index a8a9390f525c..e44bf2d4b098 100644 --- a/source/blender/bmesh/intern/bmesh_log.c +++ b/source/blender/bmesh/intern/bmesh_log.c @@ -305,7 +305,7 @@ static void bm_log_faces_restore(BMesh *bm, BMLog *log, GHash *faces) f->head.hflag = lf->hflag; bm_log_face_id_set(log, f, POINTER_AS_UINT(key)); - /* Ensure face sets have valid values. Fixes T80174. */ + /* Ensure face sets have valid values. Fixes #80174. */ if (cd_face_sets != -1) { BM_ELEM_CD_SET_INT(f, cd_face_sets, 1); } diff --git a/source/blender/bmesh/intern/bmesh_marking.c b/source/blender/bmesh/intern/bmesh_marking.c index a1c2815ab2fc..a81e70b4e67e 100644 --- a/source/blender/bmesh/intern/bmesh_marking.c +++ b/source/blender/bmesh/intern/bmesh_marking.c @@ -604,7 +604,7 @@ void BM_face_select_set(BMesh *bm, BMFace *f, const bool select) * * Rely on #BM_mesh_select_mode_flush to correct these cases. * - * \note flushing based on mode, see T46494 + * \note flushing based on mode, see #46494 */ if (bm->selectmode & SCE_SELECT_VERTEX) { l_iter = l_first = BM_FACE_FIRST_LOOP(f); diff --git a/source/blender/bmesh/intern/bmesh_mesh_convert.cc b/source/blender/bmesh/intern/bmesh_mesh_convert.cc index 35f59a2f1433..4ec30e12ba2a 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc +++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc @@ -601,7 +601,7 @@ static BMVert **bm_to_mesh_vertex_map(BMesh *bm, int ototvert) * ===================== * * Key blocks locations must *not* be used. This was done from v2.67 to 3.0, - * causing bugs T35170 & T44415. + * causing bugs #35170 & #44415. * * Shape key synchronizing could work under the assumption that the key-block is * fixed-in-place when entering edit-mode allowing them to be used as a reference when exiting. @@ -776,7 +776,7 @@ static void bm_to_mesh_shape(BMesh *bm, /* Without this, the real mesh coordinates (uneditable) as soon as you create the Basis shape. * while users might not notice since the shape-key is applied in the viewport, - * exporters for example may still use the underlying coordinates, see: T30771 & T96135. + * exporters for example may still use the underlying coordinates, see: #30771 & #96135. * * Needed when editing any shape that isn't the (`key->refkey`), the vertices in mesh positions * currently have vertex coordinates set from the current-shape (initialized from #BMVert.co). @@ -846,7 +846,7 @@ static void bm_to_mesh_shape(BMesh *bm, /* Apply back new coordinates shape-keys that have offset into #BMesh. * Otherwise, in case we call again #BM_mesh_bm_to_me on same #BMesh, * we'll apply diff from previous call to #BM_mesh_bm_to_me, - * to shape-key values from original creation of the #BMesh. See T50524. */ + * to shape-key values from original creation of the #BMesh. See #50524. */ copy_v3_v3(co_orig, currkey_data[i]); } } @@ -1026,7 +1026,7 @@ void BM_mesh_bm_to_me(Main *bmain, BMesh *bm, Mesh *me, const struct BMeshToMesh me->totloop = bm->totloop; me->totpoly = bm->totface; /* Will be overwritten with a valid value if 'dotess' is set, otherwise we - * end up with 'me->totface' and `me->mface == nullptr` which can crash T28625. */ + * end up with 'me->totface' and `me->mface == nullptr` which can crash #28625. */ me->totface = 0; me->act_face = -1; diff --git a/source/blender/bmesh/intern/bmesh_mesh_convert.h b/source/blender/bmesh/intern/bmesh_mesh_convert.h index ef968594998a..822e7997ea35 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_convert.h +++ b/source/blender/bmesh/intern/bmesh_mesh_convert.h @@ -61,7 +61,7 @@ struct BMeshToMeshParams { * * This is needed when flushing changes from edit-mode into object mode, * so a second flush or edit-mode exit doesn't run with indices - * that have become invalid from updating the shape-key, see T71865. + * that have become invalid from updating the shape-key, see #71865. */ bool update_shapekey_indices; /** diff --git a/source/blender/bmesh/intern/bmesh_mesh_normals.cc b/source/blender/bmesh/intern/bmesh_mesh_normals.cc index 03bd1811fd86..28164eaec7ae 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_normals.cc +++ b/source/blender/bmesh/intern/bmesh_mesh_normals.cc @@ -1057,7 +1057,7 @@ static void bm_mesh_loops_calc_normals_for_vert_without_clnors( * Will use first clnors_data array, and fallback to cd_loop_clnors_offset * (use nullptr and -1 to not use clnors). * - * \note This sets #BM_ELEM_TAG which is used in tool code (e.g. T84426). + * \note This sets #BM_ELEM_TAG which is used in tool code (e.g. #84426). * we could add a low-level API flag for this, see #BM_ELEM_API_FLAG_ENABLE and friends. */ static void bm_mesh_loops_calc_normals__single_threaded(BMesh *bm, @@ -1449,7 +1449,7 @@ static bool bm_mesh_loops_split_lnor_fans(BMesh *bm, /* We also have to check between last and first loops, * otherwise we may miss some sharp edges here! * This is just a simplified version of above while loop. - * See T45984. */ + * See #45984. */ loops = lnors_spacearr->lspacearr[i]->loops; if (loops && org_nor) { BMLoop *ml = static_cast(loops->link); diff --git a/source/blender/bmesh/intern/bmesh_mods.c b/source/blender/bmesh/intern/bmesh_mods.c index a1842b598d5a..c383237c1ae9 100644 --- a/source/blender/bmesh/intern/bmesh_mods.c +++ b/source/blender/bmesh/intern/bmesh_mods.c @@ -414,7 +414,7 @@ BMEdge *BM_vert_collapse_edge(BMesh *bm, /* Collapse between 2 edges */ /* in this case we want to keep all faces and not join them, - * rather just get rid of the vertex - see bug T28645. */ + * rather just get rid of the vertex - see bug #28645. */ BMVert *tv = BM_edge_other_vert(e_kill, v_kill); if (tv) { BMEdge *e2 = bmesh_disk_edge_next(e_kill, v_kill); diff --git a/source/blender/bmesh/intern/bmesh_polygon_edgenet.c b/source/blender/bmesh/intern/bmesh_polygon_edgenet.c index 81793ee99950..b4cfeb43c8f5 100644 --- a/source/blender/bmesh/intern/bmesh_polygon_edgenet.c +++ b/source/blender/bmesh/intern/bmesh_polygon_edgenet.c @@ -472,7 +472,7 @@ bool BM_face_split_edgenet(BMesh *bm, } /* These arrays used to be stack memory, however they can be - * large for single faces with complex edge-nets, see: T65980. */ + * large for single faces with complex edge-nets, see: #65980. */ /* over-alloc (probably 2-4 is only used in most cases), for the biggest-fan */ edge_order = MEM_mallocN(sizeof(*edge_order) * edge_order_len, __func__); @@ -501,7 +501,7 @@ bool BM_face_split_edgenet(BMesh *bm, * however in rare cases verts are added multiple times to the queue, * that on its own is harmless but in _very_ rare cases, * the queue will overflow its maximum size, - * so we better be strict about this! see: T51539 */ + * so we better be strict about this! see: #51539 */ for (i = 0; i < edge_net_len; i++) { BM_ELEM_API_FLAG_ENABLE(edge_net[i], EDGE_NET); @@ -706,7 +706,7 @@ BLI_INLINE bool edge_isect_verts_point_2d(const BMEdge *e, float r_isect[2]) { /* This bias seems like it could be too large, - * mostly its not needed, see T52329 for example where it is. */ + * mostly its not needed, see #52329 for example where it is. */ const float endpoint_bias = 1e-4f; return ((isect_seg_seg_v2_point_ex( v_a->co, v_b->co, e->v1->co, e->v2->co, endpoint_bias, r_isect) == 1) && @@ -1159,7 +1159,7 @@ static BMVert *bm_face_split_edgenet_partial_connect(BMesh *bm, BMVert *v_delimi BLI_assert(v_delimit->e != NULL); - /* Degenerate, avoid eternal loop, see: T59074. */ + /* Degenerate, avoid eternal loop, see: #59074. */ # if 0 BLI_assert(v_split->e != NULL); # else @@ -1481,7 +1481,7 @@ bool BM_face_split_edgenet_connect_islands(BMesh *bm, /* Now create bvh tree * * Note that a large epsilon is used because meshes with dimensions of around 100+ need it. - * see T52329. */ + * see #52329. */ BVHTree *bvhtree = BLI_bvhtree_new(edge_arr_len, 1e-4f, 8, 8); for (uint i = 0; i < edge_arr_len; i++) { const float e_cos[2][3] = { @@ -1633,7 +1633,7 @@ finally: struct TempVertPair *tvp = temp_vert_pairs.list; do { /* its _very_ unlikely the edge exists, - * however splicing may cause this. see: T48012 */ + * however splicing may cause this. see: #48012 */ if (!BM_edge_exists(tvp->v_orig, tvp->v_temp)) { BM_vert_splice(bm, tvp->v_orig, tvp->v_temp); } diff --git a/source/blender/bmesh/intern/bmesh_query.c b/source/blender/bmesh/intern/bmesh_query.c index 643b5750d764..e471d4804be8 100644 --- a/source/blender/bmesh/intern/bmesh_query.c +++ b/source/blender/bmesh/intern/bmesh_query.c @@ -2042,7 +2042,7 @@ bool BM_face_is_normal_valid(const BMFace *f) /** * Use to accumulate volume calculation for faces with consistent winding. * - * Use double precision since this is prone to float precision error, see T73295. + * Use double precision since this is prone to float precision error, see #73295. */ static double bm_mesh_calc_volume_face(const BMFace *f) { diff --git a/source/blender/bmesh/intern/bmesh_query.h b/source/blender/bmesh/intern/bmesh_query.h index 2aff7e4bc6bc..5908d639db24 100644 --- a/source/blender/bmesh/intern/bmesh_query.h +++ b/source/blender/bmesh/intern/bmesh_query.h @@ -762,7 +762,7 @@ int BM_mesh_calc_edge_groups(BMesh *bm, * * While we could call this, then create vertex & face arrays, * it requires looping over geometry connectivity twice, - * this slows down edit-mesh separate by loose parts, see: T70864. + * this slows down edit-mesh separate by loose parts, see: #70864. */ int BM_mesh_calc_edge_groups_as_arrays(BMesh *bm, BMVert **verts, diff --git a/source/blender/bmesh/intern/bmesh_walkers_impl.c b/source/blender/bmesh/intern/bmesh_walkers_impl.c index 2984ea93cb71..19a7c04a22ad 100644 --- a/source/blender/bmesh/intern/bmesh_walkers_impl.c +++ b/source/blender/bmesh/intern/bmesh_walkers_impl.c @@ -930,7 +930,7 @@ static void bmw_EdgeLoopWalker_begin(BMWalker *walker, void *data) */ if ((lwalk->is_boundary == false) && /* Without checking the face count, the 3 edges could be this edge - * plus two boundary edges (which would not be stepped over), see T84906. */ + * plus two boundary edges (which would not be stepped over), see #84906. */ ((vert_edge_count[0] == 3 && vert_face_count[0] == 3) || (vert_edge_count[1] == 3 && vert_face_count[1] == 3))) { BMIter iter; diff --git a/source/blender/bmesh/operators/bmo_bridge.c b/source/blender/bmesh/operators/bmo_bridge.c index 60c91183108a..872557c6ca14 100644 --- a/source/blender/bmesh/operators/bmo_bridge.c +++ b/source/blender/bmesh/operators/bmo_bridge.c @@ -17,7 +17,7 @@ /** * TODO(@ideasman42): Many connected edge loops can cause an error attempting * to create faces with duplicate vertices. While this needs to be investigated, - * it's simple enough to check for this case, see: T102232. + * it's simple enough to check for this case, see: #102232. */ #define USE_DUPLICATE_FACE_VERT_CHECK @@ -208,7 +208,7 @@ static void bridge_loop_pair(BMesh *bm, * the loops values of 'dir_a/b' is degenerate, * in this case compare the original directions * (before they were corrected by 'el_dir'), - * see: T43013 + * see: #43013 */ test_a = dir_a_orig; test_b = dir_b_orig; @@ -272,7 +272,7 @@ static void bridge_loop_pair(BMesh *bm, bool flip[2] = {false, false}; /* for direction aligned loops we can't rely on the directly we have, - * use the winding defined by the connected faces (see T48356). */ + * use the winding defined by the connected faces (see #48356). */ if (fabsf(dot_a) < eps) { if (winding_votes[0] < 0) { flip[0] = !flip[0]; diff --git a/source/blender/bmesh/operators/bmo_connect.c b/source/blender/bmesh/operators/bmo_connect.c index 59a12db92419..6c784758d85e 100644 --- a/source/blender/bmesh/operators/bmo_connect.c +++ b/source/blender/bmesh/operators/bmo_connect.c @@ -104,7 +104,7 @@ static int bm_face_connect_verts(BMesh *bm, BMFace *f, const bool check_degenera BMLoop *l_new; BMLoop *l_pair[2]; - /* Note that duplicate edges in this case is very unlikely but it can happen, see T70287. */ + /* Note that duplicate edges in this case is very unlikely but it can happen, see #70287. */ bool edge_exists = (BM_edge_exists(verts_pair[i][0], verts_pair[i][1]) != NULL); if ((l_pair[0] = BM_face_vert_share_loop(f, verts_pair[i][0])) && (l_pair[1] = BM_face_vert_share_loop(f, verts_pair[i][1]))) { diff --git a/source/blender/bmesh/operators/bmo_connect_pair.c b/source/blender/bmesh/operators/bmo_connect_pair.c index 26f1a9e626ea..197ef3ce2647 100644 --- a/source/blender/bmesh/operators/bmo_connect_pair.c +++ b/source/blender/bmesh/operators/bmo_connect_pair.c @@ -27,7 +27,7 @@ * - store a heap of paths which are being scanned (#PathContext.states). * - continuously search the shortest path in the heap. * - never step over the same element twice (tag elements as #ELE_TOUCHED). - * this avoids going into an eternal loop if there are many possible branches (see T45582). + * this avoids going into an eternal loop if there are many possible branches (see #45582). * - when running into a branch, create a new #PathLinkState state and add to the heap. * - when the target is reached, * finish - since none of the other paths can be shorter than the one just found. @@ -109,7 +109,7 @@ typedef struct PathLinkState { /* -------------------------------------------------------------------- */ /** \name Min Dist Dir Util * - * Simply getting the closest intersecting vert/edge is _not_ good enough. see T43792 + * Simply getting the closest intersecting vert/edge is _not_ good enough. see #43792 * we need to get the closest in both directions since the absolute closest may be a dead-end. * * Logic is simple: @@ -504,7 +504,7 @@ static void bm_vert_pair_to_matrix(BMVert *v_pair[2], float r_unit_mat[3][3]) project_plane_normalized_v3_v3v3(basis_nor_b, v_pair[1]->no, basis_dir); /* Don't normalize before combining so as normals approach the direction, - * they have less effect (T46784). */ + * they have less effect (#46784). */ /* combine the normals */ /* for flipped faces */ diff --git a/source/blender/bmesh/operators/bmo_dupe.c b/source/blender/bmesh/operators/bmo_dupe.c index 1ed9d763e8cd..07315fce1390 100644 --- a/source/blender/bmesh/operators/bmo_dupe.c +++ b/source/blender/bmesh/operators/bmo_dupe.c @@ -113,7 +113,7 @@ static BMEdge *bmo_edge_copy(BMOperator *op, if (use_edge_flip_from_face) { /* Take winding from previous face (if we had one), - * otherwise extruding a duplicated edges gives bad normals, see: T62487. */ + * otherwise extruding a duplicated edges gives bad normals, see: #62487. */ if (BM_edge_is_boundary(e_src) && (e_src->l->v == e_src->v1)) { BM_edge_verts_swap(e_dst); } diff --git a/source/blender/bmesh/operators/bmo_edgenet.c b/source/blender/bmesh/operators/bmo_edgenet.c index 8083a06e0b51..11095edac02e 100644 --- a/source/blender/bmesh/operators/bmo_edgenet.c +++ b/source/blender/bmesh/operators/bmo_edgenet.c @@ -215,7 +215,7 @@ void bmo_edgenet_prepare_exec(BMesh *bm, BMOperator *op) v4 = BM_vert_in_edge(edges2[i - 1], edges2[i]->v1) ? edges2[i]->v2 : edges2[i]->v1; } - /* if there is ever bow-tie quads between two edges the problem is here! T30367. */ + /* if there is ever bow-tie quads between two edges the problem is here! #30367. */ #if 0 normal_tri_v3(dvec1, v1->co, v2->co, v4->co); normal_tri_v3(dvec2, v1->co, v4->co, v3->co); diff --git a/source/blender/bmesh/operators/bmo_extrude.c b/source/blender/bmesh/operators/bmo_extrude.c index 48d8cded95d3..21b32d487114 100644 --- a/source/blender/bmesh/operators/bmo_extrude.c +++ b/source/blender/bmesh/operators/bmo_extrude.c @@ -367,7 +367,7 @@ void bmo_extrude_face_region_exec(BMesh *bm, BMOperator *op) /* calculate verts to delete */ BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { - if (v->e) { /* only deal with verts attached to geometry T33651. */ + if (v->e) { /* only deal with verts attached to geometry #33651. */ found = false; BM_ITER_ELEM (e, &viter, v, BM_EDGES_OF_VERT) { @@ -466,10 +466,10 @@ void bmo_extrude_face_region_exec(BMesh *bm, BMOperator *op) BMVert *v1 = e->v1, *v2 = e->v2; /* The original edge was excluded, - * this would result in a standalone wire edge - see T30399. */ + * this would result in a standalone wire edge - see #30399. */ BM_edge_kill(bm, e); - /* kill standalone vertices from this edge - see T32341. */ + /* kill standalone vertices from this edge - see #32341. */ if (!v1->e) { BM_vert_kill(bm, v1); } @@ -480,7 +480,7 @@ void bmo_extrude_face_region_exec(BMesh *bm, BMOperator *op) continue; } - /* skip creating face for excluded edges see T35503. */ + /* skip creating face for excluded edges see #35503. */ if (BMO_slot_map_contains(slot_edges_exclude, e)) { /* simply skip creating the face */ continue; diff --git a/source/blender/bmesh/operators/bmo_fill_grid.c b/source/blender/bmesh/operators/bmo_fill_grid.c index e256e261eaac..9a2d297e36cc 100644 --- a/source/blender/bmesh/operators/bmo_fill_grid.c +++ b/source/blender/bmesh/operators/bmo_fill_grid.c @@ -602,7 +602,7 @@ void bmo_grid_fill_exec(BMesh *bm, BMOperator *op) if (count != 2) { /* Note that this error message has been adjusted to make sense when called * from the operator 'MESH_OT_fill_grid' which has a 'prepare' pass which can - * extract two 'rail' loops from a single edge loop, see T72075. */ + * extract two 'rail' loops from a single edge loop, see #72075. */ BMO_error_raise(bm, op, BMO_ERROR_CANCEL, diff --git a/source/blender/bmesh/operators/bmo_inset.c b/source/blender/bmesh/operators/bmo_inset.c index f46b9158c45b..1b2ab25d8306 100644 --- a/source/blender/bmesh/operators/bmo_inset.c +++ b/source/blender/bmesh/operators/bmo_inset.c @@ -20,7 +20,7 @@ #include "intern/bmesh_operators_private.h" /* own include */ -/* Merge loop-data that diverges, see: T41445 */ +/* Merge loop-data that diverges, see: #41445 */ #define USE_LOOP_CUSTOMDATA_MERGE #define ELE_NEW 1 @@ -953,10 +953,10 @@ void bmo_inset_region_exec(BMesh *bm, BMOperator *op) is_mid = false; } - /* Disable since this gives odd results at times, see T39288. */ + /* Disable since this gives odd results at times, see #39288. */ #if 0 else if (compare_v3v3(f_a->no, f_b->no, 0.001f) == false) { - /* epsilon increased to fix T32329. */ + /* epsilon increased to fix #32329. */ /* faces don't touch, * just get cross product of their normals, its *good enough* diff --git a/source/blender/bmesh/operators/bmo_primitive.c b/source/blender/bmesh/operators/bmo_primitive.c index 70984ba10bdd..1649aa7344ad 100644 --- a/source/blender/bmesh/operators/bmo_primitive.c +++ b/source/blender/bmesh/operators/bmo_primitive.c @@ -1391,7 +1391,7 @@ void bmo_create_cone_exec(BMesh *bm, BMOperator *op) BMFace **side_faces = MEM_mallocN(sizeof(*side_faces) * side_faces_len, __func__); for (int i = 0; i < segs; i++) { - /* Calculate with higher precision, see: T87779. */ + /* Calculate with higher precision, see: #87779. */ float sin_phi, cos_phi; sin_cos_from_fraction(i, segs, &sin_phi, &cos_phi); diff --git a/source/blender/bmesh/operators/bmo_smooth_laplacian.c b/source/blender/bmesh/operators/bmo_smooth_laplacian.c index 575a88331da0..d19530edae60 100644 --- a/source/blender/bmesh/operators/bmo_smooth_laplacian.c +++ b/source/blender/bmesh/operators/bmo_smooth_laplacian.c @@ -462,7 +462,7 @@ void bmo_smooth_laplacian_vert_exec(BMesh *bm, BMOperator *op) i = m_vertex_id; if ((sys->zerola[i] == false) && /* Non zero check is to account for vertices that aren't connected to a selected face. - * Without this wire edges become `nan`, see T89214. */ + * Without this wire edges become `nan`, see #89214. */ (sys->ring_areas[i] != 0.0f)) { w = sys->vweights[i] * sys->ring_areas[i]; sys->vweights[i] = (w == 0.0f) ? 0.0f : -lambda_factor / (4.0f * w); diff --git a/source/blender/bmesh/operators/bmo_subdivide.c b/source/blender/bmesh/operators/bmo_subdivide.c index c036fe86d9e0..72509dd4f6cd 100644 --- a/source/blender/bmesh/operators/bmo_subdivide.c +++ b/source/blender/bmesh/operators/bmo_subdivide.c @@ -97,7 +97,7 @@ typedef struct SubDPattern { #define ELE_INNER 8 #define ELE_SPLIT 16 -/* see bug T32665, 0.00005 means a we get face splits at a little under 1.0 degrees */ +/* see bug #32665, 0.00005 means a we get face splits at a little under 1.0 degrees */ #define FLT_FACE_SPLIT_EPSILON 0.00005f /* @@ -1202,7 +1202,7 @@ void bmo_subdivide_edges_exec(BMesh *bm, BMOperator *op) for (j = 0; j < numcuts; j++) { bool ok = true; - /* Check for special case, see: T32500. + /* Check for special case, see: #32500. * This edge pair could be used by more than one face, * in this case it used to (2.63), split both faces along the same verts * while it could be calculated which face should do the split, diff --git a/source/blender/bmesh/operators/bmo_subdivide_edgering.c b/source/blender/bmesh/operators/bmo_subdivide_edgering.c index 6f41da7bb436..474b8ad6263d 100644 --- a/source/blender/bmesh/operators/bmo_subdivide_edgering.c +++ b/source/blender/bmesh/operators/bmo_subdivide_edgering.c @@ -1095,7 +1095,7 @@ void bmo_subdivide_edgering_exec(BMesh *bm, BMOperator *op) BMFace *f; BM_ITER_ELEM (f, &fiter, e, BM_FACES_OF_EDGE) { - /* could support ngons, other areas would need updating too, see T48926. */ + /* could support ngons, other areas would need updating too, see #48926. */ if ((f->len <= 4) && !BMO_face_flag_test(bm, f, FACE_OUT)) { BMIter liter; BMLoop *l; diff --git a/source/blender/bmesh/operators/bmo_symmetrize.c b/source/blender/bmesh/operators/bmo_symmetrize.c index 13afff41263a..1cba81cc2084 100644 --- a/source/blender/bmesh/operators/bmo_symmetrize.c +++ b/source/blender/bmesh/operators/bmo_symmetrize.c @@ -72,7 +72,7 @@ void bmo_symmetrize_exec(BMesh *bm, BMOperator *op) "use_shapekey"); /* important 'flip_multires' is disabled, - * otherwise multi-res data will be reversed, see: T47788 */ + * otherwise multi-res data will be reversed, see: #47788 */ BMO_op_callf(bm, op->flag, "reverse_faces faces=%S", &op_dupe, "geom.out"); /* Weld verts */ diff --git a/source/blender/bmesh/tools/bmesh_bevel.c b/source/blender/bmesh/tools/bmesh_bevel.c index 1440f5a3eaf9..5118eb792d59 100644 --- a/source/blender/bmesh/tools/bmesh_bevel.c +++ b/source/blender/bmesh/tools/bmesh_bevel.c @@ -1351,7 +1351,7 @@ static void offset_meet(BevelParams *bp, /* Special case: e1 and e2 are parallel; put offset point perp to both, from v. * need to find a suitable plane. * This code used to just use offset and dir1, but that makes for visible errors - * on a circle with > 200 sides, which trips this "nearly perp" code (see T61214). + * on a circle with > 200 sides, which trips this "nearly perp" code (see #61214). * so use the average of the two, and the offset formula for angle bisector. * If offsets are different, we're out of luck: * Use the max of the two (so get consistent looking results if the same situation @@ -1504,9 +1504,9 @@ static void offset_meet(BevelParams *bp, } } -/* This was changed from 0.25f to fix bug T86768. - * Original bug T44961 remains fixed with this value. - * Update: changed again from 0.0001f to fix bug T95335. +/* This was changed from 0.25f to fix bug #86768. + * Original bug #44961 remains fixed with this value. + * Update: changed again from 0.0001f to fix bug #95335. * Original two bugs remained fixed. */ #define BEVEL_GOOD_ANGLE 0.1f diff --git a/source/blender/bmesh/tools/bmesh_decimate_collapse.c b/source/blender/bmesh/tools/bmesh_decimate_collapse.c index 1ea799f64e05..082c58214041 100644 --- a/source/blender/bmesh/tools/bmesh_decimate_collapse.c +++ b/source/blender/bmesh/tools/bmesh_decimate_collapse.c @@ -41,14 +41,14 @@ /** if the cost from #BLI_quadric_evaluate is 'noise', fallback to topology */ #define USE_TOPOLOGY_FALLBACK #ifdef USE_TOPOLOGY_FALLBACK -/** cost is calculated with double precision, it's ok to use a very small epsilon, see T48154. */ +/** cost is calculated with double precision, it's ok to use a very small epsilon, see #48154. */ # define TOPOLOGY_FALLBACK_EPS 1e-12f #endif #define BOUNDARY_PRESERVE_WEIGHT 100.0f /** * Uses double precision, impacts behavior on near-flat surfaces, - * cane give issues with very small faces. 1e-2 is too big, see: T48154. + * cane give issues with very small faces. 1e-2 is too big, see: #48154. */ #define OPTIMIZE_EPS 1e-8 #define COST_INVALID FLT_MAX @@ -272,7 +272,7 @@ static void bm_decim_build_edge_cost_single(BMEdge *e, } /* NOTE: 'cost' shouldn't be negative but happens sometimes with small values. - * this can cause faces that make up a flat surface to over-collapse, see T37121. */ + * this can cause faces that make up a flat surface to over-collapse, see #37121. */ cost = fabsf(cost); #ifdef USE_TOPOLOGY_FALLBACK diff --git a/source/blender/bmesh/tools/bmesh_intersect.c b/source/blender/bmesh/tools/bmesh_intersect.c index e15122a11e3f..0a668342ab4a 100644 --- a/source/blender/bmesh/tools/bmesh_intersect.c +++ b/source/blender/bmesh/tools/bmesh_intersect.c @@ -1068,7 +1068,7 @@ bool BM_mesh_intersect(BMesh *bm, /* For self intersection this can be useful, sometimes users generate geometry * where surfaces that seem disconnected happen to share an edge. * So when performing intersection calculation allow shared vertices, - * just not shared edges. See T75946. */ + * just not shared edges. See #75946. */ const bool isect_tri_tri_no_shared = (boolean_mode != BMESH_ISECT_BOOLEAN_NONE); int flag = BVH_OVERLAP_USE_THREADING | BVH_OVERLAP_RETURN_PAIRS; @@ -1250,7 +1250,7 @@ bool BM_mesh_intersect(BMesh *bm, /* It's possible the vertex to dissolve is an edge on an existing face * that doesn't divide the face, therefor the edges are not wire - * and shouldn't be handled here, see: T63787. */ + * and shouldn't be handled here, see: #63787. */ if (!BLI_gset_haskey(s.wire_edges, e_pair[0]) || !BLI_gset_haskey(s.wire_edges, e_pair[1])) { continue; } @@ -1638,7 +1638,7 @@ bool BM_mesh_intersect(BMesh *bm, BLI_memarena_free(s.mem_arena); /* It's unlikely the selection history is useful at this point, - * if this is not called this array would need to be validated, see: T86799. */ + * if this is not called this array would need to be validated, see: #86799. */ BM_select_history_clear(bm); return (has_edit_isect || has_edit_boolean); diff --git a/source/blender/bmesh/tools/bmesh_path_region.c b/source/blender/bmesh/tools/bmesh_path_region.c index a90bf87ebb0d..5b86b06aa50b 100644 --- a/source/blender/bmesh/tools/bmesh_path_region.c +++ b/source/blender/bmesh/tools/bmesh_path_region.c @@ -23,7 +23,7 @@ * * \note Regarding manifold edge stepping: #BM_vert_is_edge_pair_manifold usage. * Logic to skip a chain of vertices is not applied at boundaries because it gives - * strange behavior from a user perspective especially with boundary quads, see: T52701 + * strange behavior from a user perspective especially with boundary quads, see: #52701 * * Restrict walking over a vertex chain to cases where the edges share the same faces. * This is more typical of what a user would consider a vertex chain. diff --git a/source/blender/bmesh/tools/bmesh_path_region_uv.c b/source/blender/bmesh/tools/bmesh_path_region_uv.c index 17812fe3bdde..25637fae949e 100644 --- a/source/blender/bmesh/tools/bmesh_path_region_uv.c +++ b/source/blender/bmesh/tools/bmesh_path_region_uv.c @@ -27,7 +27,7 @@ * * \note Regarding manifold edge stepping: #BM_vert_is_edge_pair_manifold usage. * Logic to skip a chain of vertices is not applied at boundaries because it gives - * strange behavior from a user perspective especially with boundary quads, see: T52701 + * strange behavior from a user perspective especially with boundary quads, see: #52701 * * Restrict walking over a vertex chain to cases where the edges share the same faces. * This is more typical of what a user would consider a vertex chain. diff --git a/source/blender/compositor/nodes/COM_BokehBlurNode.cc b/source/blender/compositor/nodes/COM_BokehBlurNode.cc index ebdc82b0d198..7d850915ada3 100644 --- a/source/blender/compositor/nodes/COM_BokehBlurNode.cc +++ b/source/blender/compositor/nodes/COM_BokehBlurNode.cc @@ -45,7 +45,7 @@ void BokehBlurNode::convert_to_operations(NodeConverter &converter, converter.map_input_socket(get_input_socket(1), operation->get_input_socket(1)); /* NOTE: on the bokeh blur operation the sockets are switched. - * for this reason the next two lines are correct. Fix for T43771. */ + * for this reason the next two lines are correct. Fix for #43771. */ converter.map_input_socket(get_input_socket(2), operation->get_input_socket(3)); converter.map_input_socket(get_input_socket(3), operation->get_input_socket(2)); diff --git a/source/blender/compositor/nodes/COM_ImageNode.cc b/source/blender/compositor/nodes/COM_ImageNode.cc index a7cc6bf39df5..0920f60979bf 100644 --- a/source/blender/compositor/nodes/COM_ImageNode.cc +++ b/source/blender/compositor/nodes/COM_ImageNode.cc @@ -179,7 +179,7 @@ void ImageNode::convert_to_operations(NodeConverter &converter, } BKE_image_release_ibuf(image, ibuf, nullptr); - /* without this, multilayer that fail to load will crash blender T32490. */ + /* without this, multilayer that fail to load will crash blender #32490. */ if (is_multilayer_ok == false) { for (NodeOutput *output : get_output_sockets()) { converter.set_invalid_output(output); diff --git a/source/blender/compositor/operations/COM_CompositorOperation.cc b/source/blender/compositor/operations/COM_CompositorOperation.cc index 1ff27607d093..587f661646a2 100644 --- a/source/blender/compositor/operations/COM_CompositorOperation.cc +++ b/source/blender/compositor/operations/COM_CompositorOperation.cc @@ -219,7 +219,7 @@ void CompositorOperation::determine_canvas(const rcti & /*preferred_area*/, rcti BKE_render_resolution(rd_, false, &width, &height); /* Check actual render resolution with cropping it may differ with cropped border.rendering - * Fix for T31777 Border Crop gives black (easy). */ + * Fix for #31777 Border Crop gives black (easy). */ Render *re = RE_GetSceneRender(scene_); if (re) { RenderResult *rr = RE_AcquireResultRead(re); diff --git a/source/blender/compositor/operations/COM_ConvertDepthToRadiusOperation.cc b/source/blender/compositor/operations/COM_ConvertDepthToRadiusOperation.cc index 25d4b2d6a6c8..14b92bdcbd11 100644 --- a/source/blender/compositor/operations/COM_ConvertDepthToRadiusOperation.cc +++ b/source/blender/compositor/operations/COM_ConvertDepthToRadiusOperation.cc @@ -71,14 +71,14 @@ void ConvertDepthToRadiusOperation::execute_pixel_sampled(float output[4], if (z != 0.0f) { float iZ = (1.0f / z); - /* bug T6656 part 2b, do not re-scale. */ + /* bug #6656 part 2b, do not re-scale. */ #if 0 bcrad = 0.5f * fabs(aperture * (dof_sp * (cam_invfdist - iZ) - 1.0f)); /* Scale crad back to original maximum and blend. */ crad->rect[px] = bcrad + wts->rect[px] * (scf * crad->rect[px] - bcrad); #endif radius = 0.5f * fabsf(aperture_ * (dof_sp_ * (inverse_focal_distance_ - iZ) - 1.0f)); - /* 'bug' T6615, limit minimum radius to 1 pixel, + /* 'bug' #6615, limit minimum radius to 1 pixel, * not really a solution, but somewhat mitigates the problem. */ if (radius < 0.0f) { radius = 0.0f; @@ -111,7 +111,7 @@ void ConvertDepthToRadiusOperation::update_memory_buffer_partial(MemoryBuffer *o const float inv_z = (1.0f / z); - /* Bug T6656 part 2b, do not re-scale. */ + /* Bug #6656 part 2b, do not re-scale. */ #if 0 bcrad = 0.5f * fabs(aperture * (dof_sp * (cam_invfdist - iZ) - 1.0f)); /* Scale crad back to original maximum and blend: @@ -119,7 +119,7 @@ void ConvertDepthToRadiusOperation::update_memory_buffer_partial(MemoryBuffer *o #endif const float radius = 0.5f * fabsf(aperture_ * (dof_sp_ * (inverse_focal_distance_ - inv_z) - 1.0f)); - /* Bug T6615, limit minimum radius to 1 pixel, + /* Bug #6615, limit minimum radius to 1 pixel, * not really a solution, but somewhat mitigates the problem. */ *it.out = CLAMPIS(radius, 0.0f, max_radius_); } diff --git a/source/blender/compositor/operations/COM_CurveBaseOperation.cc b/source/blender/compositor/operations/COM_CurveBaseOperation.cc index e7cbf0d28d5f..67e117e33ebf 100644 --- a/source/blender/compositor/operations/COM_CurveBaseOperation.cc +++ b/source/blender/compositor/operations/COM_CurveBaseOperation.cc @@ -35,7 +35,7 @@ void CurveBaseOperation::deinit_execution() void CurveBaseOperation::set_curve_mapping(const CurveMapping *mapping) { - /* duplicate the curve to avoid glitches while drawing, see bug T32374. */ + /* duplicate the curve to avoid glitches while drawing, see bug #32374. */ if (curve_mapping_) { BKE_curvemapping_free(curve_mapping_); } diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index 0c5dfdf5ced8..9559c8a9e8dc 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -1831,7 +1831,7 @@ void DepsgraphRelationBuilder::build_driver_variables(ID *id, FCurve *fcu) * For the sake of making the code more generic/defensive, the relation * is added for any geometry type. * - * See T96289 for more info. */ + * See #96289 for more info. */ if (object != nullptr && OB_TYPE_IS_GEOMETRY(object->type)) { StringRef rna_path(dtar->rna_path); if (rna_path == "data" || rna_path.startswith("data.")) { diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_drivers.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations_drivers.cc index 009b191b91e8..c3bad9b92a95 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations_drivers.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_drivers.cc @@ -197,7 +197,7 @@ void DepsgraphRelationBuilder::build_driver_relations(IDNode *id_node) const DriverDescriptor &driver_to = prefix_group[to_index]; Node *op_to = get_node(driver_to.depsgraph_key()); - /* Duplicate drivers can exist (see T78615), but cannot be distinguished by OperationKey + /* Duplicate drivers can exist (see #78615), but cannot be distinguished by OperationKey * and thus have the same depsgraph node. Relations between those drivers should not be * created. This not something that is expected to happen (both the UI and the Python API * prevent duplicate drivers), it did happen in a file and it is easy to deal with here. */ diff --git a/source/blender/depsgraph/intern/depsgraph_eval.cc b/source/blender/depsgraph/intern/depsgraph_eval.cc index b997ac14f99c..60a68663bfa3 100644 --- a/source/blender/depsgraph/intern/depsgraph_eval.cc +++ b/source/blender/depsgraph/intern/depsgraph_eval.cc @@ -61,7 +61,7 @@ void DEG_evaluate_on_refresh(Depsgraph *graph) * since the undo state is stored before updates from the frame change have been applied. * In this case reading back the undo state will behave as if no updates on frame change * is needed as the #Depsgraph.ctime & frame will match the values in the input scene. - * Use #ID_RECALC_FRAME_CHANGE to detect that recalculation is necessary. see: T66913. */ + * Use #ID_RECALC_FRAME_CHANGE to detect that recalculation is necessary. see: #66913. */ deg_graph->tag_time_source(); } diff --git a/source/blender/depsgraph/intern/depsgraph_query_iter.cc b/source/blender/depsgraph/intern/depsgraph_query_iter.cc index 34df9a537e14..ab3d05e7fa78 100644 --- a/source/blender/depsgraph/intern/depsgraph_query_iter.cc +++ b/source/blender/depsgraph/intern/depsgraph_query_iter.cc @@ -356,7 +356,7 @@ void DEG_iterator_objects_end(BLI_Iterator *iter) DEGObjectIterData *data = (DEGObjectIterData *)iter->data; if (data != nullptr) { /* Force crash in case the iterator data is referenced and accessed down - * the line. (T51718) */ + * the line. (#51718) */ deg_invalidate_iterator_work_data(data); } } diff --git a/source/blender/depsgraph/intern/eval/deg_eval.cc b/source/blender/depsgraph/intern/eval/deg_eval.cc index 3bdc33b8d01f..aac5366d35ac 100644 --- a/source/blender/depsgraph/intern/eval/deg_eval.cc +++ b/source/blender/depsgraph/intern/eval/deg_eval.cc @@ -388,7 +388,7 @@ void deg_evaluate_on_refresh(Depsgraph *graph) graph->debug.begin_graph_evaluation(); #ifdef WITH_PYTHON - /* Release the GIL so that Python drivers can be evaluated. See T91046. */ + /* Release the GIL so that Python drivers can be evaluated. See #91046. */ BPy_BEGIN_ALLOW_THREADS; #endif diff --git a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc index 4e07a7b173c9..4d2a9a7e8502 100644 --- a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc +++ b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc @@ -737,7 +737,7 @@ void update_id_after_copy(const Depsgraph *depsgraph, scene_setup_view_layers_after_remap(depsgraph, id_node, reinterpret_cast(id_cow)); break; } - /* FIXME: This is a temporary fix to update the runtime pointers properly, see T96216. Should + /* FIXME: This is a temporary fix to update the runtime pointers properly, see #96216. Should * be removed at some point. */ case ID_GD: { bGPdata *gpd_cow = (bGPdata *)id_cow; diff --git a/source/blender/draw/engines/basic/basic_engine.c b/source/blender/draw/engines/basic/basic_engine.c index e8c2dc259fca..8270367c3e6f 100644 --- a/source/blender/draw/engines/basic/basic_engine.c +++ b/source/blender/draw/engines/basic/basic_engine.c @@ -180,7 +180,7 @@ static void basic_cache_populate(void *vedata, Object *ob) DRW_object_axis_orthogonal_to_view(ob, flat_axis)); if (is_flat_object_viewed_from_side) { - /* Avoid losing flat objects when in ortho views (see T56549) */ + /* Avoid losing flat objects when in ortho views (see #56549) */ struct GPUBatch *geom = DRW_cache_object_all_edges_get(ob); if (geom) { DRW_shgroup_call(stl->g_data->depth_shgrp[do_in_front], geom, ob); diff --git a/source/blender/draw/engines/eevee/eevee_data.c b/source/blender/draw/engines/eevee/eevee_data.c index 1a1e3b80bad5..3d041f32bf36 100644 --- a/source/blender/draw/engines/eevee/eevee_data.c +++ b/source/blender/draw/engines/eevee/eevee_data.c @@ -126,7 +126,7 @@ EEVEE_ObjectMotionData *EEVEE_motion_blur_object_data_get(EEVEE_MotionBlurData * /* Assumes that all instances have the same object pointer. This is currently the case because * instance objects are temporary objects on the stack. */ /* WORKAROUND: Duplicate object key for particle system (hairs) to be able to store dupli offset - * matrix along with the emitter obmat. (see T97380) */ + * matrix along with the emitter obmat. (see #97380) */ key.ob = (void *)((char *)ob + is_psys); DupliObject *dup = DRW_object_get_dupli(ob); if (dup) { diff --git a/source/blender/draw/engines/eevee/eevee_effects.c b/source/blender/draw/engines/eevee/eevee_effects.c index 0e1cc82797ac..68e61235bead 100644 --- a/source/blender/draw/engines/eevee/eevee_effects.c +++ b/source/blender/draw/engines/eevee/eevee_effects.c @@ -93,7 +93,7 @@ void EEVEE_effects_init(EEVEE_ViewLayerData *sldata, effects->enabled_effects |= EEVEE_screen_raytrace_init(sldata, vedata); /* Update matrices here because EEVEE_screen_raytrace_init can have reset the - * taa_current_sample. (See T66811) */ + * taa_current_sample. (See #66811) */ EEVEE_temporal_sampling_update_matrices(vedata); EEVEE_volumes_init(sldata, vedata); diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c index 9f70a2dd72b3..fd11839d5b3f 100644 --- a/source/blender/draw/engines/eevee/eevee_engine.c +++ b/source/blender/draw/engines/eevee/eevee_engine.c @@ -399,7 +399,7 @@ static void eevee_id_world_update(void *vedata, World *wo) LightCache *lcache = stl->g_data->light_cache; if (ELEM(lcache, NULL, stl->lookdev_lightcache)) { - /* Avoid Lookdev viewport clearing the update flag (see T67741). */ + /* Avoid Lookdev viewport clearing the update flag (see #67741). */ return; } diff --git a/source/blender/draw/engines/eevee/eevee_lightcache.c b/source/blender/draw/engines/eevee/eevee_lightcache.c index b28189973da1..84b4d6dda7a1 100644 --- a/source/blender/draw/engines/eevee/eevee_lightcache.c +++ b/source/blender/draw/engines/eevee/eevee_lightcache.c @@ -530,7 +530,7 @@ static void write_lightcache_texture(BlendWriter *writer, LightCacheTexture *tex } /* FIXME: We can't save more than what 32bit systems can handle. - * The solution would be to split the texture but it is too late for 2.90. (see T78529) */ + * The solution would be to split the texture but it is too late for 2.90. (see #78529) */ if (data_size < INT_MAX) { BLO_write_raw(writer, data_size, tex->data); } diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h index c8e571ee9d41..136f14afbb35 100644 --- a/source/blender/draw/engines/eevee/eevee_private.h +++ b/source/blender/draw/engines/eevee/eevee_private.h @@ -607,7 +607,7 @@ typedef struct EEVEE_MotionBlurData { typedef struct EEVEE_ObjectKey { /** Object or source object for duplis. */ /** WORKAROUND: The pointer is different for particle systems and do not point to the real - * object. (See T97380) */ + * object. (See #97380) */ void *ob; /** Parent object for duplis */ struct Object *parent; @@ -988,7 +988,7 @@ typedef struct EEVEE_PrivateData { float camtexcofac[4]; float size_orig[2]; - /* Cached original camera when rendering for motion blur (see T79637). */ + /* Cached original camera when rendering for motion blur (see #79637). */ struct Object *cam_original_ob; /* Mist Settings */ diff --git a/source/blender/draw/engines/eevee/eevee_render.c b/source/blender/draw/engines/eevee/eevee_render.c index 1d18056e1754..6f47007c3c5a 100644 --- a/source/blender/draw/engines/eevee/eevee_render.c +++ b/source/blender/draw/engines/eevee/eevee_render.c @@ -206,7 +206,7 @@ void EEVEE_render_cache(void *vedata, /* Don't print dupli objects as this can be very verbose and * increase the render time on Windows because of slow windows term. - * (see T59649) */ + * (see #59649) */ if (engine && (ob->base_flag & BASE_FROM_DUPLI) == 0) { char info[42]; BLI_snprintf(info, sizeof(info), "Syncing %s", ob->id.name + 2); @@ -571,7 +571,7 @@ void EEVEE_render_draw(EEVEE_Data *vedata, RenderEngine *engine, RenderLayer *rl EEVEE_temporal_sampling_reset(vedata); stl->effects->ssr_was_valid_double_buffer = stl->g_data->valid_double_buffer; } - /* Don't print every samples as it can lead to bad performance. (see T59649) */ + /* Don't print every samples as it can lead to bad performance. (see #59649) */ else if ((render_samples % 25) == 0 || (render_samples + 1) == tot_sample) { char info[42]; BLI_snprintf( diff --git a/source/blender/draw/engines/eevee/eevee_sampling.c b/source/blender/draw/engines/eevee/eevee_sampling.c index 34d3cd74b36b..d47a99f7c4f6 100644 --- a/source/blender/draw/engines/eevee/eevee_sampling.c +++ b/source/blender/draw/engines/eevee/eevee_sampling.c @@ -17,7 +17,7 @@ void EEVEE_sample_ball(int sample_ofs, float radius, float rsample[3]) BLI_halton_3d(ht_primes, ht_offset, sample_ofs, ht_point); - /* De-correlate AA and shadow samples. (see T68594) */ + /* De-correlate AA and shadow samples. (see #68594) */ ht_point[0] = fmod(ht_point[0] * 1151.0, 1.0); ht_point[1] = fmod(ht_point[1] * 1069.0, 1.0); ht_point[2] = fmod(ht_point[2] * 1151.0, 1.0); @@ -48,7 +48,7 @@ void EEVEE_sample_rectangle(int sample_ofs, BLI_halton_2d(ht_primes, ht_offset, sample_ofs, ht_point); - /* De-correlate AA and shadow samples. (see T68594) */ + /* De-correlate AA and shadow samples. (see #68594) */ ht_point[0] = fmod(ht_point[0] * 1151.0, 1.0); ht_point[1] = fmod(ht_point[1] * 1069.0, 1.0); @@ -74,7 +74,7 @@ void EEVEE_sample_ellipse(int sample_ofs, BLI_halton_2d(ht_primes, ht_offset, sample_ofs, ht_point); - /* Decorrelate AA and shadow samples. (see T68594) */ + /* Decorrelate AA and shadow samples. (see #68594) */ ht_point[0] = fmod(ht_point[0] * 1151.0, 1.0); ht_point[1] = fmod(ht_point[1] * 1069.0, 1.0); @@ -98,7 +98,7 @@ void EEVEE_random_rotation_m4(int sample_ofs, float scale, float r_mat[4][4]) BLI_halton_3d(ht_primes, ht_offset, sample_ofs, ht_point); - /* Decorrelate AA and shadow samples. (see T68594) */ + /* Decorrelate AA and shadow samples. (see #68594) */ ht_point[0] = fmod(ht_point[0] * 1151.0, 1.0); ht_point[1] = fmod(ht_point[1] * 1069.0, 1.0); ht_point[2] = fmod(ht_point[2] * 1151.0, 1.0); diff --git a/source/blender/draw/engines/eevee/eevee_temporal_sampling.c b/source/blender/draw/engines/eevee/eevee_temporal_sampling.c index 5644fc6f1f40..4c5b6ae5f15d 100644 --- a/source/blender/draw/engines/eevee/eevee_temporal_sampling.c +++ b/source/blender/draw/engines/eevee/eevee_temporal_sampling.c @@ -281,7 +281,7 @@ int EEVEE_temporal_sampling_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data effects->taa_total_sample = 1; } - /* Motion blur steps could reset the sampling when camera is animated (see T79970). */ + /* Motion blur steps could reset the sampling when camera is animated (see #79970). */ if (!DRW_state_is_scene_render()) { DRW_view_persmat_get(NULL, persmat, false); view_is_valid = view_is_valid && compare_m4m4(persmat, effects->prev_drw_persmat, FLT_MIN); @@ -309,7 +309,7 @@ int EEVEE_temporal_sampling_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data } else { const bool all_shaders_compiled = stl->g_data->queued_shaders_count_prev == 0; - /* Fix Texture painting (see T79370) and shader compilation (see T78520). */ + /* Fix Texture painting (see #79370) and shader compilation (see #78520). */ if (DRW_state_is_navigating() || !all_shaders_compiled) { effects->taa_current_sample = 1; } diff --git a/source/blender/draw/engines/eevee/eevee_volumes.c b/source/blender/draw/engines/eevee/eevee_volumes.c index 872696a8b7c1..72ea7a7f2035 100644 --- a/source/blender/draw/engines/eevee/eevee_volumes.c +++ b/source/blender/draw/engines/eevee/eevee_volumes.c @@ -300,7 +300,7 @@ void EEVEE_volumes_cache_object_add(EEVEE_ViewLayerData *sldata, float size[3]; mat4_to_size(size, ob->object_to_world); - /* Check if any of the axes have 0 length. (see T69070) */ + /* Check if any of the axes have 0 length. (see #69070) */ const float epsilon = 1e-8f; if ((size[0] < epsilon) || (size[1] < epsilon) || (size[2] < epsilon)) { return; diff --git a/source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl b/source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl index e0e8975369a3..32748a71038c 100644 --- a/source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl @@ -295,7 +295,7 @@ void occlusion_eval(OcclusionData data, bent_normal = N; } else { - /* NOTE: using pow(visibility, 6.0) produces NaN (see T87369). */ + /* NOTE: using pow(visibility, 6.0) produces NaN (see #87369). */ float tmp = saturate(pow6(visibility)); bent_normal = normalize(mix(bent_normal, N, tmp)); } diff --git a/source/blender/draw/engines/eevee/shaders/closure_eval_diffuse_lib.glsl b/source/blender/draw/engines/eevee/shaders/closure_eval_diffuse_lib.glsl index 574b24b36507..965b11c8e2ef 100644 --- a/source/blender/draw/engines/eevee/shaders/closure_eval_diffuse_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/closure_eval_diffuse_lib.glsl @@ -92,7 +92,7 @@ void closure_Diffuse_eval_end(ClosureInputDiffuse cl_in, { cl_out.radiance = render_pass_diffuse_mask(cl_out.radiance); #if defined(DEPTH_SHADER) || defined(WORLD_BACKGROUND) - /* This makes shader resources become unused and avoid issues with samplers. (see T59747) */ + /* This makes shader resources become unused and avoid issues with samplers. (see #59747) */ cl_out.radiance = vec3(0.0); return; #endif diff --git a/source/blender/draw/engines/eevee/shaders/closure_eval_glossy_lib.glsl b/source/blender/draw/engines/eevee/shaders/closure_eval_glossy_lib.glsl index 0deaf4054d22..83b3fafddcbb 100644 --- a/source/blender/draw/engines/eevee/shaders/closure_eval_glossy_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/closure_eval_glossy_lib.glsl @@ -147,7 +147,7 @@ void closure_Glossy_eval_end(ClosureInputGlossy cl_in, { cl_out.radiance = render_pass_glossy_mask(cl_out.radiance); #if defined(DEPTH_SHADER) || defined(WORLD_BACKGROUND) - /* This makes shader resources become unused and avoid issues with samplers. (see T59747) */ + /* This makes shader resources become unused and avoid issues with samplers. (see #59747) */ cl_out.radiance = vec3(0.0); return; #endif diff --git a/source/blender/draw/engines/eevee/shaders/closure_eval_refraction_lib.glsl b/source/blender/draw/engines/eevee/shaders/closure_eval_refraction_lib.glsl index 5c6769b185a8..400480564dd6 100644 --- a/source/blender/draw/engines/eevee/shaders/closure_eval_refraction_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/closure_eval_refraction_lib.glsl @@ -127,7 +127,7 @@ void closure_Refraction_eval_end(ClosureInputRefraction cl_in, { cl_out.radiance = render_pass_glossy_mask(cl_out.radiance); #if defined(DEPTH_SHADER) || defined(WORLD_BACKGROUND) - /* This makes shader resources become unused and avoid issues with samplers. (see T59747) */ + /* This makes shader resources become unused and avoid issues with samplers. (see #59747) */ cl_out.radiance = vec3(0.0); return; #endif diff --git a/source/blender/draw/engines/eevee/shaders/closure_eval_translucent_lib.glsl b/source/blender/draw/engines/eevee/shaders/closure_eval_translucent_lib.glsl index 89a6f10e634c..2702b867ef68 100644 --- a/source/blender/draw/engines/eevee/shaders/closure_eval_translucent_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/closure_eval_translucent_lib.glsl @@ -73,7 +73,7 @@ void closure_Translucent_eval_end(ClosureInputTranslucent cl_in, { cl_out.radiance = render_pass_diffuse_mask(cl_out.radiance); #if defined(DEPTH_SHADER) || defined(WORLD_BACKGROUND) - /* This makes shader resources become unused and avoid issues with samplers. (see T59747) */ + /* This makes shader resources become unused and avoid issues with samplers. (see #59747) */ cl_out.radiance = vec3(0.0); return; #endif diff --git a/source/blender/draw/engines/eevee/shaders/effect_downsample_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_downsample_frag.glsl index 2a5d456feff9..32eaa85408ab 100644 --- a/source/blender/draw/engines/eevee/shaders/effect_downsample_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/effect_downsample_frag.glsl @@ -19,7 +19,7 @@ void main() #else /* NOTE(@fclem): textureSize() does not work the same on all implementations - * when changing the min and max texture levels. Use uniform instead (see T87801). */ + * when changing the min and max texture levels. Use uniform instead (see #87801). */ vec2 uvs = gl_FragCoord.xy * texelSize; vec4 ofs = texelSize.xyxy * vec4(0.75, 0.75, -0.75, -0.75); uvs *= 2.0; diff --git a/source/blender/draw/engines/eevee/shaders/effect_minmaxz_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_minmaxz_frag.glsl index 9570e542d9e6..1f81bc30b171 100644 --- a/source/blender/draw/engines/eevee/shaders/effect_minmaxz_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/effect_minmaxz_frag.glsl @@ -35,7 +35,7 @@ void main() float val = sampleLowerMip(uv); #else /* NOTE(@fclem): textureSize() does not work the same on all implementations - * when changing the min and max texture levels. Use uniform instead (see T87801). */ + * when changing the min and max texture levels. Use uniform instead (see #87801). */ vec2 uv = texel * 2.0 * texelSize; vec4 samp; diff --git a/source/blender/draw/engines/eevee/shaders/ltc_lib.glsl b/source/blender/draw/engines/eevee/shaders/ltc_lib.glsl index 3e7181f2274e..ef89bd92f530 100644 --- a/source/blender/draw/engines/eevee/shaders/ltc_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/ltc_lib.glsl @@ -49,7 +49,7 @@ vec3 solve_cubic(vec4 coefs) /* Discriminant */ float discr = dot(vec2(4.0 * delta.x, -delta.y), delta.zy); - /* Clamping avoid NaN output on some platform. (see T67060) */ + /* Clamping avoid NaN output on some platform. (see #67060) */ float sqrt_discr = sqrt(clamp(discr, 0.0, FLT_MAX)); vec2 xlc, xsc; diff --git a/source/blender/draw/engines/eevee/shaders/surface_frag.glsl b/source/blender/draw/engines/eevee/shaders/surface_frag.glsl index bf105bd907b7..e5fb19c9da7b 100644 --- a/source/blender/draw/engines/eevee/shaders/surface_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/surface_frag.glsl @@ -145,7 +145,7 @@ void main() /* Only supported attrib for world/background shaders. */ vec3 attr_load_orco(vec4 orco) { - /* Retain precision better than g_data.P (see T99128). */ + /* Retain precision better than g_data.P (see #99128). */ return -normal_view_to_world(viewCameraVec(viewPosition)); } /* Unsupported. */ diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_integration_frag.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_integration_frag.glsl index 828170598542..8f4a80ce6c3c 100644 --- a/source/blender/draw/engines/eevee/shaders/volumetric_integration_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/volumetric_integration_frag.glsl @@ -52,7 +52,7 @@ void main() float ray_len = orig_ray_len * cell_depth; /* Emission does not work of there is no extinction because - * Tr evaluates to 1.0 leading to Lscat = 0.0. (See T65771) */ + * Tr evaluates to 1.0 leading to Lscat = 0.0. (See #65771) */ s_extinction = max(vec3(1e-7) * step(1e-5, Lscat), s_extinction); /* Evaluate Scattering */ diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_ltc_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_ltc_lib.glsl index 57e92b0b9b43..8255b53422e3 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_ltc_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_ltc_lib.glsl @@ -45,7 +45,7 @@ vec3 ltc_solve_cubic(vec4 coefs) /* Discriminant */ float discr = dot(vec2(4.0 * delta.x, -delta.y), delta.zy); - /* Clamping avoid NaN output on some platform. (see T67060) */ + /* Clamping avoid NaN output on some platform. (see #67060) */ float sqrt_discr = sqrt(clamp(discr, 0.0, FLT_MAX)); vec2 xlc, xsc; diff --git a/source/blender/draw/engines/overlay/overlay_armature.cc b/source/blender/draw/engines/overlay/overlay_armature.cc index 6644112b1305..674ce4ceb4d8 100644 --- a/source/blender/draw/engines/overlay/overlay_armature.cc +++ b/source/blender/draw/engines/overlay/overlay_armature.cc @@ -1486,7 +1486,7 @@ static void draw_axes(ArmatureDrawContext *ctx, if (pchan && pchan->custom && !(arm->flag & ARM_NO_CUSTOM)) { /* Special case: Custom bones can have different scale than the bone. - * Recompute display matrix without the custom scaling applied. (T65640). */ + * Recompute display matrix without the custom scaling applied. (#65640). */ float axis_mat[4][4]; float length = pchan->bone->length; copy_m4_m4(axis_mat, pchan->custom_tx ? pchan->custom_tx->pose_mat : pchan->pose_mat); @@ -2096,7 +2096,7 @@ static void draw_bone_name(ArmatureDrawContext *ctx, /* -------------------------------------------------------------------- */ /** \name Pose Bone Culling * - * Used for selection since drawing many bones can be slow, see: T91253. + * Used for selection since drawing many bones can be slow, see: #91253. * * Bounding spheres are used with margins added to ensure bones are included. * An added margin is needed because #BKE_pchan_minmax only returns the bounds @@ -2231,7 +2231,7 @@ static void draw_armature_edit(ArmatureDrawContext *ctx) const Object *ob_orig = DEG_get_original_object(ob); /* FIXME(@ideasman42): We should be able to use the CoW object, * however the active bone isn't updated. Long term solution is an 'EditArmature' struct. - * for now we can draw from the original armature. See: T66773. */ + * for now we can draw from the original armature. See: #66773. */ // bArmature *arm = ob->data; bArmature *arm = static_cast(ob_orig->data); diff --git a/source/blender/draw/engines/overlay/overlay_edit_mesh.cc b/source/blender/draw/engines/overlay/overlay_edit_mesh.cc index f705bde6b548..256588e56f26 100644 --- a/source/blender/draw/engines/overlay/overlay_edit_mesh.cc +++ b/source/blender/draw/engines/overlay/overlay_edit_mesh.cc @@ -85,7 +85,7 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata) if ((flag & V3D_OVERLAY_EDIT_EDGES) == 0) { if ((tsettings->selectmode & SCE_SELECT_EDGE) == 0) { if ((v3d->shading.type < OB_SOLID) || (v3d->shading.flag & V3D_SHADING_XRAY)) { - /* Special case, when drawing wire, draw edges, see: T67637. */ + /* Special case, when drawing wire, draw edges, see: #67637. */ } else { pd->edit_mesh.do_edges = false; diff --git a/source/blender/draw/engines/overlay/overlay_edit_uv.cc b/source/blender/draw/engines/overlay/overlay_edit_uv.cc index 8b3c4e5d0ce2..9e95b2eca05b 100644 --- a/source/blender/draw/engines/overlay/overlay_edit_uv.cc +++ b/source/blender/draw/engines/overlay/overlay_edit_uv.cc @@ -414,7 +414,7 @@ void OVERLAY_edit_uv_cache_init(OVERLAY_Data *vedata) /* HACK: When editing objects that share the same mesh we should only draw the * first one in the order that is used during uv editing. We can only trust that the first object - * has the correct batches with the correct selection state. See T83187. */ + * has the correct batches with the correct selection state. See #83187. */ if ((pd->edit_uv.do_uv_overlay || pd->edit_uv.do_uv_shadow_overlay) && draw_ctx->obact->type == OB_MESH) { uint objects_len = 0; diff --git a/source/blender/draw/engines/overlay/overlay_engine.cc b/source/blender/draw/engines/overlay/overlay_engine.cc index e8300e81f2fd..6f90645a0da9 100644 --- a/source/blender/draw/engines/overlay/overlay_engine.cc +++ b/source/blender/draw/engines/overlay/overlay_engine.cc @@ -248,7 +248,7 @@ BLI_INLINE OVERLAY_DupliData *OVERLAY_duplidata_get(Object *ob, void *vedata, bo static bool overlay_object_is_edit_mode(const OVERLAY_PrivateData *pd, const Object *ob) { if (DRW_object_is_in_edit_mode(ob)) { - /* Also check for context mode as the object mode is not 100% reliable. (see T72490) */ + /* Also check for context mode as the object mode is not 100% reliable. (see #72490) */ switch (ob->type) { case OB_MESH: return pd->ctx_mode == CTX_MODE_EDIT_MESH; diff --git a/source/blender/draw/engines/overlay/overlay_extra.cc b/source/blender/draw/engines/overlay/overlay_extra.cc index 8a4e8734ebec..889787507667 100644 --- a/source/blender/draw/engines/overlay/overlay_extra.cc +++ b/source/blender/draw/engines/overlay/overlay_extra.cc @@ -645,7 +645,7 @@ void OVERLAY_light_cache_populate(OVERLAY_Data *vedata, Object *ob) } else if (la->type == LA_SPOT) { /* Previous implementation was using the clip-end distance as cone size. - * We cannot do this anymore so we use a fixed size of 10. (see T72871) */ + * We cannot do this anymore so we use a fixed size of 10. (see #72871) */ const float3 scale_vec = {10.0f, 10.0f, 10.0f}; rescale_m4(instdata.mat, scale_vec); /* For cycles and EEVEE the spot attenuation is: diff --git a/source/blender/draw/engines/overlay/overlay_image.cc b/source/blender/draw/engines/overlay/overlay_image.cc index 7b99bd6bd18e..622dc7339cac 100644 --- a/source/blender/draw/engines/overlay/overlay_image.cc +++ b/source/blender/draw/engines/overlay/overlay_image.cc @@ -375,7 +375,7 @@ void OVERLAY_image_empty_cache_populate(OVERLAY_Data *vedata, Object *ob) { /* Calling 'BKE_image_get_size' may free the texture. Get the size from 'tex' instead, - * see: T59347 */ + * see: #59347 */ int size[2] = {0}; if (ima != nullptr) { ImageUser iuser = *ob->iuser; diff --git a/source/blender/draw/engines/overlay/shaders/overlay_edit_mesh_geom.glsl b/source/blender/draw/engines/overlay/shaders/overlay_edit_mesh_geom.glsl index 1f6ff4e7d3aa..a3d797a3664e 100644 --- a/source/blender/draw/engines/overlay/shaders/overlay_edit_mesh_geom.glsl +++ b/source/blender/draw/engines/overlay/shaders/overlay_edit_mesh_geom.glsl @@ -9,7 +9,7 @@ void do_vertex(vec4 color, vec4 pos, float coord, vec2 offset) gl_Position = pos; /* Multiply offset by 2 because gl_Position range is [-1..1]. */ gl_Position.xy += offset * 2.0 * pos.w; - /* Correct but fails due to an AMD compiler bug, see: T62792. + /* Correct but fails due to an AMD compiler bug, see: #62792. * Do inline instead. */ #if 0 view_clipping_distances_set(gl_in[i]); @@ -62,7 +62,7 @@ void main() edge_ofs = (horizontal) ? edge_ofs.zyz : edge_ofs.xzz; /* Due to an AMD glitch, this line was moved out of the `do_vertex` - * function (see T62792). */ + * function (see #62792). */ view_clipping_distances_set(gl_in[0]); do_vertex(geometry_in[0].finalColor_, pos0, half_size, edge_ofs.xy); do_vertex(geometry_in[0].finalColor_, pos0, -half_size, -edge_ofs.xy); diff --git a/source/blender/draw/engines/overlay/shaders/overlay_grid_frag.glsl b/source/blender/draw/engines/overlay/shaders/overlay_grid_frag.glsl index b401c3e7b2e9..2b333696f940 100644 --- a/source/blender/draw/engines/overlay/shaders/overlay_grid_frag.glsl +++ b/source/blender/draw/engines/overlay/shaders/overlay_grid_frag.glsl @@ -81,7 +81,7 @@ void main() } else { dist = gl_FragCoord.z * 2.0 - 1.0; - /* Avoid fading in +Z direction in camera view (see T70193). */ + /* Avoid fading in +Z direction in camera view (see #70193). */ dist = flag_test(grid_flag, GRID_CAMERA) ? clamp(dist, 0.0, 1.0) : abs(dist); fade = 1.0 - smoothstep(0.0, 0.5, dist - 0.5); dist = 1.0; /* Avoid branch after. */ diff --git a/source/blender/draw/engines/overlay/shaders/overlay_image_vert.glsl b/source/blender/draw/engines/overlay/shaders/overlay_image_vert.glsl index 45cddb3610da..be56c45dc9f4 100644 --- a/source/blender/draw/engines/overlay/shaders/overlay_image_vert.glsl +++ b/source/blender/draw/engines/overlay/shaders/overlay_image_vert.glsl @@ -6,7 +6,7 @@ void main() { vec3 world_pos = point_object_to_world(pos); if (isCameraBackground) { - /* Model matrix converts to view position to avoid jittering (see T91398). */ + /* Model matrix converts to view position to avoid jittering (see #91398). */ gl_Position = point_view_to_ndc(world_pos); /* Camera background images are not really part of the 3D space. * It makes no sense to apply clipping on them. */ diff --git a/source/blender/draw/engines/select/select_draw_utils.c b/source/blender/draw/engines/select/select_draw_utils.c index 613b60f8829b..03b189a3e5b7 100644 --- a/source/blender/draw/engines/select/select_draw_utils.c +++ b/source/blender/draw/engines/select/select_draw_utils.c @@ -51,7 +51,7 @@ short select_id_get_object_select_mode(Scene *scene, Object *ob) * we need to be in SCE_SELECT_FACE mode so select_cache_init() correctly sets up * a shgroup with select_id_flat. * Note this is not working correctly for vertex-paint (yet), but has been discussed - * in T66645 and there is a solution by @mano-wii in P1032. + * in #66645 and there is a solution by @mano-wii in P1032. * So OB_MODE_VERTEX_PAINT is already included here [required for P1032 I guess]. */ Mesh *me_orig = DEG_get_original_object(ob)->data; if (me_orig->editflag & ME_EDIT_PAINT_VERT_SEL) { @@ -130,7 +130,7 @@ static void draw_select_id_edit_mesh(SELECTID_StorageList *stl, } else { /* Note that `r_vert_offset` is calculated from `r_edge_offset`. - * Otherwise the first vertex is never selected, see: T53512. */ + * Otherwise the first vertex is never selected, see: #53512. */ *r_edge_offset = *r_face_offset; } diff --git a/source/blender/draw/engines/workbench/shaders/workbench_merge_infront_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_merge_infront_frag.glsl index 30daca6b7e37..d436707afc7b 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_merge_infront_frag.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_merge_infront_frag.glsl @@ -2,7 +2,7 @@ void main() { float depth = texture(depthBuffer, uvcoordsvar.xy).r; - /* Fix issues with Intel drivers (see T80023). */ + /* Fix issues with Intel drivers (see #80023). */ fragColor = vec4(0.0); /* Discard background pixels. */ if (depth == 1.0) { diff --git a/source/blender/draw/engines/workbench/workbench_shadow.c b/source/blender/draw/engines/workbench/workbench_shadow.c index 211c0e27418b..655093a3fd47 100644 --- a/source/blender/draw/engines/workbench/workbench_shadow.c +++ b/source/blender/draw/engines/workbench/workbench_shadow.c @@ -319,7 +319,7 @@ void workbench_shadow_cache_populate(WORKBENCH_Data *data, Object *ob, const boo use_shadow_pass_technique = false; } - /* We cannot use Shadow Pass technique on non-manifold object (see T76168). */ + /* We cannot use Shadow Pass technique on non-manifold object (see #76168). */ if (use_shadow_pass_technique && !is_manifold && (wpd->cull_state != 0)) { use_shadow_pass_technique = false; } diff --git a/source/blender/draw/engines/workbench/workbench_shadow.cc b/source/blender/draw/engines/workbench/workbench_shadow.cc index dff3314813c8..942f7244a836 100644 --- a/source/blender/draw/engines/workbench/workbench_shadow.cc +++ b/source/blender/draw/engines/workbench/workbench_shadow.cc @@ -439,7 +439,7 @@ void ShadowPass::object_sync(SceneState &scene_state, #endif /* Shadow pass technique needs object to be have all its surface opaque. */ - /* We cannot use the PASS technique on non-manifold object (see T76168). */ + /* We cannot use the PASS technique on non-manifold object (see #76168). */ bool force_fail_pass = has_transp_mat || (!is_manifold && (scene_state.cull_state != 0)); PassType fail_type = force_fail_pass ? FORCED_FAIL : FAIL; diff --git a/source/blender/draw/intern/draw_attributes.h b/source/blender/draw/intern/draw_attributes.h index 223c2a26c60d..66320f1b5000 100644 --- a/source/blender/draw/intern/draw_attributes.h +++ b/source/blender/draw/intern/draw_attributes.h @@ -47,7 +47,7 @@ typedef struct DRW_MeshCDMask { uint32_t tan_orco : 1; uint32_t sculpt_overlays : 1; /** - * Edit uv layer is from the base edit mesh as modifiers could remove it. (see T68857) + * Edit uv layer is from the base edit mesh as modifiers could remove it. (see #68857) */ uint32_t edit_uv : 1; } DRW_MeshCDMask; diff --git a/source/blender/draw/intern/draw_cache.c b/source/blender/draw/intern/draw_cache.c index f1f62d8aee92..abe3283bab7f 100644 --- a/source/blender/draw/intern/draw_cache.c +++ b/source/blender/draw/intern/draw_cache.c @@ -386,7 +386,7 @@ GPUBatch *DRW_cache_fullscreen_quad_get(void) attr_id.pos = GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); attr_id.uvs = GPU_vertformat_attr_add(&format, "uvs", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); GPU_vertformat_alias_add(&format, "texCoord"); - GPU_vertformat_alias_add(&format, "orco"); /* Fix driver bug (see T70004) */ + GPU_vertformat_alias_add(&format, "orco"); /* Fix driver bug (see #70004) */ } GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format); diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.cc b/source/blender/draw/intern/draw_cache_impl_mesh.cc index bfeafdf7dcb2..f8077882c12f 100644 --- a/source/blender/draw/intern/draw_cache_impl_mesh.cc +++ b/source/blender/draw/intern/draw_cache_impl_mesh.cc @@ -369,7 +369,7 @@ static DRW_MeshCDMask mesh_cd_calc_used_gpu_layers(const Object *object, CustomData_get_named_layer(cd_ldata, CD_PROP_FLOAT2, name) : CustomData_get_render_layer(cd_ldata, CD_PROP_FLOAT2); - /* Only fallback to orco (below) when we have no UV layers, see: T56545 */ + /* Only fallback to orco (below) when we have no UV layers, see: #56545 */ if (layer == -1 && name[0] != '\0') { layer = CustomData_get_render_layer(cd_ldata, CD_PROP_FLOAT2); } @@ -750,7 +750,7 @@ void DRW_mesh_batch_cache_dirty_tag(Mesh *me, eMeshBatchDirtyMode mode) break; case BKE_MESH_BATCH_DIRTY_SELECT_PAINT: /* Paint mode selection flag is packed inside the nor attribute. - * Note that it can be slow if auto smooth is enabled. (see T63946) */ + * Note that it can be slow if auto smooth is enabled. (see #63946) */ FOREACH_MESH_BUFFER_CACHE (cache, mbc) { GPU_INDEXBUF_DISCARD_SAFE(mbc->buff.ibo.lines_paint_mask); GPU_VERTBUF_DISCARD_SAFE(mbc->buff.vbo.pos_nor); @@ -1315,7 +1315,7 @@ static void drw_mesh_batch_cache_check_available(struct TaskGraph *task_graph, M MeshBatchCache *cache = mesh_batch_cache_get(me); /* Make sure all requested batches have been setup. */ /* NOTE: The next line creates a different scheduling than during release builds what can lead to - * some issues (See T77867 where we needed to disable this function in order to debug what was + * some issues (See #77867 where we needed to disable this function in order to debug what was * happening in release builds). */ BLI_task_graph_work_and_wait(task_graph); for (int i = 0; i < MBC_BATCH_LEN; i++) { @@ -1941,7 +1941,7 @@ void DRW_mesh_batch_cache_create_requested(struct TaskGraph *task_graph, /* Ensure that all requested batches have finished. * Ideally we want to remove this sync, but there are cases where this doesn't work. - * See T79038 for example. + * See #79038 for example. * * An idea to improve this is to separate the Object mode from the edit mode draw caches. And * based on the mode the correct one will be updated. Other option is to look into using diff --git a/source/blender/draw/intern/draw_cache_impl_subdivision.cc b/source/blender/draw/intern/draw_cache_impl_subdivision.cc index 25ec4a578d5b..fb21e58d527b 100644 --- a/source/blender/draw/intern/draw_cache_impl_subdivision.cc +++ b/source/blender/draw/intern/draw_cache_impl_subdivision.cc @@ -1220,7 +1220,7 @@ static bool draw_subdiv_build_cache(DRWSubdivCache *cache, /* To avoid floating point precision issues when evaluating patches at patch boundaries, * ensure that all loops sharing a vertex use the same patch coordinate. This could cause - * the mesh to not be watertight, leading to shadowing artifacts (see T97877). */ + * the mesh to not be watertight, leading to shadowing artifacts (see #97877). */ blender::Vector first_loop_index(cache->num_subdiv_verts, -1); /* Save coordinates for corners, as attributes may vary for each loop connected to the same diff --git a/source/blender/draw/intern/draw_curves.cc b/source/blender/draw/intern/draw_curves.cc index 45a72d67d31b..2be32cc704c4 100644 --- a/source/blender/draw/intern/draw_curves.cc +++ b/source/blender/draw/intern/draw_curves.cc @@ -393,7 +393,7 @@ DRWShadingGroup *DRW_shgroup_curves_create_sub(Object *object, DRW_shgroup_uniform_bool_copy(shgrp, "hairCloseTip", hair_close_tip); if (gpu_material) { /* NOTE: This needs to happen before the drawcall to allow correct attribute extraction. - * (see T101896) */ + * (see #101896) */ DRW_shgroup_add_material_resources(shgrp, gpu_material); } /* TODO(fclem): Until we have a better way to cull the curves and render with orco, bypass @@ -412,7 +412,7 @@ void DRW_curves_update() if (!GPU_transform_feedback_support()) { /** * Workaround to transform feedback not working on mac. - * On some system it crashes (see T58489) and on some other it renders garbage (see T60171). + * On some system it crashes (see #58489) and on some other it renders garbage (see #60171). * * So instead of using transform feedback we render to a texture, * read back the result to system memory and re-upload as VBO data. diff --git a/source/blender/draw/intern/draw_hair.cc b/source/blender/draw/intern/draw_hair.cc index da04f199157d..e8220346d25a 100644 --- a/source/blender/draw/intern/draw_hair.cc +++ b/source/blender/draw/intern/draw_hair.cc @@ -295,7 +295,7 @@ DRWShadingGroup *DRW_shgroup_hair_create_sub(Object *object, DRW_shgroup_uniform_bool_copy(shgrp, "hairCloseTip", hair_close_tip); if (gpu_material) { /* NOTE: This needs to happen before the drawcall to allow correct attribute extraction. - * (see T101896) */ + * (see #101896) */ DRW_shgroup_add_material_resources(shgrp, gpu_material); } /* TODO(fclem): Until we have a better way to cull the hair and render with orco, bypass @@ -311,7 +311,7 @@ void DRW_hair_update() if (!GPU_transform_feedback_support()) { /** * Workaround to transform feedback not working on mac. - * On some system it crashes (see T58489) and on some other it renders garbage (see T60171). + * On some system it crashes (see #58489) and on some other it renders garbage (see #60171). * * So instead of using transform feedback we render to a texture, * read back the result to system memory and re-upload as VBO data. diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 1af10275e2a5..a8c5e6965522 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -1763,7 +1763,7 @@ void DRW_draw_render_loop_ex(struct Depsgraph *depsgraph, drw_engines_draw_scene(); - /* Fix 3D view "lagging" on APPLE and WIN32+NVIDIA. (See T56996, T61474) */ + /* Fix 3D view "lagging" on APPLE and WIN32+NVIDIA. (See #56996, #61474) */ if (GPU_type_matches_ex(GPU_DEVICE_ANY, GPU_OS_ANY, GPU_DRIVER_ANY, GPU_BACKEND_OPENGL)) { GPU_flush(); } @@ -2138,7 +2138,7 @@ void DRW_custom_pipeline(DrawEngineType *draw_engine_type, /* The use of custom pipeline in other thread using the same * resources as the main thread (viewport) may lead to data * races and undefined behavior on certain drivers. Using - * GPU_finish to sync seems to fix the issue. (see T62997) */ + * GPU_finish to sync seems to fix the issue. (see #62997) */ eGPUBackendType type = GPU_backend_get_type(); if (type == GPU_BACKEND_OPENGL) { GPU_finish(); @@ -2251,7 +2251,7 @@ void DRW_draw_render_loop_2d_ex(struct Depsgraph *depsgraph, drw_engines_draw_scene(); - /* Fix 3D view being "laggy" on MACOS and MS-Windows+NVIDIA. (See T56996, T61474) */ + /* Fix 3D view being "laggy" on MACOS and MS-Windows+NVIDIA. (See #56996, #61474) */ if (GPU_type_matches_ex(GPU_DEVICE_ANY, GPU_OS_ANY, GPU_DRIVER_ANY, GPU_BACKEND_OPENGL)) { GPU_flush(); } @@ -2780,7 +2780,7 @@ void DRW_draw_select_id(Depsgraph *depsgraph, ARegion *region, View3D *v3d, cons drw_engines_cache_finish(); drw_task_graph_deinit(); -#if 0 /* This is a workaround to a nasty bug that seems to be a nasty driver bug. (See T69377) */ +#if 0 /* This is a workaround to a nasty bug that seems to be a nasty driver bug. (See #69377) */ DRW_render_instance_buffer_finish(); #else DST.buffer_finish_called = true; @@ -3072,7 +3072,7 @@ void DRW_engines_free(void) if (DST.gl_context == NULL) { /* Nothing has been setup. Nothing to clear. * Otherwise, DRW_opengl_context_enable can - * create a context in background mode. (see T62355) */ + * create a context in background mode. (see #62355) */ return; } diff --git a/source/blender/draw/intern/draw_manager_data.cc b/source/blender/draw/intern/draw_manager_data.cc index de78c8216de5..a88d59fbd282 100644 --- a/source/blender/draw/intern/draw_manager_data.cc +++ b/source/blender/draw/intern/draw_manager_data.cc @@ -731,7 +731,7 @@ static void drw_call_culling_init(DRWCullingState *cull, Object *ob) mul_m4_v3(ob->object_to_world, cull->bsphere.center); cull->bsphere.radius = len_v3v3(cull->bsphere.center, corner); - /* Bypass test for very large objects (see T67319). */ + /* Bypass test for very large objects (see #67319). */ if (UNLIKELY(cull->bsphere.radius > 1e12)) { cull->bsphere.radius = -1.0f; } @@ -2511,7 +2511,7 @@ void DRW_pass_sort_shgroup_z(DRWPass *pass) /* To be sorted a shgroup needs to have at least one draw command. */ /* FIXME(fclem): In some case, we can still have empty shading group to sort. However their * final order is not well defined. - * (see T76730 & D7729). */ + * (see #76730 & D7729). */ // BLI_assert(handle != 0); DRWObjectMatrix *obmats = static_cast( diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c index b68a1976f806..3be04137695d 100644 --- a/source/blender/draw/intern/draw_manager_exec.c +++ b/source/blender/draw/intern/draw_manager_exec.c @@ -1218,7 +1218,7 @@ static void drw_draw_pass_ex(DRWPass *pass, DST.batch = NULL; } - /* Fix T67342 for some reason. AMD Pro driver bug. */ + /* Fix #67342 for some reason. AMD Pro driver bug. */ if ((DST.state & DRW_STATE_BLEND_CUSTOM) != 0 && GPU_type_matches(GPU_DEVICE_ATI, GPU_OS_ANY, GPU_DRIVER_OFFICIAL)) { drw_state_set(DST.state & ~DRW_STATE_BLEND_CUSTOM); diff --git a/source/blender/draw/intern/draw_manager_text.cc b/source/blender/draw/intern/draw_manager_text.cc index 1244c46e166a..c61ff7d4beb6 100644 --- a/source/blender/draw/intern/draw_manager_text.cc +++ b/source/blender/draw/intern/draw_manager_text.cc @@ -216,7 +216,7 @@ void DRW_text_edit_mesh_measure_stats(ARegion *region, const UnitSettings *unit) { /* Do not use ascii when using non-default unit system, some unit chars are utf8 (micro, square, - * etc.). See bug T36090. + * etc.). See bug #36090. */ DRWTextStore *dt = DRW_text_cache_ensure(); const short txt_flag = DRW_TEXT_CACHE_GLOBALSPACE; diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edit_data.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edit_data.cc index c6ba9283084c..d27af95c1901 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edit_data.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edit_data.cc @@ -44,7 +44,7 @@ static void mesh_render_data_edge_flag(const MeshRenderData *mr, } /* Use active edge color for active face edges because - * specular highlights make it hard to see T55456#510873. + * specular highlights make it hard to see #55456#510873. * * This isn't ideal since it can't be used when mixing edge/face modes * but it's still better than not being able to see the active face. */ diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc index b295a314883f..174223221fa3 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc @@ -229,7 +229,7 @@ static void extract_edituv_stretch_angle_init_subdiv(const DRWSubdivCache *subdi * the data for the mesh when switching to the `UV Editing` workspace, and therefore the position * buffer might not be created yet. In this case, create a buffer it locally, the subdivision * data should already be evaluated if we are here. This can happen if the subsurf modifier is - * only enabled in edit-mode. See T96338. */ + * only enabled in edit-mode. See #96338. */ if (!pos_nor) { const DRWSubdivLooseGeom &loose_geom = subdiv_cache->loose_geom; pos_nor = GPU_vertbuf_calloc(); @@ -245,7 +245,7 @@ static void extract_edituv_stretch_angle_init_subdiv(const DRWSubdivCache *subdi CustomData *cd_ldata = (mr->extract_type == MR_EXTRACT_MESH) ? &mr->me->ldata : &mr->bm->ldata; uint32_t uv_layers = cache->cd_used.uv; - /* HACK to fix T68857 */ + /* HACK to fix #68857 */ if (mr->extract_type == MR_EXTRACT_BMESH && cache->cd_used.edit_uv == 1) { int layer = CustomData_get_active_layer(cd_ldata, CD_PROP_FLOAT2); if (layer != -1) { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc index bd1c98b033f3..971fead52cf0 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_tan.cc @@ -46,7 +46,7 @@ static void extract_tan_init_common(const MeshRenderData *mr, int tan_len = 0; - /* FIXME(T91838): This is to avoid a crash when orco tangent was requested but there are valid + /* FIXME(#91838): This is to avoid a crash when orco tangent was requested but there are valid * uv layers. It would be better to fix the root cause. */ if (tan_layers == 0 && use_orco_tan && CustomData_get_layer_index(cd_ldata, CD_PROP_FLOAT2) != -1) { diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc index 2af8fa40844e..bc73c59f556d 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc @@ -28,7 +28,7 @@ static bool mesh_extract_uv_format_init(GPUVertFormat *format, GPU_vertformat_deinterleave(format); uint32_t uv_layers = cache->cd_used.uv; - /* HACK to fix T68857 */ + /* HACK to fix #68857 */ if (extract_type == MR_EXTRACT_BMESH && cache->cd_used.edit_uv == 1) { int layer = CustomData_get_active_layer(cd_ldata, CD_PROP_FLOAT2); if (layer != -1) { diff --git a/source/blender/draw/intern/shaders/common_gpencil_lib.glsl b/source/blender/draw/intern/shaders/common_gpencil_lib.glsl index 5b79ce71739f..bb55035f9e68 100644 --- a/source/blender/draw/intern/shaders/common_gpencil_lib.glsl +++ b/source/blender/draw/intern/shaders/common_gpencil_lib.glsl @@ -123,7 +123,7 @@ bool gpencil_is_stroke_vertex() * * * WARNING: Max attribute count is actually 14 because OSX OpenGL implementation - * considers gl_VertexID and gl_InstanceID as vertex attribute. (see T74536) + * considers gl_VertexID and gl_InstanceID as vertex attribute. (see #74536) */ vec4 gpencil_vertex(vec4 viewport_size, gpMaterialFlag material_flags, diff --git a/source/blender/draw/intern/shaders/common_hair_lib.glsl b/source/blender/draw/intern/shaders/common_hair_lib.glsl index 0efaad47afb8..4fea4f779908 100644 --- a/source/blender/draw/intern/shaders/common_hair_lib.glsl +++ b/source/blender/draw/intern/shaders/common_hair_lib.glsl @@ -190,7 +190,7 @@ void hair_get_center_pos_tan_binor_time(bool is_persp, # if defined(OS_MAC) && defined(GPU_OPENGL) /* Generate a dummy read to avoid the driver bug with shaders having no - * vertex reads on macOS (T60171) */ + * vertex reads on macOS (#60171) */ wpos.y += dummy * 0.0; # endif diff --git a/source/blender/draw/intern/shaders/common_math_lib.glsl b/source/blender/draw/intern/shaders/common_math_lib.glsl index 6011f3398a65..59eedee7c874 100644 --- a/source/blender/draw/intern/shaders/common_math_lib.glsl +++ b/source/blender/draw/intern/shaders/common_math_lib.glsl @@ -109,7 +109,7 @@ vec3 sqr(vec3 a) { return a * a; } vec4 sqr(vec4 a) { return a * a; } /* Use manual powers for fixed powers. pow() can have unpredictable results on some implementations. - * (see T87369, T87541) */ + * (see #87369, #87541) */ float pow6(float x) { return sqr(sqr(x) * x); } float pow8(float x) { return sqr(sqr(sqr(x))); } diff --git a/source/blender/draw/intern/shaders/draw_resource_finalize_comp.glsl b/source/blender/draw/intern/shaders/draw_resource_finalize_comp.glsl index 511d4e496510..b70cacbc55e1 100644 --- a/source/blender/draw/intern/shaders/draw_resource_finalize_comp.glsl +++ b/source/blender/draw/intern/shaders/draw_resource_finalize_comp.glsl @@ -46,7 +46,7 @@ void main() -bounds_buf[resource_id].bounding_corners[1].xyz; } - /* TODO: Bypass test for very large objects (see T67319). */ + /* TODO: Bypass test for very large objects (see #67319). */ if (bounds_buf[resource_id].bounding_sphere.w > 1e12) { bounds_buf[resource_id].bounding_sphere.w = -1.0; } diff --git a/source/blender/editors/animation/anim_channels_defines.c b/source/blender/editors/animation/anim_channels_defines.c index 07a6f6cda471..000bf04697f8 100644 --- a/source/blender/editors/animation/anim_channels_defines.c +++ b/source/blender/editors/animation/anim_channels_defines.c @@ -5295,7 +5295,7 @@ void ANIM_channel_draw_widgets(const bContext *C, } else { /* Cannot get property/cannot or rename for some reason, so clear rename index - * so that this doesn't hang around, and the name can be drawn normally - T47492 + * so that this doesn't hang around, and the name can be drawn normally - #47492 */ ac->ads->renameIndex = 0; WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN, NULL); diff --git a/source/blender/editors/animation/anim_channels_edit.c b/source/blender/editors/animation/anim_channels_edit.c index e1dc46a8a729..298b48a4a908 100644 --- a/source/blender/editors/animation/anim_channels_edit.c +++ b/source/blender/editors/animation/anim_channels_edit.c @@ -216,7 +216,7 @@ void ANIM_set_active_channel(bAnimContext *ac, static void select_pchan_for_action_group(bAnimContext *ac, bActionGroup *agrp, bAnimListElem *ale) { /* Armatures-Specific Feature: - * See mouse_anim_channels() -> ANIMTYPE_GROUP case for more details (T38737) + * See mouse_anim_channels() -> ANIMTYPE_GROUP case for more details (#38737) */ if ((ac->ads->filterflag & ADS_FILTER_ONLYSEL) == 0) { if ((ale->id) && (GS(ale->id->name) == ID_OB)) { @@ -667,7 +667,7 @@ void ANIM_fcurve_delete_from_animdata(bAnimContext *ac, AnimData *adt, FCurve *f action_groups_remove_channel(act, fcu); /* if group has no more channels, remove it too, - * otherwise can have many dangling groups T33541. + * otherwise can have many dangling groups #33541. */ if (BLI_listbase_is_empty(&agrp->channels)) { BLI_freelinkN(&act->groups, agrp); @@ -2068,7 +2068,7 @@ static void setflag_anim_channels(bAnimContext *ac, * since we only want to apply this to channels we can "see", * and have these affect their relatives * - but for Graph Editor, this gets used also from main region - * where hierarchy doesn't apply T21276. + * where hierarchy doesn't apply #21276. */ if ((ac->spacetype == SPACE_GRAPH) && (ac->regiontype != RGN_TYPE_CHANNELS)) { /* graph editor (case 2) */ @@ -3067,10 +3067,10 @@ static int click_select_channel_object(bContext *C, } } - /* Change active object - regardless of whether it is now selected, see: T37883. + /* Change active object - regardless of whether it is now selected, see: #37883. * * Ensure we exit edit-mode on whatever object was active before - * to avoid getting stuck there, see: T48747. */ + * to avoid getting stuck there, see: #48747. */ ED_object_base_activate_with_mode_exit_if_needed(C, base); /* adds notifier */ if ((adt) && (adt->flag & ADT_UI_SELECTED)) { diff --git a/source/blender/editors/animation/anim_deps.c b/source/blender/editors/animation/anim_deps.c index 22c14983569a..418331f84b1d 100644 --- a/source/blender/editors/animation/anim_deps.c +++ b/source/blender/editors/animation/anim_deps.c @@ -241,7 +241,7 @@ static void animchan_sync_gplayer(bAnimListElem *ale) * The selection flags are used in the Dopesheet only, whereas * the active flag is used everywhere else. Hence, we try to * sync these here so that it all seems to be have as the user - * expects - T50184 + * expects - #50184 * * Assume that we only really do this when the active status changes. * (NOTE: This may prove annoying if it means selection is always lost) diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index 4d33723a297b..ac73b7995f2a 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -223,7 +223,7 @@ static bool actedit_get_context(bAnimContext *ac, SpaceAction *saction) /* sync scene's "selected keys only" flag with our "only selected" flag * - * XXX: This is a workaround for T55525. We shouldn't really be syncing the flags like this, + * XXX: This is a workaround for #55525. We shouldn't really be syncing the flags like this, * but it's a simpler fix for now than also figuring out how the next/prev keyframe * tools should work in the 3D View if we allowed full access to the timeline's * dopesheet filters (i.e. we'd have to figure out where to host those settings, @@ -1360,7 +1360,7 @@ static size_t animfilter_act_group(bAnimContext *ac, * but the group isn't expanded (1)... * (1) this only matters if we actually care about the hierarchy though. * - Hierarchy matters: this hack should be applied - * - Hierarchy ignored: cases like T21276 won't work properly, unless we skip this hack + * - Hierarchy ignored: cases like #21276 won't work properly, unless we skip this hack */ if ( /* Care about hierarchy but group isn't expanded. */ @@ -3121,7 +3121,7 @@ static bool animdata_filter_base_is_ok(bDopeSheet *ads, if (object_mode & OB_MODE_POSE) { /* When in pose-mode handle all pose-mode objects. * This avoids problems with pose-mode where objects may be unselected, - * where a selected bone of an unselected object would be hidden. see: T81922. */ + * where a selected bone of an unselected object would be hidden. see: #81922. */ if (!(base->object->mode & object_mode)) { return false; } @@ -3453,7 +3453,7 @@ size_t ANIM_animdata_filter(bAnimContext *ac, SpaceAction *saction = (SpaceAction *)ac->sl; bDopeSheet *ads = (saction) ? &saction->ads : NULL; - /* specially check for AnimData filter, see T36687. */ + /* specially check for AnimData filter, see #36687. */ if (UNLIKELY(filter_mode & ANIMFILTER_ANIMDATA)) { /* all channels here are within the same AnimData block, hence this special case */ if (LIKELY(obact->adt)) { @@ -3474,7 +3474,7 @@ size_t ANIM_animdata_filter(bAnimContext *ac, { Key *key = (Key *)data; - /* specially check for AnimData filter, see T36687. */ + /* specially check for AnimData filter, see #36687. */ if (UNLIKELY(filter_mode & ANIMFILTER_ANIMDATA)) { /* all channels here are within the same AnimData block, hence this special case */ if (LIKELY(key->adt)) { diff --git a/source/blender/editors/animation/anim_ipo_utils.c b/source/blender/editors/animation/anim_ipo_utils.c index 93d83ff5f8eb..e319f4d8a035 100644 --- a/source/blender/editors/animation/anim_ipo_utils.c +++ b/source/blender/editors/animation/anim_ipo_utils.c @@ -184,7 +184,7 @@ int getname_anim_fcurve(char *name, ID *id, FCurve *fcu) icon = RNA_struct_ui_icon(ptr.type); /* valid path - remove the invalid tag since we now know how to use it saving - * users manual effort to re-enable using "Revive Disabled FCurves" T29629. */ + * users manual effort to re-enable using "Revive Disabled FCurves" #29629. */ fcu->flag &= ~FCURVE_DISABLED; } else { diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c index a2e137f854b0..694eb1f70350 100644 --- a/source/blender/editors/animation/anim_markers.c +++ b/source/blender/editors/animation/anim_markers.c @@ -1350,7 +1350,7 @@ static int ed_marker_select( WM_event_add_notifier(C, NC_SCENE | ND_MARKERS, NULL); WM_event_add_notifier(C, NC_ANIMATION | ND_MARKERS, NULL); - /* allowing tweaks, but needs OPERATOR_FINISHED, otherwise renaming fails, see T25987. */ + /* allowing tweaks, but needs OPERATOR_FINISHED, otherwise renaming fails, see #25987. */ return ret_val | OPERATOR_PASS_THROUGH; } diff --git a/source/blender/editors/animation/drivers.c b/source/blender/editors/animation/drivers.c index f899e41149dd..3dfcd076f17f 100644 --- a/source/blender/editors/animation/drivers.c +++ b/source/blender/editors/animation/drivers.c @@ -195,7 +195,7 @@ static int add_driver_with_target(ReportList *UNUSED(reports), * - For transform properties, we want to automatically use "transform channel" instead * (The only issue is with quaternion rotations vs euler channels...) * - To avoid problems with transform properties depending on the final transform that they - * control (thus creating pseudo-cycles - see T48734), we don't use transform channels + * control (thus creating pseudo-cycles - see #48734), we don't use transform channels * when both the source and destinations are in same places. */ dvar = driver_add_new_variable(driver); diff --git a/source/blender/editors/animation/keyframes_general.c b/source/blender/editors/animation/keyframes_general.c index 49e40b399020..c435983be193 100644 --- a/source/blender/editors/animation/keyframes_general.c +++ b/source/blender/editors/animation/keyframes_general.c @@ -679,7 +679,7 @@ void sample_fcurve(FCurve *fcu) /* If next bezt is also selected, don't start sampling yet, * but instead wait for that one to reconsider, to avoid * changing the curve when sampling consecutive segments - * (T53229) + * (#53229) */ if (i < fcu->totvert - 1) { BezTriple *next = &fcu->bezt[i + 1]; diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c index 96a9604a6f5e..c6e9a62ae2a2 100644 --- a/source/blender/editors/animation/keyframing.c +++ b/source/blender/editors/animation/keyframing.c @@ -2077,7 +2077,7 @@ static int insert_key_menu_invoke(bContext *C, wmOperator *op, const wmEvent *UN /* Show a menu listing all keying-sets, the enum is expanded here to make use of the * operator that accesses the keying-set by name. This is important for the ability - * to assign shortcuts to arbitrarily named keying sets. See T89560. + * to assign shortcuts to arbitrarily named keying sets. See #89560. * These menu items perform the key-frame insertion (not this operator) * hence the #OPERATOR_INTERFACE return. */ uiPopupMenu *pup = UI_popup_menu_begin(C, WM_operatortype_name(op->type, op->ptr), ICON_NONE); @@ -2966,7 +2966,7 @@ static bool object_frame_has_keyframe(Object *ob, float frame, short filter) /* check own animation data - specifically, the action it contains */ if ((ob->adt) && (ob->adt->action)) { - /* T41525 - When the active action is a NLA strip being edited, + /* #41525 - When the active action is a NLA strip being edited, * we need to correct the frame number to "look inside" the * remapped action */ @@ -3167,7 +3167,7 @@ bool ED_autokeyframe_property(bContext *C, if (only_if_property_keyed) { /* NOTE: We use rnaindex instead of fcu->array_index, * because a button may control all items of an array at once. - * E.g., color wheels (see T42567). */ + * E.g., color wheels (see #42567). */ BLI_assert((fcu->array_index == rnaindex) || (rnaindex == -1)); } changed = insert_keyframe(bmain, diff --git a/source/blender/editors/animation/keyingsets.c b/source/blender/editors/animation/keyingsets.c index 3448ba1c0170..a106ecb84e96 100644 --- a/source/blender/editors/animation/keyingsets.c +++ b/source/blender/editors/animation/keyingsets.c @@ -1119,7 +1119,7 @@ int ANIM_apply_keyingset( RNA_id_pointer_create(ksp->id, &id_ptr); if (RNA_path_resolve_property(&id_ptr, ksp->rna_path, &ptr, &prop)) { arraylen = RNA_property_array_length(&ptr, prop); - /* start from start of array, instead of the previously specified index - T48020 */ + /* start from start of array, instead of the previously specified index - #48020 */ i = 0; } } diff --git a/source/blender/editors/armature/armature_edit.c b/source/blender/editors/armature/armature_edit.c index 2ec0ea57e716..0e3748ad661e 100644 --- a/source/blender/editors/armature/armature_edit.c +++ b/source/blender/editors/armature/armature_edit.c @@ -912,7 +912,7 @@ static int armature_switch_direction_exec(bContext *C, wmOperator *UNUSED(op)) armature_tag_select_mirrored(arm); /* Clear BONE_TRANSFORM flags - * - Used to prevent duplicate/canceling operations from occurring T34123. + * - Used to prevent duplicate/canceling operations from occurring #34123. * - #BONE_DONE cannot be used here as that's already used for mirroring. */ armature_clear_swap_done_flags(arm); @@ -929,7 +929,7 @@ static int armature_switch_direction_exec(bContext *C, wmOperator *UNUSED(op)) */ parent = ebo->parent; - /* skip bone if already handled, see T34123. */ + /* skip bone if already handled, see #34123. */ if ((ebo->flag & BONE_TRANSFORM) == 0) { /* only if selected and editable */ if (EBONE_VISIBLE(arm, ebo) && EBONE_EDITABLE(ebo)) { diff --git a/source/blender/editors/armature/armature_naming.c b/source/blender/editors/armature/armature_naming.c index 26ec05cc5035..579583eb4eaa 100644 --- a/source/blender/editors/armature/armature_naming.c +++ b/source/blender/editors/armature/armature_naming.c @@ -337,7 +337,7 @@ void ED_armature_bone_rename(Main *bmain, /* Fix all animdata that may refer to this bone - * we can't just do the ones attached to objects, - * since other ID-blocks may have drivers referring to this bone T29822. */ + * since other ID-blocks may have drivers referring to this bone #29822. */ /* XXX: the ID here is for armatures, * but most bone drivers are actually on the object instead. */ diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c index 90bd59f61bc6..38b982e53426 100644 --- a/source/blender/editors/armature/armature_ops.c +++ b/source/blender/editors/armature/armature_ops.c @@ -151,7 +151,7 @@ void ED_operatormacros_armature(void) /* XXX would it be nicer to just be able to have standard extrude_move, * but set the forked property separate? - * that would require fixing a properties bug T19733. */ + * that would require fixing a properties bug #19733. */ ot = WM_operatortype_append_macro("ARMATURE_OT_extrude_forked", "Extrude Forked", "Create new bones from the selected joints and move them", diff --git a/source/blender/editors/armature/armature_skinning.c b/source/blender/editors/armature/armature_skinning.c index 6fb07dc7da61..3ed384ab820a 100644 --- a/source/blender/editors/armature/armature_skinning.c +++ b/source/blender/editors/armature/armature_skinning.c @@ -162,7 +162,7 @@ static int dgroup_skinnable_cb(Object *ob, Bone *bone, void *datap) defgroup = BKE_object_defgroup_add_name(ob, bone->name); } else if (defgroup->flag & DG_LOCK_WEIGHT) { - /* In case vgroup already exists and is locked, do not modify it here. See T43814. */ + /* In case vgroup already exists and is locked, do not modify it here. See #43814. */ defgroup = NULL; } } @@ -477,7 +477,7 @@ void ED_object_vgroup_calc_from_armature(ReportList *reports, if (defbase_add) { /* It's possible there are DWeights outside the range of the current - * object's deform groups. In this case the new groups won't be empty T33889. */ + * object's deform groups. In this case the new groups won't be empty #33889. */ ED_vgroup_data_clamp_range(ob->data, defbase_tot); } } diff --git a/source/blender/editors/armature/armature_utils.c b/source/blender/editors/armature/armature_utils.c index 0465606e6944..0391f25e922b 100644 --- a/source/blender/editors/armature/armature_utils.c +++ b/source/blender/editors/armature/armature_utils.c @@ -597,7 +597,7 @@ static void armature_finalize_restpose(ListBase *bonelist, ListBase *editbonelis for (curBone = bonelist->first; curBone; curBone = curBone->next) { /* Set bone's local head/tail. * Note that it's important to use final parent's restpose (arm_mat) here, - * instead of setting those values from editbone's matrix (see T46010). */ + * instead of setting those values from editbone's matrix (see #46010). */ if (curBone->parent) { float parmat_inv[4][4]; @@ -749,7 +749,7 @@ void ED_armature_from_edit(Main *bmain, bArmature *arm) /* Fix parenting in a separate pass to ensure ebone->bone connections are valid at this point. * Do not set bone->head/tail here anymore, * using EditBone data for that is not OK since our later fiddling with parent's arm_mat - * (for roll conversion) may have some small but visible impact on locations (T46010). */ + * (for roll conversion) may have some small but visible impact on locations (#46010). */ for (eBone = arm->edbo->first; eBone; eBone = eBone->next) { newBone = eBone->temp.bone; if (eBone->parent) { diff --git a/source/blender/editors/armature/pose_select.c b/source/blender/editors/armature/pose_select.c index 067b86945c16..21938ad8727d 100644 --- a/source/blender/editors/armature/pose_select.c +++ b/source/blender/editors/armature/pose_select.c @@ -230,7 +230,7 @@ bool ED_armature_pose_select_pick_bone(const Scene *scene, */ else if (arm->flag & ARM_HAS_VIZ_DEPS) { /* NOTE: ob not ob_act here is intentional - it's the source of the - * bones being selected [T37247] + * bones being selected [#37247]. */ DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY); } diff --git a/source/blender/editors/armature/pose_transform.c b/source/blender/editors/armature/pose_transform.c index 510718158232..7f384c36af06 100644 --- a/source/blender/editors/armature/pose_transform.c +++ b/source/blender/editors/armature/pose_transform.c @@ -524,7 +524,7 @@ static int pose_visual_transform_apply_exec(bContext *C, wmOperator *UNUSED(op)) * change, thus changing the result we may be trying to record. */ /* NOTE: For some reason `pchan->chan_mat` can't be used here as it gives odd - * rotation/offset, see T38251. + * rotation/offset, see #38251. * Using `pchan->pose_mat` and bringing it back in bone space seems to work as expected! * This matches how visual key-framing works. */ BKE_armature_mat_pose_to_bone(pchan, pchan->pose_mat, pchan_xform_array[i].matrix); diff --git a/source/blender/editors/curve/editcurve_paint.c b/source/blender/editors/curve/editcurve_paint.c index af3d439dd2ed..66fb3cb06a34 100644 --- a/source/blender/editors/curve/editcurve_paint.c +++ b/source/blender/editors/curve/editcurve_paint.c @@ -577,7 +577,7 @@ static bool curve_draw_init(bContext *C, wmOperator *op, bool is_invoke) cdd->vc.obedit = CTX_data_edit_object(C); /* Using an empty stroke complicates logic later, - * it's simplest to disallow early on (see: T94085). */ + * it's simplest to disallow early on (see: #94085). */ if (RNA_collection_is_empty(op->ptr, "stroke")) { MEM_freeN(cdd); BKE_report(op->reports, RPT_ERROR, "The \"stroke\" cannot be empty"); diff --git a/source/blender/editors/gpencil/annotate_paint.c b/source/blender/editors/gpencil/annotate_paint.c index 44a3eae4072c..cea9e4c4c955 100644 --- a/source/blender/editors/gpencil/annotate_paint.c +++ b/source/blender/editors/gpencil/annotate_paint.c @@ -528,7 +528,7 @@ static short annotation_stroke_addpoint(tGPsdata *p, /* store settings */ copy_v2_v2(pt->m_xy, mval); - /* T44932 - Pressure vals are unreliable, so ignore for now */ + /* #44932 - Pressure vals are unreliable, so ignore for now */ pt->pressure = 1.0f; pt->strength = 1.0f; pt->time = (float)(curtime - p->inittime); @@ -544,7 +544,7 @@ static short annotation_stroke_addpoint(tGPsdata *p, /* store settings */ copy_v2_v2(pt->m_xy, mval); - /* T44932 - Pressure vals are unreliable, so ignore for now */ + /* #44932 - Pressure vals are unreliable, so ignore for now */ pt->pressure = 1.0f; pt->strength = 1.0f; pt->time = (float)(curtime - p->inittime); @@ -620,7 +620,7 @@ static short annotation_stroke_addpoint(tGPsdata *p, /* store settings */ copy_v2_v2(pt->m_xy, mval); - /* T44932 - Pressure vals are unreliable, so ignore for now */ + /* #44932 - Pressure vals are unreliable, so ignore for now */ pt->pressure = 1.0f; pt->strength = 1.0f; pt->time = (float)(curtime - p->inittime); @@ -2064,7 +2064,7 @@ static void annotation_draw_apply_event( /* Convert from window-space to area-space mouse coordinates * add any x,y override position for fake events. */ if (p->flags & GP_PAINTFLAG_FIRSTRUN) { - /* The first run may be a drag event, see: T99368. */ + /* The first run may be a drag event, see: #99368. */ WM_event_drag_start_mval_fl(event, p->region, p->mval); p->mval[0] -= x; p->mval[1] -= y; @@ -2136,7 +2136,7 @@ static void annotation_draw_apply_event( /* Hack for pressure sensitive eraser on D+RMB when using a tablet: * The pen has to float over the tablet surface, resulting in - * zero pressure (T47101). Ignore pressure values if floating + * zero pressure (#47101). Ignore pressure values if floating * (i.e. "effectively zero" pressure), and only when the "active" * end is the stylus (i.e. the default when not eraser) */ @@ -2357,7 +2357,7 @@ static tGPsdata *annotation_stroke_begin(bContext *C, wmOperator *op) tGPsdata *p = op->customdata; /* we must check that we're still within the area that we're set up to work from - * otherwise we could crash (see bug T20586) + * otherwise we could crash (see bug #20586) */ if (CTX_wm_area(C) != p->area) { printf("\t\t\tGP - wrong area execution abort!\n"); @@ -2466,7 +2466,7 @@ static int annotation_draw_modal(bContext *C, wmOperator *op, const wmEvent *eve EVT_UPARROWKEY, EVT_ZKEY)) { /* allow some keys: - * - For frame changing T33412. + * - For frame changing #33412. * - For undo (during sketching sessions). */ } @@ -2503,7 +2503,7 @@ static int annotation_draw_modal(bContext *C, wmOperator *op, const wmEvent *eve /* Exit painting mode (and/or end current stroke) * * NOTE: cannot do RIGHTMOUSE (as is standard for canceling) - * as that would break polyline T32647. + * as that would break polyline #32647. */ if (event->val == KM_PRESS && ELEM(event->type, EVT_RETKEY, EVT_PADENTER, EVT_ESCKEY, EVT_SPACEKEY, EVT_EKEY)) { @@ -2516,7 +2516,7 @@ static int annotation_draw_modal(bContext *C, wmOperator *op, const wmEvent *eve * - LEFTMOUSE = standard drawing (all) / straight line drawing (all) / polyline (toolbox * only) * - RIGHTMOUSE = polyline (hotkey) / eraser (all) - * (Disabling RIGHTMOUSE case here results in bugs like T32647) + * (Disabling RIGHTMOUSE case here results in bugs like #32647) * also making sure we have a valid event value, to not exit too early */ if (ELEM(event->type, LEFTMOUSE, RIGHTMOUSE) && ELEM(event->val, KM_PRESS, KM_RELEASE)) { @@ -2704,7 +2704,7 @@ static int annotation_draw_modal(bContext *C, wmOperator *op, const wmEvent *eve else { /* update status indicators - cursor, header, etc. */ annotation_draw_status_indicators(C, p); - /* cursor may have changed outside our control - T44084 */ + /* cursor may have changed outside our control - #44084 */ annotation_draw_cursor_set(p); } diff --git a/source/blender/editors/gpencil/drawgpencil.c b/source/blender/editors/gpencil/drawgpencil.c index 24de50db397c..7041dd25750a 100644 --- a/source/blender/editors/gpencil/drawgpencil.c +++ b/source/blender/editors/gpencil/drawgpencil.c @@ -188,7 +188,7 @@ static void gpencil_draw_stroke_3d(tGPDdraw *tgpw, int keep_size = (int)((tgpw->gpd) && (tgpw->gpd->flag & GP_DATA_STROKE_KEEPTHICKNESS)); gpencil_stroke_data.keep_size = keep_size; gpencil_stroke_data.pixfactor = tgpw->gpd->pixfactor; - /* xray mode always to 3D space to avoid wrong zdepth calculation (T60051) */ + /* xray mode always to 3D space to avoid wrong zdepth calculation (#60051) */ gpencil_stroke_data.xraymode = GP_XRAY_3DSPACE; gpencil_stroke_data.caps_start = tgpw->gps->caps[0]; gpencil_stroke_data.caps_end = tgpw->gps->caps[1]; diff --git a/source/blender/editors/gpencil/gpencil_armature.c b/source/blender/editors/gpencil/gpencil_armature.c index 2b7e09b7f052..664988d395c4 100644 --- a/source/blender/editors/gpencil/gpencil_armature.c +++ b/source/blender/editors/gpencil/gpencil_armature.c @@ -207,7 +207,7 @@ static int dgroup_skinnable_cb(Object *ob, Bone *bone, void *datap) defgroup = BKE_object_defgroup_add_name(ob, bone->name); } else if (defgroup->flag & DG_LOCK_WEIGHT) { - /* In case vgroup already exists and is locked, do not modify it here. See T43814. */ + /* In case vgroup already exists and is locked, do not modify it here. See #43814. */ defgroup = NULL; } } diff --git a/source/blender/editors/gpencil/gpencil_convert.c b/source/blender/editors/gpencil/gpencil_convert.c index 17ec33dc2bd3..5cea5cc0780d 100644 --- a/source/blender/editors/gpencil/gpencil_convert.c +++ b/source/blender/editors/gpencil/gpencil_convert.c @@ -1208,7 +1208,7 @@ static void gpencil_stroke_norm_curve_weights(Curve *cu, const float minmax_weig { const float delta = minmax_weights[0]; - /* when delta == minmax_weights[0] == minmax_weights[1], we get div by zero T35686. */ + /* when delta == minmax_weights[0] == minmax_weights[1], we get div by zero #35686. */ float fac; if (IS_EQF(delta, minmax_weights[1])) { fac = 1.0f; diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c index 5814248f24c2..f5a50e768fc6 100644 --- a/source/blender/editors/gpencil/gpencil_paint.c +++ b/source/blender/editors/gpencil/gpencil_paint.c @@ -764,7 +764,7 @@ static short gpencil_stroke_addpoint(tGPsdata *p, /* store settings */ copy_v2_v2(pt->m_xy, mval); - /* T44932 - Pressure vals are unreliable, so ignore for now */ + /* #44932 - Pressure vals are unreliable, so ignore for now */ pt->pressure = 1.0f; pt->strength = 1.0f; pt->time = (float)(curtime - p->inittime); @@ -780,7 +780,7 @@ static short gpencil_stroke_addpoint(tGPsdata *p, /* store settings */ copy_v2_v2(pt->m_xy, mval); - /* T44932 - Pressure vals are unreliable, so ignore for now */ + /* #44932 - Pressure vals are unreliable, so ignore for now */ pt->pressure = 1.0f; pt->strength = 1.0f; pt->time = (float)(curtime - p->inittime); @@ -2935,7 +2935,7 @@ static void gpencil_draw_apply_event(bContext *C, /* Hack for pressure sensitive eraser on D+RMB when using a tablet: * The pen has to float over the tablet surface, resulting in - * zero pressure (T47101). Ignore pressure values if floating + * zero pressure (#47101). Ignore pressure values if floating * (i.e. "effectively zero" pressure), and only when the "active" * end is the stylus (i.e. the default when not eraser) */ @@ -3343,7 +3343,7 @@ static tGPsdata *gpencil_stroke_begin(bContext *C, wmOperator *op) tGPsdata *p = op->customdata; /* we must check that we're still within the area that we're set up to work from - * otherwise we could crash (see bug T20586) + * otherwise we could crash (see bug #20586) */ if (CTX_wm_area(C) != p->area) { printf("\t\t\tGP - wrong area execution abort!\n"); @@ -3689,7 +3689,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event) if (ISKEYBOARD(event->type)) { if (ELEM(event->type, EVT_LEFTARROWKEY, EVT_DOWNARROWKEY, EVT_RIGHTARROWKEY, EVT_UPARROWKEY)) { /* allow some keys: - * - For frame changing T33412. + * - For frame changing #33412. * - For undo (during sketching sessions). */ } @@ -3735,7 +3735,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event) /* toggle painting mode upon mouse-button movement * - LEFTMOUSE = standard drawing (all) / straight line drawing (all) * - RIGHTMOUSE = eraser (all) - * (Disabling RIGHTMOUSE case here results in bugs like T32647) + * (Disabling RIGHTMOUSE case here results in bugs like #32647) * also making sure we have a valid event value, to not exit too early */ if (ELEM(event->type, LEFTMOUSE, RIGHTMOUSE) && ELEM(event->val, KM_PRESS, KM_RELEASE)) { diff --git a/source/blender/editors/gpencil/gpencil_select.c b/source/blender/editors/gpencil/gpencil_select.c index 0b11d6bf2ba4..05718eb95e09 100644 --- a/source/blender/editors/gpencil/gpencil_select.c +++ b/source/blender/editors/gpencil/gpencil_select.c @@ -2487,7 +2487,7 @@ static int gpencil_select_exec(bContext *C, wmOperator *op) /* check if point is inside */ if (pt_distance <= radius_squared) { - /* only use this point if it is a better match than the current hit - T44685 */ + /* only use this point if it is a better match than the current hit - #44685 */ if (pt_distance < hit_distance) { hit_layer = gpl; hit_stroke = gps_active; diff --git a/source/blender/editors/include/ED_fileselect.h b/source/blender/editors/include/ED_fileselect.h index d4470c017bd5..cf9b423dd7a6 100644 --- a/source/blender/editors/include/ED_fileselect.h +++ b/source/blender/editors/include/ED_fileselect.h @@ -192,7 +192,7 @@ void ED_file_read_bookmarks(void); /** * Support updating the directory even when this isn't the active space - * needed so RNA properties update function isn't context sensitive, see T70255. + * needed so RNA properties update function isn't context sensitive, see #70255. */ void ED_file_change_dir_ex(struct bContext *C, struct ScrArea *area); void ED_file_change_dir(struct bContext *C); diff --git a/source/blender/editors/include/ED_keyframing.h b/source/blender/editors/include/ED_keyframing.h index a53042b70d6a..5d779095d4e4 100644 --- a/source/blender/editors/include/ED_keyframing.h +++ b/source/blender/editors/include/ED_keyframing.h @@ -79,7 +79,7 @@ struct FCurve *ED_action_fcurve_find(struct bAction *act, const char rna_path[], * \brief Lesser Key-framing API call. * * Update integer/discrete flags of the FCurve (used when creating/inserting keyframes, - * but also through RNA when editing an ID prop, see T37103). + * but also through RNA when editing an ID prop, see #37103). */ void update_autoflags_fcurve(struct FCurve *fcu, struct bContext *C, diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h index 248ce8ec6b54..cfb715646711 100644 --- a/source/blender/editors/include/ED_mesh.h +++ b/source/blender/editors/include/ED_mesh.h @@ -88,7 +88,7 @@ void EDBM_mesh_make(struct Object *ob, int select_mode, bool add_key_index); void EDBM_mesh_free_data(struct BMEditMesh *em); /** * \warning This can invalidate the #Mesh runtime cache of other objects (for linked duplicates). - * Most callers should run #DEG_id_tag_update on `ob->data`, see: T46738, T46913. + * Most callers should run #DEG_id_tag_update on `ob->data`, see: #46738, #46913. * This ensures #BKE_object_free_derived_caches runs on all objects that use this mesh. */ void EDBM_mesh_load_ex(struct Main *bmain, struct Object *ob, bool free_data); diff --git a/source/blender/editors/include/ED_undo.h b/source/blender/editors/include/ED_undo.h index 39bbd8adc754..3308391cca48 100644 --- a/source/blender/editors/include/ED_undo.h +++ b/source/blender/editors/include/ED_undo.h @@ -68,7 +68,7 @@ bool ED_undo_is_memfile_compatible(const struct bContext *C); * This is to avoid changes to a property making undo pushes * which are ignored by the undo-system. * For example, changing a brush property isn't stored by sculpt-mode undo steps. - * This workaround is needed until the limitation is removed, see: T61948. + * This workaround is needed until the limitation is removed, see: #61948. */ bool ED_undo_is_legacy_compatible_for_property(struct bContext *C, struct ID *id); @@ -120,7 +120,7 @@ struct MemFile *ED_undosys_stack_memfile_get_active(struct UndoStack *ustack); * with memfile ones, this has to be called manually by relevant undo code. * * \note Only current known case for this is undoing a switch from Object to Sculpt mode (see - * T82388). + * #82388). * * \note Calling this ID by ID is not optimal, as it will loop over all #MemFile.chunks until it * finds the expected one. If this becomes an issue we'll have to add a mapping from session UUID diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h index 57939bd1f465..dc3951ab770b 100644 --- a/source/blender/editors/include/ED_view3d.h +++ b/source/blender/editors/include/ED_view3d.h @@ -245,7 +245,7 @@ typedef enum { * Clamp the edge within the viewport limits defined by * #V3D_PROJ_TEST_CLIP_WIN, #V3D_PROJ_TEST_CLIP_NEAR & #V3D_PROJ_TEST_CLIP_FAR. * This resolves the problem of a visible edge having one of it's vertices - * behind the viewport. See: T32214. + * behind the viewport. See: #32214. * * This is not default behavior as it may be important for the screen-space location * of an edges vertex to represent that vertices location (instead of a location along the edge). @@ -760,7 +760,7 @@ bool ED_view3d_viewplane_get(struct Depsgraph *depsgraph, float *r_pixsize); /** - * Use instead of: `GPU_polygon_offset(rv3d->dist, ...)` see bug T37727. + * Use instead of: `GPU_polygon_offset(rv3d->dist, ...)` see bug #37727. */ void ED_view3d_polygon_offset(const struct RegionView3D *rv3d, float dist); diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index cf2c0ea2ebb1..b04a276feb45 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -903,7 +903,7 @@ bool UI_but_active_only(const struct bContext *C, uiBut *but); /** * \warning This must run after other handlers have been added, - * otherwise the handler won't be removed, see: T71112. + * otherwise the handler won't be removed, see: #71112. */ bool UI_block_active_only_flagged_buttons(const struct bContext *C, struct ARegion *region, @@ -3061,7 +3061,7 @@ int UI_fontstyle_string_width(const struct uiFontStyle *fs, * only applying scale when drawing. This causes problems for fonts since kerning at * smaller sizes often makes them wider than a scaled down version of the larger text. * Resolve this by calculating the text at the on-screen size, - * returning the result scaled back to 1:1. See T92361. + * returning the result scaled back to 1:1. See #92361. */ int UI_fontstyle_string_width_with_block_aspect(const struct uiFontStyle *fs, const char *str, diff --git a/source/blender/editors/interface/eyedroppers/eyedropper_color.cc b/source/blender/editors/interface/eyedroppers/eyedropper_color.cc index 94200e0ab4c9..b051adc6c71d 100644 --- a/source/blender/editors/interface/eyedroppers/eyedropper_color.cc +++ b/source/blender/editors/interface/eyedroppers/eyedropper_color.cc @@ -501,7 +501,7 @@ static int eyedropper_invoke(bContext *C, wmOperator *op, const wmEvent * /*even /* init */ if (eyedropper_init(C, op)) { wmWindow *win = CTX_wm_window(C); - /* Workaround for de-activating the button clearing the cursor, see T76794 */ + /* Workaround for de-activating the button clearing the cursor, see #76794 */ UI_context_active_but_clear(C, win, CTX_wm_region(C)); WM_cursor_modal_set(win, WM_CURSOR_EYEDROPPER); diff --git a/source/blender/editors/interface/eyedroppers/eyedropper_colorband.cc b/source/blender/editors/interface/eyedroppers/eyedropper_colorband.cc index 0f0155529c9c..3b92d2d4cb33 100644 --- a/source/blender/editors/interface/eyedroppers/eyedropper_colorband.cc +++ b/source/blender/editors/interface/eyedroppers/eyedropper_colorband.cc @@ -286,7 +286,7 @@ static int eyedropper_colorband_invoke(bContext *C, wmOperator *op, const wmEven /* init */ if (eyedropper_colorband_init(C, op)) { wmWindow *win = CTX_wm_window(C); - /* Workaround for de-activating the button clearing the cursor, see T76794 */ + /* Workaround for de-activating the button clearing the cursor, see #76794 */ UI_context_active_but_clear(C, win, CTX_wm_region(C)); WM_cursor_modal_set(win, WM_CURSOR_EYEDROPPER); diff --git a/source/blender/editors/interface/eyedroppers/eyedropper_datablock.cc b/source/blender/editors/interface/eyedroppers/eyedropper_datablock.cc index 81b8ca961702..db03a1e3301e 100644 --- a/source/blender/editors/interface/eyedroppers/eyedropper_datablock.cc +++ b/source/blender/editors/interface/eyedroppers/eyedropper_datablock.cc @@ -307,7 +307,7 @@ static int datadropper_invoke(bContext *C, wmOperator *op, const wmEvent * /*eve /* init */ if (datadropper_init(C, op)) { wmWindow *win = CTX_wm_window(C); - /* Workaround for de-activating the button clearing the cursor, see T76794 */ + /* Workaround for de-activating the button clearing the cursor, see #76794 */ UI_context_active_but_clear(C, win, CTX_wm_region(C)); WM_cursor_modal_set(win, WM_CURSOR_EYEDROPPER); diff --git a/source/blender/editors/interface/eyedroppers/eyedropper_depth.cc b/source/blender/editors/interface/eyedroppers/eyedropper_depth.cc index c026f3669ea9..50c85aae494f 100644 --- a/source/blender/editors/interface/eyedroppers/eyedropper_depth.cc +++ b/source/blender/editors/interface/eyedroppers/eyedropper_depth.cc @@ -302,7 +302,7 @@ static int depthdropper_invoke(bContext *C, wmOperator *op, const wmEvent * /*ev /* init */ if (depthdropper_init(C, op)) { wmWindow *win = CTX_wm_window(C); - /* Workaround for de-activating the button clearing the cursor, see T76794 */ + /* Workaround for de-activating the button clearing the cursor, see #76794 */ UI_context_active_but_clear(C, win, CTX_wm_region(C)); WM_cursor_modal_set(win, WM_CURSOR_EYEDROPPER); diff --git a/source/blender/editors/interface/eyedroppers/eyedropper_driver.cc b/source/blender/editors/interface/eyedroppers/eyedropper_driver.cc index b5245fae2a99..9c2510056d16 100644 --- a/source/blender/editors/interface/eyedroppers/eyedropper_driver.cc +++ b/source/blender/editors/interface/eyedroppers/eyedropper_driver.cc @@ -161,7 +161,7 @@ static int driverdropper_invoke(bContext *C, wmOperator *op, const wmEvent * /*e /* init */ if (driverdropper_init(C, op)) { wmWindow *win = CTX_wm_window(C); - /* Workaround for de-activating the button clearing the cursor, see T76794 */ + /* Workaround for de-activating the button clearing the cursor, see #76794 */ UI_context_active_but_clear(C, win, CTX_wm_region(C)); WM_cursor_modal_set(win, WM_CURSOR_EYEDROPPER); diff --git a/source/blender/editors/interface/interface.cc b/source/blender/editors/interface/interface.cc index 583fbf7e3a69..aa5e870623d7 100644 --- a/source/blender/editors/interface/interface.cc +++ b/source/blender/editors/interface/interface.cc @@ -572,7 +572,7 @@ static void ui_block_bounds_calc_popup( /* If given, adjust input coordinates such that they would generate real final popup position. * Needed to handle correctly floating panels once they have been dragged around, - * see T52999. */ + * see #52999. */ if (r_xy) { r_xy[0] = xy[0] + block->rect.xmin - raw_x; r_xy[1] = xy[1] + block->rect.ymin - raw_y; @@ -685,7 +685,7 @@ static int ui_but_calc_float_precision(uiBut *but, double value) int prec = int(ui_but_get_float_precision(but)); /* first check for various special cases: - * * If button is radians, we want additional precision (see T39861). + * * If button is radians, we want additional precision (see #39861). * * If prec is not set, we fallback to a simple default */ if (ui_but_is_unit_radians(but) && prec < 5) { prec = 5; @@ -886,7 +886,7 @@ static void ui_but_update_old_active_from_new(uiBut *oldbut, uiBut *but) } /* copy hardmin for list rows to prevent 'sticking' highlight to mouse position - * when scrolling without moving mouse (see T28432) */ + * when scrolling without moving mouse (see #28432) */ if (ELEM(oldbut->type, UI_BTYPE_ROW, UI_BTYPE_LISTROW)) { oldbut->hardmax = but->hardmax; } @@ -1063,7 +1063,7 @@ bool UI_but_active_only(const bContext *C, ARegion *region, uiBlock *block, uiBu bool UI_block_active_only_flagged_buttons(const bContext *C, ARegion *region, uiBlock *block) { /* Running this command before end-block has run, means buttons that open menus - * won't have those menus correctly positioned, see T83539. */ + * won't have those menus correctly positioned, see #83539. */ BLI_assert(block->endblock); bool done = false; @@ -2130,7 +2130,7 @@ void UI_block_draw(const bContext *C, uiBlock *block) } /* XXX: figure out why invalid coordinates happen when closing render window */ - /* and material preview is redrawn in main window (temp fix for bug T23848) */ + /* and material preview is redrawn in main window (temp fix for bug #23848) */ if (rect.xmin < rect.xmax && rect.ymin < rect.ymax) { ui_draw_but(C, region, &style, but, &rect); } @@ -4690,7 +4690,7 @@ static uiBut *ui_def_but_rna(uiBlock *block, } else if (type == UI_BTYPE_SEARCH_MENU) { if (proptype == PROP_POINTER) { - /* Search buttons normally don't get undo, see: T54580. */ + /* Search buttons normally don't get undo, see: #54580. */ but->flag |= UI_BUT_UNDO; } } @@ -6272,7 +6272,7 @@ void UI_but_func_search_set(uiBut *but, if (search_exec_fn) { #ifdef DEBUG if (but->func) { - /* watch this, can be cause of much confusion, see: T47691 */ + /* watch this, can be cause of much confusion, see: #47691 */ printf("%s: warning, overwriting button callback with search function callback!\n", __func__); } diff --git a/source/blender/editors/interface/interface_align.cc b/source/blender/editors/interface/interface_align.cc index 2f7d4fc68ea3..4ae92e38842d 100644 --- a/source/blender/editors/interface/interface_align.cc +++ b/source/blender/editors/interface/interface_align.cc @@ -396,7 +396,7 @@ void ui_block_align_calc(uiBlock *block, const ARegion *region) /* Note that this is typically less than ~20, and almost always under ~100. * Even so, we can't ensure this value won't exceed available stack memory. - * Fallback to allocation instead of using #alloca, see: T78636. */ + * Fallback to allocation instead of using #alloca, see: #78636. */ ButAlign butal_array_buf[256]; if (num_buttons <= ARRAY_SIZE(butal_array_buf)) { butal_array = butal_array_buf; @@ -537,7 +537,7 @@ static bool buts_are_horiz(uiBut *but1, uiBut *but2) float dx, dy; /* simple case which can fail if buttons shift apart - * with proportional layouts, see: T38602. */ + * with proportional layouts, see: #38602. */ if ((but1->rect.ymin == but2->rect.ymin) && (but1->rect.xmin != but2->rect.xmin)) { return true; } diff --git a/source/blender/editors/interface/interface_anim.cc b/source/blender/editors/interface/interface_anim.cc index 877f2a2af82c..e4263b7fc51d 100644 --- a/source/blender/editors/interface/interface_anim.cc +++ b/source/blender/editors/interface/interface_anim.cc @@ -85,7 +85,7 @@ void ui_but_anim_flag(uiBut *but, const AnimationEvalContext *anim_eval_context) but->flag |= UI_BUT_ANIMATED; - /* T41525 - When the active action is a NLA strip being edited, + /* #41525 - When the active action is a NLA strip being edited, * we need to correct the frame number to "look inside" the * remapped action */ diff --git a/source/blender/editors/interface/interface_context_menu.cc b/source/blender/editors/interface/interface_context_menu.cc index fb6213e13ab1..0d697cb268fa 100644 --- a/source/blender/editors/interface/interface_context_menu.cc +++ b/source/blender/editors/interface/interface_context_menu.cc @@ -44,7 +44,7 @@ #include "WM_types.h" /* This hack is needed because we don't have a good way to - * re-reference keymap items once added: T42944 */ + * re-reference keymap items once added: #42944 */ #define USE_KEYMAP_ADD_HACK /* -------------------------------------------------------------------- */ diff --git a/source/blender/editors/interface/interface_draw.cc b/source/blender/editors/interface/interface_draw.cc index 53a7d896427c..79cfb2c50c98 100644 --- a/source/blender/editors/interface/interface_draw.cc +++ b/source/blender/editors/interface/interface_draw.cc @@ -1798,7 +1798,7 @@ void ui_draw_but_CURVEPROFILE(ARegion *region, } /* Using some extra margin (-1.0f) for the coordinates used to complete the polygon * avoids the profile line crossing itself in some common situations, which can lead to - * incorrect triangulation. See T841183. */ + * incorrect triangulation. See #841183. */ if (add_left_tri && add_bottom_tri) { /* Add left side, bottom left corner, and bottom side points. */ table_coords[tot_points - 3][0] = profile->view_rect.xmin - 1.0f; diff --git a/source/blender/editors/interface/interface_handlers.cc b/source/blender/editors/interface/interface_handlers.cc index 6b2786ed77b1..8649a65057b0 100644 --- a/source/blender/editors/interface/interface_handlers.cc +++ b/source/blender/editors/interface/interface_handlers.cc @@ -94,7 +94,7 @@ /** * Check to avoid very small mouse-moves from jumping away from keyboard navigation, - * while larger mouse motion will override keyboard input, see: T34936. + * while larger mouse motion will override keyboard input, see: #34936. */ #define USE_KEYNAV_LIMIT @@ -140,7 +140,7 @@ * Instead of mapping cursor motion to the min/max, map the motion to the click-step. * * This value is multiplied by the click step to calculate a range to clamp the soft-range by. - * See: T68130 + * See: #68130 */ #define UI_DRAG_MAP_SOFT_RANGE_PIXEL_MAX 1000 @@ -384,7 +384,7 @@ struct uiHandleButtonData { /** * Behave as if #UI_BUT_DISABLED is set (without drawing grayed out). * Needed so non-interactive labels can be activated for the purpose of showing tool-tips, - * without them blocking interaction with nodes, see: T97386. + * without them blocking interaction with nodes, see: #97386. */ bool disable_force; @@ -549,7 +549,7 @@ void ui_pan_to_scroll(const wmEvent *event, int *type, int *val) const int dy = WM_event_absolute_delta_y(event); /* This event should be originally from event->type, - * converting wrong event into wheel is bad, see T33803. */ + * converting wrong event into wheel is bad, see #33803. */ BLI_assert(*type == MOUSEPAN); /* sign differs, reset */ @@ -752,7 +752,7 @@ static uiAfterFunc *ui_afterfunc_new() /** * For executing operators after the button is pressed. - * (some non operator buttons need to trigger operators), see: T37795. + * (some non operator buttons need to trigger operators), see: #37795. * * \param context_but: A button from which to get the context from (`uiBut.context`) for the * operator execution. @@ -932,7 +932,7 @@ static void ui_apply_but_undo(uiBut *but) /* Optionally override undo when undo system doesn't support storing properties. */ if (but->rnapoin.owner_id) { /* Exception for renaming ID data, we always need undo pushes in this case, - * because undo systems track data by their ID, see: T67002. */ + * because undo systems track data by their ID, see: #67002. */ /* Exception for active shape-key, since changing this in edit-mode updates * the shape key from object mode data. */ if (ELEM(but->rnaprop, &rna_ID_name, &rna_Object_active_shape_key_index)) { @@ -949,7 +949,7 @@ static void ui_apply_but_undo(uiBut *but) if (skip_undo == false) { /* XXX: disable all undo pushes from UI changes from sculpt mode as they cause memfile undo - * steps to be written which cause lag: T71434. */ + * steps to be written which cause lag: #71434. */ if (BKE_paintmode_get_active_from_context(static_cast(but->block->evil_C)) == PAINT_MODE_SCULPT) { skip_undo = true; @@ -1261,8 +1261,8 @@ static void ui_apply_but_NUM(bContext *C, uiBut *but, uiHandleButtonData *data) if (data->str) { /* This is intended to avoid unnecessary updates when the value stays the same, however there * are issues with the current implementation. It does not work with multi-button editing - * (T89996) or operator popups where a number button requires an update even if the value is - * unchanged (T89996). + * (#89996) or operator popups where a number button requires an update even if the value is + * unchanged (#89996). * * Trying to detect changes at this level is not reliable. Instead it could be done at the * level of RNA update/set, skipping RNA update if RNA set did not change anything, instead @@ -1517,7 +1517,7 @@ static void ui_multibut_states_apply(bContext *C, uiHandleButtonData *data, uiBl /* Highly unlikely. */ printf("%s: Can't find button\n", __func__); /* While this avoids crashing, multi-button dragging will fail, - * which is still a bug from the user perspective. See T83651. */ + * which is still a bug from the user perspective. See #83651. */ continue; } @@ -1557,7 +1557,7 @@ static void ui_multibut_states_apply(bContext *C, uiHandleButtonData *data, uiBl but->active->value = mbut_state->origvalue + value_delta; } - /* Clamp based on soft limits, see T40154. */ + /* Clamp based on soft limits, see #40154. */ CLAMP(but->active->value, double(but->softmin), double(but->softmax)); } @@ -3370,7 +3370,7 @@ static void ui_textedit_begin(bContext *C, uiBut *but, uiHandleButtonData *data) #ifdef USE_DRAG_MULTINUM /* this can happen from multi-drag */ if (data->applied_interactive) { - /* remove any small changes so canceling edit doesn't restore invalid value: T40538 */ + /* remove any small changes so canceling edit doesn't restore invalid value: #40538 */ data->cancel = true; ui_apply_but(C, but->block, but, data, true); data->cancel = false; @@ -3695,7 +3695,7 @@ static void ui_do_but_textedit( } else if (inbox) { /* if we allow activation on key press, - * it gives problems launching operators T35713. */ + * it gives problems launching operators #35713. */ if (event->val == KM_RELEASE) { button_activate_state(C, but, BUTTON_STATE_EXIT); retval = WM_UI_HANDLER_BREAK; @@ -4689,7 +4689,7 @@ static int ui_do_but_TOG(bContext *C, uiBut *but, uiHandleButtonData *data, cons do_activate = (event->val == KM_RELEASE); } else if (!ui_do_but_extra_operator_icon(C, but, data, event)) { - /* Also use double-clicks to prevent fast clicks to leak to other handlers (T76481). */ + /* Also use double-clicks to prevent fast clicks to leak to other handlers (#76481). */ do_activate = ELEM(event->val, KM_PRESS, KM_DBL_CLICK); } } @@ -5903,7 +5903,7 @@ static int ui_do_but_GRIP( /* NOTE: Having to store org point in window space and recompute it to block "space" each time * is not ideal, but this is a way to hack around behavior of ui_window_to_block(), which * returns different results when the block is inside a panel or not... - * See T37739. + * See #37739. */ int mx = event->xy[0]; @@ -6511,7 +6511,7 @@ static bool ui_numedit_but_HSVCUBE(uiBut *but, ui_color_picker_to_rgb_HSVCUBE_v(hsv_but, hsv, rgb); ui_perceptual_to_scene_linear_space(but, rgb); - /* clamp because with color conversion we can exceed range T34295. */ + /* clamp because with color conversion we can exceed range #34295. */ if (hsv_but->gradient_type == UI_GRAD_V_ALT) { clamp_axis_max_v3(rgb, but->softmax); } @@ -7954,10 +7954,10 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, const wmEvent * * * An example of where this is needed is dragging node-sockets, where dragging a node-socket * could exit the button before the drag threshold was reached, disable the button then break - * handling of the #MOUSEMOVE event preventing the socket being dragged entirely, see: T96255. + * handling of the #MOUSEMOVE event preventing the socket being dragged entirely, see: #96255. * * Region level event handling is responsible for preventing events being passed - * through to parts of the UI that are logically behind this button, see: T92364. */ + * through to parts of the UI that are logically behind this button, see: #92364. */ return WM_UI_HANDLER_CONTINUE; } @@ -8261,7 +8261,7 @@ static void button_activate_state(bContext *C, uiBut *but, uiHandleButtonState s /* Automatic open pull-down block timer. */ if (ELEM(but->type, UI_BTYPE_BLOCK, UI_BTYPE_PULLDOWN, UI_BTYPE_POPOVER) || /* Menu button types may draw as popovers, check for this case - * ignoring other kinds of menus (mainly enums). (see T66538). */ + * ignoring other kinds of menus (mainly enums). (see #66538). */ ((but->type == UI_BTYPE_MENU) && (UI_but_paneltype_get(but) || ui_but_menu_draw_as_popover(but)))) { if (data->used_mouse && !data->autoopentimer) { @@ -9363,7 +9363,7 @@ static int ui_handle_button_event(bContext *C, const wmEvent *event, uiBut *but) * * This is needed to make sure if a button was active, * it stays active while the mouse is over it. - * This avoids adding mouse-moves, see: T33466. */ + * This avoids adding mouse-moves, see: #33466. */ if (ELEM(state_orig, BUTTON_STATE_INIT, BUTTON_STATE_HIGHLIGHT, BUTTON_STATE_WAIT_DRAG)) { if (ui_but_find_mouse_over(region, event) == but) { button_activate_init(C, region, but, BUTTON_ACTIVATE_OVER); @@ -9810,7 +9810,7 @@ static bool ui_mouse_motion_towards_check(uiBlock *block, { BLI_assert(block->flag & (UI_BLOCK_MOVEMOUSE_QUIT | UI_BLOCK_POPOVER)); - /* annoying fix for T36269, this is a bit odd but in fact works quite well + /* annoying fix for #36269, this is a bit odd but in fact works quite well * don't mouse-out of a menu if another menu has been created after it. * if this causes problems we could remove it and check on a different fix - campbell */ if (menu->region->next) { @@ -10606,7 +10606,7 @@ static int ui_handle_menu_event(bContext *C, * popups which you can click again to close. * * Events handled above may have already set the return value, - * don't overwrite them, see: T61015. + * don't overwrite them, see: #61015. */ if ((inside == false) && (menu->menuretval == 0)) { uiSafetyRct *saferct = static_cast(block->saferct.first); @@ -11210,7 +11210,7 @@ static int ui_handle_menus_recursive(bContext *C, if (block->flag & (UI_BLOCK_MOVEMOUSE_QUIT | UI_BLOCK_POPOVER)) { /* when there is a active search button and we close it, - * we need to reinit the mouse coords T35346. */ + * we need to reinit the mouse coords #35346. */ if (ui_region_find_active_but(menu->region) != but) { do_towards_reinit = true; } @@ -11358,15 +11358,15 @@ static int ui_handler_region_menu(bContext *C, const wmEvent *event, void * /*us if ((data->state == BUTTON_STATE_MENU_OPEN) && /* Make sure this popup isn't dragging a button. - * can happen with popovers (see T67882). */ + * can happen with popovers (see #67882). */ (ui_region_find_active_but(data->menu->region) == nullptr) && - /* make sure mouse isn't inside another menu (see T43247) */ + /* make sure mouse isn't inside another menu (see #43247) */ (ui_screen_region_find_mouse_over(screen, event) == nullptr) && ELEM(but->type, UI_BTYPE_PULLDOWN, UI_BTYPE_POPOVER, UI_BTYPE_MENU) && (but_other = ui_but_find_mouse_over(region, event)) && (but != but_other) && ELEM(but_other->type, UI_BTYPE_PULLDOWN, UI_BTYPE_POPOVER, UI_BTYPE_MENU) && /* Hover-opening menu's doesn't work well for buttons over one another - * along the same axis the menu is opening on (see T71719). */ + * along the same axis the menu is opening on (see #71719). */ (((data->menu->direction & (UI_DIR_LEFT | UI_DIR_RIGHT)) && BLI_rctf_isect_rect_x(&but->rect, &but_other->rect, nullptr)) || ((data->menu->direction & (UI_DIR_DOWN | UI_DIR_UP)) && @@ -11452,7 +11452,7 @@ static int ui_popup_handler(bContext *C, const wmEvent *event, void *userdata) * them into blender, even if there's opened popup like splash screen (sergey). * KM_DBL_CLICK: * Continue in case of double click so wm_handlers_do calls handler again with KM_PRESS - * event. This is needed to ensure correct button handling for fast clicking (T47532). + * event. This is needed to ensure correct button handling for fast clicking (#47532). */ retval = WM_UI_HANDLER_CONTINUE; diff --git a/source/blender/editors/interface/interface_layout.cc b/source/blender/editors/interface/interface_layout.cc index 7366c1b051af..c2a786866089 100644 --- a/source/blender/editors/interface/interface_layout.cc +++ b/source/blender/editors/interface/interface_layout.cc @@ -43,7 +43,7 @@ #include "interface_intern.hh" /* Show an icon button after each RNA button to use to quickly set keyframes, - * this is a way to display animation/driven/override status, see T54951. */ + * this is a way to display animation/driven/override status, see #54951. */ #define UI_PROP_DECORATE /* Alternate draw mode where some buttons can use single icon width, * giving more room for the text at the expense of nicely aligned text. */ @@ -1009,7 +1009,7 @@ static uiBut *ui_item_with_label(uiLayout *layout, ) { /* Also avoid setting 'align' if possible. Set the space to zero instead as aligning a large * number of labels can end up aligning thousands of buttons when displaying key-map search (a - * heavy operation), see: T78636. */ + * heavy operation), see: #78636. */ sub = uiLayoutRow(layout, layout->align); sub->space = 0; } @@ -3516,7 +3516,7 @@ void uiItemMenuFN(uiLayout *layout, const char *name, int icon, uiMenuCreateFunc struct MenuItemLevel { wmOperatorCallContext opcontext; /* don't use pointers to the strings because python can dynamically - * allocate strings and free before the menu draws, see T27304. */ + * allocate strings and free before the menu draws, see #27304. */ char opname[OP_MAX_TYPENAME]; char propname[MAX_IDPROP_NAME]; PointerRNA rnapoin; @@ -3960,8 +3960,7 @@ static void ui_litem_layout_radial(uiLayout *litem) /* For the radial layout we will use Matt Ebb's design * for radiation, see http://mattebb.com/weblog/radiation/ - * also the old code at http://developer.blender.org/T5103 - */ + * also the old code at #5103. */ const int pie_radius = U.pie_menu_radius * UI_DPI_FAC; diff --git a/source/blender/editors/interface/interface_ops.cc b/source/blender/editors/interface/interface_ops.cc index 445f6cc53378..6e9d73f9847c 100644 --- a/source/blender/editors/interface/interface_ops.cc +++ b/source/blender/editors/interface/interface_ops.cc @@ -1245,7 +1245,7 @@ bool UI_context_copy_to_selected_list(bContext *C, else if (GS(id->name) == ID_SCE) { /* Sequencer's ID is scene :/ */ /* Try to recursively find an RNA_Sequence ancestor, - * to handle situations like T41062... */ + * to handle situations like #41062... */ if ((*r_path = RNA_path_resolve_from_type_to_property(ptr, prop, &RNA_Sequence)) != nullptr) { /* Special case when we do this for 'Sequence.lock'. diff --git a/source/blender/editors/interface/interface_panel.cc b/source/blender/editors/interface/interface_panel.cc index 28aae7d779fe..48fa0b9f0a33 100644 --- a/source/blender/editors/interface/interface_panel.cc +++ b/source/blender/editors/interface/interface_panel.cc @@ -1486,7 +1486,7 @@ void UI_panel_category_draw_all(ARegion *region, const char *category_id_active) GPU_blend(GPU_BLEND_NONE); - /* Not essential, but allows events to be handled right up to the region edge (T38171). */ + /* Not essential, but allows events to be handled right up to the region edge (#38171). */ if (is_left) { pc_dyn->rect.xmin = v2d->mask.xmin; } @@ -2320,7 +2320,7 @@ int ui_handler_panel_region(bContext *C, UI_panel_category_active_set(region, pc_dyn->idname); ED_region_tag_redraw(region); - /* Reset scroll to the top (T38348). */ + /* Reset scroll to the top (#38348). */ UI_view2d_offset(®ion->v2d, -1.0f, 1.0f); retval = WM_UI_HANDLER_BREAK; diff --git a/source/blender/editors/interface/interface_region_menu_popup.cc b/source/blender/editors/interface/interface_region_menu_popup.cc index c02b13998683..7da9cbeb37bf 100644 --- a/source/blender/editors/interface/interface_region_menu_popup.cc +++ b/source/blender/editors/interface/interface_region_menu_popup.cc @@ -408,7 +408,7 @@ static uiPopupBlockHandle *ui_popup_menu_create( #if 0 /* if this is an rna button then we can assume its an enum * flipping enums is generally not good since the order can be - * important T28786. */ + * important #28786. */ if (but->rnaprop && RNA_property_type(but->rnaprop) == PROP_ENUM) { pup->block->flag |= UI_BLOCK_NO_FLIP; } @@ -745,7 +745,7 @@ void UI_popup_block_close(bContext *C, wmWindow *win, uiBlock *block) ui_popup_block_free(C, block->handle); /* In the case we have nested popups, - * closing one may need to redraw another, see: T48874 */ + * closing one may need to redraw another, see: #48874 */ LISTBASE_FOREACH (ARegion *, region, &screen->regionbase) { ED_region_tag_refresh_ui(region); } diff --git a/source/blender/editors/interface/interface_region_popup.cc b/source/blender/editors/interface/interface_region_popup.cc index 520c3e9dc820..7943e7dc6fa8 100644 --- a/source/blender/editors/interface/interface_region_popup.cc +++ b/source/blender/editors/interface/interface_region_popup.cc @@ -48,7 +48,7 @@ void ui_popup_translate(ARegion *region, const int mdiff[2]) /* update blocks */ LISTBASE_FOREACH (uiBlock *, block, ®ion->uiblocks) { uiPopupBlockHandle *handle = block->handle; - /* Make empty, will be initialized on next use, see T60608. */ + /* Make empty, will be initialized on next use, see #60608. */ BLI_rctf_init(&handle->prev_block_rect, 0, 0, 0, 0); LISTBASE_FOREACH (uiSafetyRct *, saferct, &block->saferct) { @@ -214,7 +214,7 @@ static void ui_popup_block_position(wmWindow *window, /* Compute offset based on direction. */ float offset_x = 0, offset_y = 0; - /* Ensure buttons don't come between the parent button and the popup, see: T63566. */ + /* Ensure buttons don't come between the parent button and the popup, see: #63566. */ const float offset_overlap = max_ff(U.pixelsize, 1.0f); if (dir1 == UI_DIR_LEFT) { diff --git a/source/blender/editors/interface/interface_template_search_menu.cc b/source/blender/editors/interface/interface_template_search_menu.cc index e953119dfdcf..547811ef1f81 100644 --- a/source/blender/editors/interface/interface_template_search_menu.cc +++ b/source/blender/editors/interface/interface_template_search_menu.cc @@ -468,7 +468,7 @@ static MenuSearch_Data *menu_items_from_ui_create( /* Exclude context menus because: * - The menu items are available elsewhere (and will show up multiple times). * - Menu items depend on exact context, making search results unpredictable - * (exact number of items selected for example). See design doc T74158. + * (exact number of items selected for example). See design doc #74158. * There is one exception, * as the outliner only exposes functionality via the context menu. */ GHashIterator iter; @@ -897,7 +897,7 @@ static MenuSearch_Data *menu_items_from_ui_create( * unless searching for something that isn't already in a menu (or scroll down). * * Keep this behind a developer only check: - * - Many operators need options to be set to give useful results, see: T74157. + * - Many operators need options to be set to give useful results, see: #74157. * - User who really prefer to list all operators can use #WM_OT_search_operator. */ if (U.flag & USER_DEVELOPER_UI) { diff --git a/source/blender/editors/interface/interface_templates.cc b/source/blender/editors/interface/interface_templates.cc index 7b8fb7344b49..42c4bfd983e1 100644 --- a/source/blender/editors/interface/interface_templates.cc +++ b/source/blender/editors/interface/interface_templates.cc @@ -2813,7 +2813,7 @@ static eAutoPropButsReturn template_operator_property_buts_draw_single( /* no undo for buttons for operator redo panels */ UI_but_flag_disable(but, UI_BUT_UNDO); - /* only for popups, see T36109. */ + /* only for popups, see #36109. */ /* if button is operator's default property, and a text-field, enable focus for it * - this is used for allowing operators with popups to rename stuff with fewer clicks @@ -6553,12 +6553,12 @@ void uiTemplateKeymapItemProperties(uiLayout *layout, PointerRNA *ptr) /* attach callbacks to compensate for missing properties update, * we don't know which keymap (item) is being modified there */ for (; but; but = but->next) { - /* operator buttons may store props for use (file selector, T36492) */ + /* operator buttons may store props for use (file selector, #36492) */ if (but->rnaprop) { UI_but_func_set(but, keymap_item_modified, ptr->data, nullptr); /* Otherwise the keymap will be re-generated which we're trying to edit, - * see: T47685 */ + * see: #47685 */ UI_but_flag_enable(but, UI_BUT_UPDATE_DELAY); } } diff --git a/source/blender/editors/interface/interface_utils.cc b/source/blender/editors/interface/interface_utils.cc index 4835e4c4f7fa..af3e31837f7a 100644 --- a/source/blender/editors/interface/interface_utils.cc +++ b/source/blender/editors/interface/interface_utils.cc @@ -978,7 +978,7 @@ void UI_butstore_free(uiBlock *block, uiButStore *bs_handle) * which then can't use the previous buttons state * ('ui_but_update_from_old_block' fails to find a match), * keeping the active button in the old block holding a reference - * to the button-state in the new block: see T49034. + * to the button-state in the new block: see #49034. * * Ideally we would manage moving the 'uiButStore', keeping a correct state. * All things considered this is the most straightforward fix - Campbell. diff --git a/source/blender/editors/interface/interface_widgets.cc b/source/blender/editors/interface/interface_widgets.cc index b0de628f0b11..086b583d9363 100644 --- a/source/blender/editors/interface/interface_widgets.cc +++ b/source/blender/editors/interface/interface_widgets.cc @@ -1186,7 +1186,7 @@ void UI_widgetbase_draw_cache_end() static bool draw_widgetbase_batch_skip_draw_cache() { /* MacOS is known to have issues on Mac Mini and MacBook Pro with Intel Iris GPU. - * For example, T78307. */ + * For example, #78307. */ if (GPU_type_matches_ex(GPU_DEVICE_INTEL, GPU_OS_MAC, GPU_DRIVER_ANY, GPU_BACKEND_OPENGL)) { return true; } @@ -2133,7 +2133,7 @@ static void widget_draw_text(const uiFontStyle *fstyle, int pos_x = rect->xmin + font_xofs + bounds.xmin + (bounds.xmax - bounds.xmin - ul_width) / 2; int pos_y = rect->ymin + font_yofs + bounds.ymin - U.pixelsize; - /* Use text output because direct drawing doesn't always work. See T89246. */ + /* Use text output because direct drawing doesn't always work. See #89246. */ BLF_position(fstyle->uifont_id, float(pos_x), pos_y, 0.0f); BLF_color4ubv(fstyle->uifont_id, wcol->text); BLF_draw(fstyle->uifont_id, "_", 2); @@ -2585,7 +2585,7 @@ static void widget_state_numslider(uiWidgetType *wt, if (color_blend != nullptr) { /* Set the slider 'item' so that it reflects state settings too. * De-saturate so the color of the slider doesn't conflict with the blend color, - * which can make the color hard to see when the slider is set to full (see T66102). */ + * which can make the color hard to see when the slider is set to full (see #66102). */ wt->wcol.item[0] = wt->wcol.item[1] = wt->wcol.item[2] = rgb_to_grayscale_byte(wt->wcol.item); color_blend_v3_v3(wt->wcol.item, color_blend, wcol_state->blend); color_ensure_contrast_v3(wt->wcol.item, wt->wcol.inner, 30); diff --git a/source/blender/editors/interface/view2d.cc b/source/blender/editors/interface/view2d.cc index 51a3bd008af0..a8d5b1ad22c9 100644 --- a/source/blender/editors/interface/view2d.cc +++ b/source/blender/editors/interface/view2d.cc @@ -150,7 +150,7 @@ static void view2d_masks(View2D *v2d, const rcti *mask_scroll) } /* Do not use mapped scroll here because we want to update scroller rects - * even if they are not displayed. For initialization purposes. See T75003. */ + * even if they are not displayed. For initialization purposes. See #75003. */ scroll = v2d->scroll; /* Scrollers are based off region-size: @@ -1034,7 +1034,7 @@ void UI_view2d_zoom_cache_reset(void) return; } /* While scaling we can accumulate fonts at many sizes (~20 or so). - * Not an issue with embedded font, but can use over 500Mb with i18n ones! See T38244. */ + * Not an issue with embedded font, but can use over 500Mb with i18n ones! See #38244. */ /* NOTE: only some views draw text, we could check for this case to avoid cleaning cache. */ BLF_cache_clear(); diff --git a/source/blender/editors/interface/view2d_ops.cc b/source/blender/editors/interface/view2d_ops.cc index b76f5f1e49fd..37e5626b2040 100644 --- a/source/blender/editors/interface/view2d_ops.cc +++ b/source/blender/editors/interface/view2d_ops.cc @@ -1858,7 +1858,7 @@ static void scroller_activate_init(bContext *C, UI_view2d_scrollers_calc(v2d, nullptr, &scrollers); /* Use a union of 'cur' & 'tot' in case the current view is far outside 'tot'. In this cases - * moving the scroll bars has far too little effect and the view can get stuck T31476. */ + * moving the scroll bars has far too little effect and the view can get stuck #31476. */ rctf tot_cur_union = v2d->tot; BLI_rctf_union(&tot_cur_union, &v2d->cur); diff --git a/source/blender/editors/io/io_alembic.c b/source/blender/editors/io/io_alembic.c index 100d56a6b0db..10857f534140 100644 --- a/source/blender/editors/io/io_alembic.c +++ b/source/blender/editors/io/io_alembic.c @@ -633,7 +633,7 @@ static int wm_alembic_import_exec(bContext *C, wmOperator *op) } } - /* Switch out of edit mode to avoid being stuck in it (T54326). */ + /* Switch out of edit mode to avoid being stuck in it (#54326). */ Object *obedit = CTX_data_edit_object(C); if (obedit) { ED_object_mode_set(C, OB_MODE_OBJECT); diff --git a/source/blender/editors/io/io_usd.c b/source/blender/editors/io/io_usd.c index e6426732584c..580fd23a4271 100644 --- a/source/blender/editors/io/io_usd.c +++ b/source/blender/editors/io/io_usd.c @@ -413,7 +413,7 @@ static int wm_usd_import_exec(bContext *C, wmOperator *op) int offset = 0; int sequence_len = 1; - /* Switch out of edit mode to avoid being stuck in it (T54326). */ + /* Switch out of edit mode to avoid being stuck in it (#54326). */ Object *obedit = CTX_data_edit_object(C); if (obedit) { ED_object_mode_set(C, OB_MODE_EDIT); diff --git a/source/blender/editors/mesh/editmesh_extrude_spin_gizmo.c b/source/blender/editors/mesh/editmesh_extrude_spin_gizmo.c index 19e23f4f2123..e2f5bdacac79 100644 --- a/source/blender/editors/mesh/editmesh_extrude_spin_gizmo.c +++ b/source/blender/editors/mesh/editmesh_extrude_spin_gizmo.c @@ -455,7 +455,7 @@ void MESH_GGT_spin(struct wmGizmoGroupType *gzgt) gzgt->poll = ED_gizmo_poll_or_unlink_delayed_from_tool; gzgt->setup = gizmo_mesh_spin_init_setup; /* This works well with right click selection but overrides left-mouse selection - * when clicking which is needed to create a full 360 degree revolution, see: T89912. */ + * when clicking which is needed to create a full 360 degree revolution, see: #89912. */ // gzgt->setup_keymap = WM_gizmogroup_setup_keymap_generic_maybe_drag; gzgt->refresh = gizmo_mesh_spin_init_refresh; gzgt->message_subscribe = gizmo_mesh_spin_init_message_subscribe; diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index b7129b4b4d4a..736555d678cd 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -69,7 +69,7 @@ #define KMAXDIST (10 * U.dpi_fac) /* Max mouse distance from edge before not detecting it. */ /* WARNING: Knife float precision is fragile: - * Be careful before making changes here see: (T43229, T42864, T42459, T41164). + * Be careful before making changes here see: (#43229, #42864, #42459, #41164). */ #define KNIFE_FLT_EPS 0.00001f #define KNIFE_FLT_EPS_SQUARED (KNIFE_FLT_EPS * KNIFE_FLT_EPS) @@ -198,7 +198,7 @@ typedef struct KnifeObjectInfo { * Optionally allocate triangle indices, these are needed for non-interactive knife * projection as multiple cuts are made without the BVH being updated. * Using these indices the it's possible to access `cagecos` even if the face has been cut - * and the loops in `em->looptris` no longer refer to the original triangles, see: T97153. + * and the loops in `em->looptris` no longer refer to the original triangles, see: #97153. */ const int (*tri_indices)[3]; @@ -2684,7 +2684,7 @@ static bool coinciding_edges(BMEdge *e1, BMEdge *e2) /* Callback used in point_is_visible to exclude hits on the faces that are the same * as or contain the hitting element (which is in user_data). - * Also (see T44492) want to exclude hits on faces that butt up to the hitting element + * Also (see #44492) want to exclude hits on faces that butt up to the hitting element * (e.g., when you double an edge by an edge split). */ static bool bm_ray_cast_cb_elem_not_in_face_check(BMFace *f, void *user_data) @@ -2975,10 +2975,10 @@ static void knife_find_line_hits(KnifeTool_OpData *kcd) face_tol = KNIFE_FLT_EPS_PX_FACE; } else { - /* Use 1/100th of a pixel, see T43896 (too big), T47910 (too small). + /* Use 1/100th of a pixel, see #43896 (too big), #47910 (too small). * * Update, leave this as is until we investigate not using pixel coords - * for geometry calculations: T48023. */ + * for geometry calculations: #48023. */ vert_tol = line_tol = face_tol = 0.5f; } @@ -3017,7 +3017,7 @@ static void knife_find_line_hits(KnifeTool_OpData *kcd) /* If this isn't from an existing BMVert, it may have been added to a BMEdge originally. * Knowing if the hit comes from an edge is important for edge-in-face checks later on. - * See: #knife_add_single_cut -> #knife_verts_edge_in_face, T42611. */ + * See: #knife_add_single_cut -> #knife_verts_edge_in_face, #42611. */ if (kfe_hit) { hit.kfe = kfe_hit; } @@ -4082,7 +4082,7 @@ static void knifetool_init(ViewContext *vc, const bool is_interactive) { /* Needed so multiple non-interactive cuts (also called knife-project) - * doesn't access indices of loops that were created by cutting, see: T97153. */ + * doesn't access indices of loops that were created by cutting, see: #97153. */ bool use_tri_indices = !is_interactive; kcd->vc = *vc; @@ -4303,7 +4303,7 @@ static void knifetool_finish_single_pre(KnifeTool_OpData *kcd, Object *ob) /** * A post version is needed to delay recalculating tessellation after making cuts. - * Without this, knife-project can't use the BVH tree to select geometry after a cut, see: T98349. + * Without this, knife-project can't use the BVH tree to select geometry after a cut, see: #98349. */ static void knifetool_finish_single_post(KnifeTool_OpData *UNUSED(kcd), Object *ob) { @@ -4322,7 +4322,7 @@ static void knifetool_finish_ex(KnifeTool_OpData *kcd) { /* Separate pre/post passes are needed because `em->looptris` recalculation from the 'post' pass * causes triangle indices in #KnifeTool_OpData.bvh to get out of sync. - * So perform all the cuts before doing any mesh recalculation, see: T101721. */ + * So perform all the cuts before doing any mesh recalculation, see: #101721. */ for (uint ob_index = 0; ob_index < kcd->objects_len; ob_index++) { Object *ob = kcd->objects[ob_index]; knifetool_finish_single_pre(kcd, ob); diff --git a/source/blender/editors/mesh/editmesh_loopcut.c b/source/blender/editors/mesh/editmesh_loopcut.c index 9a91d7836fea..b3a74be6f0cf 100644 --- a/source/blender/editors/mesh/editmesh_loopcut.c +++ b/source/blender/editors/mesh/editmesh_loopcut.c @@ -176,7 +176,7 @@ static void ringsel_finish(bContext *C, wmOperator *op) /* Enable grid-fill, so that intersecting loop-cut works as one would expect. * Note though that it will break edge-slide in this specific case. - * See T31939. */ + * See #31939. */ BM_mesh_esubdivide(em->bm, BM_ELEM_SELECT, smoothness, @@ -193,7 +193,7 @@ static void ringsel_finish(bContext *C, wmOperator *op) 0); /* when used in a macro the tessfaces will be recalculated anyway, - * this is needed here because modifiers depend on updated tessellation, see T45920 */ + * this is needed here because modifiers depend on updated tessellation, see #45920 */ EDBM_update(lcd->ob->data, &(const struct EDBMUpdate_Params){ .calc_looptri = true, diff --git a/source/blender/editors/mesh/editmesh_mask_extract.cc b/source/blender/editors/mesh/editmesh_mask_extract.cc index cea882b0db7d..83580b328840 100644 --- a/source/blender/editors/mesh/editmesh_mask_extract.cc +++ b/source/blender/editors/mesh/editmesh_mask_extract.cc @@ -289,7 +289,7 @@ static int paint_mask_extract_exec(bContext *C, wmOperator *op) * the OPTYPE_UNDO flag; having an initial undo step here * is just needed to preserve the active object pointer. * - * Fixes T103261. + * Fixes #103261. */ ED_undo_push_op(C, op); diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index 533b2b43b164..cbc217fe5ae3 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -768,7 +768,7 @@ static int edbm_rip_invoke__vert(bContext *C, const wmEvent *event, Object *obed if (do_fill) { /* Only needed when filling... * Also, we never want to tag best edge, - * that one won't change during split. See T44618. */ + * that one won't change during split. See #44618. */ if (larr[larr_len]->e == e_best) { BM_elem_flag_enable(larr[larr_len]->prev->e, BM_ELEM_TAG); } diff --git a/source/blender/editors/mesh/editmesh_select.cc b/source/blender/editors/mesh/editmesh_select.cc index b911da376b4b..94c2e3352b35 100644 --- a/source/blender/editors/mesh/editmesh_select.cc +++ b/source/blender/editors/mesh/editmesh_select.cc @@ -5203,7 +5203,7 @@ static int verg_radial(const void *va, const void *vb) * This function leaves faces tagged which are a part of the new region. * * \note faces already tagged are ignored, to avoid finding the same regions twice: - * important when we have regions with equal face counts, see: T40309 + * important when we have regions with equal face counts, see: #40309 */ static int loop_find_regions(BMEditMesh *em, const bool selbigger) { diff --git a/source/blender/editors/mesh/editmesh_select_similar.c b/source/blender/editors/mesh/editmesh_select_similar.c index d9721db326a1..78a54c978557 100644 --- a/source/blender/editors/mesh/editmesh_select_similar.c +++ b/source/blender/editors/mesh/editmesh_select_similar.c @@ -1427,7 +1427,7 @@ void MESH_OT_select_similar(wmOperatorType *ot) RNA_def_enum(ot->srna, "compare", prop_similar_compare_types, SIM_CMP_EQ, "Compare", ""); prop = RNA_def_float(ot->srna, "threshold", 0.0f, 0.0f, 1.0f, "Threshold", "", 0.0f, 1.0f); - /* Very small values are needed sometimes, similar area of small faces for e.g: see T87823 */ + /* Very small values are needed sometimes, similar area of small faces for e.g: see #87823 */ RNA_def_property_ui_range(prop, 0.0, 1.0, 0.01, 5); } diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index caa94a3f49dd..2c13d09aa4fe 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -849,7 +849,7 @@ static BMElem *edbm_add_edge_face_exec__tricky_extend_sel(BMesh *bm) (BM_edge_share_face_check(e, ed_pair_v1[0]) == false) && (BM_edge_share_face_check(e, ed_pair_v2[0]) == false)) || -# if 1 /* better support mixed cases T37203. */ +# if 1 /* better support mixed cases #37203. */ ((edbm_add_edge_face_exec__vert_edge_lookup(e->v1, e, ed_pair_v1, 2, BM_edge_is_wire) == 1) && (edbm_add_edge_face_exec__vert_edge_lookup( @@ -5184,7 +5184,7 @@ static int edbm_fill_grid_exec(bContext *C, wmOperator *op) int offset; /* Only reuse on redo because these settings need to match the current selection. - * We never want to use them on other geometry, repeat last for eg, see: T60777. */ + * We never want to use them on other geometry, repeat last for eg, see: #60777. */ if (((op->flag & OP_IS_INVOKE) || (op->flag & OP_IS_REPEAT_LAST) == 0) && RNA_property_is_set(op->ptr, prop_span)) { span = RNA_property_int_get(op->ptr, prop_span); @@ -8774,7 +8774,7 @@ static int edbm_point_normals_modal(bContext *C, wmOperator *op, const wmEvent * } /* If we allow other tools to run, we can't be sure if they will re-allocate - * the data this operator uses, see: T68159. + * the data this operator uses, see: #68159. * Free the data here, then use #point_normals_ensure to add it back on demand. */ if (ret == OPERATOR_PASS_THROUGH) { /* Don't free on mouse-move, causes creation/freeing of the loop data in an inefficient way. */ @@ -9055,7 +9055,7 @@ static int normals_split_merge(bContext *C, const bool do_merge) BKE_editmesh_lnorspace_update(em, obedit->data); /* Note that we need temp lnor editing data for all loops of all affected vertices, since by - * setting some faces/edges as smooth we are going to change clnors spaces... See also T65809. + * setting some faces/edges as smooth we are going to change clnors spaces... See also #65809. */ BMLoopNorEditDataArray *lnors_ed_arr = do_merge ? BM_loop_normal_editdata_array_init(bm, true) : diff --git a/source/blender/editors/mesh/editmesh_undo.cc b/source/blender/editors/mesh/editmesh_undo.cc index 565ce28a3c17..2278a96c0776 100644 --- a/source/blender/editors/mesh/editmesh_undo.cc +++ b/source/blender/editors/mesh/editmesh_undo.cc @@ -92,7 +92,7 @@ struct UndoMesh { /** \note * This isn't a perfect solution, if you edit keys and change shapes this works well - * (fixing T32442), but editing shape keys, going into object mode, removing or changing their + * (fixing #32442), but editing shape keys, going into object mode, removing or changing their * order, then go back into editmode and undo will give issues - where the old index will be * out of sync with the new object index. * @@ -156,7 +156,7 @@ static void um_arraystore_cd_compact(CustomData *cdata, * Unfortunately we can't compare dynamic layer types as they contain allocated pointers, * which burns CPU cycles looking for duplicate data that doesn't exist. * The array data isn't comparable once copied from the mesh, - * this bottlenecks on high poly meshes, see T84114. + * this bottlenecks on high poly meshes, see #84114. * * Notes: * diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c index 94567919316c..b9cc57791396 100644 --- a/source/blender/editors/mesh/editmesh_utils.c +++ b/source/blender/editors/mesh/editmesh_utils.c @@ -294,7 +294,7 @@ void EDBM_mesh_load_ex(Main *bmain, Object *ob, bool free_data) Mesh *me = ob->data; BMesh *bm = me->edit_mesh->bm; - /* Workaround for T42360, 'ob->shapenr' should be 1 in this case. + /* Workaround for #42360, 'ob->shapenr' should be 1 in this case. * however this isn't synchronized between objects at the moment. */ if (UNLIKELY((ob->shapenr == 0) && (me->key && !BLI_listbase_is_empty(&me->key->block)))) { bm->shapenr = 1; @@ -958,7 +958,7 @@ static bool seam_connected(BMLoop *loop_a, BMLoop *loop_b, GSet *visited, int cd loop_a->e, luv_anchor, luv_next_fan, loop_b, visited, cd_loop_uv_offset); if (!result) { /* Search around `loop_a` in the opposite direction, as one of the edges may be delimited by - * a boundary, seam or disjoint UV, or itself be one of these. See: T103670, T103787. */ + * a boundary, seam or disjoint UV, or itself be one of these. See: #103670, #103787. */ const float *luv_prev_fan = BM_ELEM_CD_GET_FLOAT_P(loop_a->prev, cd_loop_uv_offset); result = seam_connected_recursive( loop_a->prev->e, luv_anchor, luv_prev_fan, loop_b, visited, cd_loop_uv_offset); @@ -1428,7 +1428,7 @@ BMEdge *EDBM_verts_mirror_get_edge(BMEditMesh *em, BMEdge *e) BMVert *v1_mirr, *v2_mirr; if ((v1_mirr = EDBM_verts_mirror_get(em, e->v1)) && (v2_mirr = EDBM_verts_mirror_get(em, e->v2)) && - /* While highly unlikely, a zero length central edges vertices can match, see T89342. */ + /* While highly unlikely, a zero length central edges vertices can match, see #89342. */ LIKELY(v1_mirr != v2_mirr)) { return BM_edge_exists(v1_mirr, v2_mirr); } diff --git a/source/blender/editors/mesh/meshtools.cc b/source/blender/editors/mesh/meshtools.cc index b2cbb8c47eac..1534d2c14644 100644 --- a/source/blender/editors/mesh/meshtools.cc +++ b/source/blender/editors/mesh/meshtools.cc @@ -421,7 +421,7 @@ int ED_mesh_join_objects_exec(bContext *C, wmOperator *op) /* Clear any run-time data. * Even though this mesh wont typically have run-time data, the Python API can for e.g. - * create loop-triangle cache here, which is confusing when left in the mesh, see: T90798. */ + * create loop-triangle cache here, which is confusing when left in the mesh, see: #90798. */ BKE_mesh_runtime_clear_geometry(me); /* new material indices and material array */ @@ -601,7 +601,7 @@ int ED_mesh_join_objects_exec(bContext *C, wmOperator *op) /* Add back active mesh first. * This allows to keep things similar as they were, as much as possible * (i.e. data from active mesh will remain first ones in new result of the merge, - * in same order for CD layers, etc). See also T50084. + * in same order for CD layers, etc). See also #50084. */ join_mesh_single(depsgraph, bmain, diff --git a/source/blender/editors/object/object_add.cc b/source/blender/editors/object/object_add.cc index 3035fdd381bf..3d24e09b53cd 100644 --- a/source/blender/editors/object/object_add.cc +++ b/source/blender/editors/object/object_add.cc @@ -2846,7 +2846,7 @@ static Base *duplibase_for_convert( * having same 'family name' as orig ones, they will affect end result of meta-ball computation. * For until we get rid of that name-based thingy in meta-balls, that should do the trick * (this is weak, but other solution (to change name of `obn`) is even worse IMHO). - * See T65996. */ + * See #65996. */ const bool is_meta_ball = (obn->type == OB_MBALL); void *obdata = obn->data; if (is_meta_ball) { @@ -2930,7 +2930,7 @@ static int object_convert_exec(bContext *C, wmOperator *op) /* Ensure we get all meshes calculated with a sufficient data-mask, * needed since re-evaluating single modifiers causes bugs if they depend - * on other objects data masks too, see: T50950. */ + * on other objects data masks too, see: #50950. */ { LISTBASE_FOREACH (CollectionPointerLink *, link, &selected_editable_bases) { Base *base = static_cast(link->ptr.data); @@ -2975,7 +2975,7 @@ static int object_convert_exec(bContext *C, wmOperator *op) /* obdata already modified */ if (!IS_TAGGED(ob->data)) { /* When 2 objects with linked data are selected, converting both - * would keep modifiers on all but the converted object T26003. */ + * would keep modifiers on all but the converted object #26003. */ if (ob->type == OB_MESH) { BKE_object_free_modifiers(ob, 0); /* after derivedmesh calls! */ } @@ -3708,7 +3708,7 @@ Base *ED_object_add_duplicate( ob = basen->object; - /* Link own references to the newly duplicated data T26816. + /* Link own references to the newly duplicated data #26816. * Note that this function can be called from edit-mode code, in which case we may have to * enforce remapping obdata (by default this is forbidden in edit mode). */ const int remap_flag = BKE_object_is_in_editmode(ob) ? ID_REMAP_FORCE_OBDATA_IN_EDITMODE : 0; @@ -4156,7 +4156,7 @@ static int object_join_exec(bContext *C, wmOperator *op) if (ret & OPERATOR_FINISHED) { /* Even though internally failure to invert is accounted for with a fallback, - * show a warning since the result may not be what the user expects. See T80077. + * show a warning since the result may not be what the user expects. See #80077. * * Failure to invert the matrix is typically caused by zero scaled axes * (which can be caused by constraints, even if the input scale isn't zero). diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index d1473f8dd7a0..ec0f48d62084 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -608,7 +608,7 @@ static bool ED_object_editmode_load_free_ex(Main *bmain, if (load_data == false) { /* Don't keep unused pose channels created by duplicating bones - * which may have been deleted/undone, see: T87631. */ + * which may have been deleted/undone, see: #87631. */ if (obedit->pose != NULL) { BKE_pose_channels_clear_with_null_bone(obedit->pose, true); } @@ -701,10 +701,10 @@ bool ED_object_editmode_exit_ex(Main *bmain, Scene *scene, Object *obedit, int f if (ED_object_editmode_load_free_ex(bmain, obedit, true, free_data) == false) { /* in rare cases (background mode) its possible active object - * is flagged for editmode, without 'obedit' being set T35489. */ + * is flagged for editmode, without 'obedit' being set #35489. */ if (UNLIKELY(obedit && obedit->mode & OB_MODE_EDIT)) { obedit->mode &= ~OB_MODE_EDIT; - /* Also happens when mesh is shared across multiple objects. [#T69834] */ + /* Also happens when mesh is shared across multiple objects. #69834. */ DEG_id_tag_update(&obedit->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY); } return true; @@ -789,7 +789,7 @@ bool ED_object_editmode_enter_ex(Main *bmain, Scene *scene, Object *ob, int flag /* This checks actual `ob->data`, for cases when other scenes have it in edit-mode context. * Currently multiple objects sharing a mesh being in edit-mode at once isn't supported, - * see: T86767. */ + * see: #86767. */ if (BKE_object_is_in_editmode(ob)) { return true; } diff --git a/source/blender/editors/object/object_modifier.cc b/source/blender/editors/object/object_modifier.cc index 15d90729e9f3..c332c8a91fcc 100644 --- a/source/blender/editors/object/object_modifier.cc +++ b/source/blender/editors/object/object_modifier.cc @@ -155,7 +155,7 @@ ModifierData *ED_object_modifier_add( ModifierData *md = nullptr, *new_md = nullptr; const ModifierTypeInfo *mti = BKE_modifier_get_info((ModifierType)type); - /* Check compatibility of modifier [T25291, T50373]. */ + /* Check compatibility of modifier [#25291, #50373]. */ if (!BKE_object_support_modifier_type_check(ob, type)) { BKE_reportf(reports, RPT_WARNING, "Modifiers cannot be added to object '%s'", ob->id.name + 2); return nullptr; @@ -742,7 +742,7 @@ static void add_shapekey_layers(Mesh &mesh_dest, const Mesh &mesh_src) /** * \param use_virtual_modifiers: When enabled, calculate virtual-modifiers before applying * `md_eval`. This is supported because virtual-modifiers are not modifiers from a user - * perspective, allowing shape keys to be included with the modifier being applied, see: T91923. + * perspective, allowing shape keys to be included with the modifier being applied, see: #91923. */ static Mesh *create_applied_mesh_for_modifier(Depsgraph *depsgraph, Scene *scene, @@ -983,7 +983,7 @@ static bool modifier_apply_obdata( DEG_get_evaluated_object(depsgraph, ob), md_eval, /* It's important not to apply virtual modifiers (e.g. shape-keys) because they're kept, - * causing them to be applied twice, see: T97758. */ + * causing them to be applied twice, see: #97758. */ false, true, reports); diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c index 0af1e9087899..0ceec68e0dbc 100644 --- a/source/blender/editors/object/object_relations.c +++ b/source/blender/editors/object/object_relations.c @@ -414,7 +414,7 @@ void ED_object_parent_clear(Object *ob, const int type) } } - /* Always clear parentinv matrix for sake of consistency, see T41950. */ + /* Always clear parentinv matrix for sake of consistency, see #41950. */ unit_m4(ob->parentinv); DEG_id_tag_update(&ob->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_ANIMATION); @@ -462,7 +462,7 @@ void OBJECT_OT_parent_clear(wmOperatorType *ot) void ED_object_parent(Object *ob, Object *par, const int type, const char *substr) { - /* Always clear parentinv matrix for sake of consistency, see T41950. */ + /* Always clear parentinv matrix for sake of consistency, see #41950. */ unit_m4(ob->parentinv); if (!par || BKE_object_parent_loop_check(par, ob)) { @@ -584,15 +584,15 @@ bool ED_object_parent_set(ReportList *reports, /* Apply transformation of previous parenting. */ if (keep_transform) { - /* Was removed because of bug T23577, - * but this can be handy in some cases too T32616, so make optional. */ + /* Was removed because of bug #23577, + * but this can be handy in some cases too #32616, so make optional. */ BKE_object_apply_mat4(ob, ob->object_to_world, false, false); } /* Set the parent (except for follow-path constraint option). */ if (partype != PAR_PATH_CONST) { ob->parent = par; - /* Always clear parentinv matrix for sake of consistency, see T41950. */ + /* Always clear parentinv matrix for sake of consistency, see #41950. */ unit_m4(ob->parentinv); DEG_id_tag_update(&ob->id, ID_RECALC_TRANSFORM); } @@ -1754,7 +1754,7 @@ static Collection *single_object_users_collection(Main *bmain, /* Since master collection has already be duplicated as part of scene copy, * we do not duplicate it here. * However, this means its children need to be re-added manually here, - * otherwise their parent lists are empty (which will lead to crashes, see T63101). */ + * otherwise their parent lists are empty (which will lead to crashes, see #63101). */ CollectionChild *child_next, *child = collection->children.first; CollectionChild *orig_child_last = collection->children.last; for (; child != NULL; child = child_next) { @@ -2074,7 +2074,7 @@ static void tag_localizable_objects(bContext *C, const int mode) /** * Instance indirectly referenced zero user objects, - * otherwise they're lost on reload, see T40595. + * otherwise they're lost on reload, see #40595. */ static bool make_local_all__instance_indirect_unused(Main *bmain, const Scene *scene, @@ -2727,7 +2727,7 @@ static int make_single_user_exec(bContext *C, wmOperator *op) if (RNA_boolean_get(op->ptr, "obdata")) { single_obdata_users(bmain, scene, view_layer, v3d, flag); - /* Needed since some IDs were remapped? (incl. me->texcomesh, see T73797). */ + /* Needed since some IDs were remapped? (incl. me->texcomesh, see #73797). */ update_deps = true; } diff --git a/source/blender/editors/object/object_vgroup.cc b/source/blender/editors/object/object_vgroup.cc index b1066c02ee4c..987fb545264c 100644 --- a/source/blender/editors/object/object_vgroup.cc +++ b/source/blender/editors/object/object_vgroup.cc @@ -2945,7 +2945,7 @@ void OBJECT_OT_vertex_group_remove(wmOperatorType *ot) /* flags */ /* redo operator will fail in this case because vertex groups aren't stored * in local edit mode stack and toggling "all" property will lead to - * all groups deleted without way to restore them (see T29527, sergey) */ + * all groups deleted without way to restore them (see #29527, sergey) */ ot->flag = /*OPTYPE_REGISTER|*/ OPTYPE_UNDO; /* properties */ @@ -2988,7 +2988,7 @@ void OBJECT_OT_vertex_group_assign(wmOperatorType *ot) /* flags */ /* redo operator will fail in this case because vertex group assignment * isn't stored in local edit mode stack and toggling "new" property will - * lead to creating plenty of new vertex groups (see T29527, sergey) */ + * lead to creating plenty of new vertex groups (see #29527, sergey) */ ot->flag = /*OPTYPE_REGISTER|*/ OPTYPE_UNDO; } @@ -3023,7 +3023,7 @@ void OBJECT_OT_vertex_group_assign_new(wmOperatorType *ot) /* flags */ /* redo operator will fail in this case because vertex group assignment * isn't stored in local edit mode stack and toggling "new" property will - * lead to creating plenty of new vertex groups (see T29527, sergey) */ + * lead to creating plenty of new vertex groups (see #29527, sergey) */ ot->flag = /*OPTYPE_REGISTER|*/ OPTYPE_UNDO; } @@ -3075,7 +3075,7 @@ void OBJECT_OT_vertex_group_remove_from(wmOperatorType *ot) /* flags */ /* redo operator will fail in this case because vertex groups assignment * isn't stored in local edit mode stack and toggling "all" property will lead to - * removing vertices from all groups (see T29527, sergey) */ + * removing vertices from all groups (see #29527, sergey) */ ot->flag = /*OPTYPE_REGISTER|*/ OPTYPE_UNDO; /* properties */ diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c index a3117f46bb99..ccee930d769f 100644 --- a/source/blender/editors/physics/particle_edit.c +++ b/source/blender/editors/physics/particle_edit.c @@ -3958,7 +3958,7 @@ static void brush_puff(PEData *data, int point_index, float mouse_distance) /* blend between the current and straight position */ sub_v3_v3v3(dco, kco, co); madd_v3_v3fl(co, dco, fac); - /* keep the same distance from the root or we get glitches T35406. */ + /* keep the same distance from the root or we get glitches #35406. */ dist_ensure_v3_v3fl(co, co_root, length_accum); /* Re-use dco to compare before and after translation and add to the offset. */ diff --git a/source/blender/editors/physics/particle_object.c b/source/blender/editors/physics/particle_object.c index 8c26b9caf919..846e138e958b 100644 --- a/source/blender/editors/physics/particle_object.c +++ b/source/blender/editors/physics/particle_object.c @@ -676,7 +676,7 @@ void PARTICLE_OT_disconnect_hair(wmOperatorType *ot) ot->exec = disconnect_hair_exec; /* flags */ - /* No REGISTER, redo does not work due to missing update, see T47750. */ + /* No REGISTER, redo does not work due to missing update, see #47750. */ ot->flag = OPTYPE_UNDO; RNA_def_boolean( @@ -978,7 +978,7 @@ void PARTICLE_OT_connect_hair(wmOperatorType *ot) ot->exec = connect_hair_exec; /* flags */ - /* No REGISTER, redo does not work due to missing update, see T47750. */ + /* No REGISTER, redo does not work due to missing update, see #47750. */ ot->flag = OPTYPE_UNDO; RNA_def_boolean(ot->srna, "all", 0, "All Hair", "Connect all hair systems to the emitter mesh"); diff --git a/source/blender/editors/physics/physics_fluid.c b/source/blender/editors/physics/physics_fluid.c index d5e55c99444d..7c6747285287 100644 --- a/source/blender/editors/physics/physics_fluid.c +++ b/source/blender/editors/physics/physics_fluid.c @@ -166,7 +166,7 @@ static bool fluid_validatepaths(FluidJob *job, ReportList *reports) const char *relbase = BKE_modifier_path_relbase(job->bmain, job->ob); - /* We do not accept empty paths, they can end in random places silently, see T51176. */ + /* We do not accept empty paths, they can end in random places silently, see #51176. */ if (fds->cache_directory[0] == '\0') { char cache_name[64]; BKE_fluid_cache_new_name_for_current_session(sizeof(cache_name), cache_name); diff --git a/source/blender/editors/render/render_internal.cc b/source/blender/editors/render/render_internal.cc index 5abf5867f926..39ac4b95159a 100644 --- a/source/blender/editors/render/render_internal.cc +++ b/source/blender/editors/render/render_internal.cc @@ -716,7 +716,7 @@ static void render_endjob(void *rjv) /* This render may be used again by the sequencer without the active * 'Render' where the callbacks would be re-assigned. assign dummy callbacks - * to avoid referencing freed render-jobs bug T24508. */ + * to avoid referencing freed render-jobs bug #24508. */ RE_InitRenderCB(rj->re); if (rj->main != G_MAIN) { @@ -1073,7 +1073,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even /* store actual owner of job, so modal operator could check for it, * the reason of this is that active scene could change when rendering - * several layers from compositor T31800. */ + * several layers from compositor #31800. */ op->customdata = scene; WM_jobs_start(CTX_wm_manager(C), wm_job); diff --git a/source/blender/editors/render/render_preview.cc b/source/blender/editors/render/render_preview.cc index 18bfad0d0428..57245558f705 100644 --- a/source/blender/editors/render/render_preview.cc +++ b/source/blender/editors/render/render_preview.cc @@ -661,7 +661,7 @@ static bool ed_preview_draw_rect(ScrArea *area, int split, int first, rcti *rect rv = RE_RenderViewGetById(&rres, 0); } else { - /* possible the job clears the views but we're still drawing T45496 */ + /* possible the job clears the views but we're still drawing #45496 */ rv = nullptr; } @@ -1372,7 +1372,7 @@ static void icon_copy_rect(ImBuf *ibuf, uint w, uint h, uint *rect) scaledy = float(h); } - /* Scaling down must never assign zero width/height, see: T89868. */ + /* Scaling down must never assign zero width/height, see: #89868. */ ex = MAX2(1, short(scaledx)); ey = MAX2(1, short(scaledy)); diff --git a/source/blender/editors/render/render_shading.cc b/source/blender/editors/render/render_shading.cc index c62483daf6be..5ea01677a8e8 100644 --- a/source/blender/editors/render/render_shading.cc +++ b/source/blender/editors/render/render_shading.cc @@ -216,7 +216,7 @@ static int material_slot_remove_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - /* Removing material slots in edit mode screws things up, see bug T21822. */ + /* Removing material slots in edit mode screws things up, see bug #21822. */ if (ob == CTX_data_edit_object(C)) { BKE_report(op->reports, RPT_ERROR, "Unable to remove material slot in edit mode"); return OPERATOR_CANCELLED; @@ -663,7 +663,7 @@ void OBJECT_OT_material_slot_move(wmOperatorType *ot) static int material_slot_remove_unused_exec(bContext *C, wmOperator *op) { - /* Removing material slots in edit mode screws things up, see bug T21822. */ + /* Removing material slots in edit mode screws things up, see bug #21822. */ Object *ob_active = CTX_data_active_object(C); if (ob_active && BKE_object_is_in_editmode(ob_active)) { BKE_report(op->reports, RPT_ERROR, "Unable to remove material slot in edit mode"); @@ -771,7 +771,7 @@ static int new_material_exec(bContext *C, wmOperator * /*op*/) if (prop) { if (ob != nullptr) { /* Add slot follows user-preferences for creating new slots, - * RNA pointer assignment doesn't, see: T60014. */ + * RNA pointer assignment doesn't, see: #60014. */ if (BKE_object_material_get_p(ob, ob->actcol) == nullptr) { BKE_object_material_slot_add(bmain, ob); } @@ -1434,7 +1434,7 @@ static int light_cache_bake_invoke(bContext *C, wmOperator *op, const wmEvent * /* store actual owner of job, so modal operator could check for it, * the reason of this is that active scene could change when rendering - * several layers from compositor T31800. */ + * several layers from compositor #31800. */ op->customdata = scene; WM_jobs_start(wm, wm_job); @@ -1509,7 +1509,7 @@ static int light_cache_free_exec(bContext *C, wmOperator * /*op*/) { Scene *scene = CTX_data_scene(C); - /* kill potential bake job first (see T57011) */ + /* kill potential bake job first (see #57011) */ wmWindowManager *wm = CTX_wm_manager(C); WM_jobs_kill_type(wm, scene, WM_JOB_TYPE_LIGHT_BAKE); diff --git a/source/blender/editors/render/render_update.cc b/source/blender/editors/render/render_update.cc index 8aadb9edf6a7..c61e26d4c7c6 100644 --- a/source/blender/editors/render/render_update.cc +++ b/source/blender/editors/render/render_update.cc @@ -128,7 +128,7 @@ void ED_render_scene_update(const DEGEditorUpdateContext *update_ctx, const bool return; } - /* Do not call if no WM available, see T42688. */ + /* Do not call if no WM available, see #42688. */ if (BLI_listbase_is_empty(&bmain->wm)) { return; } diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index c3df23500d46..574cefceb36c 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1510,7 +1510,7 @@ static void region_rect_recursive( } /* Fix any negative dimensions. This can happen when a quad split 3d view gets too small. - * (see T72200). */ + * (see #72200). */ BLI_rcti_sanitize(®ion->winrct); quad++; @@ -1622,7 +1622,7 @@ static void area_calc_totrct(ScrArea *area, const rcti *window_rect) /* Although the following asserts are correct they lead to a very unstable Blender. * And the asserts would fail even in 2.7x * (they were added in 2.8x as part of the top-bar commit). - * For more details see T54864. */ + * For more details see #54864. */ #if 0 BLI_assert(area->totrct.xmin >= 0); BLI_assert(area->totrct.xmax >= 0); @@ -1738,7 +1738,7 @@ static void ed_default_handlers( WM_event_add_keymap_handler(®ion->handlers, keymap); } - /* Keep last because of LMB/RMB handling, see: T57527. */ + /* Keep last because of LMB/RMB handling, see: #57527. */ if (flag & ED_KEYMAP_GPENCIL) { /* grease pencil */ /* NOTE: This is now 4 keymaps - One for basic functionality, @@ -2082,7 +2082,7 @@ void ED_region_visibility_change_update(bContext *C, ScrArea *area, ARegion *reg if (region->flag & RGN_FLAG_HIDDEN) { WM_event_remove_handlers(C, ®ion->handlers); /* Needed to close any open pop-overs which would otherwise remain open, - * crashing on attempting to refresh. See: T93410. + * crashing on attempting to refresh. See: #93410. * * When #ED_area_init frees buttons via #UI_blocklist_free a NULL context * is passed, causing the free not to remove menus or their handlers. */ @@ -2430,7 +2430,7 @@ void ED_area_newspace(bContext *C, ScrArea *area, int type, const bool skip_regi * changing the header-type is jarring (especially when using Ctrl-MouseWheel). * * However, add-on install for example, forces the header to the top which shouldn't - * be applied back to the previous space type when closing - see: T57724 + * be applied back to the previous space type when closing - see: #57724 * * Newly-created windows won't have any space data, use the alignment * the space type defaults to in this case instead @@ -3362,7 +3362,7 @@ void ED_region_header_layout(const bContext *C, ARegion *region) UI_block_end(C, block); /* In most cases there is only ever one header, it never makes sense to draw more than one - * header in the same region, this results in overlapping buttons, see: T60195. */ + * header in the same region, this results in overlapping buttons, see: #60195. */ break; } @@ -3516,7 +3516,7 @@ void ED_region_info_draw_multiline(ARegion *region, /* background box */ rcti rect = *ED_region_visible_rect(region); - /* Needed in case scripts leave the font size at an unexpected value, see: T102213. */ + /* Needed in case scripts leave the font size at an unexpected value, see: #102213. */ BLF_size(fontid, style->widget.points * U.dpi_fac); /* Box fill entire width or just around text. */ diff --git a/source/blender/editors/screen/screen_draw.c b/source/blender/editors/screen/screen_draw.c index 065cb3a61a24..384aeccfc4c7 100644 --- a/source/blender/editors/screen/screen_draw.c +++ b/source/blender/editors/screen/screen_draw.c @@ -175,7 +175,7 @@ void ED_screen_draw_edges(wmWindow *win) if (GPU_type_matches_ex(GPU_DEVICE_INTEL_UHD, GPU_OS_UNIX, GPU_DRIVER_ANY, GPU_BACKEND_OPENGL)) { /* For some reason, on linux + Intel UHD Graphics 620 the driver - * hangs if we don't flush before this. (See T57455) */ + * hangs if we don't flush before this. (See #57455) */ GPU_flush(); } diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index d1ec6d8b7b16..2ec1f499a4a6 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -377,7 +377,7 @@ static bool screen_areas_can_align(bScreen *screen, ScrArea *sa1, ScrArea *sa2, return false; } - /* Areas that are _smaller_ than minimum sizes, sharing an edge to be moved. See T100772. */ + /* Areas that are _smaller_ than minimum sizes, sharing an edge to be moved. See #100772. */ if (SCREEN_DIR_IS_VERTICAL(dir)) { const short xmin = MIN2(sa1->v1->vec.x, sa2->v1->vec.x); const short xmax = MAX2(sa1->v3->vec.x, sa2->v3->vec.x); @@ -1531,7 +1531,7 @@ ScrArea *ED_screen_state_toggle(bContext *C, wmWindow *win, ScrArea *area, const /* After we've restored back to SCREENNORMAL, we have to wait with * screen handling as it uses the area coords which aren't updated yet. * Without doing so, the screen handling gets wrong area coords, - * which in worst case can lead to crashes (see T43139) */ + * which in worst case can lead to crashes (see #43139) */ screen->skip_handling = true; } else { @@ -1555,7 +1555,7 @@ ScrArea *ED_screen_state_toggle(bContext *C, wmWindow *win, ScrArea *area, const /* Setting the area is only needed for Python scripts that call * operators in succession before returning to the main event loop. * Without this, scripts can't run any operators that require - * an area after toggling full-screen for example (see: T89526). + * an area after toggling full-screen for example (see: #89526). * NOTE: an old comment stated this was "bad code", * however it doesn't cause problems so leave as-is. */ CTX_wm_area_set(C, screen->areabase.first); diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index a064f4632b55..80e5da43423d 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -2742,7 +2742,7 @@ static void region_scale_validate_size(RegionMoveData *rmd) static void region_scale_toggle_hidden(bContext *C, RegionMoveData *rmd) { /* hidden areas may have bad 'View2D.cur' value, - * correct before displaying. see T45156 */ + * correct before displaying. see #45156 */ if (rmd->region->flag & RGN_FLAG_HIDDEN) { UI_view2d_curRect_validate(&rmd->region->v2d); } @@ -3946,7 +3946,7 @@ static int region_quadview_exec(bContext *C, wmOperator *op) rv3d->viewlock_quad = RV3D_VIEWLOCK_INIT; rv3d->viewlock = 0; - /* FIXME: This fixes missing update to workbench TAA. (see T76216) + /* FIXME: This fixes missing update to workbench TAA. (see #76216) * However, it would be nice if the tagging should be done in a more conventional way. */ rv3d->rflag |= RV3D_GPULIGHT_UPDATE; @@ -3988,7 +3988,7 @@ static int region_quadview_exec(bContext *C, wmOperator *op) /* run ED_view3d_lock() so the correct 'rv3d->viewquat' is set, * otherwise when restoring rv3d->localvd the 'viewquat' won't - * match the 'view', set on entering localview See: T26315, + * match the 'view', set on entering localview See: #26315, * * We could avoid manipulating rv3d->localvd here if exiting * localview with a 4-split would assign these view locks */ diff --git a/source/blender/editors/sculpt_paint/paint_cursor.cc b/source/blender/editors/sculpt_paint/paint_cursor.cc index 11b8ae1b3fbc..a2fa4745f747 100644 --- a/source/blender/editors/sculpt_paint/paint_cursor.cc +++ b/source/blender/editors/sculpt_paint/paint_cursor.cc @@ -1403,7 +1403,7 @@ static void paint_update_mouse_cursor(PaintCursorContext *pcontext) { if (pcontext->win->grabcursor != 0) { /* Don't set the cursor while it's grabbed, since this will show the cursor when interacting - * with the UI (dragging a number button for e.g.), see: T102792. */ + * with the UI (dragging a number button for e.g.), see: #102792. */ return; } WM_cursor_set(pcontext->win, WM_CURSOR_PAINT); diff --git a/source/blender/editors/sculpt_paint/paint_image_proj.cc b/source/blender/editors/sculpt_paint/paint_image_proj.cc index 9bf9f668a6b7..1800f8f862b1 100644 --- a/source/blender/editors/sculpt_paint/paint_image_proj.cc +++ b/source/blender/editors/sculpt_paint/paint_image_proj.cc @@ -1354,7 +1354,7 @@ static void uv_image_outset(const ProjPaintState *ps, len_fact = cosf(tri_ang); len_fact = UNLIKELY(len_fact < FLT_EPSILON) ? FLT_MAX : (1.0f / len_fact); - /* Clamp the length factor, see: T62236. */ + /* Clamp the length factor, see: #62236. */ len_fact = MIN2(len_fact, 10.0f); mul_v2_fl(no, ps->seam_bleed_px * len_fact); @@ -3939,7 +3939,7 @@ static void proj_paint_state_thread_init(ProjPaintState *ps, const bool reset_th ps->thread_tot = BKE_scene_num_threads(ps->scene); - /* workaround for T35057, disable threading if diameter is less than is possible for + /* workaround for #35057, disable threading if diameter is less than is possible for * optimum bucket number generation */ if (reset_threads) { ps->thread_tot = 1; @@ -5150,7 +5150,7 @@ static void copy_original_alpha_channel(ProjPixel *pixel, bool is_floatbuf) /* Use the original alpha channel data instead of the modified one */ if (is_floatbuf) { /* slightly more involved case since floats are in premultiplied space we need - * to make sure alpha is consistent, see T44627 */ + * to make sure alpha is consistent, see #44627 */ float rgb_straight[4]; premul_to_straight_v4_v4(rgb_straight, pixel->pixel.f_pt); rgb_straight[3] = pixel->origColor.f_pt[3]; diff --git a/source/blender/editors/sculpt_paint/paint_intern.h b/source/blender/editors/sculpt_paint/paint_intern.h index 313941ee654a..ee07f7cc26d5 100644 --- a/source/blender/editors/sculpt_paint/paint_intern.h +++ b/source/blender/editors/sculpt_paint/paint_intern.h @@ -480,7 +480,7 @@ void PAINT_OT_hide_show(struct wmOperatorType *ot); * We must thus map the modes here to the desired * eSelectOp modes. * - * Fixes T102349. + * Fixes #102349. */ typedef enum { PAINT_MASK_FLOOD_VALUE = SEL_OP_SUB, diff --git a/source/blender/editors/sculpt_paint/paint_mask.cc b/source/blender/editors/sculpt_paint/paint_mask.cc index 0ca6e9e0d740..bde6e25dec22 100644 --- a/source/blender/editors/sculpt_paint/paint_mask.cc +++ b/source/blender/editors/sculpt_paint/paint_mask.cc @@ -1109,7 +1109,7 @@ static void sculpt_gesture_trim_calculate_depth(SculptGestureContext *sgcontext) else { /* ss->cursor_radius is only valid if the stroke started * over the sculpt mesh. If it's not we must - * compute the radius ourselves. See T81452. + * compute the radius ourselves. See #81452. */ Sculpt *sd = CTX_data_tool_settings(vc->C)->sculpt; diff --git a/source/blender/editors/sculpt_paint/paint_stroke.cc b/source/blender/editors/sculpt_paint/paint_stroke.cc index 1665fc4fedb9..c64751965f74 100644 --- a/source/blender/editors/sculpt_paint/paint_stroke.cc +++ b/source/blender/editors/sculpt_paint/paint_stroke.cc @@ -692,7 +692,7 @@ static float paint_space_stroke_spacing(bContext *C, } else { /* brushes can have a minimum size of 1.0 but with pressure it can be smaller than a pixel - * causing very high step sizes, hanging blender T32381. */ + * causing very high step sizes, hanging blender #32381. */ size_clamp = max_ff(1.0f, size); } diff --git a/source/blender/editors/sculpt_paint/paint_vertex.cc b/source/blender/editors/sculpt_paint/paint_vertex.cc index e2ca932fbc79..635331b6d6c3 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex.cc +++ b/source/blender/editors/sculpt_paint/paint_vertex.cc @@ -965,7 +965,7 @@ static void do_weight_paint_vertex_single( dw->weight = weight; /* WATCH IT: take care of the ordering of applying mirror -> normalize, - * can give wrong results T26193, least confusing if normalize is done last */ + * can give wrong results #26193, least confusing if normalize is done last */ /* apply mirror */ if (index_mirr != -1) { diff --git a/source/blender/editors/sculpt_paint/sculpt.cc b/source/blender/editors/sculpt_paint/sculpt.cc index 10ce391c3975..ebb8490276d9 100644 --- a/source/blender/editors/sculpt_paint/sculpt.cc +++ b/source/blender/editors/sculpt_paint/sculpt.cc @@ -1620,7 +1620,7 @@ static void paint_mesh_restore_co(Sculpt *sd, Object *ob) /** * Disable multi-threading when dynamic-topology is enabled. Otherwise, * new entries might be inserted by #SCULPT_undo_push_node() into the #GHash - * used internally by #BM_log_original_vert_co() by a different thread. See T33787. + * used internally by #BM_log_original_vert_co() by a different thread. See #33787. */ SculptThreadedTaskData data{}; data.sd = sd; @@ -5405,7 +5405,7 @@ void SCULPT_flush_update_step(bContext *C, SculptUpdateType update_flags) BKE_pbvh_update_bounds(ss->pbvh, PBVH_UpdateBB); /* Update the object's bounding box too so that the object * doesn't get incorrectly clipped during drawing in - * draw_mesh_object(). T33790. */ + * draw_mesh_object(). #33790. */ SCULPT_update_object_bounding_box(ob); } @@ -5586,7 +5586,7 @@ static bool sculpt_stroke_test_start(bContext *C, wmOperator *op, const float mv /* Don't start the stroke until `mval` goes over the mesh. * NOTE: `mval` will only be null when re-executing the saved stroke. * We have exception for 'exec' strokes since they may not set `mval`, - * only 'location', see: T52195. */ + * only 'location', see: #52195. */ if (((op->flag & OP_IS_INVOKE) == 0) || (mval == nullptr) || over_mesh(C, op, mval)) { Object *ob = CTX_data_active_object(C); SculptSession *ss = ob->sculpt; @@ -5865,7 +5865,7 @@ static void sculpt_brush_stroke_cancel(bContext *C, wmOperator *op) const Brush *brush = BKE_paint_brush(&sd->paint); /* XXX Canceling strokes that way does not work with dynamic topology, - * user will have to do real undo for now. See T46456. */ + * user will have to do real undo for now. See #46456. */ if (ss->cache && !SCULPT_stroke_is_dynamic_topology(ss, brush)) { paint_mesh_restore_co(sd, ob); } @@ -5893,7 +5893,7 @@ static int sculpt_brush_stroke_modal(bContext *C, wmOperator *op, const wmEvent * * Having blank global undo steps interleaved with sculpt steps * corrupts the DynTopo undo stack. - * See T101430. + * See #101430. * * NOTE: simply returning #OPERATOR_CANCELLED was not * sufficient to prevent this. */ diff --git a/source/blender/editors/sculpt_paint/sculpt_brush_types.cc b/source/blender/editors/sculpt_paint/sculpt_brush_types.cc index 8bec48bfb651..3ae892b6a9f2 100644 --- a/source/blender/editors/sculpt_paint/sculpt_brush_types.cc +++ b/source/blender/editors/sculpt_paint/sculpt_brush_types.cc @@ -1052,7 +1052,7 @@ static void do_clay_strips_brush_task_cb_ex(void *__restrict userdata, SCULPT_automasking_node_update(ss, &automask_data, &vd); - /* The normal from the vertices is ignored, it causes glitch with planes, see: T44390. */ + /* The normal from the vertices is ignored, it causes glitch with planes, see: #44390. */ const float fade = bstrength * SCULPT_brush_strength_factor(ss, brush, vd.co, diff --git a/source/blender/editors/sculpt_paint/sculpt_dyntopo.cc b/source/blender/editors/sculpt_paint/sculpt_dyntopo.cc index 986974f2e209..570e2e1cab30 100644 --- a/source/blender/editors/sculpt_paint/sculpt_dyntopo.cc +++ b/source/blender/editors/sculpt_paint/sculpt_dyntopo.cc @@ -91,7 +91,7 @@ void SCULPT_dynamic_topology_enable_ex(Main *bmain, Depsgraph *depsgraph, Scene ss->bm_smooth_shading = (scene->toolsettings->sculpt->flags & SCULPT_DYNTOPO_SMOOTH_SHADING) != 0; - /* Dynamic topology doesn't ensure selection state is valid, so remove T36280. */ + /* Dynamic topology doesn't ensure selection state is valid, so remove #36280. */ BKE_mesh_mselect_clear(me); /* Create triangles-only BMesh. */ @@ -188,7 +188,7 @@ static void SCULPT_dynamic_topology_disable_ex( /* Clear data. */ me->flag &= ~ME_SCULPT_DYNAMIC_TOPOLOGY; - /* Typically valid but with global-undo they can be nullptr, see: T36234. */ + /* Typically valid but with global-undo they can be nullptr, see: #36234. */ if (ss->bm) { BM_mesh_free(ss->bm); ss->bm = nullptr; diff --git a/source/blender/editors/sculpt_paint/sculpt_ops.cc b/source/blender/editors/sculpt_paint/sculpt_ops.cc index 091bd0d08525..d9738b11215e 100644 --- a/source/blender/editors/sculpt_paint/sculpt_ops.cc +++ b/source/blender/editors/sculpt_paint/sculpt_ops.cc @@ -514,7 +514,7 @@ static int sculpt_mode_toggle_exec(bContext *C, wmOperator *op) /* Dyntopo adds its own undo step. */ if ((me->flag & ME_SCULPT_DYNAMIC_TOPOLOGY) == 0) { /* Without this the memfile undo step is used, - * while it works it causes lag when undoing the first undo step, see T71564. */ + * while it works it causes lag when undoing the first undo step, see #71564. */ wmWindowManager *wm = CTX_wm_manager(C); if (wm->op_undo_depth <= 1) { SCULPT_undo_push_begin(ob, op); diff --git a/source/blender/editors/sculpt_paint/sculpt_undo.cc b/source/blender/editors/sculpt_paint/sculpt_undo.cc index f5e47b8a8687..ed52ee553125 100644 --- a/source/blender/editors/sculpt_paint/sculpt_undo.cc +++ b/source/blender/editors/sculpt_paint/sculpt_undo.cc @@ -1839,7 +1839,7 @@ static void sculpt_undo_set_active_layer(struct bContext *C, SculptAttrRef *attr CustomDataLayer *layer; layer = BKE_id_attribute_find(&me->id, attr->name, attr->type, attr->domain); - /* Temporary fix for T97408. This is a fundamental + /* Temporary fix for #97408. This is a fundamental * bug in the undo stack; the operator code needs to push * an extra undo step before running an operator if a * non-memfile undo system is active. diff --git a/source/blender/editors/sculpt_paint/sculpt_uv.c b/source/blender/editors/sculpt_paint/sculpt_uv.c index 998fe50b9ace..cd1c7e31d434 100644 --- a/source/blender/editors/sculpt_paint/sculpt_uv.c +++ b/source/blender/editors/sculpt_paint/sculpt_uv.c @@ -685,7 +685,7 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, const wm /* Winding was added to island detection in 5197aa04c6bd * However the sculpt tools can flip faces, potentially creating orphaned islands. - * See T100132 */ + * See #100132 */ const bool use_winding = false; const bool use_seams = true; data->elementMap = BM_uv_element_map_create( diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index 9b0ef405a6a2..094eccf41149 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -524,7 +524,7 @@ static eKeyPasteError paste_action_keys(bAnimContext *ac, * - First time we try to filter more strictly, allowing only selected channels * to allow copying animation between channels * - Second time, we loosen things up if nothing was found the first time, allowing - * users to just paste keyframes back into the original curve again T31670. + * users to just paste keyframes back into the original curve again #31670. */ filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_FCURVESONLY | ANIMFILTER_NODUPLIS); diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index 8dc349645909..0c416712a0e2 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -1784,7 +1784,7 @@ static int mouse_action_keys(bAnimContext *ac, /* apply selection to keyframes */ if (column) { /* select all keyframes in the same frame as the one we hit on the active channel - * [T41077]: "frame" not "selx" here (i.e. no NLA corrections yet) as the code here + * [#41077]: "frame" not "selx" here (i.e. no NLA corrections yet) as the code here * does that itself again as it needs to work on multiple data-blocks. */ actkeys_mselect_column(ac, select_mode, frame); diff --git a/source/blender/editors/space_action/space_action.c b/source/blender/editors/space_action/space_action.c index 2f22121f7de0..5a7be3be4a5b 100644 --- a/source/blender/editors/space_action/space_action.c +++ b/source/blender/editors/space_action/space_action.c @@ -534,7 +534,7 @@ static void action_listener(const wmSpaceTypeListenerParams *params) } /* for simple edits to the curve data though (or just plain selections), * a simple redraw should work - * (see T39851 for an example of how this can go wrong) + * (see #39851 for an example of how this can go wrong) */ else { ED_area_tag_redraw(area); @@ -637,7 +637,7 @@ static void action_listener(const wmSpaceTypeListenerParams *params) break; case NC_WINDOW: if (saction->runtime.flag & SACTION_RUNTIME_FLAG_NEED_CHAN_SYNC) { - /* force redraw/refresh after undo/redo, see: T28962. */ + /* force redraw/refresh after undo/redo, see: #28962. */ ED_area_tag_refresh(area); } break; @@ -781,7 +781,7 @@ static void action_refresh(const bContext *C, ScrArea *area) /* Tag everything for redraw * - Regions (such as header) need to be manually tagged for redraw too - * or else they don't update T28962. + * or else they don't update #28962. */ ED_area_tag_redraw(area); for (region = area->regionbase.first; region; region = region->next) { diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c index c5f457b3fd89..463e1a149542 100644 --- a/source/blender/editors/space_buttons/buttons_context.c +++ b/source/blender/editors/space_buttons/buttons_context.c @@ -965,7 +965,7 @@ int /*eContextResult*/ buttons_context(const bContext *C, Object *ob = ptr->data; if (ob && OB_TYPE_SUPPORT_MATERIAL(ob->type) && ob->totcol) { - /* a valid actcol isn't ensured T27526. */ + /* a valid actcol isn't ensured #27526. */ int matnr = ob->actcol - 1; if (matnr < 0) { matnr = 0; diff --git a/source/blender/editors/space_buttons/buttons_ops.c b/source/blender/editors/space_buttons/buttons_ops.c index b45abcf80688..6ccb8d6ca398 100644 --- a/source/blender/editors/space_buttons/buttons_ops.c +++ b/source/blender/editors/space_buttons/buttons_ops.c @@ -233,7 +233,7 @@ static int file_browse_exec(bContext *C, wmOperator *op) ED_undo_push(C, undostr); } - /* Special annoying exception, filesel on redo panel T26618. */ + /* Special annoying exception, filesel on redo panel #26618. */ { wmOperator *redo_op = WM_operator_last_redo(C); if (redo_op) { diff --git a/source/blender/editors/space_clip/clip_editor.c b/source/blender/editors/space_clip/clip_editor.c index 5ebc41d9cc76..b9abcfaa6f52 100644 --- a/source/blender/editors/space_clip/clip_editor.c +++ b/source/blender/editors/space_clip/clip_editor.c @@ -232,7 +232,7 @@ int ED_space_clip_get_clip_frame_number(const SpaceClip *sc) { MovieClip *clip = ED_space_clip_get_clip(sc); - /* Caller must ensure space does have a valid clip, otherwise it will crash, see T45017. */ + /* Caller must ensure space does have a valid clip, otherwise it will crash, see #45017. */ return BKE_movieclip_remap_scene_to_clip_frame(clip, sc->user.framenr); } diff --git a/source/blender/editors/space_clip/space_clip.c b/source/blender/editors/space_clip/space_clip.c index d94228a2dadc..3a2cbfdfad3b 100644 --- a/source/blender/editors/space_clip/space_clip.c +++ b/source/blender/editors/space_clip/space_clip.c @@ -897,7 +897,7 @@ static void clip_main_region_draw(const bContext *C, ARegion *region) /* callback */ /* TODO(sergey): For being consistent with space image the projection needs to be configured * the way how the commented out code does it. This works correct for tracking data, but it - * causes wrong aspect correction for mask editor (see T84990). */ + * causes wrong aspect correction for mask editor (see #84990). */ // GPU_matrix_push_projection(); // wmOrtho2(region->v2d.cur.xmin, region->v2d.cur.xmax, region->v2d.cur.ymin, // region->v2d.cur.ymax); diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index e9a7080ff358..8616707e42e5 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -1403,7 +1403,7 @@ int file_highlight_set(SpaceFile *sfile, ARegion *region, int mx, int my) params = ED_fileselect_get_active_params(sfile); /* In case #SpaceFile.browse_mode just changed, the area may be pending a refresh still, which is - * what creates the params for the current browse mode. See T93508. */ + * what creates the params for the current browse mode. See #93508. */ if (!params) { return false; } @@ -2203,7 +2203,7 @@ static int file_smoothscroll_invoke(bContext *C, wmOperator *UNUSED(op), const w int deltay = 0; /* We adjust speed of scrolling to avoid tens of seconds of it in e.g. directories with tens of - * thousands of folders... See T65782. */ + * thousands of folders... See #65782. */ /* This will slow down scrolling when approaching final goal, also avoids going too far and * having to bounce back... */ @@ -2485,7 +2485,7 @@ static void file_expand_directory(bContext *C) { BLI_windows_get_default_root_dir(params->dir); } - /* change "C:" --> "C:\", T28102. */ + /* change "C:" --> "C:\", #28102. */ else if ((isalpha(params->dir[0]) && (params->dir[1] == ':')) && (params->dir[2] == '\0')) { params->dir[2] = '\\'; params->dir[3] = '\0'; diff --git a/source/blender/editors/space_file/filelist.cc b/source/blender/editors/space_file/filelist.cc index 2c63c3460dea..3a944f923084 100644 --- a/source/blender/editors/space_file/filelist.cc +++ b/source/blender/editors/space_file/filelist.cc @@ -185,7 +185,7 @@ struct FileListEntryPreview { }; /* Dummy wrapper around FileListEntryPreview to ensure we do not access freed memory when freeing - * tasks' data (see T74609). */ + * tasks' data (see #74609). */ struct FileListEntryPreviewTaskData { FileListEntryPreview *preview; }; @@ -633,7 +633,7 @@ static bool is_hidden_dot_filename(const char *filename, const FileListInternEnt while (sep) { /* This happens when a path contains 'ALTSEP', '\' on Unix for e.g. * Supporting alternate slashes in paths is a bigger task involving changes - * in many parts of the code, for now just prevent an assert, see T74579. */ + * in many parts of the code, for now just prevent an assert, see #74579. */ #if 0 BLI_assert(sep[1] != '\0'); #endif @@ -3587,7 +3587,7 @@ static void filelist_readjob_recursive_dir_add_items(const bool do_lib, /* ARRRG! We have to be very careful *not to use* common BLI_path_util helpers over * entry->relpath itself (nor any path containing it), since it may actually be a datablock - * name inside .blend file, which can have slashes and backslashes! See T46827. + * name inside .blend file, which can have slashes and backslashes! See #46827. * Note that in the end, this means we 'cache' valid relative subdir once here, * this is actually better. */ BLI_strncpy(rel_subdir, subdir, sizeof(rel_subdir)); @@ -4062,7 +4062,7 @@ void filelist_readjob_start(FileList *filelist, const int space_notifier, const /* The file list type may not support threading so execute immediately. Same when only rereading * #Main data (which we do quite often on changes to #Main, since it's the easiest and safest way * to ensure the displayed data is up to date), because some operations executing right after - * main data changed may need access to the ID files (see T93691). */ + * main data changed may need access to the ID files (see #93691). */ const bool no_threads = (filelist->tags & FILELIST_TAGS_NO_THREADS) || flrj->only_main_data; if (no_threads) { diff --git a/source/blender/editors/space_file/filesel.cc b/source/blender/editors/space_file/filesel.cc index 12d05054e9b0..e4f5b3e709c9 100644 --- a/source/blender/editors/space_file/filesel.cc +++ b/source/blender/editors/space_file/filesel.cc @@ -85,7 +85,7 @@ static void fileselect_initialize_params_common(SpaceFile *sfile, FileSelectPara folder_history_list_ensure_for_active_browse_mode(sfile); folderlist_pushdir(sfile->folders_prev, params->dir); - /* Switching thumbnails needs to recalc layout T28809. */ + /* Switching thumbnails needs to recalc layout #28809. */ if (sfile->layout) { sfile->layout->dirty = true; } @@ -1144,7 +1144,7 @@ int file_select_match(struct SpaceFile *sfile, const char *pattern, char *matche */ for (int i = 0; i < n; i++) { FileDirEntry *file = filelist_file(sfile->files, i); - /* Do not check whether file is a file or dir here! Causes: T44243 + /* Do not check whether file is a file or dir here! Causes: #44243 * (we do accept directories at this stage). */ if (fnmatch(pattern, file->relpath, 0) == 0) { filelist_entry_select_set(sfile->files, file, FILE_SEL_ADD, FILE_SEL_SELECTED, CHECK_ALL); @@ -1228,7 +1228,7 @@ int autocomplete_file(struct bContext *C, char *str, void * /*arg_v*/) void ED_fileselect_clear(wmWindowManager *wm, SpaceFile *sfile) { - /* Only null in rare cases, see: T29734. */ + /* Only null in rare cases, see: #29734. */ if (sfile->files) { filelist_readjob_stop(sfile->files, wm); filelist_freelib(sfile->files); diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c index 959f8b01ec8e..0e46a2eafe38 100644 --- a/source/blender/editors/space_file/fsmenu.c +++ b/source/blender/editors/space_file/fsmenu.c @@ -332,7 +332,7 @@ void fsmenu_entry_refresh_valid(struct FSMenuEntry *fsentry) #ifdef WIN32 /* XXX Special case, always consider those as valid. * Thanks to Windows, which can spend five seconds to perform a mere stat() call on those paths - * See T43684. */ + * See #43684. */ const char *exceptions[] = {"A:\\", "B:\\", NULL}; const size_t exceptions_len[] = {strlen(exceptions[0]), strlen(exceptions[1]), 0}; int i; @@ -653,7 +653,7 @@ void fsmenu_read_system(struct FSMenu *fsmenu, int read_bookmarks) /* Skip over floppy disks A & B. */ if (i > 1) { - /* Friendly volume descriptions without using SHGetFileInfoW (T85689). */ + /* Friendly volume descriptions without using SHGetFileInfoW (#85689). */ BLI_strncpy_wchar_from_utf8(wline, tmps, 4); IShellFolder *desktop; if (SHGetDesktopFolder(&desktop) == S_OK) { diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c index 8ada6d31a2d5..4b51da66ac5b 100644 --- a/source/blender/editors/space_graph/graph_buttons.c +++ b/source/blender/editors/space_graph/graph_buttons.c @@ -304,7 +304,7 @@ static void graphedit_activekey_handles_cb(bContext *C, void *fcu_ptr, void *bez /* update callback for editing coordinates of right handle in active keyframe properties * NOTE: we cannot just do graphedit_activekey_handles_cb() due to "order of computation" - * weirdness (see calchandleNurb_intern() and T39911) + * weirdness (see calchandleNurb_intern() and #39911) */ static void graphedit_activekey_left_handle_coord_cb(bContext *C, void *fcu_ptr, void *bezt_ptr) { @@ -528,7 +528,7 @@ static void graph_panel_key_properties(const bContext *C, Panel *panel) /* next handle - only if current is Bezier interpolation */ if (bezt->ipo == BEZT_IPO_BEZ) { - /* NOTE: special update callbacks are needed on the coords here due to T39911 */ + /* NOTE: special update callbacks are needed on the coords here due to #39911 */ col = uiLayoutColumn(layout, true); uiItemL_respect_property_split(col, IFACE_("Right Handle Type"), ICON_NONE); diff --git a/source/blender/editors/space_graph/graph_draw.c b/source/blender/editors/space_graph/graph_draw.c index fd4282aaaff7..f315690a50d9 100644 --- a/source/blender/editors/space_graph/graph_draw.c +++ b/source/blender/editors/space_graph/graph_draw.c @@ -606,7 +606,7 @@ static void draw_fcurve_curve(bAnimContext *ac, * * Although the "Beauty Draw" flag was originally for AA'd * line drawing, the sampling rate here has a much greater - * impact on performance (e.g. for T40372)! + * impact on performance (e.g. for #40372)! * * This one still amounts to 10 sample-frames for each 1-frame interval * which should be quite a decent approximation in many situations. @@ -616,7 +616,7 @@ static void draw_fcurve_curve(bAnimContext *ac, } } else { - /* "Higher Precision" but slower - especially on larger windows (e.g. T40372) */ + /* "Higher Precision" but slower - especially on larger windows (e.g. #40372) */ if (samplefreq < 0.00001f) { samplefreq = 0.00001f; } diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index 1ad68eef2f55..34c34613cf61 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -485,7 +485,7 @@ static eKeyPasteError paste_graph_keys(bAnimContext *ac, * - First time we try to filter more strictly, allowing only selected channels * to allow copying animation between channels * - Second time, we loosen things up if nothing was found the first time, allowing - * users to just paste keyframes back into the original curve again T31670. + * users to just paste keyframes back into the original curve again #31670. */ filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_CURVE_VISIBLE | ANIMFILTER_FCURVESONLY | ANIMFILTER_FOREDIT | ANIMFILTER_NODUPLIS); diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c index da302378ec22..f92fe71455b5 100644 --- a/source/blender/editors/space_graph/graph_select.c +++ b/source/blender/editors/space_graph/graph_select.c @@ -1809,7 +1809,7 @@ static int mouse_graph_keys(bAnimContext *ac, /* Set active F-Curve when something was actually selected (so not on a deselect), except when * dragging the selected keys. Needs to be called with (sipo->flag & SIPO_SELCUVERTSONLY), - * otherwise the active flag won't be set T26452. */ + * otherwise the active flag won't be set #26452. */ if (!run_modal && (nvi->fcu->flag & FCURVE_SELECTED) && something_was_selected) { /* NOTE: Sync the filter flags with findnearest_fcurve_vert. */ int filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_CURVE_VISIBLE | ANIMFILTER_FCURVESONLY | diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c index 1dc02fee59db..de96cad8de62 100644 --- a/source/blender/editors/space_graph/space_graph.c +++ b/source/blender/editors/space_graph/space_graph.c @@ -149,7 +149,7 @@ static void graph_init(struct wmWindowManager *wm, ScrArea *area) /* force immediate init of any invalid F-Curve colors */ /* XXX: but, don't do SIPO_TEMP_NEEDCHANSYNC (i.e. channel select state sync) * as this is run on each region resize; setting this here will cause selection - * state to be lost on area/region resizing. T35744. + * state to be lost on area/region resizing. #35744. */ ED_area_tag_refresh(area); } diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index f6d21633bb3b..13d3681b10e8 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -2601,7 +2601,7 @@ static int image_new_exec(bContext *C, wmOperator *op) } else { /* #BKE_image_add_generated creates one user by default, remove it if image is not linked to - * anything. ref. T94599. */ + * anything. ref. #94599. */ id_us_min(&ima->id); } diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c index fd8c161687e3..be899d423237 100644 --- a/source/blender/editors/space_image/space_image.c +++ b/source/blender/editors/space_image/space_image.c @@ -407,7 +407,7 @@ static void image_listener(const wmSpaceTypeListenerParams *params) Object *ob = BKE_view_layer_active_object_get(view_layer); /* \note With a geometry nodes modifier, the UVs on `ob` can change in response to * any change on `wmn->reference`. If we could track the upstream dependencies, - * unnecessary redraws could be reduced. Until then, just redraw. See T98594. */ + * unnecessary redraws could be reduced. Until then, just redraw. See #98594. */ if (ob && (ob->mode & OB_MODE_EDIT)) { if (sima->lock && (sima->flag & SI_DRAWSHADOW)) { ED_area_tag_refresh(area); diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index 3c0238806bff..a783ee32779b 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -145,7 +145,7 @@ static int mouse_nla_channels(bContext *C, bAnimContext *ac, int channel_index, } } - /* change active object - regardless of whether it is now selected [T37883] */ + /* change active object - regardless of whether it is now selected [#37883] */ ED_object_base_activate_with_mode_exit_if_needed(C, base); /* adds notifier */ if ((adt) && (adt->flag & ADT_UI_SELECTED)) { diff --git a/source/blender/editors/space_node/node_edit.cc b/source/blender/editors/space_node/node_edit.cc index 3ce4a9bf22fa..54dc0772c966 100644 --- a/source/blender/editors/space_node/node_edit.cc +++ b/source/blender/editors/space_node/node_edit.cc @@ -329,7 +329,7 @@ void ED_node_composite_job(const bContext *C, bNodeTree *nodetree, Scene *scene_ Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); - /* See T32272. */ + /* See #32272. */ if (G.is_rendering) { return; } diff --git a/source/blender/editors/space_node/node_group.cc b/source/blender/editors/space_node/node_group.cc index 7a025f05b107..6f5225c04919 100644 --- a/source/blender/editors/space_node/node_group.cc +++ b/source/blender/editors/space_node/node_group.cc @@ -235,7 +235,7 @@ static bool node_group_ungroup(Main *bmain, bNodeTree *ntree, bNode *gnode) * This also removes remaining links to and from interface nodes. */ if (ELEM(node->type, NODE_GROUP_INPUT, NODE_GROUP_OUTPUT)) { - /* We must delay removal since sockets will reference this node. see: T52092 */ + /* We must delay removal since sockets will reference this node. see: #52092 */ nodes_delayed_free.append(node); } diff --git a/source/blender/editors/space_node/node_relationships.cc b/source/blender/editors/space_node/node_relationships.cc index b2c12fe2ea40..73cc64bbf61b 100644 --- a/source/blender/editors/space_node/node_relationships.cc +++ b/source/blender/editors/space_node/node_relationships.cc @@ -353,7 +353,7 @@ static void snode_autoconnect(SpaceNode &snode, const bool allow_multiple, const bNode *node_fr = sorted_nodes[i]; bNode *node_to = sorted_nodes[i + 1]; - /* Corner case: input/output node aligned the wrong way around (T47729). */ + /* Corner case: input/output node aligned the wrong way around (#47729). */ if (BLI_listbase_is_empty(&node_to->inputs) || BLI_listbase_is_empty(&node_fr->outputs)) { std::swap(node_fr, node_to); } diff --git a/source/blender/editors/space_node/node_select.cc b/source/blender/editors/space_node/node_select.cc index fbd625932dd9..0fd6c6b72cb6 100644 --- a/source/blender/editors/space_node/node_select.cc +++ b/source/blender/editors/space_node/node_select.cc @@ -55,7 +55,7 @@ static bool is_event_over_node_or_socket(const bContext &C, const wmEvent &event /** * Function to detect if there is a visible view3d that uses workbench in texture mode. - * This function is for fixing T76970 for Blender 2.83. The actual fix should add a mechanism in + * This function is for fixing #76970 for Blender 2.83. The actual fix should add a mechanism in * the depsgraph that can be used by the draw engines to check if they need to be redrawn. * * We don't want to add these risky changes this close before releasing 2.83 without good testing diff --git a/source/blender/editors/space_node/node_view.cc b/source/blender/editors/space_node/node_view.cc index f64b44b00dc2..ce37057bcf33 100644 --- a/source/blender/editors/space_node/node_view.cc +++ b/source/blender/editors/space_node/node_view.cc @@ -645,7 +645,7 @@ static int sample_invoke(bContext *C, wmOperator *op, const wmEvent *event) ImageSampleInfo *info; /* Don't handle events intended for nodes (which rely on click/drag distinction). - * which this operator would use since sampling is normally activated on press, see: T98191. */ + * which this operator would use since sampling is normally activated on press, see: #98191. */ if (node_or_socket_isect_event(*C, *event)) { return OPERATOR_PASS_THROUGH; } diff --git a/source/blender/editors/space_node/space_node.cc b/source/blender/editors/space_node/space_node.cc index def49ad883b9..df8da8a68c03 100644 --- a/source/blender/editors/space_node/space_node.cc +++ b/source/blender/editors/space_node/space_node.cc @@ -71,7 +71,7 @@ void ED_node_tree_start(SpaceNode *snode, bNodeTree *ntree, ID *id, ID *from) if (ntree->type != NTREE_GEOMETRY) { /* This can probably be removed for all node tree types. It mainly exists because it was not - * possible to store id references in custom properties. Also see T36024. I don't want to + * possible to store id references in custom properties. Also see #36024. I don't want to * remove it for all tree types in bcon3 though. */ id_us_ensure_real(&ntree->id); } diff --git a/source/blender/editors/space_outliner/outliner_select.cc b/source/blender/editors/space_outliner/outliner_select.cc index 20319a8befe3..c2975833dcc1 100644 --- a/source/blender/editors/space_outliner/outliner_select.cc +++ b/source/blender/editors/space_outliner/outliner_select.cc @@ -363,7 +363,7 @@ static void tree_element_object_activate(bContext *C, /* Only in object mode so we can switch the active object, * keeping all objects in the current 'mode' selected, useful for multi-pose/edit mode. * This keeps the convention that all objects in the current mode are also selected. - * see T55246. */ + * see #55246. */ if ((scene->toolsettings->object_flag & SCE_OBJECT_MODE_LOCK) ? (ob->mode == OB_MODE_OBJECT) : true) { @@ -416,7 +416,7 @@ static void tree_element_material_activate(bContext *C, } /* Tagging object for update seems a bit stupid here, but looks like we have to do it - * for render views to update. See T42973. + * for render views to update. See #42973. * Note that RNA material update does it too, see e.g. rna_MaterialSlot_update(). */ DEG_id_tag_update((ID *)ob, ID_RECALC_TRANSFORM); WM_event_add_notifier(C, NC_MATERIAL | ND_SHADING_LINKS, nullptr); @@ -1402,7 +1402,7 @@ static void do_outliner_item_activate_tree_element(bContext *C, TSE_EBONE, TSE_LAYER_COLLECTION)) { /* Note about TSE_EBONE: In case of a same ID_AR datablock shared among several - * objects, we do not want to switch out of edit mode (see T48328 for details). */ + * objects, we do not want to switch out of edit mode (see #48328 for details). */ } else if (do_activate_data) { tree_element_object_activate(C, diff --git a/source/blender/editors/space_outliner/outliner_tree.cc b/source/blender/editors/space_outliner/outliner_tree.cc index 1502b6915de7..e1cc1a74c7a0 100644 --- a/source/blender/editors/space_outliner/outliner_tree.cc +++ b/source/blender/editors/space_outliner/outliner_tree.cc @@ -1570,7 +1570,7 @@ static int outliner_filter_subtree(SpaceOutliner *space_outliner, te_next = te->next; if (outliner_element_visible_get(scene, view_layer, te, exclude_filter) == false) { /* Don't free the tree, but extract the children from the parent and add to this tree. */ - /* This also needs filtering the subtree prior (see T69246). */ + /* This also needs filtering the subtree prior (see #69246). */ outliner_filter_subtree( space_outliner, scene, view_layer, &te->subtree, search_string, exclude_filter); te_next = outliner_extract_children_from_subtree(te, lb); diff --git a/source/blender/editors/space_outliner/space_outliner.cc b/source/blender/editors/space_outliner/space_outliner.cc index af2da7fa8724..d6b72c4eb7fd 100644 --- a/source/blender/editors/space_outliner/space_outliner.cc +++ b/source/blender/editors/space_outliner/space_outliner.cc @@ -432,7 +432,7 @@ static void outliner_id_remap(ScrArea *area, SpaceLink *slink, const struct IDRe if (unassigned) { /* Redraw is needed when removing data for multiple outlines show the same data. * without this, the stale data won't get fully flushed when this outliner - * is not the active outliner the user is interacting with. See T85976. */ + * is not the active outliner the user is interacting with. See #85976. */ ED_area_tag_redraw(area); } } diff --git a/source/blender/editors/space_script/script_edit.c b/source/blender/editors/space_script/script_edit.c index 05e9338a136a..a8cdf2b6642b 100644 --- a/source/blender/editors/space_script/script_edit.c +++ b/source/blender/editors/space_script/script_edit.c @@ -108,7 +108,7 @@ static int script_reload_exec(bContext *C, wmOperator *op) if (true) { /* Postpone when called from Python so this can be called from an operator * that might be re-registered, crashing Blender when we try to read from the - * freed operator type which, see T80694. */ + * freed operator type which, see #80694. */ BPY_run_string_exec(C, (const char *[]){"bpy", NULL}, "def fn():\n" diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c index 5d74ca966137..a4c1a9b11390 100644 --- a/source/blender/editors/space_sequencer/sequencer_draw.c +++ b/source/blender/editors/space_sequencer/sequencer_draw.c @@ -769,7 +769,7 @@ static void draw_seq_outline(Scene *scene, immUniformColor3ubv(col); /* 2px wide outline for selected strips. */ - /* XXX: some platforms don't support OpenGL lines wider than 1px (see T57570), + /* XXX: some platforms don't support OpenGL lines wider than 1px (see #57570), * draw outline as four boxes instead. */ if (seq->flag & SELECT) { /* Left */ diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index 4a0cf7e77c35..28d7f388ca56 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -1220,7 +1220,7 @@ int seq_effect_find_selected(Scene *scene, *r_selseq2 = seq2; *r_selseq3 = seq3; - /* TODO(Richard): This function needs some refactoring, this is just quick hack for T73828. */ + /* TODO(Richard): This function needs some refactoring, this is just quick hack for #73828. */ if (SEQ_effect_get_num_inputs(type) < 3) { *r_selseq3 = NULL; } diff --git a/source/blender/editors/space_view3d/space_view3d.cc b/source/blender/editors/space_view3d/space_view3d.cc index cd7794300f6e..5825b5466f64 100644 --- a/source/blender/editors/space_view3d/space_view3d.cc +++ b/source/blender/editors/space_view3d/space_view3d.cc @@ -1968,7 +1968,7 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes * it's simplest if all these methods behave consistently - respecting the object-mode * without showing the object. * - * See T85532 for alternatives that were considered. */ + * See #85532 for alternatives that were considered. */ const Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); BKE_view_layer_synced_ensure(scene, view_layer); @@ -2045,7 +2045,7 @@ static void view3d_id_remap(ScrArea *area, SpaceLink *slink, const struct IDRema view3d_id_remap_v3d(area, slink, view3d, mappings, false); view3d_id_remap_v3d_ob_centers(view3d, mappings); if (view3d->localvd != nullptr) { - /* Object centers in local-view aren't used, see: T52663 */ + /* Object centers in local-view aren't used, see: #52663 */ view3d_id_remap_v3d(area, slink, view3d->localvd, mappings, true); } BKE_viewer_path_id_remap(&view3d->viewer_path, mappings); diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index f71ce54729c2..380a0c47b3ea 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -223,7 +223,7 @@ static float compute_scale_factor(const float ve_median, const float median) * Apply helpers. * \note In case we only have one element, * copy directly the value instead of applying the diff or scale factor. - * Avoids some glitches when going e.g. from 3 to 0.0001 (see T37327). + * Avoids some glitches when going e.g. from 3 to 0.0001 (see #37327). */ static void apply_raw_diff(float *val, const int tot, const float ve_median, const float median) { @@ -1117,7 +1117,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float if (bezt->f2 & SELECT) { if (apply_vcos) { /* Here we always have to use the diff... :/ - * Cannot avoid some glitches when going e.g. from 3 to 0.0001 (see T37327), + * Cannot avoid some glitches when going e.g. from 3 to 0.0001 (see #37327), * unless we use doubles. */ add_v3_v3(bezt->vec[0], median->location); diff --git a/source/blender/editors/space_view3d/view3d_draw.cc b/source/blender/editors/space_view3d/view3d_draw.cc index b0590fba294d..7146f5e1f670 100644 --- a/source/blender/editors/space_view3d/view3d_draw.cc +++ b/source/blender/editors/space_view3d/view3d_draw.cc @@ -153,7 +153,7 @@ void ED_view3d_update_viewmat(Depsgraph *depsgraph, /* Calculate pixel-size factor once, this is used for lights and object-centers. */ { /* NOTE: '1.0f / len_v3(v1)' replaced 'len_v3(rv3d->viewmat[0])' - * because of float point precision problems at large values T23908. */ + * because of float point precision problems at large values #23908. */ float v1[3], v2[3]; float len_px, len_sc; @@ -2266,7 +2266,7 @@ void view3d_depths_rect_create(ARegion *region, rcti *rect, ViewDepths *r_d) } } -/* NOTE: with NOUVEAU drivers the #glReadPixels() is very slow. T24339. */ +/* NOTE: with NOUVEAU drivers the #glReadPixels() is very slow. #24339. */ static ViewDepths *view3d_depths_create(ARegion *region) { ViewDepths *d = MEM_cnew("ViewDepths"); diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 23e06c895fcf..d5b96e03f13b 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -957,7 +957,7 @@ void ED_view3d_cursor3d_position_rotation(bContext *C, /* As the tangent is arbitrary from the users point of view, * make the cursor 'roll' on the shortest angle. - * otherwise this can cause noticeable 'flipping', see T72419. */ + * otherwise this can cause noticeable 'flipping', see #72419. */ for (int axis = 0; axis < 2; axis++) { float tan_src[3] = {0, 0, 0}; tan_src[axis] = 1.0f; @@ -1032,7 +1032,7 @@ void ED_view3d_cursor3d_update(bContext *C, } else { /* Cursor may be outside of the view, - * prevent it getting 'lost', see: T40353 & T45301 */ + * prevent it getting 'lost', see: #40353 & #45301 */ zero_v2(rv3d->ofs_lock); } } diff --git a/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.cc b/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.cc index bf30f8b9f038..b3310f6084bd 100644 --- a/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.cc +++ b/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.cc @@ -46,7 +46,7 @@ /** * Check if drawing should be performed, clear the pre-selection in the case it's disabled. - * Without this, the gizmo would be visible while transforming. See T92954. + * Without this, the gizmo would be visible while transforming. See #92954. * * NOTE(@ideasman42): This is a workaround for the gizmo system, since typically poll * would be used for this purpose. The problem with using poll is once the gizmo is visible again diff --git a/source/blender/editors/space_view3d/view3d_gizmo_ruler.c b/source/blender/editors/space_view3d/view3d_gizmo_ruler.c index b9a30eac3c6a..4ab1e1d4ae48 100644 --- a/source/blender/editors/space_view3d/view3d_gizmo_ruler.c +++ b/source/blender/editors/space_view3d/view3d_gizmo_ruler.c @@ -467,7 +467,7 @@ static bool view3d_ruler_item_mousemove(const bContext *C, * in 3.0 this happened because left-click drag would both select and add a new ruler, * significantly increasing the likelihood of this happening. * Workaround this crash by checking the gizmo's custom-data has not been cleared. - * The key-map has also been modified not to trigger this bug, see T95591. + * The key-map has also been modified not to trigger this bug, see #95591. */ static bool gizmo_ruler_check_for_operator(const wmGizmoGroup *gzgroup) { diff --git a/source/blender/editors/space_view3d/view3d_gizmo_tool_generic.c b/source/blender/editors/space_view3d/view3d_gizmo_tool_generic.c index aa287403e232..3519a30e2225 100644 --- a/source/blender/editors/space_view3d/view3d_gizmo_tool_generic.c +++ b/source/blender/editors/space_view3d/view3d_gizmo_tool_generic.c @@ -50,7 +50,7 @@ static bool WIDGETGROUP_tool_generic_poll(const bContext *C, wmGizmoGroupType *g return false; } - /* Without this, refreshing the gizmo jitters in some cases with edit-mesh smooth. See T72948. */ + /* Without this, refreshing the gizmo jitters in some cases with edit-mesh smooth. See #72948. */ if (G.moving & G_TRANSFORM_EDIT) { return false; } diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index bfc2cf5214a2..4e768078fe5c 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -235,7 +235,7 @@ void VIEW3D_GT_navigate_rotate(struct wmGizmoType *gzt); void VIEW3D_GGT_placement(struct wmGizmoGroupType *gzgt); /* workaround for trivial but noticeable camera bug caused by imprecision - * between view border calculation in 2D/3D space, workaround for bug T28037. + * between view border calculation in 2D/3D space, workaround for bug #28037. * without this define we get the old behavior which is to try and align them * both which _mostly_ works fine, but when the camera moves beyond ~1000 in * any direction it starts to fail */ diff --git a/source/blender/editors/space_view3d/view3d_iterators.cc b/source/blender/editors/space_view3d/view3d_iterators.cc index 08d5509bbe14..e7e8eb5b2758 100644 --- a/source/blender/editors/space_view3d/view3d_iterators.cc +++ b/source/blender/editors/space_view3d/view3d_iterators.cc @@ -96,7 +96,7 @@ static int content_planes_from_clip_flag(const ARegion *region, * Edge projection is more involved since part of the edge may be behind the view * or extend beyond the far limits. In the case of single points, these can be ignored. * However it just may still be visible on screen, so constrained the edge to planes - * defined by the port to ensure both ends of the edge can be projected, see T32214. + * defined by the port to ensure both ends of the edge can be projected, see #32214. * * \note This is unrelated to #V3D_PROJ_TEST_CLIP_BB which must be checked separately. */ diff --git a/source/blender/editors/space_view3d/view3d_navigate.c b/source/blender/editors/space_view3d/view3d_navigate.c index ed0225f578bb..9f4710b28a04 100644 --- a/source/blender/editors/space_view3d/view3d_navigate.c +++ b/source/blender/editors/space_view3d/view3d_navigate.c @@ -819,7 +819,7 @@ static int view3d_all_exec(bContext *C, wmOperator *op) * object, but in this case there is no change in the scene, * only the cursor so I choice a ED_region_tag like * view3d_smooth_view do for the center_cursor. - * See bug T22640. + * See bug #22640. */ return OPERATOR_FINISHED; } diff --git a/source/blender/editors/space_view3d/view3d_navigate_ndof.c b/source/blender/editors/space_view3d/view3d_navigate_ndof.c index 47405f397752..0ddfa8dc0f31 100644 --- a/source/blender/editors/space_view3d/view3d_navigate_ndof.c +++ b/source/blender/editors/space_view3d/view3d_navigate_ndof.c @@ -549,7 +549,7 @@ static int ndof_orbit_zoom_invoke(bContext *C, wmOperator *op, const wmEvent *ev } } else { - /* NOTE: based on feedback from T67579, users want to have pan and orbit enabled at once. + /* NOTE: based on feedback from #67579, users want to have pan and orbit enabled at once. * It's arguable that orbit shouldn't pan (since we have a pan only operator), * so if there are users who like to separate orbit/pan operations - it can be a preference. */ const bool is_orbit_around_pivot = (U.ndof_flag & NDOF_MODE_ORBIT) || diff --git a/source/blender/editors/space_view3d/view3d_navigate_roll.c b/source/blender/editors/space_view3d/view3d_navigate_roll.c index 51b92cb23b33..266fafaec9e7 100644 --- a/source/blender/editors/space_view3d/view3d_navigate_roll.c +++ b/source/blender/editors/space_view3d/view3d_navigate_roll.c @@ -109,7 +109,7 @@ static int viewroll_modal(bContext *C, wmOperator *op, const wmEvent *event) } else if (event->type == vod->init.event_type) { /* Check `vod->init.event_type` first in case RMB was used to invoke. - * in this case confirming takes precedence over canceling, see: T102937. */ + * in this case confirming takes precedence over canceling, see: #102937. */ if (event->val == KM_RELEASE) { event_code = VIEW_CONFIRM; } diff --git a/source/blender/editors/space_view3d/view3d_select.cc b/source/blender/editors/space_view3d/view3d_select.cc index c0eaca859e1b..054137fd837d 100644 --- a/source/blender/editors/space_view3d/view3d_select.cc +++ b/source/blender/editors/space_view3d/view3d_select.cc @@ -2007,7 +2007,7 @@ static int selectbuffer_ret_hits_5(GPUSelectResult *buffer, * * \param do_nearest_xray_if_supported: When set, read in hits that don't stop * at the nearest surface. The hits must still be ordered by depth. - * Needed so we can step to the next, non-active object when it's already selected, see: T76445. + * Needed so we can step to the next, non-active object when it's already selected, see: #76445. */ static int mixed_bones_object_selectbuffer(ViewContext *vc, GPUSelectResult *buffer, @@ -2614,7 +2614,7 @@ static bool ed_object_select_pick(bContext *C, ViewLayer *view_layer = vc.view_layer; BKE_view_layer_synced_ensure(scene, view_layer); - /* Don't set when the context has no active object (hidden), see: T60807. */ + /* Don't set when the context has no active object (hidden), see: #60807. */ const Base *oldbasact = vc.obact ? BKE_view_layer_active_base_get(view_layer) : nullptr; /* Always start list from `basact` when cycling the selection. */ Base *startbase = (oldbasact && oldbasact->next) ? @@ -2628,7 +2628,7 @@ static bool ed_object_select_pick(bContext *C, /* For the most part this is equivalent to `(object_mode & OB_MODE_POSE) != 0` * however this logic should also run with weight-paint + pose selection. * Without this, selection in weight-paint mode can de-select armatures which isn't useful, - * see: T101686. */ + * see: #101686. */ const bool has_pose_old = (oldbasact && BKE_object_pose_armature_get_with_wpaint_check(oldbasact->object)); @@ -3028,7 +3028,7 @@ static int view3d_select_exec(bContext *C, wmOperator *op) if (obedit && enumerate) { /* Enumerate makes no sense in edit-mode unless also explicitly picking objects or bones. - * Pass the event through so the event may be handled by loop-select for e.g. see: T100204. */ + * Pass the event through so the event may be handled by loop-select for e.g. see: #100204. */ if (obedit->type != OB_ARMATURE) { return OPERATOR_PASS_THROUGH | OPERATOR_CANCELLED; } @@ -3153,8 +3153,8 @@ void VIEW3D_OT_select(wmOperatorType *ot) ot->srna, "object", false, "Object", "Use object selection (edit mode only)"); RNA_def_property_flag(prop, PROP_SKIP_SAVE); - /* Needed for select-through to usefully drag handles, see: T98254. - * NOTE: this option may be removed and become default behavior, see design task: T98552. */ + /* Needed for select-through to usefully drag handles, see: #98254. + * NOTE: this option may be removed and become default behavior, see design task: #98552. */ prop = RNA_def_boolean(ot->srna, "vert_without_handles", false, @@ -3796,7 +3796,7 @@ static bool do_object_box_select(bContext *C, ViewContext *vc, rcti *rect, const } } - /* The draw order doesn't always match the order we populate the engine, see: T51695. */ + /* The draw order doesn't always match the order we populate the engine, see: #51695. */ qsort(buffer, hits, sizeof(GPUSelectResult), opengl_bone_select_buffer_cmp); for (const GPUSelectResult *buf_iter = buffer, *buf_end = buf_iter + hits; buf_iter < buf_end; @@ -3857,7 +3857,7 @@ static bool do_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, const e if (hits > 0) { /* no need to loop if there's no hit */ - /* The draw order doesn't always match the order we populate the engine, see: T51695. */ + /* The draw order doesn't always match the order we populate the engine, see: #51695. */ qsort(buffer, hits, sizeof(GPUSelectResult), opengl_bone_select_buffer_cmp); for (const GPUSelectResult *buf_iter = buffer, *buf_end = buf_iter + hits; buf_iter < buf_end; diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index c630a1a56536..4cc282a1cab4 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -329,7 +329,7 @@ void view3d_winmatrix_set(Depsgraph *depsgraph, clipend); #endif - /* Note the code here was tweaked to avoid an apparent compiler bug in clang 13 (see T91680). */ + /* Note the code here was tweaked to avoid an apparent compiler bug in clang 13 (see #91680). */ rctf viewplane; if (rect) { /* Smaller viewplane subset for selection picking. */ @@ -667,7 +667,7 @@ int view3d_opengl_select_ex(ViewContext *vc, G.f |= G_FLAG_PICKSEL; /* Important we use the 'viewmat' and don't re-calculate since - * the object & bone view locking takes 'rect' into account, see: T51629. */ + * the object & bone view locking takes 'rect' into account, see: #51629. */ ED_view3d_draw_setup_view( wm, vc->win, depsgraph, scene, region, v3d, vc->rv3d->viewmat, NULL, &rect); @@ -702,7 +702,7 @@ int view3d_opengl_select_ex(ViewContext *vc, object_filter.user_data); hits = drw_select_loop_user_data.hits; /* FIX: This cleanup the state before doing another selection pass. - * (see T56695) */ + * (see #56695) */ GPU_select_cache_end(); } diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 3c95d480b78b..398e82573294 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -343,7 +343,7 @@ void projectFloatViewEx(TransInfo *t, const float vec[3], float adr[2], const eV adr[1] = vec[1]; } else if (t->region->regiontype == RGN_TYPE_WINDOW) { - /* allow points behind the view T33643. */ + /* allow points behind the view #33643. */ if (ED_view3d_project_float_global(t->region, vec, adr, flag) != V3D_PROJ_RET_OK) { /* XXX, 2.64 and prior did this, weak! */ adr[0] = t->region->winx / 2.0f; @@ -989,7 +989,7 @@ int transformEvent(TransInfo *t, const wmEvent *event) } } else if (transform_mode_is_changeable(t->mode)) { - /* Scale isn't normally very useful after extrude along normals, see T39756 */ + /* Scale isn't normally very useful after extrude along normals, see #39756 */ if ((t->con.mode & CON_APPLY) && (t->orient[t->orient_curr].type == V3D_ORIENT_NORMAL)) { stopConstraint(t); } @@ -1302,7 +1302,7 @@ int transformEvent(TransInfo *t, const wmEvent *event) /* Per transform event, if present */ if (t->handleEvent && (!handled || - /* Needed for vertex slide, see T38756. */ + /* Needed for vertex slide, see #38756. */ (event->type == MOUSEMOVE))) { t->redraw |= t->handleEvent(t, event); } @@ -1377,7 +1377,7 @@ bool calculateTransformCenter(bContext *C, int centerMode, float cent3d[3], floa static bool transinfo_show_overlay(const struct bContext *C, TransInfo *t, ARegion *region) { - /* Don't show overlays when not the active view and when overlay is disabled: T57139 */ + /* Don't show overlays when not the active view and when overlay is disabled: #57139 */ bool ok = false; if (region == t->region) { ok = true; @@ -1859,7 +1859,7 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve * * Do this only for translation/rotation/resize because only these * modes are available from gizmo and doing such check could - * lead to keymap conflicts for other modes (see T31584) + * lead to keymap conflicts for other modes (see #31584) */ if (ELEM(mode, TFM_TRANSLATION, TFM_ROTATION, TFM_RESIZE)) { LISTBASE_FOREACH (const wmKeyMapItem *, kmi, &t->keymap->items) { diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c index bbfae63b1b99..802851246c0c 100644 --- a/source/blender/editors/transform/transform_constraints.c +++ b/source/blender/editors/transform/transform_constraints.c @@ -421,7 +421,7 @@ static void applyAxisConstraintVec(const TransInfo *t, constraint_snap_plane_to_edge(t, plane, out); } else if (is_snap_to_face) { - /* Disabled, as it has not proven to be really useful. (See T82386). */ + /* Disabled, as it has not proven to be really useful. (See #82386). */ // constraint_snap_plane_to_face(t, plane, out); } else if (!isPlaneProjectionViewAligned(t, plane)) { diff --git a/source/blender/editors/transform/transform_convert.c b/source/blender/editors/transform/transform_convert.c index a2161daa58c7..211b72c0e77d 100644 --- a/source/blender/editors/transform/transform_convert.c +++ b/source/blender/editors/transform/transform_convert.c @@ -566,7 +566,7 @@ bool constraints_list_needinv(TransInfo *t, ListBase *list) /* constraints that require this only under special conditions */ if (con->type == CONSTRAINT_TYPE_CHILDOF) { - /* ChildOf constraint only works when using all location components, see T42256. */ + /* ChildOf constraint only works when using all location components, see #42256. */ bChildOfConstraint *data = (bChildOfConstraint *)con->data; if ((data->flag & CHILDOF_LOCX) && (data->flag & CHILDOF_LOCY) && @@ -609,7 +609,7 @@ bool constraints_list_needinv(TransInfo *t, ListBase *list) } else if (con->type == CONSTRAINT_TYPE_TRANSFORM) { /* Transform constraint needs it for rotation at least (r.57309), - * but doing so when translating may also mess things up, see: T36203. */ + * but doing so when translating may also mess things up, see: #36203. */ bTransformConstraint *data = (bTransformConstraint *)con->data; if (data->to == TRANS_ROTATION) { @@ -709,7 +709,7 @@ static int countAndCleanTransDataContainer(TransInfo *t) static void init_proportional_edit(TransInfo *t) { - /* NOTE: Proportional editing is not usable in pose mode yet T32444. */ + /* NOTE: Proportional editing is not usable in pose mode yet #32444. */ if (!ELEM(t->data_type, &TransConvertType_Action, &TransConvertType_Curve, @@ -1021,7 +1021,7 @@ void createTransData(bContext *C, TransInfo *t) if (t->data_type == &TransConvertType_Object) { t->options |= CTX_OBJECT; - /* Needed for correct Object.obmat after duplication, see: T62135. */ + /* Needed for correct Object.obmat after duplication, see: #62135. */ BKE_scene_graph_evaluated_ensure(t->depsgraph, CTX_data_main(t->context)); if ((t->settings->transform_flag & SCE_XFORM_DATA_ORIGIN) != 0) { @@ -1196,7 +1196,7 @@ void animrecord_check_state(TransInfo *t, struct ID *id) /* copy current "action blending" settings from adt to the strip, * as it was keyframed with these settings, so omitting them will - * change the effect [T54766] + * change the effect [#54766] */ if (is_first == false) { strip->blendmode = adt->act_blendmode; diff --git a/source/blender/editors/transform/transform_convert_armature.c b/source/blender/editors/transform/transform_convert_armature.c index 31d0dea3b96f..43fffdc634ac 100644 --- a/source/blender/editors/transform/transform_convert_armature.c +++ b/source/blender/editors/transform/transform_convert_armature.c @@ -338,7 +338,7 @@ static short pose_grab_with_ik_add(bPoseChannel *pchan) copy_v3_v3(data->grabtarget, pchan->pose_tail); /* watch-it! has to be 0 here, since we're still on the - * same bone for the first time through the loop T25885. */ + * same bone for the first time through the loop #25885. */ data->rootbone = 0; /* we only include bones that are part of a continual connected chain */ @@ -1051,9 +1051,9 @@ static void createTransArmatureVerts(bContext *UNUSED(C), TransInfo *t) copy_v3_v3(td->iloc, ebo->tail); /* Don't allow single selected tips to have a modified center, - * causes problem with snapping (see T45974). + * causes problem with snapping (see #45974). * However, in rotation mode, we want to keep that 'rotate bone around root with - * only its tip selected' behavior (see T46325). */ + * only its tip selected' behavior (see #46325). */ if ((t->around == V3D_AROUND_LOCAL_ORIGINS) && ((t->mode == TFM_ROTATION) || (ebo->flag & BONE_ROOTSEL))) { copy_v3_v3(td->center, ebo->head); @@ -1271,7 +1271,7 @@ static void recalcData_edit_armature(TransInfo *t) rotation_between_vecs_to_quat(qrot, td->axismtx[1], vec); mul_qt_v3(qrot, up_axis); - /* roll has a tendency to flip in certain orientations - T34283, T33974. */ + /* roll has a tendency to flip in certain orientations - #34283, #33974. */ roll = ED_armature_ebone_roll_to_vector(ebo, up_axis, false); ebo->roll = angle_compat_rad(roll, td->ival); } @@ -1612,7 +1612,7 @@ static short apply_targetless_ik(Object *ob) normalize_m3(rmat3); /* rotation */ - /* T22409 is partially caused by this, as slight numeric error introduced during + /* #22409 is partially caused by this, as slight numeric error introduced during * the solving process leads to locked-axis values changing. However, we cannot modify * the values here, or else there are huge discrepancies between IK-solver (interactive) * and applied poses. */ @@ -1712,7 +1712,7 @@ static void special_aftertrans_update__pose(bContext *C, TransInfo *t) if ((t->flag & T_AUTOIK) && (t->options & CTX_AUTOCONFIRM)) { /* when running transform non-interactively (operator exec), * we need to update the pose otherwise no updates get called during - * transform and the auto-ik is not applied. see T26164. */ + * transform and the auto-ik is not applied. see #26164. */ struct Object *pose_ob = tc->poseobj; BKE_pose_where_is(t->depsgraph, t->scene, pose_ob); } diff --git a/source/blender/editors/transform/transform_convert_curve.c b/source/blender/editors/transform/transform_convert_curve.c index b3ee49ef7ed1..8d1727e7ac7c 100644 --- a/source/blender/editors/transform/transform_convert_curve.c +++ b/source/blender/editors/transform/transform_convert_curve.c @@ -48,7 +48,7 @@ static int bezt_select_to_transform_triple_flag(const BezTriple *bezt, const boo * When a center point is being moved without the handles, * leaving the handles stationary makes no sense and only causes strange behavior, * where one handle is arbitrarily anchored, the other one is aligned and lengthened - * based on where the center point is moved. Also a bug when canceling, see: T52007. + * based on where the center point is moved. Also a bug when canceling, see: #52007. * * A more 'correct' solution could be to store handle locations in 'TransDataCurveHandleFlags'. * However that doesn't resolve odd behavior, so best transform the handles in this case. @@ -437,7 +437,7 @@ static void recalcData_curve(TransInfo *t) } } else { - /* Apply clipping after so we never project past the clip plane T25423. */ + /* Apply clipping after so we never project past the clip plane #25423. */ transform_convert_clip_mirror_modifier_apply(tc); /* Normal updating. */ diff --git a/source/blender/editors/transform/transform_convert_mesh.c b/source/blender/editors/transform/transform_convert_mesh.c index aeb7a223f641..902b995680fc 100644 --- a/source/blender/editors/transform/transform_convert_mesh.c +++ b/source/blender/editors/transform/transform_convert_mesh.c @@ -556,7 +556,7 @@ static void tc_mesh_customdatacorrect_apply_vert(struct TransCustomDataLayer *tc * * Since we only need to check if the vertex is in this corner, * its not important _which_ loop - as long as its not overlapping - * 'sv->co_orig_3d', see: T45096. */ + * 'sv->co_orig_3d', see: #45096. */ project_plane_normalized_v3_v3v3(v_proj[0], co_prev, v_proj_axis); while (UNLIKELY(((co_prev_ok = (len_squared_v3v3(v_proj[1], v_proj[0]) > eps)) == false) && ((l_prev = l_prev->prev) != l->next))) { @@ -1508,7 +1508,7 @@ static void createTransEditVerts(bContext *UNUSED(C), TransInfo *t) } /* Snap rotation along normal needs a common axis for whole islands, - * otherwise one get random crazy results, see T59104. + * otherwise one get random crazy results, see #59104. * However, we do not want to use the island center for the pivot/translation reference. */ const bool is_snap_rotate = ((t->mode == TFM_TRANSLATION) && /* There is not guarantee that snapping @@ -1517,7 +1517,7 @@ static void createTransEditVerts(bContext *UNUSED(C), TransInfo *t) (t->settings->snap_flag & SCE_SNAP_ROTATE) != 0) && (t->around != V3D_AROUND_LOCAL_ORIGINS)); - /* Even for translation this is needed because of island-orientation, see: T51651. */ + /* Even for translation this is needed because of island-orientation, see: #51651. */ const bool is_island_center = (t->around == V3D_AROUND_LOCAL_ORIGINS) || is_snap_rotate; if (is_island_center) { /* In this specific case, near-by vertices will need to know @@ -2046,7 +2046,7 @@ static void recalcData_mesh(TransInfo *t) bool do_mirror = !(t->flag & T_NO_MIRROR); FOREACH_TRANS_DATA_CONTAINER (t, tc) { - /* Apply clipping after so we never project past the clip plane T25423. */ + /* Apply clipping after so we never project past the clip plane #25423. */ transform_convert_clip_mirror_modifier_apply(tc); if (do_mirror) { diff --git a/source/blender/editors/transform/transform_convert_nla.c b/source/blender/editors/transform/transform_convert_nla.c index f38d25b440bd..5e460e0c11db 100644 --- a/source/blender/editors/transform/transform_convert_nla.c +++ b/source/blender/editors/transform/transform_convert_nla.c @@ -67,7 +67,7 @@ typedef struct TransDataNla { static void applyTransformNLA_translation(PointerRNA *strip_rna_ptr, const TransDataNla *transdata) { /* NOTE: we write these twice to avoid truncation errors which can arise when - * moving the strips a large distance using numeric input T33852. + * moving the strips a large distance using numeric input #33852. */ RNA_float_set(strip_rna_ptr, "frame_start", transdata->h1[0]); RNA_float_set(strip_rna_ptr, "frame_end", transdata->h2[0]); diff --git a/source/blender/editors/transform/transform_convert_object.c b/source/blender/editors/transform/transform_convert_object.c index 045b737c4f7c..a0364642d1f4 100644 --- a/source/blender/editors/transform/transform_convert_object.c +++ b/source/blender/editors/transform/transform_convert_object.c @@ -211,7 +211,7 @@ static void ObjectToTransData(TransInfo *t, TransData *td, Object *ob) copy_m4_m4(ob->object_to_world, object_eval->object_to_world); /* Only copy negative scale flag, this is the only flag which is modified by * the BKE_object_where_is_calc(). The rest of the flags we need to keep, - * otherwise we might lose dupli flags (see T61787). */ + * otherwise we might lose dupli flags (see #61787). */ ob->transflag &= ~OB_NEG_SCALE; ob->transflag |= (object_eval->transflag & OB_NEG_SCALE); @@ -274,7 +274,7 @@ static void ObjectToTransData(TransInfo *t, TransData *td, Object *ob) copy_m3_m4(totmat, ob->object_to_world); /* If the object scale is zero on any axis, this might result in a zero matrix. - * In this case, the transformation would not do anything, see: T50103. */ + * In this case, the transformation would not do anything, see: #50103. */ orthogonalize_m3_zero_axes(obmtx, 1.0f); orthogonalize_m3_zero_axes(totmat, 1.0f); @@ -857,7 +857,7 @@ static bool motionpath_need_update_object(Scene *scene, Object *ob) { /* XXX: there's potential here for problems with unkeyed rotations/scale, * but for now (until proper data-locality for baking operations), - * this should be a better fix for T24451 and T37755 + * this should be a better fix for #24451 and #37755 */ if (autokeyframe_cfra_can_key(scene, &ob->id)) { diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index d1f210ca7722..48edf180a817 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -512,7 +512,7 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve } } else { - /* Release confirms preference should not affect node editor (T69288, T70504). */ + /* Release confirms preference should not affect node editor (#69288, #70504). */ if (ISMOUSE_BUTTON(t->launch_event) && ((U.flag & USER_RELEASECONFIRM) || (t->spacetype == SPACE_NODE))) { /* Global "release confirm" on mouse bindings */ @@ -1422,7 +1422,7 @@ Object *transform_object_deform_pose_armature_get(const TransInfo *t, Object *ob if (!(ob->mode & OB_MODE_ALL_WEIGHT_PAINT)) { return NULL; } - /* Important that ob_armature can be set even when its not selected T23412. + /* Important that ob_armature can be set even when its not selected #23412. * Lines below just check is also visible. */ Object *ob_armature = BKE_modifiers_is_deformed_by_armature(ob); if (ob_armature && ob_armature->mode & OB_MODE_POSE) { diff --git a/source/blender/editors/transform/transform_gizmo_3d.cc b/source/blender/editors/transform/transform_gizmo_3d.cc index 4ffde75a701f..157a80e41465 100644 --- a/source/blender/editors/transform/transform_gizmo_3d.cc +++ b/source/blender/editors/transform/transform_gizmo_3d.cc @@ -1376,7 +1376,7 @@ static void gizmo_3d_setup_draw_default(wmGizmo *axis, const int axis_idx) WM_gizmo_set_flag(axis, WM_GIZMO_DRAW_MODAL, true); WM_gizmo_set_scale(axis, 0.2f); - /* Prevent axis gizmos overlapping the center point, see: T63744. */ + /* Prevent axis gizmos overlapping the center point, see: #63744. */ axis->select_bias = 2.0f; break; case MAN_AXIS_SCALE_C: @@ -1386,7 +1386,7 @@ static void gizmo_3d_setup_draw_default(wmGizmo *axis, const int axis_idx) RNA_float_set(axis->ptr, "arc_inner_factor", 1.0 / 6.0); WM_gizmo_set_scale(axis, 1.2f); - /* Prevent axis gizmos overlapping the center point, see: T63744. */ + /* Prevent axis gizmos overlapping the center point, see: #63744. */ axis->select_bias = -2.0f; break; @@ -1577,7 +1577,7 @@ static int gizmo_modal(bContext *C, const wmEvent *event, eWM_GizmoFlagTweak /*tweak_flag*/) { - /* Avoid unnecessary updates, partially address: T55458. */ + /* Avoid unnecessary updates, partially address: #55458. */ if (ELEM(event->type, TIMER, INBETWEEN_MOUSEMOVE)) { return OPERATOR_RUNNING_MODAL; } diff --git a/source/blender/editors/transform/transform_input.c b/source/blender/editors/transform/transform_input.c index 38dbe7422799..1295486550a8 100644 --- a/source/blender/editors/transform/transform_input.c +++ b/source/blender/editors/transform/transform_input.c @@ -55,7 +55,7 @@ static void InputSpringFlip(TransInfo *t, MouseInput *mi, const double mval[2], InputSpring(t, mi, mval, output); /* flip scale */ - /* values can become really big when zoomed in so use longs T26598. */ + /* values can become really big when zoomed in so use longs #26598. */ if (((int64_t)((int)mi->center[0] - mval[0]) * (int64_t)((int)mi->center[0] - mi->imval[0]) + (int64_t)((int)mi->center[1] - mval[1]) * (int64_t)((int)mi->center[1] - mi->imval[1])) < 0) { diff --git a/source/blender/editors/transform/transform_mode.c b/source/blender/editors/transform/transform_mode.c index d76dba63262f..4014fae07b37 100644 --- a/source/blender/editors/transform/transform_mode.c +++ b/source/blender/editors/transform/transform_mode.c @@ -884,7 +884,7 @@ void headerResize(TransInfo *t, const float vec[3], char *str, const int str_siz /** * \a smat is reference matrix only. * - * \note this is a tricky area, before making changes see: T29633, T42444 + * \note this is a tricky area, before making changes see: #29633, #42444 */ static void TransMat3ToSize(const float mat[3][3], const float smat[3][3], float size[3]) { @@ -1041,7 +1041,7 @@ void ElementResize(const TransInfo *t, if (t->options & (CTX_OBJECT | CTX_POSE_BONE)) { if (t->options & CTX_POSE_BONE) { /* Without this, the resulting location of scaled bones aren't correct, - * especially noticeable scaling root or disconnected bones around the cursor, see T92515. */ + * especially noticeable scaling root or disconnected bones around the cursor, see #92515. */ mul_mat3_m4_v3(tc->poseobj->object_to_world, vec); } mul_m3_v3(td->smtx, vec); diff --git a/source/blender/editors/transform/transform_mode_edge_slide.c b/source/blender/editors/transform/transform_mode_edge_slide.c index df8517563b5b..f54624c1a1b2 100644 --- a/source/blender/editors/transform/transform_mode_edge_slide.c +++ b/source/blender/editors/transform/transform_mode_edge_slide.c @@ -429,7 +429,7 @@ static void calcEdgeSlide_mval_range(TransInfo *t, continue; } - /* This test is only relevant if object is not wire-drawn! See T32068. */ + /* This test is only relevant if object is not wire-drawn! See #32068. */ bool is_visible = !use_occlude_geometry || BMBVH_EdgeVisible(bmbvh, e, t->depsgraph, region, v3d, tc->obedit); @@ -617,7 +617,7 @@ static EdgeSlideData *createEdgeSlideVerts_double_side(TransInfo *t, TransDataCo * which calculates the direction to slide based on clever checks. * * otherwise we simply use 'e_dir' as an edge-rail. - * (which is better when the attached edge is a boundary, see: T40422) + * (which is better when the attached edge is a boundary, see: #40422) */ #define EDGESLIDE_VERT_IS_INNER(v, e_dir) \ ((BM_edge_is_boundary(e_dir) == false) && (BM_vert_edge_count_nonwire(v) == 2)) @@ -717,7 +717,7 @@ static EdgeSlideData *createEdgeSlideVerts_double_side(TransInfo *t, TransDataCo BMVert *v_prev; BMEdge *e_prev; - /* XXX, 'sv' will initialize multiple times, this is suspicious. see T34024. */ + /* XXX, 'sv' will initialize multiple times, this is suspicious. see #34024. */ BLI_assert(v != NULL); BLI_assert(sv_table[BM_elem_index_get(v)] != INDEX_INVALID); sv = SV_FROM_VERT(v); diff --git a/source/blender/editors/transform/transform_mode_resize.c b/source/blender/editors/transform/transform_mode_resize.c index bf9fba2b1e79..5a42edb9ad48 100644 --- a/source/blender/editors/transform/transform_mode_resize.c +++ b/source/blender/editors/transform/transform_mode_resize.c @@ -70,7 +70,7 @@ static float ResizeBetween(TransInfo *t, const float p1[3], const float p2[3]) /* Use 'invalid' dist when `center == p1` (after projecting), * in this case scale will _never_ move the point in relation to the center, - * so it makes no sense to take it into account when scaling. see: T46503 */ + * so it makes no sense to take it into account when scaling. see: #46503 */ return len_d1 != 0.0f ? len_v3(d2) / len_d1 : TRANSFORM_DIST_INVALID; } @@ -96,7 +96,7 @@ static void constrain_scale_to_boundary(const float numerator, float *scale) { /* It's possible the numerator or denominator can be very close to zero due to so-called - * "catastrophic cancellation". See T102923 for an example. We use epsilon tests here to + * "catastrophic cancellation". See #102923 for an example. We use epsilon tests here to * distinguish between genuine negative coordinates versus coordinates that should be rounded off * to zero. */ const float epsilon = 0.25f / 65536.0f; /* i.e. Quarter of a texel on a 65536 x 65536 texture. */ diff --git a/source/blender/editors/transform/transform_mode_translate.c b/source/blender/editors/transform/transform_mode_translate.c index b171b227aa6f..3ea18ef11524 100644 --- a/source/blender/editors/transform/transform_mode_translate.c +++ b/source/blender/editors/transform/transform_mode_translate.c @@ -500,7 +500,7 @@ static void applyTranslationValue(TransInfo *t, const float vec[3]) float pivot_local[3]; if (rotate_mode != TRANSLATE_ROTATE_OFF) { copy_v3_v3(pivot_local, t->tsnap.snap_source); - /* The pivot has to be in local-space (see T49494) */ + /* The pivot has to be in local-space (see #49494) */ if (tc->use_local_mat) { mul_m4_v3(tc->imat, pivot_local); } @@ -693,7 +693,7 @@ void initTranslation(TransInfo *t) copy_v3_fl(t->num.val_inc, t->snap[0]); t->num.unit_sys = t->scene->unit.system; if (t->spacetype == SPACE_VIEW3D) { - /* Handling units makes only sense in 3Dview... See T38877. */ + /* Handling units makes only sense in 3Dview... See #38877. */ t->num.unit_type[0] = B_UNIT_LENGTH; t->num.unit_type[1] = B_UNIT_LENGTH; t->num.unit_type[2] = B_UNIT_LENGTH; diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index 0da3bf4d85f5..cca191b99afb 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -420,10 +420,10 @@ static int transform_modal(bContext *C, wmOperator *op, const wmEvent *event) t->context = NULL; /* XXX, workaround: active needs to be calculated before transforming, - * since we're not reading from 'td->center' in this case. see: T40241 */ + * since we're not reading from 'td->center' in this case. see: #40241 */ if (t->tsnap.source_operation == SCE_SNAP_SOURCE_ACTIVE) { /* In camera view, tsnap callback is not set - * (see #initSnappingMode() in transform_snap.c, and T40348). */ + * (see #initSnappingMode() in transform_snap.c, and #40348). */ if (t->tsnap.snap_source_fn && ((t->tsnap.status & SNAP_SOURCE_FOUND) == 0)) { t->tsnap.snap_source_fn(t); } diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c index 66fee01f864b..0cf9d5fa3091 100644 --- a/source/blender/editors/transform/transform_orientations.c +++ b/source/blender/editors/transform/transform_orientations.c @@ -526,7 +526,7 @@ short ED_transform_calc_orientation_from_type_ex(const Scene *scene, if (ob) { if (ob->mode & OB_MODE_POSE) { /* Each bone moves on its own local axis, but to avoid confusion, - * use the active pones axis for display T33575, this works as expected on a single + * use the active pones axis for display #33575, this works as expected on a single * bone and users who select many bones will understand what's going on and what local * means when they start transforming. */ ED_getTransformOrientationMatrix(scene, view_layer, v3d, ob, obedit, pivot_point, r_mat); @@ -889,7 +889,7 @@ int getTransformOrientation_ex(const Scene *scene, * - Point the Z axis outwards (the same direction as the normals). * * \note Z points outwards - along the normal. - * take care making changes here, see: T38592, T43708 + * take care making changes here, see: #38592, #43708 */ /* be deterministic where possible and ensure v_pair[0] is active */ @@ -1197,7 +1197,7 @@ int getTransformOrientation_ex(const Scene *scene, /* align normal to edge direction (so normal is perpendicular to the plane). * 'ORIENTATION_EDGE' will do the other way around. - * This has to be done **after** applying obmat, see T45775! */ + * This has to be done **after** applying obmat, see #45775! */ project_v3_v3v3(tvec, normal, plane); sub_v3_v3(normal, tvec); } diff --git a/source/blender/editors/transform/transform_snap.cc b/source/blender/editors/transform/transform_snap.cc index 425f97a23f44..50f6da7486db 100644 --- a/source/blender/editors/transform/transform_snap.cc +++ b/source/blender/editors/transform/transform_snap.cc @@ -699,10 +699,10 @@ static eSnapTargetOP snap_target_select_from_spacetype(TransInfo *t) if (t->options & (CTX_GPENCIL_STROKES | CTX_CURSOR | CTX_OBMODE_XFORM_OBDATA)) { /* In "Edit Strokes" mode, - * snap tool can perform snap to selected or active objects (see T49632) + * snap tool can perform snap to selected or active objects (see #49632) * TODO: perform self snap in gpencil_strokes. * - * When we're moving the origins, allow snapping onto our own geometry (see T69132). */ + * When we're moving the origins, allow snapping onto our own geometry (see #69132). */ return ret; } diff --git a/source/blender/editors/transform/transform_snap_object.cc b/source/blender/editors/transform/transform_snap_object.cc index a33f0bf6fca4..7fa13180f673 100644 --- a/source/blender/editors/transform/transform_snap_object.cc +++ b/source/blender/editors/transform/transform_snap_object.cc @@ -162,7 +162,7 @@ struct SnapObjectContext { * * - When the return value is null the `BKE_editmesh_from_object(ob_eval)` should be used. * - In rare cases there is no evaluated mesh available and a null result doesn't imply an - * edit-mesh, so callers need to account for a null edit-mesh too, see: T96536. + * edit-mesh, so callers need to account for a null edit-mesh too, see: #96536. */ static ID *data_for_snap(Object *ob_eval, eSnapEditType edit_mode_type, bool *r_use_hide) { @@ -726,7 +726,7 @@ static bool raycastMesh(SnapObjectContext *sctx, } /* We pass a temp ray_start, set from object's boundbox, to avoid precision issues with - * very far away ray_start values (as returned in case of ortho view3d), see T50486, T38358. + * very far away ray_start values (as returned in case of ortho view3d), see #50486, #38358. */ if (len_diff > 400.0f) { /* Make temporary start point a bit away from bounding-box hit point. */ @@ -860,7 +860,7 @@ static bool raycastEditMesh(SnapObjectContext *sctx, } /* We pass a temp ray_start, set from object's boundbox, to avoid precision issues with - * very far away ray_start values (as returned in case of ortho view3d), see T50486, T38358. + * very far away ray_start values (as returned in case of ortho view3d), see #50486, #38358. */ if (len_diff > 400.0f) { len_diff -= local_scale; /* make temp start point a bit away from bbox hit point. */ @@ -1375,7 +1375,7 @@ static bool snap_bound_box_check_dist(const float min[3], float dist_px_sq) { /* In vertex and edges you need to get the pixel distance from ray to BoundBox, - * see: T46099, T46816 */ + * see: #46099, #46816 */ DistProjectedAABBPrecalc data_precalc; dist_squared_to_projected_aabb_precalc(&data_precalc, lpmat, win_size, mval); diff --git a/source/blender/editors/undo/ed_undo.cc b/source/blender/editors/undo/ed_undo.cc index 1028867ce748..b4a42f9e1eac 100644 --- a/source/blender/editors/undo/ed_undo.cc +++ b/source/blender/editors/undo/ed_undo.cc @@ -121,7 +121,7 @@ void ED_undo_push(bContext *C, const char *str) } if (G.background) { /* Python developers may have explicitly created the undo stack in background mode, - * otherwise allow it to be nullptr, see: T60934. + * otherwise allow it to be nullptr, see: #60934. * Otherwise it must never be nullptr, even when undo is disabled. */ if (wm->undo_stack == nullptr) { return; @@ -428,7 +428,7 @@ bool ED_undo_is_valid(const bContext *C, const char *undoname) bool ED_undo_is_memfile_compatible(const bContext *C) { - /* Some modes don't co-exist with memfile undo, disable their use: T60593 + /* Some modes don't co-exist with memfile undo, disable their use: #60593 * (this matches 2.7x behavior). */ const Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); @@ -511,7 +511,7 @@ static int ed_undo_exec(bContext *C, wmOperator *op) static int ed_undo_push_exec(bContext *C, wmOperator *op) { if (G.background) { - /* Exception for background mode, see: T60934. + /* Exception for background mode, see: #60934. * NOTE: since the undo stack isn't initialized on startup, background mode behavior * won't match regular usage, this is just for scripts to do explicit undo pushes. */ wmWindowManager *wm = CTX_wm_manager(C); @@ -546,7 +546,7 @@ static int ed_undo_redo_exec(bContext *C, wmOperator * /*op*/) return ret; } -/* Disable in background mode, we could support if it's useful, T60934. */ +/* Disable in background mode, we could support if it's useful, #60934. */ static bool ed_undo_is_init_poll(bContext *C) { @@ -680,7 +680,7 @@ int ED_undo_operator_repeat(bContext *C, wmOperator *op) if (WM_operator_repeat_check(C, op) && WM_operator_poll(C, op->type) && /* NOTE: undo/redo can't run if there are jobs active, * check for screen jobs only so jobs like material/texture/world preview - * (which copy their data), won't stop redo, see T29579], + * (which copy their data), won't stop redo, see #29579. * * NOTE: WM_operator_check_ui_enabled() jobs test _must_ stay in sync with this. */ (WM_jobs_test(wm, scene, WM_JOB_TYPE_ANY) == 0)) { diff --git a/source/blender/editors/util/ed_transverts.c b/source/blender/editors/util/ed_transverts.c index 334516bfd6cf..e91242cb9e62 100644 --- a/source/blender/editors/util/ed_transverts.c +++ b/source/blender/editors/util/ed_transverts.c @@ -164,7 +164,7 @@ static void set_mapped_co(void *vuserdata, int index, const float co[3], const f tv = &tv[BM_elem_index_get(eve)]; /* Be clever, get the closest vertex to the original, - * behaves most logically when the mirror modifier is used for eg T33051. */ + * behaves most logically when the mirror modifier is used for eg #33051. */ if ((tv->flag & TX_VERT_USE_MAPLOC) == 0) { /* first time */ copy_v3_v3(tv->maploc, co); diff --git a/source/blender/editors/util/ed_util.cc b/source/blender/editors/util/ed_util.cc index eed46ea1c35e..77e5be4e0dd1 100644 --- a/source/blender/editors/util/ed_util.cc +++ b/source/blender/editors/util/ed_util.cc @@ -144,7 +144,7 @@ void ED_editors_init(bContext *C) /* Other edit/paint/etc. modes are only settable for objects visible in active scene currently. * Otherwise, they (and their obdata) may not be (fully) evaluated, which is mandatory for some * modes like Sculpt. - * Ref. T98225. */ + * Ref. #98225. */ if (!BKE_collection_has_object_recursive(scene->master_collection, ob) || !BKE_scene_has_object(scene, ob) || (ob->visibility_flag & OB_HIDE_VIEWPORT) != 0) { continue; @@ -193,7 +193,7 @@ void ED_editors_init(bContext *C) /* Enforce a full redraw for the first time areas/regions get drawn. Further region init/refresh * just triggers non-rebuild redraws (#RGN_DRAW_NO_REBUILD). Usually a full redraw would be * triggered by a `NC_WM | ND_FILEREAD` notifier, but if a startup script calls an operator that - * redraws the window, notifiers are not handled before the operator runs. See T98461. */ + * redraws the window, notifiers are not handled before the operator runs. See #98461. */ LISTBASE_FOREACH (wmWindow *, win, &wm->windows) { const bScreen *screen = WM_window_get_active_screen(win); @@ -235,7 +235,7 @@ void ED_editors_exit(Main *bmain, bool do_undo_system) * Python for example can do this, some callers to #ED_object_base_activate * don't handle modes either (doing so isn't always practical). * - * To reproduce the problem where stale data is used, see: T84920. */ + * To reproduce the problem where stale data is used, see: #84920. */ LISTBASE_FOREACH (Object *, ob, &bmain->objects) { if (ED_object_editmode_free_ex(bmain, ob)) { if (do_undo_system == false) { @@ -258,7 +258,7 @@ bool ED_editors_flush_edits_for_object_ex(Main *bmain, if (ob->mode & OB_MODE_SCULPT) { /* Don't allow flushing while in the middle of a stroke (frees data in use). * Auto-save prevents this from happening but scripts - * may cause a flush on saving: T53986. */ + * may cause a flush on saving: #53986. */ if (ob->sculpt != nullptr && ob->sculpt->cache == nullptr) { char *needs_flush_ptr = &ob->sculpt->needs_flush_to_id; if (check_needs_flush && (*needs_flush_ptr == 0)) { diff --git a/source/blender/editors/util/numinput.c b/source/blender/editors/util/numinput.c index 60cbc2a2df65..0e9f6dce6b98 100644 --- a/source/blender/editors/util/numinput.c +++ b/source/blender/editors/util/numinput.c @@ -455,7 +455,7 @@ bool handleNumInput(bContext *C, NumInput *n, const wmEvent *event) return true; case EVT_PADPERIOD: case EVT_PERIODKEY: - /* Force number-pad "." since some OS's/countries generate a comma char, see: T37992 */ + /* Force number-pad "." since some OS's/countries generate a comma char, see: #37992 */ ascii[0] = '.'; utf8_buf = ascii; break; @@ -594,7 +594,7 @@ bool handleNumInput(bContext *C, NumInput *n, const wmEvent *event) if (n->val_flag[idx] & NUM_INVERSE) { val = n->val[idx]; /* If we invert on radians when user is in degrees, - * you get unexpected results... See T53463. */ + * you get unexpected results... See #53463. */ if (!n->unit_use_radians && n->unit_type[idx] == B_UNIT_ROTATION) { val = RAD2DEG(val); } diff --git a/source/blender/editors/uvedit/uvedit_rip.c b/source/blender/editors/uvedit/uvedit_rip.c index 6cb6e67cced7..7517a5267220 100644 --- a/source/blender/editors/uvedit/uvedit_rip.c +++ b/source/blender/editors/uvedit/uvedit_rip.c @@ -804,7 +804,7 @@ static bool uv_rip_object(Scene *scene, Object *obedit, const float co[2], const * to detach the selection. * * We could also extract an edge loop from the boundary - * however in practice it's not that useful, see T78751. */ + * however in practice it's not that useful, see #78751. */ if (is_select_all_any) { BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { diff --git a/source/blender/editors/uvedit/uvedit_select.c b/source/blender/editors/uvedit/uvedit_select.c index 3e070d41dc09..e41e53c591b6 100644 --- a/source/blender/editors/uvedit/uvedit_select.c +++ b/source/blender/editors/uvedit/uvedit_select.c @@ -1803,9 +1803,9 @@ static void uv_select_linked_multi(Scene *scene, BM_mesh_elem_table_ensure(em->bm, BM_FACE); /* we can use this too */ - /* NOTE: we had 'use winding' so we don't consider overlapping islands as connected, see T44320 + /* NOTE: we had 'use winding' so we don't consider overlapping islands as connected, see #44320 * this made *every* projection split the island into front/back islands. - * Keep 'use_winding' to false, see: T50970. + * Keep 'use_winding' to false, see: #50970. * * Better solve this by having a delimit option for select-linked operator, * keeping island-select working as is. */ @@ -4288,7 +4288,7 @@ static bool overlap_tri_tri_uv_test(const float t1[3][2], * However, the `endpoint_bias` on segment intersections causes _exact_ overlapping * triangles not to be detected. * - * Resolve this problem at the small cost of calculating the triangle center, see T85508. */ + * Resolve this problem at the small cost of calculating the triangle center, see #85508. */ mid_v2_v2v2v2(vi, UNPACK3(t1)); if (isect_point_tri_v2(vi, UNPACK3(t2)) != 0) { return true; @@ -4388,7 +4388,7 @@ static int uv_select_overlap(bContext *C, const bool extend) BLI_polyfill_calc_arena(uv_verts, face_len, coords_sign, indices, arena); /* A beauty fill is necessary to remove degenerate triangles that may be produced from the - * above poly-fill (see T103913), otherwise the overlap tests can fail. */ + * above poly-fill (see #103913), otherwise the overlap tests can fail. */ BLI_polyfill_beautify(uv_verts, face_len, indices, arena, heap); for (int t = 0; t < tri_len; t++) { diff --git a/source/blender/editors/uvedit/uvedit_smart_stitch.c b/source/blender/editors/uvedit/uvedit_smart_stitch.c index 356fbde0b72a..4c5da3a0d57b 100644 --- a/source/blender/editors/uvedit/uvedit_smart_stitch.c +++ b/source/blender/editors/uvedit/uvedit_smart_stitch.c @@ -1839,7 +1839,7 @@ static StitchState *stitch_init(bContext *C, state->em = em; /* Workaround for sync-select & face-select mode which implies all selected faces are detached, - * for stitch this isn't useful behavior, see T86924. */ + * for stitch this isn't useful behavior, see #86924. */ const int selectmode_orig = scene->toolsettings->selectmode; scene->toolsettings->selectmode = SCE_SELECT_VERTEX; state->element_map = BM_uv_element_map_create(state->em->bm, scene, false, true, true, true); diff --git a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp index 53e25fb4a622..dc6e13b3d3a1 100644 --- a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp +++ b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp @@ -50,7 +50,7 @@ NodeGroup *BlenderFileLoader::Load() // Adjust clipping start/end and set up a Z offset when the viewport preview // is used with the orthographic view. In this case, _re->clip_start is negative, // while Freestyle assumes that imported mesh data are in the camera coordinate - // system with the view point located at origin [bug T36009]. + // system with the view point located at origin [bug #36009]. _z_near = -0.001f; _z_offset = _re->clip_start + _z_near; _z_far = -_re->clip_end + _z_offset; diff --git a/source/blender/freestyle/intern/python/BPy_Convert.cpp b/source/blender/freestyle/intern/python/BPy_Convert.cpp index 0701b1c4ef36..668f654159bb 100644 --- a/source/blender/freestyle/intern/python/BPy_Convert.cpp +++ b/source/blender/freestyle/intern/python/BPy_Convert.cpp @@ -376,7 +376,7 @@ PyObject *BPy_CurvePoint_from_CurvePoint(CurvePoint &cp) // member whose value is mutable upon iteration over different CurvePoints. // It is likely that such a mutable reference is passed to this function, // so that a new allocated CurvePoint instance is created here to avoid - // nasty bugs (cf. T41464). + // nasty bugs (cf. #41464). ((BPy_CurvePoint *)py_cp)->cp = new CurvePoint(cp); ((BPy_CurvePoint *)py_cp)->py_if0D.if0D = ((BPy_CurvePoint *)py_cp)->cp; ((BPy_CurvePoint *)py_cp)->py_if0D.borrowed = false; diff --git a/source/blender/freestyle/intern/winged_edge/WEdge.cpp b/source/blender/freestyle/intern/winged_edge/WEdge.cpp index 3082988bd362..677029feb4cc 100644 --- a/source/blender/freestyle/intern/winged_edge/WEdge.cpp +++ b/source/blender/freestyle/intern/winged_edge/WEdge.cpp @@ -644,7 +644,7 @@ WFace *WShape::MakeFace(vector &iVertexList, vector::iterator it; // compute the face normal (v1v2 ^ v1v3) - // Double precision numbers are used here to avoid truncation errors [T47705] + // Double precision numbers are used here to avoid truncation errors [#47705] Vec3r v1, v2, v3; it = iVertexList.begin(); v1 = (*it)->GetVertex(); diff --git a/source/blender/geometry/intern/uv_parametrizer.cc b/source/blender/geometry/intern/uv_parametrizer.cc index cd97001bab6f..61f37ca5fd78 100644 --- a/source/blender/geometry/intern/uv_parametrizer.cc +++ b/source/blender/geometry/intern/uv_parametrizer.cc @@ -353,7 +353,7 @@ static void p_triangle_angles( *r_a2 = angle_v3v3v3(v1, v2, v3); *r_a3 = angle_v3v3v3(v2, v3, v1); - /* Fix for degenerate geometry e.g. v1 = sum(v2 + v3). See T100874 */ + /* Fix for degenerate geometry e.g. v1 = sum(v2 + v3). See #100874 */ fix_large_angle(v1, v2, v3, r_a1, r_a2, r_a3); fix_large_angle(v2, v3, v1, r_a2, r_a3, r_a1); fix_large_angle(v3, v1, v2, r_a3, r_a1, r_a2); @@ -3259,7 +3259,7 @@ static float p_face_stretch(PFace *f) if (area <= 0.0f) { /* When a face is flipped, provide a large penalty. - * Add on a slight gradient to unflip the face, see also: T99781. */ + * Add on a slight gradient to unflip the face, see also: #99781. */ return 1e8f * (1.0f + p_edge_uv_length(e1) + p_edge_uv_length(e2) + p_edge_uv_length(e3)); } @@ -3871,7 +3871,7 @@ void GEO_uv_parametrizer_face_add(ParamHandle *phandle, if (nverts > 3) { /* Protect against (manifold) geometry which has a non-manifold triangulation. - * See T102543. */ + * See #102543. */ blender::Vector permute; permute.reserve(nverts); diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc index fe8621bb9fe7..920707218162 100644 --- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc +++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc @@ -2458,7 +2458,7 @@ static void lineart_object_load_single_instance(LineartData *ld, if ((!use_mesh) || use_mesh->edit_mesh) { /* If the object is being edited, then the mesh is not evaluated fully into the final * result, do not load them. This could be caused by incorrect evaluation order due to - * the way line art uses depsgraph.See T102612 for explanation of this workaround. */ + * the way line art uses depsgraph.See #102612 for explanation of this workaround. */ return; } } diff --git a/source/blender/gpu/GPU_matrix.h b/source/blender/gpu/GPU_matrix.h index 2a9c4a89b2ad..ed95bf8185f4 100644 --- a/source/blender/gpu/GPU_matrix.h +++ b/source/blender/gpu/GPU_matrix.h @@ -95,7 +95,7 @@ struct GPUMatrixUnproject_Precalc { /** * Result of #projmat_dimensions_db. * Using double precision here is important as far clipping ranges - * can cause divide-by-zero when using float, see: T66937. + * can cause divide-by-zero when using float, see: #66937. */ struct { double xmin, xmax; diff --git a/source/blender/gpu/intern/gpu_codegen.cc b/source/blender/gpu/intern/gpu_codegen.cc index 7991f845ffd5..351334537fea 100644 --- a/source/blender/gpu/intern/gpu_codegen.cc +++ b/source/blender/gpu/intern/gpu_codegen.cc @@ -369,7 +369,7 @@ void GPUCodegen::generate_resources() { GPUCodegenCreateInfo &info = *create_info; - /* Ref. T98190: Defines are optimizations for old compilers. + /* Ref. #98190: Defines are optimizations for old compilers. * Might become unnecessary with EEVEE-Next. */ if (GPU_material_flag_get(&mat, GPU_MATFLAG_PRINCIPLED_CLEARCOAT)) { info.define("PRINCIPLED_CLEARCOAT"); diff --git a/source/blender/gpu/intern/gpu_immediate.cc b/source/blender/gpu/intern/gpu_immediate.cc index 81c0a65bb7c9..2c4f43cdde8b 100644 --- a/source/blender/gpu/intern/gpu_immediate.cc +++ b/source/blender/gpu/intern/gpu_immediate.cc @@ -163,7 +163,7 @@ static void wide_line_workaround_start(GPUPrimType prim_type) immUniform1f("lineWidth", line_width); if (GPU_blend_get() == GPU_BLEND_NONE) { - /* Disable line smoothing when blending is disabled (see T81827). */ + /* Disable line smoothing when blending is disabled (see #81827). */ immUniform1i("lineSmooth", 0); } diff --git a/source/blender/gpu/intern/gpu_index_buffer_private.hh b/source/blender/gpu/intern/gpu_index_buffer_private.hh index 4099d6641a6d..cb55045d7758 100644 --- a/source/blender/gpu/intern/gpu_index_buffer_private.hh +++ b/source/blender/gpu/intern/gpu_index_buffer_private.hh @@ -72,7 +72,7 @@ class IndexBuf { uint32_t index_len_get() const { /* Return 0 to bypass drawing for index buffers full of restart indices. - * They can lead to graphical glitches on some systems. (See T96892) */ + * They can lead to graphical glitches on some systems. (See #96892) */ return is_empty_ ? 0 : index_len_; } uint32_t index_start_get() const diff --git a/source/blender/gpu/intern/gpu_select_sample_query.cc b/source/blender/gpu/intern/gpu_select_sample_query.cc index 7393dfd0d816..0912e0a3b20d 100644 --- a/source/blender/gpu/intern/gpu_select_sample_query.cc +++ b/source/blender/gpu/intern/gpu_select_sample_query.cc @@ -79,7 +79,7 @@ void gpu_select_query_begin(GPUSelectResult *buffer, GPU_scissor_get(g_query_state.scissor); GPU_viewport_size_get_i(g_query_state.viewport); - /* Write to color buffer. Seems to fix issues with selecting alpha blended geom (see T7997). */ + /* Write to color buffer. Seems to fix issues with selecting alpha blended geom (see #7997). */ GPU_color_mask(true, true, true, true); /* In order to save some fill rate we minimize the viewport using rect. @@ -98,7 +98,7 @@ void gpu_select_query_begin(GPUSelectResult *buffer, * objects in the view frustum independently of their order, we need to disable the depth test */ if (mode == GPU_SELECT_ALL) { /* #glQueries on Windows+Intel drivers only works with depth testing turned on. - * See T62947 for details */ + * See #62947 for details */ GPU_depth_test(GPU_DEPTH_ALWAYS); GPU_depth_mask(true); } diff --git a/source/blender/gpu/intern/gpu_shader_dependency.cc b/source/blender/gpu/intern/gpu_shader_dependency.cc index 605ff585ff86..8b3643e9cc81 100644 --- a/source/blender/gpu/intern/gpu_shader_dependency.cc +++ b/source/blender/gpu/intern/gpu_shader_dependency.cc @@ -194,7 +194,7 @@ struct GPUSource { /** * Some drivers completely forbid quote characters even in unused preprocessor directives. * We fix the cases where we can't manually patch in `enum_preprocess()`. - * This check ensure none are present in non-patched sources. (see T97545) + * This check ensure none are present in non-patched sources. (see #97545) */ void check_no_quotes() { @@ -214,7 +214,7 @@ struct GPUSource { /** * Some drivers completely forbid string characters even in unused preprocessor directives. - * This fixes the cases we cannot manually patch: Shared headers #includes. (see T97545) + * This fixes the cases we cannot manually patch: Shared headers #includes. (see #97545) * TODO(fclem): This could be done during the datatoc step. */ void quote_preprocess() diff --git a/source/blender/gpu/intern/gpu_state.cc b/source/blender/gpu/intern/gpu_state.cc index 09a5b0ac6e95..6027aaec6b38 100644 --- a/source/blender/gpu/intern/gpu_state.cc +++ b/source/blender/gpu/intern/gpu_state.cc @@ -322,7 +322,7 @@ void GPU_bgl_start() } StateManager &state_manager = *(Context::get()->state_manager); if (state_manager.use_bgl == false) { - /* Expected by many addons (see T80169, T81289). + /* Expected by many addons (see #80169, #81289). * This will reset the blend function. */ GPU_blend(GPU_BLEND_NONE); diff --git a/source/blender/gpu/intern/gpu_viewport.c b/source/blender/gpu/intern/gpu_viewport.c index eb5dedf2d4ec..2ba478d616b1 100644 --- a/source/blender/gpu/intern/gpu_viewport.c +++ b/source/blender/gpu/intern/gpu_viewport.c @@ -236,7 +236,7 @@ void GPU_viewport_colorspace_set(GPUViewport *viewport, { /** * HACK(fclem): We copy the settings here to avoid use after free if an update frees the scene - * and the viewport stays cached (see T75443). But this means the OCIO curve-mapping caching + * and the viewport stays cached (see #75443). But this means the OCIO curve-mapping caching * (which is based on #CurveMap pointer address) cannot operate correctly and it will create * a different OCIO processor for each viewport. We try to only reallocate the curve-map copy * if needed to avoid unneeded cache invalidation. diff --git a/source/blender/gpu/metal/mtl_shader_generator.mm b/source/blender/gpu/metal/mtl_shader_generator.mm index 40ee7d5ac142..0b866456ffc0 100644 --- a/source/blender/gpu/metal/mtl_shader_generator.mm +++ b/source/blender/gpu/metal/mtl_shader_generator.mm @@ -869,7 +869,7 @@ bool MTLShader::generate_msl_from_glsl(const shader::ShaderCreateInfo *info) #define GPU_ARB_shader_draw_parameters 1\n"; /* NOTE(Metal): textureGather appears to not function correctly on non-Apple-silicon GPUs. - * Manifests as selection outlines not showing up (T103412). Disable texture gather if + * Manifests as selection outlines not showing up (#103412). Disable texture gather if * not suitable for use. */ if (MTLBackend::get_capabilities().supports_texture_gather) { msl_defines_string += "#define GPU_ARB_texture_gather 1\n"; diff --git a/source/blender/gpu/opengl/gl_backend.cc b/source/blender/gpu/opengl/gl_backend.cc index cba53188c05b..21af443401fb 100644 --- a/source/blender/gpu/opengl/gl_backend.cc +++ b/source/blender/gpu/opengl/gl_backend.cc @@ -255,7 +255,7 @@ static void detect_workarounds() * requirements. * * We use it as a target for glMapBuffer(Range) what is part of the OpenGL 4 API. So better - * disable it when we don't have an OpenGL4 context (See T77657) */ + * disable it when we don't have an OpenGL4 context (See #77657) */ if (!(epoxy_gl_version() >= 40)) { GLContext::base_instance_support = false; } @@ -275,12 +275,12 @@ static void detect_workarounds() GCaps.shader_draw_parameters_support = false; GCaps.broken_amd_driver = true; } - /* Compute shaders have some issues with those versions (see T94936). */ + /* Compute shaders have some issues with those versions (see #94936). */ if (GPU_type_matches(GPU_DEVICE_ATI, GPU_OS_ANY, GPU_DRIVER_OFFICIAL) && (strstr(version, "4.5.14831") || strstr(version, "4.5.14760"))) { GCaps.compute_shader_support = false; } - /* We have issues with this specific renderer. (see T74024) */ + /* We have issues with this specific renderer. (see #74024) */ if (GPU_type_matches(GPU_DEVICE_ATI, GPU_OS_UNIX, GPU_DRIVER_OPENSOURCE) && (strstr(renderer, "AMD VERDE") || strstr(renderer, "AMD KAVERI") || strstr(renderer, "AMD TAHITI"))) { @@ -289,14 +289,14 @@ static void detect_workarounds() GCaps.shader_draw_parameters_support = false; GCaps.broken_amd_driver = true; } - /* Fix slowdown on this particular driver. (see T77641) */ + /* Fix slowdown on this particular driver. (see #77641) */ if (GPU_type_matches(GPU_DEVICE_ATI, GPU_OS_UNIX, GPU_DRIVER_OPENSOURCE) && strstr(version, "Mesa 19.3.4")) { GCaps.shader_image_load_store_support = false; GCaps.shader_draw_parameters_support = false; GCaps.broken_amd_driver = true; } - /* See T82856: AMD drivers since 20.11 running on a polaris architecture doesn't support the + /* See #82856: AMD drivers since 20.11 running on a polaris architecture doesn't support the * `GL_INT_2_10_10_10_REV` data type correctly. This data type is used to pack normals and flags. * The work around uses `GPU_RGBA16I`. In 22.?.? drivers this has been fixed for * polaris platform. Keeping legacy platforms around just in case. @@ -321,18 +321,18 @@ static void detect_workarounds() } /* Limit this fix to older hardware with GL < 4.5. This means Broadwell GPUs are * covered since they only support GL 4.4 on windows. - * This fixes some issues with workbench anti-aliasing on Win + Intel GPU. (see T76273) */ + * This fixes some issues with workbench anti-aliasing on Win + Intel GPU. (see #76273) */ if (GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_WIN, GPU_DRIVER_OFFICIAL) && !(epoxy_gl_version() >= 45)) { GLContext::copy_image_support = false; } /* Special fix for these specific GPUs. - * Without this workaround, blender crashes on startup. (see T72098) */ + * Without this workaround, blender crashes on startup. (see #72098) */ if (GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_WIN, GPU_DRIVER_OFFICIAL) && (strstr(renderer, "HD Graphics 620") || strstr(renderer, "HD Graphics 630"))) { GCaps.mip_render_workaround = true; } - /* Intel Ivy Bridge GPU's seems to have buggy cube-map array support. (see T75943) */ + /* Intel Ivy Bridge GPU's seems to have buggy cube-map array support. (see #75943) */ if (GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_WIN, GPU_DRIVER_OFFICIAL) && (strstr(renderer, "HD Graphics 4000") || strstr(renderer, "HD Graphics 4400") || strstr(renderer, "HD Graphics 2500"))) { @@ -349,12 +349,12 @@ static void detect_workarounds() GLContext::base_instance_support = false; GCaps.use_main_context_workaround = true; } - /* Somehow fixes armature display issues (see T69743). */ + /* Somehow fixes armature display issues (see #69743). */ if (GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_WIN, GPU_DRIVER_ANY) && strstr(version, "Build 20.19.15.4285")) { GCaps.use_main_context_workaround = true; } - /* See T70187: merging vertices fail. This has been tested from `18.2.2` till `19.3.0~dev` + /* See #70187: merging vertices fail. This has been tested from `18.2.2` till `19.3.0~dev` * of the Mesa driver */ if (GPU_type_matches(GPU_DEVICE_ATI, GPU_OS_UNIX, GPU_DRIVER_OPENSOURCE) && (strstr(version, "Mesa 18.") || strstr(version, "Mesa 19.0") || @@ -362,7 +362,7 @@ static void detect_workarounds() GLContext::unused_fb_slot_workaround = true; } /* There is a bug on older Nvidia GPU where GL_ARB_texture_gather - * is reported to be supported but yield a compile error (see T55802). */ + * is reported to be supported but yield a compile error (see #55802). */ if (GPU_type_matches(GPU_DEVICE_NVIDIA, GPU_OS_ANY, GPU_DRIVER_ANY) && !(epoxy_gl_version() >= 40)) { GLContext::texture_gather_support = false; @@ -413,7 +413,7 @@ static void detect_workarounds() GLContext::generate_mipmap_workaround = true; } - /* Buggy interface query functions cause crashes when handling SSBOs (T93680) */ + /* Buggy interface query functions cause crashes when handling SSBOs (#93680) */ if (GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_ANY, GPU_DRIVER_ANY) && (strstr(renderer, "HD Graphics 4400") || strstr(renderer, "HD Graphics 4600"))) { GCaps.shader_storage_buffer_objects_support = false; diff --git a/source/blender/gpu/opengl/gl_batch.cc b/source/blender/gpu/opengl/gl_batch.cc index 28105e326eea..57db98094273 100644 --- a/source/blender/gpu/opengl/gl_batch.cc +++ b/source/blender/gpu/opengl/gl_batch.cc @@ -214,7 +214,7 @@ GLuint GLVaoCache::base_instance_vao_get(GPUBatch *batch, int i_first) base_instance_ = 0; } /** - * There seems to be a nasty bug when drawing using the same VAO reconfiguring (T71147). + * There seems to be a nasty bug when drawing using the same VAO reconfiguring (#71147). * We just use a throwaway VAO for that. Note that this is likely to degrade performance. */ #ifdef __APPLE__ diff --git a/source/blender/gpu/opengl/gl_immediate.cc b/source/blender/gpu/opengl/gl_immediate.cc index a332a2fbc7ce..b0840e0bc227 100644 --- a/source/blender/gpu/opengl/gl_immediate.cc +++ b/source/blender/gpu/opengl/gl_immediate.cc @@ -153,7 +153,7 @@ void GLImmediate::end() glEnable(GL_PRIMITIVE_RESTART); #endif /* These lines are causing crash on startup on some old GPU + drivers. - * They are not required so just comment them. (T55722) */ + * They are not required so just comment them. (#55722) */ // glBindBuffer(GL_ARRAY_BUFFER, 0); // glBindVertexArray(0); } diff --git a/source/blender/gpu/opengl/gl_immediate.hh b/source/blender/gpu/opengl/gl_immediate.hh index 5c6ff510cef2..91eda10551a4 100644 --- a/source/blender/gpu/opengl/gl_immediate.hh +++ b/source/blender/gpu/opengl/gl_immediate.hh @@ -21,7 +21,7 @@ namespace blender::gpu { class GLImmediate : public Immediate { private: /* Use two buffers for strict and non-strict vertex count to - * avoid some huge driver slowdown (see T70922). + * avoid some huge driver slowdown (see #70922). * Use accessor functions to get / modify. */ struct { /** Opengl Handle for this buffer. */ diff --git a/source/blender/gpu/opengl/gl_shader.cc b/source/blender/gpu/opengl/gl_shader.cc index 58407db015d6..7fe0d8787980 100644 --- a/source/blender/gpu/opengl/gl_shader.cc +++ b/source/blender/gpu/opengl/gl_shader.cc @@ -486,9 +486,9 @@ std::string GLShader::resources_declare(const ShaderCreateInfo &info) const } ss << ";\n"; } -#if 0 /* T95278: This is not be enough to prevent some compilers think it is recursive. */ +#if 0 /* #95278: This is not be enough to prevent some compilers think it is recursive. */ for (const ShaderCreateInfo::PushConst &uniform : info.push_constants_) { - /* T95278: Double macro to avoid some compilers think it is recursive. */ + /* #95278: Double macro to avoid some compilers think it is recursive. */ ss << "#define " << uniform.name << "_ " << uniform.name << "\n"; ss << "#define " << uniform.name << " (" << uniform.name << "_)\n"; } @@ -817,7 +817,7 @@ static char *glsl_patch_default_get() if (GLContext::texture_gather_support) { STR_CONCAT(patch, slen, "#extension GL_ARB_texture_gather: enable\n"); /* Some drivers don't agree on epoxy_has_gl_extension("GL_ARB_texture_gather") and the actual - * support in the shader so double check the preprocessor define (see T56544). */ + * support in the shader so double check the preprocessor define (see #56544). */ STR_CONCAT(patch, slen, "#ifdef GL_ARB_texture_gather\n"); STR_CONCAT(patch, slen, "# define GPU_ARB_texture_gather\n"); STR_CONCAT(patch, slen, "#endif\n"); diff --git a/source/blender/gpu/opengl/gl_texture.cc b/source/blender/gpu/opengl/gl_texture.cc index 1410dad8a2ff..424fbf702ea9 100644 --- a/source/blender/gpu/opengl/gl_texture.cc +++ b/source/blender/gpu/opengl/gl_texture.cc @@ -353,7 +353,7 @@ void GLTexture::generate_mipmap() return; } - /* Some drivers have bugs when using #glGenerateMipmap with depth textures (see T56789). + /* Some drivers have bugs when using #glGenerateMipmap with depth textures (see #56789). * In this case we just create a complete texture with mipmaps manually without * down-sampling. You must initialize the texture levels using other methods like * #GPU_framebuffer_recursive_downsample(). */ @@ -448,7 +448,7 @@ void *GLTexture::read(int mip, eGPUDataFormat type) size_t texture_size = sample_len * sample_size; /* AMD Pro driver have a bug that write 8 bytes past buffer size - * if the texture is big. (see T66573) */ + * if the texture is big. (see #66573) */ void *data = MEM_mallocN(texture_size + 8, "GPU_texture_read"); GLenum gl_format = to_gl_data_format(format_); @@ -677,17 +677,17 @@ bool GLTexture::proxy_check(int mip) GPU_type_matches(GPU_DEVICE_NVIDIA, GPU_OS_MAC, GPU_DRIVER_OFFICIAL) || GPU_type_matches(GPU_DEVICE_ATI, GPU_OS_UNIX, GPU_DRIVER_OFFICIAL)) { /* Some AMD drivers have a faulty `GL_PROXY_TEXTURE_..` check. - * (see T55888, T56185, T59351). + * (see #55888, #56185, #59351). * Checking with `GL_PROXY_TEXTURE_..` doesn't prevent `Out Of Memory` issue, * it just states that the OGL implementation can support the texture. * So we already manually check the maximum size and maximum number of layers. - * Same thing happens on Nvidia/macOS 10.15 (T78175). */ + * Same thing happens on Nvidia/macOS 10.15 (#78175). */ return true; } if ((type_ == GPU_TEXTURE_CUBE_ARRAY) && GPU_type_matches(GPU_DEVICE_ANY, GPU_OS_MAC, GPU_DRIVER_ANY)) { - /* Special fix for T79703. */ + /* Special fix for #79703. */ return true; } diff --git a/source/blender/gpu/opengl/gl_vertex_array.cc b/source/blender/gpu/opengl/gl_vertex_array.cc index 9a6df38cb058..d5aa1141521b 100644 --- a/source/blender/gpu/opengl/gl_vertex_array.cc +++ b/source/blender/gpu/opengl/gl_vertex_array.cc @@ -136,7 +136,7 @@ void GLVertArray::update_bindings(const GLuint vao, if (attr_mask & mask) { GLContext *ctx = GLContext::get(); /* This replaces glVertexAttrib4f(a, 0.0f, 0.0f, 0.0f, 1.0f); with a more modern style. - * Fix issues for some drivers (see T75069). */ + * Fix issues for some drivers (see #75069). */ glBindVertexBuffer(a, ctx->default_attr_vbo_, intptr_t(0), intptr_t(0)); glEnableVertexAttribArray(a); glVertexAttribFormat(a, 4, GL_FLOAT, GL_FALSE, 0); diff --git a/source/blender/gpu/shaders/common/gpu_shader_math_matrix_lib.glsl b/source/blender/gpu/shaders/common/gpu_shader_math_matrix_lib.glsl index 407469ab8a26..0b764b954c86 100644 --- a/source/blender/gpu/shaders/common/gpu_shader_math_matrix_lib.glsl +++ b/source/blender/gpu/shaders/common/gpu_shader_math_matrix_lib.glsl @@ -169,7 +169,7 @@ mat4x4 scale(mat4x4 mat, vec3 scale); * * \note This code is about five times faster than the polar decomposition. * However, it gives un-expected results even with non-uniformly scaled matrices, - * see T46418 for an example. + * see #46418 for an example. * * \param A: Input matrix which is totally effective with `t = 0.0`. * \param B: Input matrix which is totally effective with `t = 1.0`. @@ -1059,7 +1059,7 @@ EulerXYZ to_euler(mat4x4 mat, const bool normalized) Quaternion normalized_to_quat_fast(mat3 mat) { - /* Caller must ensure matrices aren't negative for valid results, see: T24291, T94231. */ + /* Caller must ensure matrices aren't negative for valid results, see: #24291, #94231. */ Quaternion q; /* Method outlined by Mike Day, ref: https://math.stackexchange.com/a/3183435/220949 @@ -1122,7 +1122,7 @@ Quaternion normalized_to_quat_fast(mat3 mat) } else { /* NOTE(@ideasman42): A zero matrix will fall through to this block, - * needed so a zero scaled matrices to return a quaternion without rotation, see: T101848. */ + * needed so a zero scaled matrices to return a quaternion without rotation, see: #101848. */ float trace = 1.0f + mat[0][0] + mat[1][1] + mat[2][2]; float s = 2.0f * sqrt(trace); q.x = 0.25f * s; diff --git a/source/blender/gpu/shaders/infos/gpu_shader_2D_widget_info.hh b/source/blender/gpu/shaders/infos/gpu_shader_2D_widget_info.hh index 7a430717f852..4432c879be98 100644 --- a/source/blender/gpu/shaders/infos/gpu_shader_2D_widget_info.hh +++ b/source/blender/gpu/shaders/infos/gpu_shader_2D_widget_info.hh @@ -37,7 +37,7 @@ GPU_SHADER_CREATE_INFO(gpu_shader_2D_widget_base) .do_static_compilation(true) /* gl_InstanceID is supposed to be 0 if not drawing instances, but this seems * to be violated in some drivers. For example, macOS 10.15.4 and Intel Iris - * causes T78307 when using gl_InstanceID outside of instance. */ + * causes #78307 when using gl_InstanceID outside of instance. */ .define("widgetID", "0") .push_constant(Type::VEC4, "parameters", MAX_PARAM) .additional_info("gpu_shader_2D_widget_shared"); diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl index 0833809cc42a..d5175f786dbe 100644 --- a/source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl +++ b/source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl @@ -149,7 +149,7 @@ void node_bsdf_principled(vec4 base_color, max(roughness, transmission_roughness); refraction_data.ior = ior; - /* Ref. T98190: Defines are optimizations for old compilers. + /* Ref. #98190: Defines are optimizations for old compilers. * Might become unnecessary with EEVEE-Next. */ if (do_diffuse == 0.0 && do_refraction == 0.0 && do_clearcoat != 0.0) { #ifdef PRINCIPLED_CLEARCOAT diff --git a/source/blender/ikplugin/intern/iksolver_plugin.c b/source/blender/ikplugin/intern/iksolver_plugin.c index c467e48d21e6..1560567ba8dd 100644 --- a/source/blender/ikplugin/intern/iksolver_plugin.c +++ b/source/blender/ikplugin/intern/iksolver_plugin.c @@ -398,7 +398,7 @@ static void execute_posetree(struct Depsgraph *depsgraph, * local transform of the segment itself. */ copy_m4_m4(rootmat, pchan->parent->pose_mat); /* However, we do not want to get (i.e. reverse) parent's scale, - * as it generates T31008 kind of nasty bugs. */ + * as it generates #31008 kind of nasty bugs. */ normalize_m4(rootmat); } else { diff --git a/source/blender/imbuf/IMB_imbuf_types.h b/source/blender/imbuf/IMB_imbuf_types.h index 06f7770d2672..129b265f8543 100644 --- a/source/blender/imbuf/IMB_imbuf_types.h +++ b/source/blender/imbuf/IMB_imbuf_types.h @@ -49,7 +49,7 @@ typedef struct DDSData { /* WARNING: Keep explicit value assignments here, * this file is included in areas where not all format defines are set * (e.g. intern/dds only get WITH_DDS, even if TIFF, HDR etc are also defined). - * See T46524. */ + * See #46524. */ /** #ImBuf.ftype flag, main image types. */ enum eImbFileType { diff --git a/source/blender/imbuf/intern/anim_movie.c b/source/blender/imbuf/intern/anim_movie.c index 94c0555dcf0e..a6edcc5977e7 100644 --- a/source/blender/imbuf/intern/anim_movie.c +++ b/source/blender/imbuf/intern/anim_movie.c @@ -593,7 +593,7 @@ static int startffmpeg(struct anim *anim) anim->duration_in_frames = video_stream->nb_frames; /* Sanity check on the detected duration. This is to work around corruption like reported in - * T68091. */ + * #68091. */ if (frame_rate.den != 0 && pFormatCtx->duration > 0) { double stream_sec = anim->duration_in_frames * av_q2d(frame_rate); double container_sec = pFormatCtx->duration / (double)AV_TIME_BASE; @@ -927,7 +927,7 @@ static bool ffmpeg_pts_isect(int64_t pts_start, int64_t pts_end, int64_t pts_to_ static AVFrame *ffmpeg_frame_by_pts_get(struct anim *anim, int64_t pts_to_search) { /* NOTE: `frame->pts + frame->pkt_duration` does not always match pts of next frame. - * See footage from T86361. Here it is OK to use, because PTS must match current or backup frame. + * See footage from #86361. Here it is OK to use, because PTS must match current or backup frame. * If there is no current frame, return NULL. */ if (!anim->pFrame_complete) { @@ -986,7 +986,7 @@ static int ffmpeg_decode_video_frame(struct anim *anim) av_log(anim->pFormatCtx, AV_LOG_DEBUG, " DECODE VIDEO FRAME\n"); /* Sometimes, decoder returns more than one frame per sent packet. Check if frames are available. - * This frames must be read, otherwise decoding will fail. See T91405. */ + * This frames must be read, otherwise decoding will fail. See #91405. */ anim->pFrame_complete = avcodec_receive_frame(anim->pCodecCtx, anim->pFrame) == 0; if (anim->pFrame_complete) { av_log(anim->pFormatCtx, AV_LOG_DEBUG, " DECODE FROM CODEC BUFFER\n"); @@ -1175,8 +1175,7 @@ static void ffmpeg_decode_video_frame_scan(struct anim *anim, int64_t pts_to_sea /* Wrapper over av_seek_frame(), for formats that doesn't have its own read_seek() or * read_seek2() functions defined. When seeking in these formats, rule to seek to last * necessary I-frame is not honored. It is not even guaranteed that I-frame, that must be - * decoded will be read. See https://trac.ffmpeg.org/ticket/1607 and - * https://developer.blender.org/T86944. */ + * decoded will be read. See https://trac.ffmpeg.org/ticket/1607 & #86944. */ static int ffmpeg_generic_seek_workaround(struct anim *anim, int64_t *requested_pts, int64_t pts_to_search) @@ -1413,7 +1412,7 @@ static ImBuf *ffmpeg_fetchibuf(struct anim *anim, int position, IMB_Timecode_Typ ffmpeg_decode_video_frame_scan(anim, pts_to_search); - /* Update resolution as it can change per-frame with WebM. See T100741 & T100081. */ + /* Update resolution as it can change per-frame with WebM. See #100741 & #100081. */ anim->x = anim->pCodecCtx->width; anim->y = anim->pCodecCtx->height; diff --git a/source/blender/imbuf/intern/colormanagement.c b/source/blender/imbuf/intern/colormanagement.c index 9f14ca0d5968..344dccfe9192 100644 --- a/source/blender/imbuf/intern/colormanagement.c +++ b/source/blender/imbuf/intern/colormanagement.c @@ -2054,7 +2054,7 @@ void IMB_colormanagement_transform_from_byte_threaded(float *float_buffer, if (STREQ(from_colorspace, to_colorspace)) { /* Because this function always takes a byte buffer and returns a float buffer, it must * always do byte-to-float conversion of some kind. To avoid threading overhead - * IMB_buffer_float_from_byte is used when color spaces are identical. See T51002. + * IMB_buffer_float_from_byte is used when color spaces are identical. See #51002. */ IMB_buffer_float_from_byte(float_buffer, byte_buffer, diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp b/source/blender/imbuf/intern/openexr/openexr_api.cpp index c17931827f74..e7d7ae973e4a 100644 --- a/source/blender/imbuf/intern/openexr/openexr_api.cpp +++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp @@ -1493,7 +1493,7 @@ static int imb_exr_split_channel_name(ExrChannel *echan, char *layname, char *pa * like, MX or NZ, which is basically has structure of * * - * This is a bit silly, but see file from T35658. + * This is a bit silly, but see file from #35658. * * Here we do some magic to distinguish such cases. */ diff --git a/source/blender/imbuf/intern/scaling.c b/source/blender/imbuf/intern/scaling.c index 42c19ce1a7e4..6332310f43ce 100644 --- a/source/blender/imbuf/intern/scaling.c +++ b/source/blender/imbuf/intern/scaling.c @@ -846,7 +846,7 @@ static void q_scale_float( * Should be comparable in speed to the ImBuf ..._fast functions at least * for byte-buffers. * - * NOTE: disabled, due to unacceptable inaccuracy and quality loss, see bug T18609 (ton) + * NOTE: disabled, due to unacceptable inaccuracy and quality loss, see bug #18609 (ton) */ static bool q_scale_linear_interpolation(struct ImBuf *ibuf, int newx, int newy) { @@ -998,14 +998,14 @@ static ImBuf *scaledownx(struct ImBuf *ibuf, int newx) if (do_rect) { // printf("%ld %ld\n", (uchar *)rect - ((uchar *)ibuf->rect), rect_size); - BLI_assert((uchar *)rect - ((uchar *)ibuf->rect) == rect_size); /* see bug T26502. */ + BLI_assert((uchar *)rect - ((uchar *)ibuf->rect) == rect_size); /* see bug #26502. */ imb_freerectImBuf(ibuf); ibuf->mall |= IB_rect; ibuf->rect = (uint *)_newrect; } if (do_float) { // printf("%ld %ld\n", rectf - ibuf->rect_float, rect_size); - BLI_assert((rectf - ibuf->rect_float) == rect_size); /* see bug T26502. */ + BLI_assert((rectf - ibuf->rect_float) == rect_size); /* see bug #26502. */ imb_freerectfloatImBuf(ibuf); ibuf->mall |= IB_rectfloat; ibuf->rect_float = _newrectf; @@ -1140,14 +1140,14 @@ static ImBuf *scaledowny(struct ImBuf *ibuf, int newy) if (do_rect) { // printf("%ld %ld\n", (uchar *)rect - ((uchar *)ibuf->rect), rect_size); - BLI_assert((uchar *)rect - ((uchar *)ibuf->rect) == rect_size); /* see bug T26502. */ + BLI_assert((uchar *)rect - ((uchar *)ibuf->rect) == rect_size); /* see bug #26502. */ imb_freerectImBuf(ibuf); ibuf->mall |= IB_rect; ibuf->rect = (uint *)_newrect; } if (do_float) { // printf("%ld %ld\n", rectf - ibuf->rect_float, rect_size); - BLI_assert((rectf - ibuf->rect_float) == rect_size); /* see bug T26502. */ + BLI_assert((rectf - ibuf->rect_float) == rect_size); /* see bug #26502. */ imb_freerectfloatImBuf(ibuf); ibuf->mall |= IB_rectfloat; ibuf->rect_float = (float *)_newrectf; @@ -1196,7 +1196,7 @@ static ImBuf *scaleupx(struct ImBuf *ibuf, int newx) newrectf = _newrectf; /* Special case, copy all columns, needed since the scaling logic assumes there is at least - * two rows to interpolate between causing out of bounds read for 1px images, see T70356. */ + * two rows to interpolate between causing out of bounds read for 1px images, see #70356. */ if (UNLIKELY(ibuf->x == 1)) { if (do_rect) { for (y = ibuf->y; y > 0; y--) { @@ -1400,7 +1400,7 @@ static ImBuf *scaleupy(struct ImBuf *ibuf, int newy) skipx = 4 * ibuf->x; /* Special case, copy all rows, needed since the scaling logic assumes there is at least - * two rows to interpolate between causing out of bounds read for 1px images, see T70356. */ + * two rows to interpolate between causing out of bounds read for 1px images, see #70356. */ if (UNLIKELY(ibuf->y == 1)) { if (do_rect) { for (y = newy; y > 0; y--) { @@ -1648,7 +1648,7 @@ bool IMB_scaleImBuf(struct ImBuf *ibuf, uint newx, uint newy) scalefast_Z_ImBuf(ibuf, newx, newy); /* try to scale common cases in a fast way */ - /* disabled, quality loss is unacceptable, see report T18609 (ton) */ + /* disabled, quality loss is unacceptable, see report #18609 (ton) */ if (0 && q_scale_linear_interpolation(ibuf, newx, newy)) { return true; } diff --git a/source/blender/imbuf/intern/thumbs.c b/source/blender/imbuf/intern/thumbs.c index d535bd005019..29bac03654f4 100644 --- a/source/blender/imbuf/intern/thumbs.c +++ b/source/blender/imbuf/intern/thumbs.c @@ -397,7 +397,7 @@ static ImBuf *thumb_create_ex(const char *file_path, if (img->x > tsize || img->y > tsize) { float scale = MIN2((float)tsize / (float)img->x, (float)tsize / (float)img->y); - /* Scaling down must never assign zero width/height, see: T89868. */ + /* Scaling down must never assign zero width/height, see: #89868. */ short ex = MAX2(1, (short)(img->x * scale)); short ey = MAX2(1, (short)(img->y * scale)); /* Save some time by only scaling byte buf */ diff --git a/source/blender/io/alembic/exporter/abc_writer_mesh.cc b/source/blender/io/alembic/exporter/abc_writer_mesh.cc index 77d42d905c7e..e7eee7a43be7 100644 --- a/source/blender/io/alembic/exporter/abc_writer_mesh.cc +++ b/source/blender/io/alembic/exporter/abc_writer_mesh.cc @@ -530,7 +530,7 @@ static void get_loop_normals(struct Mesh *mesh, normals.clear(); /* If all polygons are smooth shaded, and there are no custom normals, we don't need to export - * normals at all. This is also done by other software, see T71246. */ + * normals at all. This is also done by other software, see #71246. */ if (!has_flat_shaded_poly && !CustomData_has_layer(&mesh->ldata, CD_CUSTOMLOOPNORMAL) && (mesh->flag & ME_AUTOSMOOTH) == 0) { return; diff --git a/source/blender/io/alembic/intern/abc_customdata.cc b/source/blender/io/alembic/intern/abc_customdata.cc index 9e5182c53d4d..baa03ca915b4 100644 --- a/source/blender/io/alembic/intern/abc_customdata.cc +++ b/source/blender/io/alembic/intern/abc_customdata.cc @@ -420,7 +420,7 @@ static void read_custom_data_mcols(const std::string &iobject_full_name, /* The colors can go through two layers of indexing. Often the 'indices' * array doesn't do anything (i.e. indices[n] = n), but when it does, it's - * important. Blender 2.79 writes indices incorrectly (see T53745), which + * important. Blender 2.79 writes indices incorrectly (see #53745), which * is why we have to check for indices->size() > 0 */ bool use_dual_indexing = is_facevarying && indices->size() > 0; diff --git a/source/blender/io/alembic/intern/abc_reader_archive.h b/source/blender/io/alembic/intern/abc_reader_archive.h index 18f36922a1ba..685da5af5dc5 100644 --- a/source/blender/io/alembic/intern/abc_reader_archive.h +++ b/source/blender/io/alembic/intern/abc_reader_archive.h @@ -16,7 +16,7 @@ struct Main; namespace blender::io::alembic { /* Wrappers around input and output archives. The goal is to be able to use - * streams so that unicode paths work on Windows (T49112), and to make sure that + * streams so that unicode paths work on Windows (#49112), and to make sure that * the stream objects remain valid as long as the archives are open. */ diff --git a/source/blender/io/alembic/intern/abc_reader_mesh.cc b/source/blender/io/alembic/intern/abc_reader_mesh.cc index 11fb191b31cf..e52b30cf5eaf 100644 --- a/source/blender/io/alembic/intern/abc_reader_mesh.cc +++ b/source/blender/io/alembic/intern/abc_reader_mesh.cc @@ -202,7 +202,7 @@ static void read_mpolys(CDStreamConfig &config, const AbcMeshData &mesh_data) poly.totloop = face_size; /* Polygons are always assumed to be smooth-shaded. If the Alembic mesh should be flat-shaded, - * this is encoded in custom loop normals. See T71246. */ + * this is encoded in custom loop normals. See #71246. */ poly.flag |= ME_SMOOTH; /* NOTE: Alembic data is stored in the reverse order. */ @@ -215,7 +215,7 @@ static void read_mpolys(CDStreamConfig &config, const AbcMeshData &mesh_data) if (f > 0 && loop.v == last_vertex_index) { /* This face is invalid, as it has consecutive loops from the same vertex. This is caused - * by invalid geometry in the Alembic file, such as in T76514. */ + * by invalid geometry in the Alembic file, such as in #76514. */ seen_invalid_geometry = true; } last_vertex_index = loop.v; @@ -732,7 +732,7 @@ Mesh *AbcMeshReader::read_mesh(Mesh *existing_mesh, } else { /* If the face count changed (e.g. by triangulation), only read points. - * This prevents crash from T49813. + * This prevents crash from #49813. * TODO(kevin): perhaps find a better way to do this? */ if (face_counts->size() != existing_mesh->totpoly || face_indices->size() != existing_mesh->totloop) { @@ -1065,7 +1065,7 @@ Mesh *AbcSubDReader::read_mesh(Mesh *existing_mesh, } else { /* If the face count changed (e.g. by triangulation), only read points. - * This prevents crash from T49813. + * This prevents crash from #49813. * TODO(kevin): perhaps find a better way to do this? */ if (face_counts->size() != existing_mesh->totpoly || face_indices->size() != existing_mesh->totloop) { diff --git a/source/blender/io/collada/AnimationImporter.cpp b/source/blender/io/collada/AnimationImporter.cpp index 826d7864067e..3d12abe3cda5 100644 --- a/source/blender/io/collada/AnimationImporter.cpp +++ b/source/blender/io/collada/AnimationImporter.cpp @@ -1189,7 +1189,7 @@ void AnimationImporter::translate_Animations( for (uint j = 0; j < matBinds.getCount(); j++) { const COLLADAFW::UniqueId &matuid = matBinds[j].getReferencedMaterial(); const COLLADAFW::Effect *ef = (COLLADAFW::Effect *)(FW_object_map[matuid]); - if (ef != nullptr) { /* can be NULL T28909. */ + if (ef != nullptr) { /* can be NULL #28909. */ Material *ma = uid_material_map[matuid]; if (!ma) { fprintf(stderr, @@ -1445,7 +1445,7 @@ AnimationImporter::AnimMix *AnimationImporter::get_animation_type( for (uint j = 0; j < matBinds.getCount(); j++) { const COLLADAFW::UniqueId &matuid = matBinds[j].getReferencedMaterial(); const COLLADAFW::Effect *ef = (COLLADAFW::Effect *)(FW_object_map[matuid]); - if (ef != nullptr) { /* can be NULL T28909. */ + if (ef != nullptr) { /* can be NULL #28909. */ const COLLADAFW::CommonEffectPointerArray &commonEffects = ef->getCommonEffects(); if (!commonEffects.empty()) { COLLADAFW::EffectCommon *efc = commonEffects[0]; diff --git a/source/blender/io/collada/DocumentImporter.cpp b/source/blender/io/collada/DocumentImporter.cpp index 5c1b9a1a2947..49ed37ba9768 100644 --- a/source/blender/io/collada/DocumentImporter.cpp +++ b/source/blender/io/collada/DocumentImporter.cpp @@ -265,7 +265,7 @@ void DocumentImporter::translate_anim_recursive(COLLADAFW::Node *node, COLLADAFW::Node *par = nullptr, Object *parob = nullptr) { - /* The split in T29246, root_map must point at actual root when + /* The split in #29246, root_map must point at actual root when * calculating bones in apply_curves_as_matrix. - actual root is the root node. * This has to do with inverse bind poses being world space * (the sources for skinned bones' rest-poses) and the way diff --git a/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc b/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc index b90a0c994243..f0ae807b0181 100644 --- a/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc +++ b/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc @@ -222,7 +222,7 @@ static void geom_add_polygon(Geometry *geom, else { geom->track_vertex_index(corner.vert_index); } - /* Ignore UV index, if the geometry does not have any UVs (T103212). */ + /* Ignore UV index, if the geometry does not have any UVs (#103212). */ if (got_uv && !global_vertices.uv_vertices.is_empty()) { corner.uv_vert_index += corner.uv_vert_index < 0 ? global_vertices.uv_vertices.size() : -1; if (corner.uv_vert_index < 0 || corner.uv_vert_index >= global_vertices.uv_vertices.size()) { @@ -235,7 +235,7 @@ static void geom_add_polygon(Geometry *geom, } /* Ignore corner normal index, if the geometry does not have any normals. * Some obj files out there do have face definitions that refer to normal indices, - * without any normals being present (T98782). */ + * without any normals being present (#98782). */ if (got_normal && !global_vertices.vertex_normals.is_empty()) { corner.vertex_normal_index += corner.vertex_normal_index < 0 ? global_vertices.vertex_normals.size() : @@ -252,7 +252,7 @@ static void geom_add_polygon(Geometry *geom, geom->face_corners_.append(corner); curr_face.corner_count_++; - /* Some files contain extra stuff per face (e.g. 4 indices); skip any remainder (T103441). */ + /* Some files contain extra stuff per face (e.g. 4 indices); skip any remainder (#103441). */ p = drop_non_whitespace(p, end); /* Skip whitespace to get to the next face corner. */ p = drop_whitespace(p, end); @@ -767,7 +767,7 @@ Span OBJParser::mtl_libraries() const void OBJParser::add_mtl_library(StringRef path) { - /* Remove any quotes from start and end (T67266, T97794). */ + /* Remove any quotes from start and end (#67266, #97794). */ if (path.size() > 2 && path.startswith("\"") && path.endswith("\"")) { path = path.drop_prefix(1).drop_suffix(1); } @@ -783,7 +783,7 @@ void OBJParser::add_default_mtl_library() * into candidate .mtl files to search through. This is not technically following the * spec, but the old python importer was doing it, and there are user files out there * that contain "mtllib bar.mtl" for a foo.obj, and depend on finding materials - * from foo.mtl (see T97757). */ + * from foo.mtl (see #97757). */ char mtl_file_path[FILE_MAX]; BLI_strncpy(mtl_file_path, import_params_.filepath, sizeof(mtl_file_path)); BLI_path_extension_replace(mtl_file_path, sizeof(mtl_file_path), ".mtl"); @@ -855,7 +855,7 @@ void MTLParser::parse_and_store(Map> &r_mat parse_float(p, end, 1.0f, material->alpha); } else if (parse_keyword(p, end, "illum")) { - /* Some files incorrectly use a float (T60135). */ + /* Some files incorrectly use a float (#60135). */ float val; parse_float(p, end, 1.0f, val); material->illum_mode = val; diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h index a0f5448a0032..a5fea870a9b0 100644 --- a/source/blender/makesdna/DNA_ID.h +++ b/source/blender/makesdna/DNA_ID.h @@ -818,7 +818,7 @@ enum { * RESET_NEVER * * \warning This should not be cleared on existing data. - * If support for this is needed, see T88026 as this flag controls memory ownership + * If support for this is needed, see #88026 as this flag controls memory ownership * of physics *shared* pointers. */ LIB_TAG_COPIED_ON_WRITE = 1 << 12, diff --git a/source/blender/makesdna/DNA_ID_enums.h b/source/blender/makesdna/DNA_ID_enums.h index 5999af8bf5c5..94ab24511d84 100644 --- a/source/blender/makesdna/DNA_ID_enums.h +++ b/source/blender/makesdna/DNA_ID_enums.h @@ -46,7 +46,7 @@ typedef enum ID_Type { ID_LI = MAKE_ID2('L', 'I'), /* Library */ ID_OB = MAKE_ID2('O', 'B'), /* Object */ ID_ME = MAKE_ID2('M', 'E'), /* Mesh */ - ID_CU_LEGACY = MAKE_ID2('C', 'U'), /* Curve. ID_CV should be used in the future (see T95355). */ + ID_CU_LEGACY = MAKE_ID2('C', 'U'), /* Curve. ID_CV should be used in the future (see #95355). */ ID_MB = MAKE_ID2('M', 'B'), /* MetaBall */ ID_MA = MAKE_ID2('M', 'A'), /* Material */ ID_TE = MAKE_ID2('T', 'E'), /* Tex (Texture) */ diff --git a/source/blender/makesdna/DNA_brush_defaults.h b/source/blender/makesdna/DNA_brush_defaults.h index 6e88275672aa..562632e05cd5 100644 --- a/source/blender/makesdna/DNA_brush_defaults.h +++ b/source/blender/makesdna/DNA_brush_defaults.h @@ -94,7 +94,7 @@ .automasking_cavity_blur_steps = 0,\ .automasking_cavity_factor = 1.0f,\ \ - /* A kernel radius of 1 has almost no effect (T63233). */ \ + /* A kernel radius of 1 has almost no effect (#63233). */ \ .blur_kernel_radius = 2, \ \ .mtex = _DNA_DEFAULT_MTex, \ diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h index a2e4c0a0991f..9e4505ca5295 100644 --- a/source/blender/makesdna/DNA_node_types.h +++ b/source/blender/makesdna/DNA_node_types.h @@ -965,7 +965,7 @@ typedef struct NodeScriptDict { typedef struct NodeGlare { char quality, type, iter; /* XXX angle is only kept for backward/forward compatibility, - * was used for two different things, see T50736. */ + * was used for two different things, see #50736. */ char angle DNA_DEPRECATED, _pad0, size, star_45, streaks; float colmod, mix, threshold, fade; float angle_ofs; diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h index 889f154c1b82..29d74ba20465 100644 --- a/source/blender/makesdna/DNA_object_types.h +++ b/source/blender/makesdna/DNA_object_types.h @@ -497,7 +497,7 @@ typedef struct ObHook { enum { OB_EMPTY = 0, OB_MESH = 1, - /** Curve object is still used but replaced by "Curves" for the future (see T95355). */ + /** Curve object is still used but replaced by "Curves" for the future (see #95355). */ OB_CURVES_LEGACY = 2, OB_SURF = 3, OB_FONT = 4, diff --git a/source/blender/makesdna/DNA_particle_types.h b/source/blender/makesdna/DNA_particle_types.h index 75410716e22e..445d75406f18 100644 --- a/source/blender/makesdna/DNA_particle_types.h +++ b/source/blender/makesdna/DNA_particle_types.h @@ -113,7 +113,7 @@ typedef struct ParticleData { * Particles can die unnaturally (collision). * * \note Particles die on this frame, be sure to add 1 when clamping the lifetime of particles - * to inclusive ranges such as the scenes end frame. See: T68290. + * to inclusive ranges such as the scenes end frame. See: #68290. */ float dietime; diff --git a/source/blender/makesdna/DNA_pointcache_types.h b/source/blender/makesdna/DNA_pointcache_types.h index 1133237199b5..2a63482c6b9e 100644 --- a/source/blender/makesdna/DNA_pointcache_types.h +++ b/source/blender/makesdna/DNA_pointcache_types.h @@ -126,7 +126,7 @@ enum { // PTCACHE_BAKE_EDIT = 1 << 4, // PTCACHE_BAKE_EDIT_ACTIVE = 1 << 5, PTCACHE_DISK_CACHE = 1 << 6, - /* removed since 2.64 - T30974, could be added back in a more useful way */ + /* removed since 2.64 - #30974, could be added back in a more useful way */ // PTCACHE_QUICK_CACHE = 1 << 7, PTCACHE_FRAMES_SKIPPED = 1 << 8, PTCACHE_EXTERNAL = 1 << 9, diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index 608bf6b3bf7c..ca1d878110f8 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -14,7 +14,7 @@ /** * Check for cyclic set-scene. - * Libraries can cause this case which is normally prevented, see (T42009). + * Libraries can cause this case which is normally prevented, see (#42009). */ #define USE_SETSCENE_CHECK @@ -2161,7 +2161,7 @@ extern const char *RE_engine_id_CYCLES; /** \name Scene Defines * \{ */ -/* Note that much higher max-frames give imprecise sub-frames, see: T46859. */ +/* Note that much higher max-frames give imprecise sub-frames, see: #46859. */ /* Current precision is 16 for the sub-frames closer to MAXFRAME. */ /* For general use. */ diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 54edf795e6c7..a4cb6723a8d7 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -100,7 +100,7 @@ enum { /** * Used to mark a space as active but "overlapped" by temporary full-screen spaces. Without this * we wouldn't be able to restore the correct active space after closing temp full-screens - * reliably if the same space type is opened twice in a full-screen stack (see T19296). We don't + * reliably if the same space type is opened twice in a full-screen stack (see #19296). We don't * actually open the same space twice, we have to pretend it is by managing area order carefully. */ SPACE_FLAG_TYPE_WAS_ACTIVE = (1 << 1), diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h index 4c5ba4c43f81..f6ee3d6e2dd6 100644 --- a/source/blender/makesdna/DNA_view3d_types.h +++ b/source/blender/makesdna/DNA_view3d_types.h @@ -400,7 +400,7 @@ enum { /*#define RV3D_IS_GAME_ENGINE (1 << 5) */ /* UNUSED */ /** * Disable Z-buffer offset, skip calls to #ED_view3d_polygon_offset. - * Use when precise surface depth is needed and picking bias isn't, see T45434). + * Use when precise surface depth is needed and picking bias isn't, see #45434). */ #define RV3D_ZOFFSET_DISABLED 64 diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h index 49099d921c47..e6f48c2da46d 100644 --- a/source/blender/makesdna/DNA_windowmanager_types.h +++ b/source/blender/makesdna/DNA_windowmanager_types.h @@ -292,7 +292,7 @@ typedef struct wmWindow { /** * Enable when the drag was handled, * to avoid mouse-motion continually triggering drag events which are not handled - * but add overhead to gizmo handling (for example), see T87511. + * but add overhead to gizmo handling (for example), see #87511. */ char event_queue_check_drag_handled; @@ -620,7 +620,7 @@ enum { * This difference can be important because previous settings may be used, * even with #PROP_SKIP_SAVE the repeat last operator will use the previous settings. * Unlike #OP_IS_REPEAT the selection (and context generally) may be different each time. - * See T60777 for an example of when this is needed. + * See #60777 for an example of when this is needed. */ OP_IS_REPEAT_LAST = (1 << 1), diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h index b9556a411cfc..a28c159722fb 100644 --- a/source/blender/makesrna/RNA_types.h +++ b/source/blender/makesrna/RNA_types.h @@ -86,7 +86,7 @@ typedef enum PropertyUnit { * Use values besides #PROP_SCALE_LINEAR * so the movement of the mouse doesn't map linearly to the value of the slider. * - * For some settings it's useful to space motion in a non-linear way, see T77868. + * For some settings it's useful to space motion in a non-linear way, see #77868. * * NOTE: The scale types are available for all float sliders. * For integer sliders they are only available if they use the visible value bar. @@ -234,7 +234,7 @@ typedef enum PropertyFlag { * Use for... * - pointers: in the UI and python so unsetting or setting to None won't work. * - strings: so our internal generated get/length/set - * functions know to do NULL checks before access T30865. + * functions know to do NULL checks before access #30865. */ PROP_NEVER_NULL = (1 << 18), /** diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c index 49c388a6cbf7..c4509fb44dca 100644 --- a/source/blender/makesrna/intern/rna_ID.c +++ b/source/blender/makesrna/intern/rna_ID.c @@ -577,7 +577,7 @@ IDProperty **rna_ID_idprops(PointerRNA *ptr) int rna_ID_is_runtime_editable(PointerRNA *ptr, const char **r_info) { ID *id = (ID *)ptr->data; - /* TODO: This should be abstracted in a BKE function or define, somewhat related to T88555. */ + /* TODO: This should be abstracted in a BKE function or define, somewhat related to #88555. */ if (id->tag & (LIB_TAG_NO_MAIN | LIB_TAG_TEMP_MAIN | LIB_TAG_LOCALIZED | LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT | LIB_TAG_COPIED_ON_WRITE)) { *r_info = @@ -592,7 +592,7 @@ int rna_ID_is_runtime_editable(PointerRNA *ptr, const char **r_info) bool rna_ID_is_runtime_get(PointerRNA *ptr) { ID *id = (ID *)ptr->data; - /* TODO: This should be abstracted in a BKE function or define, somewhat related to T88555. */ + /* TODO: This should be abstracted in a BKE function or define, somewhat related to #88555. */ if (id->tag & (LIB_TAG_NO_MAIN | LIB_TAG_TEMP_MAIN | LIB_TAG_LOCALIZED | LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT | LIB_TAG_COPIED_ON_WRITE)) { return true; diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index 217973d9479a..ca919224b257 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -2130,7 +2130,7 @@ static void rna_property_update( * * So editing custom properties only causes updates in the UI, * keep this exception because it happens to be useful for driving settings. - * Python developers on the other hand will need to manually 'update_tag', see: T74000. */ + * Python developers on the other hand will need to manually 'update_tag', see: #74000. */ DEG_id_tag_update(ptr->owner_id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_PARAMETERS); @@ -5942,7 +5942,7 @@ ParameterList *RNA_parameter_list_create(ParameterList *parms, case PROP_STRING: { const char *defvalue = ((StringPropertyRNA *)parm)->defaultvalue; if (defvalue && defvalue[0]) { - /* causes bug T29988, possibly this is only correct for thick wrapped + /* Causes bug #29988, possibly this is only correct for thick wrapped * need to look further into it - campbell */ #if 0 BLI_strncpy(data, defvalue, size); diff --git a/source/blender/makesrna/intern/rna_action.c b/source/blender/makesrna/intern/rna_action.c index 14f4a82c62ba..79d6ba0e442f 100644 --- a/source/blender/makesrna/intern/rna_action.c +++ b/source/blender/makesrna/intern/rna_action.c @@ -876,7 +876,7 @@ static void rna_def_action(BlenderRNA *brna) RNA_def_property_collection_sdna(prop, NULL, "markers", NULL); RNA_def_property_struct_type(prop, "TimelineMarker"); /* Use lib exception so the list isn't grayed out; - * adding/removing is still banned though, see T45689. */ + * adding/removing is still banned though, see #45689. */ RNA_def_property_flag(prop, PROP_LIB_EXCEPTION); RNA_def_property_ui_text( prop, "Pose Markers", "Markers specific to this action, for labeling poses"); diff --git a/source/blender/makesrna/intern/rna_color.c b/source/blender/makesrna/intern/rna_color.c index 72cf9d57c7bc..e9068010c48b 100644 --- a/source/blender/makesrna/intern/rna_color.c +++ b/source/blender/makesrna/intern/rna_color.c @@ -332,7 +332,7 @@ static void rna_ColorRamp_update(Main *bmain, Scene *UNUSED(scene), PointerRNA * WM_main_add_notifier(NC_LINESTYLE, linestyle); break; } - /* ColorRamp for particle display is owned by the object (see T54422) */ + /* ColorRamp for particle display is owned by the object (see #54422) */ case ID_OB: case ID_PA: { ParticleSettings *part = (ParticleSettings *)ptr->owner_id; diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c index b7856794da21..58acc49aefe5 100644 --- a/source/blender/makesrna/intern/rna_define.c +++ b/source/blender/makesrna/intern/rna_define.c @@ -4439,7 +4439,7 @@ void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropert if (tot == 0) { *items = MEM_callocN(sizeof(EnumPropertyItem[8]), __func__); - /* Ensure we get crashes on missing calls to 'RNA_enum_item_end', see T74227. */ + /* Ensure we get crashes on missing calls to 'RNA_enum_item_end', see #74227. */ #ifdef DEBUG memset(*items, 0xff, sizeof(EnumPropertyItem[8])); #endif diff --git a/source/blender/makesrna/intern/rna_depsgraph.c b/source/blender/makesrna/intern/rna_depsgraph.c index 9af76de2a2b5..1ff41e3637b6 100644 --- a/source/blender/makesrna/intern/rna_depsgraph.c +++ b/source/blender/makesrna/intern/rna_depsgraph.c @@ -48,7 +48,7 @@ typedef struct RNA_DepsgraphIterator { # ifdef WITH_PYTHON /** * Store the Python instance so the #BPy_StructRNA can be set as invalid iteration is completed. - * Otherwise accessing from Python (console auto-complete for e.g.) crashes, see: T100286. */ + * Otherwise accessing from Python (console auto-complete for e.g.) crashes, see: #100286. */ void *py_instance; # endif } RNA_DepsgraphIterator; @@ -348,7 +348,7 @@ static PointerRNA rna_Depsgraph_objects_get(CollectionPropertyIterator *iter) * Contains extra information about duplicator and persistent ID. */ -/* XXX Ugly python seems to query next item of an iterator before using current one (see T57558). +/* XXX Ugly python seems to query next item of an iterator before using current one (see #57558). * This forces us to use that nasty ping-pong game between two sets of iterator data, * so that previous one remains valid memory for python to access to. Yuck. */ diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c index e19c569bca0f..f92b137d3aef 100644 --- a/source/blender/makesrna/intern/rna_fcurve.c +++ b/source/blender/makesrna/intern/rna_fcurve.c @@ -714,7 +714,7 @@ static void rna_FModifier_start_frame_range(PointerRNA *UNUSED(ptr), // FModifier *fcm = (FModifier *)ptr->data; /* Technically, "sfra <= efra" must hold; however, we can't strictly enforce that, - * or else it becomes tricky to adjust the range, see: T36844. + * or else it becomes tricky to adjust the range, see: #36844. * * NOTE: we do not set soft-limits on lower bounds, as it's too confusing when you * can't easily use the slider to set things here @@ -729,7 +729,7 @@ static void rna_FModifier_end_frame_range( FModifier *fcm = (FModifier *)ptr->data; /* Technically, "sfra <= efra" must hold; however, we can't strictly enforce that, - * or else it becomes tricky to adjust the range, see: T36844. */ + * or else it becomes tricky to adjust the range, see: #36844. */ *min = MINAFRAMEF; *softmin = (fcm->flag & FMODIFIER_FLAG_RANGERESTRICT) ? fcm->sfra : MINAFRAMEF; @@ -951,7 +951,7 @@ static void rna_FModifierStepped_frame_start_set(PointerRNA *ptr, float value) value = CLAMPIS(value, prop_clamp_min, prop_clamp_max); /* Need to set both step-data's start/end and the start/end on the base-data, - * or else Restrict-Range doesn't work due to RNA-property shadowing (T52009) + * or else Restrict-Range doesn't work due to RNA-property shadowing (#52009) */ data->start_frame = value; fcm->sfra = value; @@ -968,7 +968,7 @@ static void rna_FModifierStepped_frame_end_set(PointerRNA *ptr, float value) value = CLAMPIS(value, prop_clamp_min, prop_clamp_max); /* Need to set both step-data's start/end and the start/end on the base-data, - * or else Restrict-Range doesn't work due to RNA-property shadowing (T52009) + * or else Restrict-Range doesn't work due to RNA-property shadowing (#52009) */ data->end_frame = value; fcm->efra = value; diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c index 97233f39d862..c8736b57863e 100644 --- a/source/blender/makesrna/intern/rna_image.c +++ b/source/blender/makesrna/intern/rna_image.c @@ -203,7 +203,7 @@ static void rna_Image_alpha_mode_update(Main *bmain, Scene *scene, PointerRNA *p { Image *ima = (Image *)ptr->owner_id; /* When operating on a generated image, avoid re-generating when changing the alpha-mode - * as it doesn't impact generated images, causing them to reload pixel data, see T82785. */ + * as it doesn't impact generated images, causing them to reload pixel data, see #82785. */ if (ima->source == IMA_SRC_GENERATED) { return; } diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 71ad8dda859b..56c66ddca3e6 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -770,7 +770,7 @@ static void rna_Object_dup_collection_set(PointerRNA *ptr, Collection *grp = (Collection *)value.data; /* Must not let this be set if the object belongs in this group already, - * thus causing a cycle/infinite-recursion leading to crashes on load T25298. */ + * thus causing a cycle/infinite-recursion leading to crashes on load #25298. */ if (BKE_collection_has_object_recursive(grp, ob) == 0) { if (ob->type == OB_EMPTY) { id_us_min(&ob->instance_collection->id); @@ -2373,14 +2373,14 @@ static void rna_def_vertex_group(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Name", "Vertex group name"); RNA_def_struct_name_property(srna, prop); RNA_def_property_string_funcs(prop, NULL, NULL, "rna_VertexGroup_name_set"); - /* update data because modifiers may use T24761. */ + /* update data because modifiers may use #24761. */ RNA_def_property_update( prop, NC_GEOM | ND_DATA | NA_RENAME, "rna_Object_internal_update_data_dependency"); prop = RNA_def_property(srna, "lock_weight", PROP_BOOLEAN, PROP_NONE); RNA_def_property_ui_text(prop, "", "Maintain the relative weights for the group"); RNA_def_property_boolean_sdna(prop, NULL, "flag", 0); - /* update data because modifiers may use T24761. */ + /* update data because modifiers may use #24761. */ RNA_def_property_update(prop, NC_GEOM | ND_DATA | NA_RENAME, "rna_Object_internal_update_data"); prop = RNA_def_property(srna, "index", PROP_INT, PROP_UNSIGNED); @@ -2433,7 +2433,7 @@ static void rna_def_face_map(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Name", "Face map name"); RNA_def_struct_name_property(srna, prop); RNA_def_property_string_funcs(prop, NULL, NULL, "rna_FaceMap_name_set"); - /* update data because modifiers may use T24761. */ + /* update data because modifiers may use #24761. */ RNA_def_property_update(prop, NC_GEOM | ND_DATA | NA_RENAME, "rna_Object_internal_update_data"); prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_path.cc b/source/blender/makesrna/intern/rna_path.cc index 420c89071072..a878acd5b778 100644 --- a/source/blender/makesrna/intern/rna_path.cc +++ b/source/blender/makesrna/intern/rna_path.cc @@ -832,7 +832,7 @@ static char *rna_idp_path(PointerRNA *ptr, * That case must be ignored here, we only want to deal with runtime RNA properties stored in * IDProps. * - * See T84091. */ + * See #84091. */ PropertyRNA *prop = RNA_struct_find_property(ptr, iter->name); if (prop == nullptr || (prop->flag & PROP_IDPROPERTY) == 0) { continue; @@ -906,7 +906,7 @@ static char *rna_path_from_ID_to_idpgroup(const PointerRNA *ptr) BLI_assert(ptr->owner_id != nullptr); /* TODO: Support Bones/PoseBones. no pointers stored to the bones from here, only the ID. - * See example in T25746. + * See example in #25746. * Unless this is added only way to find this is to also search * all bones and pose bones of an armature or object. */ @@ -1227,7 +1227,7 @@ char *RNA_path_full_struct_py(const PointerRNA *ptr) data_path = RNA_path_from_ID_to_struct(ptr); - /* XXX data_path may be NULL (see T36788), + /* XXX data_path may be NULL (see #36788), * do we want to get the 'bpy.data.foo["bar"].(null)' stuff? */ ret = BLI_sprintfN("%s.%s", id_path, data_path); diff --git a/source/blender/makesrna/intern/rna_scene_api.c b/source/blender/makesrna/intern/rna_scene_api.c index 3953fc66fc8a..f586507427df 100644 --- a/source/blender/makesrna/intern/rna_scene_api.c +++ b/source/blender/makesrna/intern/rna_scene_api.c @@ -74,7 +74,7 @@ static void rna_Scene_frame_set(Scene *scene, Main *bmain, int frame, float subf * redrawing while the data is being modified for render */ if (!G.is_rendering) { /* can't use NC_SCENE|ND_FRAME because this causes wm_event_do_notifiers to call - * BKE_scene_graph_update_for_newframe which will lose any un-keyed changes T24690. */ + * BKE_scene_graph_update_for_newframe which will lose any un-keyed changes #24690. */ // WM_main_add_notifier(NC_SCENE|ND_FRAME, scene); /* instead just redraw the views */ diff --git a/source/blender/makesrna/intern/rna_screen.c b/source/blender/makesrna/intern/rna_screen.c index a65bd613ecfc..4d837a374d10 100644 --- a/source/blender/makesrna/intern/rna_screen.c +++ b/source/blender/makesrna/intern/rna_screen.c @@ -76,7 +76,7 @@ static void rna_Screen_redraw_update(Main *UNUSED(bmain), Scene *UNUSED(scene), static bool rna_Screen_is_animation_playing_get(PointerRNA *UNUSED(ptr)) { - /* can be NULL on file load, T42619 */ + /* can be NULL on file load, #42619 */ wmWindowManager *wm = G_MAIN->wm.first; return wm ? (ED_screen_animation_playing(wm) != NULL) : 0; } @@ -103,7 +103,7 @@ static int rna_Area_type_get(PointerRNA *ptr) { ScrArea *area = (ScrArea *)ptr->data; /* Usually 'spacetype' is used. It lags behind a bit while switching area - * type though, then we use 'butspacetype' instead (T41435). */ + * type though, then we use 'butspacetype' instead (#41435). */ return (area->butspacetype == SPACE_EMPTY) ? area->spacetype : area->butspacetype; } @@ -130,7 +130,7 @@ static void rna_Area_type_update(bContext *C, PointerRNA *ptr) bScreen *screen = (bScreen *)ptr->owner_id; ScrArea *area = (ScrArea *)ptr->data; - /* Running update without having called 'set', see: T64049 */ + /* Running update without having called 'set', see: #64049 */ if (area->butspacetype == SPACE_EMPTY) { return; } @@ -377,7 +377,7 @@ static void rna_def_area(BlenderRNA *brna) * and needs to be read back by script authors. * * This happens when an area is full-screen (when #ScrArea.full is set). - * in this case reading the empty value is needed, but it should never be set, see: T87187. */ + * in this case reading the empty value is needed, but it should never be set, see: #87187. */ prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "spacetype"); RNA_def_property_enum_items(prop, rna_enum_space_type_items); diff --git a/source/blender/makesrna/intern/rna_sculpt_paint.c b/source/blender/makesrna/intern/rna_sculpt_paint.c index 7c1cae1c44db..aa60339b7b83 100644 --- a/source/blender/makesrna/intern/rna_sculpt_paint.c +++ b/source/blender/makesrna/intern/rna_sculpt_paint.c @@ -228,7 +228,7 @@ static const EnumPropertyItem *rna_ParticleEdit_tool_itemf(bContext *C, # else /* use this rather than PE_get_current() - because the editing cache is * dependent on the cache being updated which can happen after this UI - * draws causing a glitch T28883. */ + * draws causing a glitch #28883. */ ParticleSystem *psys = psys_get_current(ob); # endif diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c index 21843a5c2238..55a71ceb14e9 100644 --- a/source/blender/makesrna/intern/rna_sequencer.c +++ b/source/blender/makesrna/intern/rna_sequencer.c @@ -3128,7 +3128,7 @@ static void rna_def_gaussian_blur(StructRNA *srna) static void rna_def_text(StructRNA *srna) { - /* Avoid text icons because they imply this aligns within a frame, see: T71082 */ + /* Avoid text icons because they imply this aligns within a frame, see: #71082 */ static const EnumPropertyItem text_align_x_items[] = { {SEQ_TEXT_ALIGN_X_LEFT, "LEFT", ICON_ANCHOR_LEFT, "Left", ""}, {SEQ_TEXT_ALIGN_X_CENTER, "CENTER", ICON_ANCHOR_CENTER, "Center", ""}, diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 7bdbfe756840..ae07f2372b64 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -2064,7 +2064,7 @@ static void rna_SpaceProperties_context_update(Main *UNUSED(bmain), PointerRNA *ptr) { SpaceProperties *sbuts = (SpaceProperties *)(ptr->data); - /* XXX BCONTEXT_DATA is ugly, but required for lights... See T51318. */ + /* XXX BCONTEXT_DATA is ugly, but required for lights... See #51318. */ if (ELEM(sbuts->mainb, BCONTEXT_WORLD, BCONTEXT_MATERIAL, BCONTEXT_TEXTURE, BCONTEXT_DATA)) { sbuts->preview = 1; } diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c index 9de32c24702f..b768c7074b79 100644 --- a/source/blender/makesrna/intern/rna_ui.c +++ b/source/blender/makesrna/intern/rna_ui.c @@ -562,7 +562,7 @@ static void uilist_filter_items(uiList *ui_list, RNA_parameter_dynamic_length_get(&list, parm), "filter_flags", len); - /* NOTE: we cannot return here, we would let flt_data in inconsistent state... see T38356. */ + /* NOTE: we cannot return here, we would let flt_data in inconsistent state... see #38356. */ filter_flags = NULL; } else { @@ -578,7 +578,7 @@ static void uilist_filter_items(uiList *ui_list, RNA_parameter_dynamic_length_get(&list, parm), "filter_neworder", len); - /* NOTE: we cannot return here, we would let flt_data in inconsistent state... see T38356. */ + /* NOTE: we cannot return here, we would let flt_data in inconsistent state... see #38356. */ filter_neworder = NULL; } else { diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 347211f52460..3015c34f2f35 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -373,7 +373,7 @@ static void rna_userdef_undo_steps_set(PointerRNA *ptr, int value) { UserDef *userdef = (UserDef *)ptr->data; - /* Do not allow 1 undo steps, useless and breaks undo/redo process (see T42531). */ + /* Do not allow 1 undo steps, useless and breaks undo/redo process (see #42531). */ userdef->undosteps = (value == 1) ? 2 : value; } @@ -605,7 +605,7 @@ static void rna_UserDef_weight_color_update(Main *bmain, Scene *scene, PointerRN static void rna_UserDef_viewport_lights_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - /* If all lights are off gpu_draw resets them all, see: T27627, + /* If all lights are off gpu_draw resets them all, see: #27627, * so disallow them all to be disabled. */ if (U.light_param[0].flag == 0 && U.light_param[1].flag == 0 && U.light_param[2].flag == 0 && U.light_param[3].flag == 0) { diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c index 20ff4c2efab2..e646258fb92d 100644 --- a/source/blender/makesrna/intern/rna_wm.c +++ b/source/blender/makesrna/intern/rna_wm.c @@ -1548,7 +1548,7 @@ static StructRNA *rna_Operator_register(Main *bmain, BLI_assert(ARRAY_SIZE(strings) == 5); } - /* XXX, this doubles up with the operator name T29666. + /* XXX, this doubles up with the operator name #29666. * for now just remove from dir(bpy.types) */ /* create a new operator type */ @@ -1702,7 +1702,7 @@ static StructRNA *rna_MacroOperator_register(Main *bmain, BLI_assert(ARRAY_SIZE(strings) == 5); } - /* XXX, this doubles up with the operator name T29666. + /* XXX, this doubles up with the operator name #29666. * for now just remove from dir(bpy.types) */ /* create a new operator type */ diff --git a/source/blender/makesrna/intern/rna_wm_api.c b/source/blender/makesrna/intern/rna_wm_api.c index b82458c44429..5d8bb533d7eb 100644 --- a/source/blender/makesrna/intern/rna_wm_api.c +++ b/source/blender/makesrna/intern/rna_wm_api.c @@ -291,7 +291,7 @@ static wmKeyMapItem *rna_KeyMap_item_new(wmKeyMap *km, kmi->flag |= KMI_REPEAT_IGNORE; } - /* T32437 allow scripts to define hotkeys that get added to start of keymap + /* #32437 allow scripts to define hotkeys that get added to start of keymap * so that they stand a chance against catch-all defines later on */ if (head) { diff --git a/source/blender/makesrna/intern/rna_wm_gizmo.c b/source/blender/makesrna/intern/rna_wm_gizmo.c index a4630415ccd5..23fd22b47b2d 100644 --- a/source/blender/makesrna/intern/rna_wm_gizmo.c +++ b/source/blender/makesrna/intern/rna_wm_gizmo.c @@ -517,7 +517,7 @@ static void rna_Gizmo_unregister(struct Main *bmain, StructRNA *type) WM_gizmotype_remove_ptr(NULL, bmain, gzt); - /* Free extension after removing instances so `__del__` doesn't crash, see: T85567. */ + /* Free extension after removing instances so `__del__` doesn't crash, see: #85567. */ RNA_struct_free_extension(type, &gzt->rna_ext); RNA_struct_free(&BLENDER_RNA, type); @@ -916,7 +916,7 @@ static void rna_GizmoGroup_unregister(struct Main *bmain, StructRNA *type) WM_gizmo_group_type_remove_ptr(bmain, gzgt); - /* Free extension after removing instances so `__del__` doesn't crash, see: T85567. */ + /* Free extension after removing instances so `__del__` doesn't crash, see: #85567. */ RNA_struct_free_extension(type, &gzgt->rna_ext); RNA_struct_free(&BLENDER_RNA, type); diff --git a/source/blender/modifiers/intern/MOD_boolean.cc b/source/blender/modifiers/intern/MOD_boolean.cc index 453c66c26a6a..bc657717e380 100644 --- a/source/blender/modifiers/intern/MOD_boolean.cc +++ b/source/blender/modifiers/intern/MOD_boolean.cc @@ -237,7 +237,7 @@ static BMesh *BMD_mesh_bm_create( BMesh *bm = BM_mesh_create(&allocsize, &bmesh_create_params); /* Keep `mesh` first, needed so active layers are set based on `mesh` not `mesh_operand_ob`, - * otherwise the wrong active render layer is used, see T92384. + * otherwise the wrong active render layer is used, see #92384. * * NOTE: while initializing customer data layers the is not essential, * it avoids the overhead of having to re-allocate #BMHeader.data when the 2nd mesh is added diff --git a/source/blender/modifiers/intern/MOD_datatransfer.cc b/source/blender/modifiers/intern/MOD_datatransfer.cc index 7ac834c804ad..80c78955d146 100644 --- a/source/blender/modifiers/intern/MOD_datatransfer.cc +++ b/source/blender/modifiers/intern/MOD_datatransfer.cc @@ -183,7 +183,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * if (((result == me) || (me_positions == result_positions) || (me_edges == result_edges)) && (dtmd->data_types & DT_TYPES_AFFECT_MESH)) { /* We need to duplicate data here, otherwise setting custom normals, edges' sharpness, etc., - * could modify org mesh, see T43671. */ + * could modify org mesh, see #43671. */ result = (Mesh *)BKE_id_copy_ex(nullptr, &me_mod->id, nullptr, LIB_ID_COPY_LOCALIZE); } diff --git a/source/blender/modifiers/intern/MOD_meshsequencecache.cc b/source/blender/modifiers/intern/MOD_meshsequencecache.cc index c8628a7693ee..16b54bd49bd8 100644 --- a/source/blender/modifiers/intern/MOD_meshsequencecache.cc +++ b/source/blender/modifiers/intern/MOD_meshsequencecache.cc @@ -213,7 +213,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * * XXX(Hans): This probably isn't true anymore with various CoW improvements, etc. */ if ((me_positions.data() == mesh_positions.data()) || (me_edges.data() == mesh_edges.data()) || (me_polys.data() == mesh_polys.data())) { - /* We need to duplicate data here, otherwise we'll modify org mesh, see T51701. */ + /* We need to duplicate data here, otherwise we'll modify org mesh, see #51701. */ mesh = reinterpret_cast( BKE_id_copy_ex(nullptr, &mesh->id, diff --git a/source/blender/modifiers/intern/MOD_normal_edit.cc b/source/blender/modifiers/intern/MOD_normal_edit.cc index d6089372da6d..aecbff5c7be0 100644 --- a/source/blender/modifiers/intern/MOD_normal_edit.cc +++ b/source/blender/modifiers/intern/MOD_normal_edit.cc @@ -95,7 +95,7 @@ static void generate_vert_coordinates(Mesh *mesh, /* Translate our coordinates so that center of ob_center is at (0, 0, 0). */ /* Get ob_center (world) coordinates in ob local coordinates. - * No need to take into account ob_center's space here, see T44027. */ + * No need to take into account ob_center's space here, see #44027. */ invert_m4_m4(inv_obmat, ob->object_to_world); mul_v3_m4v3(diff, inv_obmat, ob_center->object_to_world[3]); negate_v3(diff); @@ -532,7 +532,7 @@ static Mesh *normalEditModifier_do(NormalEditModifierData *enmd, if (BKE_mesh_edges(mesh) == BKE_mesh_edges((Mesh *)ob->data)) { /* We need to duplicate data here, otherwise setting custom normals * (which may also affect sharp edges) could - * modify original mesh, see T43671. */ + * modify original mesh, see #43671. */ result = (Mesh *)BKE_id_copy_ex(nullptr, &mesh->id, nullptr, LIB_ID_COPY_LOCALIZE); } else { diff --git a/source/blender/modifiers/intern/MOD_remesh.cc b/source/blender/modifiers/intern/MOD_remesh.cc index d35f4095acf5..e57778841e20 100644 --- a/source/blender/modifiers/intern/MOD_remesh.cc +++ b/source/blender/modifiers/intern/MOD_remesh.cc @@ -178,7 +178,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext * /*ctx*/, M } /* TODO(jbakker): Dualcon crashes when run in parallel. Could be related to incorrect * input data or that the library isn't thread safe. - * This was identified when changing the task isolation's during T76553. */ + * This was identified when changing the task isolation's during #76553. */ static ThreadMutex dualcon_mutex = BLI_MUTEX_INITIALIZER; BLI_mutex_lock(&dualcon_mutex); output = static_cast(dualcon(&input, diff --git a/source/blender/modifiers/intern/MOD_simpledeform.c b/source/blender/modifiers/intern/MOD_simpledeform.c index 64d272c33e35..27f5d5f2f326 100644 --- a/source/blender/modifiers/intern/MOD_simpledeform.c +++ b/source/blender/modifiers/intern/MOD_simpledeform.c @@ -168,7 +168,7 @@ static void simpleDeform_bend(const float factor, cost = cosf(theta); /* NOTE: the operations below a susceptible to float precision errors - * regarding the order of operations, take care when changing, see: T85470 */ + * regarding the order of operations, take care when changing, see: #85470 */ switch (axis) { case 0: r_co[0] = x; diff --git a/source/blender/modifiers/intern/MOD_skin.c b/source/blender/modifiers/intern/MOD_skin.c index e3fbd072f36d..cdb7559a099a 100644 --- a/source/blender/modifiers/intern/MOD_skin.c +++ b/source/blender/modifiers/intern/MOD_skin.c @@ -143,7 +143,7 @@ typedef struct Frame { struct Frame *frame; int corner; /* checked to avoid chaining. - * (merging when we're already been referenced), see T39775 */ + * (merging when we're already been referenced), see #39775 */ uint is_target : 1; } merge[4]; @@ -834,7 +834,7 @@ static int calc_edge_subdivisions(const float (*vert_positions)[3], const MEdge *e, const int *degree) { - /* prevent memory errors T38003. */ + /* prevent memory errors #38003. */ #define NUM_SUBDIVISIONS_MAX 128 const MVertSkin *evs[2] = {&nodes[e->v1], &nodes[e->v2]}; diff --git a/source/blender/modifiers/intern/MOD_solidify_extrude.cc b/source/blender/modifiers/intern/MOD_solidify_extrude.cc index eb5cacc88865..9375a3eb59f7 100644 --- a/source/blender/modifiers/intern/MOD_solidify_extrude.cc +++ b/source/blender/modifiers/intern/MOD_solidify_extrude.cc @@ -32,7 +32,7 @@ /** \name High Quality Normal Calculation Function * \{ */ -/* skip shell thickness for non-manifold edges, see T35710. */ +/* skip shell thickness for non-manifold edges, see #35710. */ #define USE_NONMANIFOLD_WORKAROUND /* *** derived mesh high quality normal calculation function *** */ @@ -974,7 +974,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex MEM_freeN(vert_nors); } - /* must recalculate normals with vgroups since they can displace unevenly T26888. */ + /* must recalculate normals with vgroups since they can displace unevenly #26888. */ if (BKE_mesh_vertex_normals_are_dirty(mesh) || do_rim || dvert) { BKE_mesh_normals_tag_dirty(result); } diff --git a/source/blender/modifiers/intern/MOD_surfacedeform.cc b/source/blender/modifiers/intern/MOD_surfacedeform.cc index 8f144990e55b..bbcbb80a7717 100644 --- a/source/blender/modifiers/intern/MOD_surfacedeform.cc +++ b/source/blender/modifiers/intern/MOD_surfacedeform.cc @@ -811,7 +811,7 @@ BLI_INLINE SDefBindWeightData *computeBindWeights(SDefBindCalcData *const data, const float edge_angle_a = bpoly->point_edgemid_angles[bpoly->dominant_edge]; const float edge_angle_b = bpoly->point_edgemid_angles[!bpoly->dominant_edge]; /* Clamp so skinny faces with near zero `edgemid_angle` - * won't cause numeric problems. see T81988. */ + * won't cause numeric problems. see #81988. */ scale_weight = edge_angle_a / max_ff(edge_angle_a, bpoly->edgemid_angle); scale_weight /= scale_weight + (edge_angle_b / max_ff(edge_angle_b, bpoly->edgemid_angle)); } @@ -888,7 +888,7 @@ BLI_INLINE SDefBindWeightData *computeBindWeights(SDefBindCalcData *const data, /* Apply after other kinds of scaling so the faces corner angle is always * scaled in a uniform way, preventing heavily sub-divided triangle fans - * from having a lop-sided influence on the weighting, see T81988. */ + * from having a lop-sided influence on the weighting, see #81988. */ bpoly->weight *= bpoly->edgemid_angle / M_PI; tot_weight += bpoly->weight; diff --git a/source/blender/nodes/composite/nodes/node_composite_output_file.cc b/source/blender/nodes/composite/nodes/node_composite_output_file.cc index 8939405cc075..512977944090 100644 --- a/source/blender/nodes/composite/nodes/node_composite_output_file.cc +++ b/source/blender/nodes/composite/nodes/node_composite_output_file.cc @@ -258,7 +258,7 @@ static void update_output_file(bNodeTree *ntree, bNode *node) { PointerRNA ptr; - /* XXX fix for T36706: remove invalid sockets added with bpy API. + /* XXX fix for #36706: remove invalid sockets added with bpy API. * This is not ideal, but prevents crashes from missing storage. * FileOutput node needs a redesign to support this properly. */ diff --git a/source/blender/nodes/function/nodes/node_fn_random_value.cc b/source/blender/nodes/function/nodes/node_fn_random_value.cc index df90c2103cc7..416d0e754eb8 100644 --- a/source/blender/nodes/function/nodes/node_fn_random_value.cc +++ b/source/blender/nodes/function/nodes/node_fn_random_value.cc @@ -170,7 +170,7 @@ static void node_build_multi_function(NodeMultiFunctionBuilder &builder) [](int min_value, int max_value, int id, int seed) -> int { const float value = noise::hash_to_float(id, seed); /* Add one to the maximum and use floor to produce an even - * distribution for the first and last values (See T93591). */ + * distribution for the first and last values (See #93591). */ return floor(value * (max_value + 1 - min_value) + min_value); }, mf::build::exec_presets::SomeSpanOrSingle<2>()); diff --git a/source/blender/nodes/geometry/nodes/node_geo_dual_mesh.cc b/source/blender/nodes/geometry/nodes/node_geo_dual_mesh.cc index 8e51e8ac2b52..c4f88b8ac75f 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_dual_mesh.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_dual_mesh.cc @@ -540,7 +540,7 @@ static bool vertex_needs_dissolving(const int vertex, * used in the data-structures derived from the mesh. For each pair of polygons which has such a * vertex, an edge is created for the dual mesh between the centers of those two polygons. All * edges in the input mesh which contain such a vertex are marked as 'done' to prevent duplicate - * edges being created. (See T94144) + * edges being created. (See #94144) */ static void dissolve_redundant_verts(const Span edges, const Span polys, diff --git a/source/blender/nodes/geometry/nodes/node_geo_uv_unwrap.cc b/source/blender/nodes/geometry/nodes/node_geo_uv_unwrap.cc index 6c05234f1e8c..b17c41f8189a 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_uv_unwrap.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_uv_unwrap.cc @@ -114,7 +114,7 @@ static VArray construct_uv_gvarray(const Mesh &mesh, ParamKey vkeys[2]{edge.v1, edge.v2}; GEO_uv_parametrizer_edge_set_seam(handle, vkeys); } - /* TODO: once field input nodes are able to emit warnings (T94039), emit a + /* TODO: once field input nodes are able to emit warnings (#94039), emit a * warning if we fail to solve an island. */ GEO_uv_parametrizer_construct_end(handle, fill_holes, false, nullptr); diff --git a/source/blender/nodes/shader/node_shader_tree.cc b/source/blender/nodes/shader/node_shader_tree.cc index 691ffc936a7b..cae24ef4b0ad 100644 --- a/source/blender/nodes/shader/node_shader_tree.cc +++ b/source/blender/nodes/shader/node_shader_tree.cc @@ -367,7 +367,7 @@ static void ntree_shader_groups_expand_inputs(bNodeTree *localtree) LISTBASE_FOREACH (bNodeSocket *, socket, &node->inputs) { if (socket->link != nullptr && !(socket->link->flag & NODE_LINK_MUTED)) { bNodeLink *link = socket->link; - /* Fix the case where the socket is actually converting the data. (see T71374) + /* Fix the case where the socket is actually converting the data. (see #71374) * We only do the case of lossy conversion to float. */ if ((socket->type == SOCK_FLOAT) && (link->fromsock->type != link->tosock->type)) { if (link->fromsock->type == SOCK_RGBA) { @@ -439,7 +439,7 @@ static void flatten_group_do(bNodeTree *ntree, bNode *gnode) LISTBASE_FOREACH_MUTABLE (bNode *, node, &ngroup->nodes) { /* Remove interface nodes. * This also removes remaining links to and from interface nodes. - * We must delay removal since sockets will reference this node. see: T52092 */ + * We must delay removal since sockets will reference this node. see: #52092 */ if (ELEM(node->type, NODE_GROUP_INPUT, NODE_GROUP_OUTPUT)) { BLI_linklist_prepend(&group_interface_nodes, node); } @@ -448,7 +448,7 @@ static void flatten_group_do(bNodeTree *ntree, bNode *gnode) BLI_addtail(&ntree->nodes, node); nodeUniqueID(ntree, node); /* ensure unique node name in the node tree */ - /* This is very slow and it has no use for GPU nodetree. (see T70609) */ + /* This is very slow and it has no use for GPU nodetree. (see #70609) */ // nodeUniqueName(ntree, node); } ngroup->runtime->nodes_by_id.clear(); diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.cc b/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.cc index cf160c2c2773..fe3f2e2c8d05 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.cc +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.cc @@ -173,7 +173,7 @@ static int node_shader_gpu_bsdf_principled(GPUMaterial *mat, flag |= GPU_MATFLAG_CLEARCOAT; } - /* Ref. T98190: Defines are optimizations for old compilers. + /* Ref. #98190: Defines are optimizations for old compilers. * Might become unnecessary with EEVEE-Next. */ if (use_diffuse == false && use_refract == false && use_clear == true) { flag |= GPU_MATFLAG_PRINCIPLED_CLEARCOAT; diff --git a/source/blender/nodes/shader/nodes/node_shader_geometry.cc b/source/blender/nodes/shader/nodes/node_shader_geometry.cc index d7d5f4aa91f5..5ef2fec474b6 100644 --- a/source/blender/nodes/shader/nodes/node_shader_geometry.cc +++ b/source/blender/nodes/shader/nodes/node_shader_geometry.cc @@ -41,7 +41,7 @@ static int node_shader_gpu_geometry(GPUMaterial *mat, /* Normalize some vectors after dFdx/dFdy offsets. * This is the case for interpolated, non linear functions. * The resulting vector can still be a bit wrong but not as much. - * (see T70644) */ + * (see #70644) */ if (ELEM(i, 1, 2, 4)) { GPU_link(mat, "vector_math_normalize", diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_coord.cc b/source/blender/nodes/shader/nodes/node_shader_tex_coord.cc index a295bda9d079..bd0e195821ba 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_coord.cc +++ b/source/blender/nodes/shader/nodes/node_shader_tex_coord.cc @@ -54,7 +54,7 @@ static int node_shader_gpu_tex_coord(GPUMaterial *mat, /* Normalize some vectors after dFdx/dFdy offsets. * This is the case for interpolated, non linear functions. * The resulting vector can still be a bit wrong but not as much. - * (see T70644) */ + * (see #70644) */ if (ELEM(i, 1, 6)) { GPU_link(mat, "vector_math_normalize", diff --git a/source/blender/nodes/shader/nodes/node_shader_uvmap.cc b/source/blender/nodes/shader/nodes/node_shader_uvmap.cc index de8221e3e97f..d054457220c4 100644 --- a/source/blender/nodes/shader/nodes/node_shader_uvmap.cc +++ b/source/blender/nodes/shader/nodes/node_shader_uvmap.cc @@ -53,7 +53,7 @@ static int node_shader_gpu_uvmap(GPUMaterial *mat, /* NOTE: using CD_AUTO_FROM_NAME instead of CD_MTFACE as geometry nodes may overwrite data which * will also change the eCustomDataType. This will also make EEVEE and Cycles consistent. See - * T93179. */ + * #93179. */ GPUNodeLink *mtface = GPU_attribute(mat, CD_AUTO_FROM_NAME, attr->uv_map); GPU_stack_link(mat, node, "node_uvmap", in, out, mtface); diff --git a/source/blender/nodes/shader/nodes/node_shader_vertex_color.cc b/source/blender/nodes/shader/nodes/node_shader_vertex_color.cc index 0e0f94968517..da75f9155071 100644 --- a/source/blender/nodes/shader/nodes/node_shader_vertex_color.cc +++ b/source/blender/nodes/shader/nodes/node_shader_vertex_color.cc @@ -49,7 +49,7 @@ static int node_shader_gpu_vertex_color(GPUMaterial *mat, NodeShaderVertexColor *vertexColor = (NodeShaderVertexColor *)node->storage; /* NOTE: Using #CD_AUTO_FROM_NAME is necessary because there are multiple color attribute types, * and the type may change during evaluation anyway. This will also make EEVEE and Cycles - * consistent. See T93179. */ + * consistent. See #93179. */ GPUNodeLink *vertexColorLink; diff --git a/source/blender/nodes/texture/nodes/node_texture_common.cc b/source/blender/nodes/texture/nodes/node_texture_common.cc index 988195d852aa..7811f00ce331 100644 --- a/source/blender/nodes/texture/nodes/node_texture_common.cc +++ b/source/blender/nodes/texture/nodes/node_texture_common.cc @@ -69,7 +69,7 @@ static void group_copy_inputs(bNode *gnode, bNodeStack **in, bNodeStack *gstack) if (node->type == NODE_GROUP_INPUT) { for (sock = static_cast(node->outputs.first), a = 0; sock; sock = sock->next, a++) { - if (in[a]) { /* shouldn't need to check this T36694. */ + if (in[a]) { /* shouldn't need to check this #36694. */ ns = node_get_socket_stack(gstack, sock); if (ns) { copy_stack(ns, in[a]); @@ -95,7 +95,7 @@ static void group_copy_outputs(bNode *gnode, bNodeStack **out, bNodeStack *gstac int a; LISTBASE_FOREACH_INDEX (bNodeSocket *, sock, &group_output_node->inputs, a) { if (!out[a]) { - /* shouldn't need to check this T36694. */ + /* shouldn't need to check this #36694. */ continue; } diff --git a/source/blender/python/BPY_extern.h b/source/blender/python/BPY_extern.h index cb8dd0a8bc27..bf60e27d9670 100644 --- a/source/blender/python/BPY_extern.h +++ b/source/blender/python/BPY_extern.h @@ -109,7 +109,7 @@ void BPY_context_update(struct bContext *C); /** * Use for `CTX_*_set(..)` functions need to set values which are later read back as expected. * In this case we don't want the Python context to override the values as it causes problems - * see T66256. + * see #66256. * * \param dict_p: A pointer to #bContext.data.py_context so we can assign a new value. * \param dict_orig: The value of #bContext.data.py_context_orig to check if we need to copy. diff --git a/source/blender/python/generic/idprop_py_api.c b/source/blender/python/generic/idprop_py_api.c index 08cdbe102330..615f05adc1be 100644 --- a/source/blender/python/generic/idprop_py_api.c +++ b/source/blender/python/generic/idprop_py_api.c @@ -727,12 +727,12 @@ bool BPy_IDProperty_Map_ValidateAndCreate(PyObject *name_obj, IDProperty *group, else { IDProperty *prop_exist; - /* avoid freeing when types match in case they are referenced by the UI, see: T37073 + /* avoid freeing when types match in case they are referenced by the UI, see: #37073 * obviously this isn't a complete solution, but helps for common cases. */ prop_exist = IDP_GetPropertyFromGroup(group, prop->name); if ((prop_exist != NULL) && (prop_exist->type == prop->type) && (prop_exist->subtype == prop->subtype)) { - /* Preserve prev/next links!!! See T42593. */ + /* Preserve prev/next links!!! See #42593. */ prop->prev = prop_exist->prev; prop->next = prop_exist->next; prop->flag = prop_exist->flag; diff --git a/source/blender/python/generic/py_capi_utils.c b/source/blender/python/generic/py_capi_utils.c index ed9f6160eaa4..fc0065912b6f 100644 --- a/source/blender/python/generic/py_capi_utils.c +++ b/source/blender/python/generic/py_capi_utils.c @@ -839,7 +839,7 @@ static void pyc_exception_buffer_handle_system_exit(PyObject *error_type, * So print the error and exit now. This is necessary as the call to #PyErr_Print exits, * the temporary `sys.stderr` assignment causes the output to be suppressed, failing silently. * Instead, restore the error and print it. If Python changes it's behavior and doesn't exit in - * the future - continue to create the exception buffer, see: T99966. + * the future - continue to create the exception buffer, see: #99966. * * Arguably accessing a `SystemExit` exception as a buffer should be supported without exiting. * (by temporarily enabling inspection for example) however - it's not obvious exactly when this diff --git a/source/blender/python/gpu/gpu_py_offscreen.c b/source/blender/python/gpu/gpu_py_offscreen.c index 2738a4e47844..6e50a7f323dd 100644 --- a/source/blender/python/gpu/gpu_py_offscreen.c +++ b/source/blender/python/gpu/gpu_py_offscreen.c @@ -365,7 +365,7 @@ static PyObject *pygpu_offscreen_draw_view3d(BPyGPUOffScreen *self, PyObject *ar depsgraph = BKE_scene_ensure_depsgraph(G_MAIN, scene, view_layer); - /* Disable 'bgl' state since it interfere with off-screen drawing, see: T84402. */ + /* Disable 'bgl' state since it interfere with off-screen drawing, see: #84402. */ const bool is_bgl = GPU_bgl_get(); if (is_bgl) { GPU_bgl_end(); @@ -374,7 +374,7 @@ static PyObject *pygpu_offscreen_draw_view3d(BPyGPUOffScreen *self, PyObject *ar GPU_offscreen_bind(self->ofs, true); /* Cache the #GPUViewport so the frame-buffers and associated textures are - * not reallocated each time, see: T89204 */ + * not reallocated each time, see: #89204 */ if (!self->viewport) { self->viewport = GPU_viewport_create(); } diff --git a/source/blender/python/intern/bpy_app.c b/source/blender/python/intern/bpy_app.c index 70cf231bc265..ccff3d5a682d 100644 --- a/source/blender/python/intern/bpy_app.c +++ b/source/blender/python/intern/bpy_app.c @@ -153,7 +153,7 @@ static PyObject *make_app_info(void) SetObjItem(PyBool_FromLong(G.factory_startup)); /* build info, use bytes since we can't assume _any_ encoding: - * see patch T30154 for issue */ + * see patch #30154 for issue */ #ifdef BUILD_DATE SetBytesItem(build_date); SetBytesItem(build_time); @@ -557,7 +557,7 @@ PyObject *BPY_app_struct(void) BlenderAppType.tp_init = NULL; BlenderAppType.tp_new = NULL; BlenderAppType.tp_hash = (hashfunc) - _Py_HashPointer; /* without this we can't do set(sys.modules) T29635. */ + _Py_HashPointer; /* without this we can't do set(sys.modules) #29635. */ /* Kind of a hack on top of #PyStructSequence. */ py_struct_seq_getset_init(); diff --git a/source/blender/python/intern/bpy_app_alembic.c b/source/blender/python/intern/bpy_app_alembic.c index abecd3d8c1a1..afa71572d5a1 100644 --- a/source/blender/python/intern/bpy_app_alembic.c +++ b/source/blender/python/intern/bpy_app_alembic.c @@ -84,7 +84,7 @@ PyObject *BPY_app_alembic_struct(void) BlenderAppABCType.tp_init = NULL; BlenderAppABCType.tp_new = NULL; BlenderAppABCType.tp_hash = (hashfunc) - _Py_HashPointer; /* without this we can't do set(sys.modules) T29635. */ + _Py_HashPointer; /* without this we can't do set(sys.modules) #29635. */ return ret; } diff --git a/source/blender/python/intern/bpy_app_build_options.c b/source/blender/python/intern/bpy_app_build_options.c index a744f3fd4fa5..9d90b66854e8 100644 --- a/source/blender/python/intern/bpy_app_build_options.c +++ b/source/blender/python/intern/bpy_app_build_options.c @@ -349,7 +349,7 @@ PyObject *BPY_app_build_options_struct(void) BlenderAppBuildOptionsType.tp_init = NULL; BlenderAppBuildOptionsType.tp_new = NULL; BlenderAppBuildOptionsType.tp_hash = (hashfunc) - _Py_HashPointer; /* without this we can't do set(sys.modules) T29635. */ + _Py_HashPointer; /* without this we can't do set(sys.modules) #29635. */ return ret; } diff --git a/source/blender/python/intern/bpy_app_ffmpeg.c b/source/blender/python/intern/bpy_app_ffmpeg.c index c14b6672e4db..10170d5439b2 100644 --- a/source/blender/python/intern/bpy_app_ffmpeg.c +++ b/source/blender/python/intern/bpy_app_ffmpeg.c @@ -126,7 +126,7 @@ PyObject *BPY_app_ffmpeg_struct(void) BlenderAppFFmpegType.tp_init = NULL; BlenderAppFFmpegType.tp_new = NULL; BlenderAppFFmpegType.tp_hash = (hashfunc) - _Py_HashPointer; /* without this we can't do set(sys.modules) T29635. */ + _Py_HashPointer; /* without this we can't do set(sys.modules) #29635. */ return ret; } diff --git a/source/blender/python/intern/bpy_app_handlers.c b/source/blender/python/intern/bpy_app_handlers.c index 947ec5d60bb5..296d10fa84bb 100644 --- a/source/blender/python/intern/bpy_app_handlers.c +++ b/source/blender/python/intern/bpy_app_handlers.c @@ -242,7 +242,7 @@ PyObject *BPY_app_handlers_struct(void) BlenderAppCbType.tp_init = NULL; BlenderAppCbType.tp_new = NULL; BlenderAppCbType.tp_hash = (hashfunc) - _Py_HashPointer; /* without this we can't do set(sys.modules) T29635. */ + _Py_HashPointer; /* without this we can't do set(sys.modules) #29635. */ /* assign the C callbacks */ if (ret) { diff --git a/source/blender/python/intern/bpy_app_ocio.c b/source/blender/python/intern/bpy_app_ocio.c index 3f28d05830bd..0cea91908c02 100644 --- a/source/blender/python/intern/bpy_app_ocio.c +++ b/source/blender/python/intern/bpy_app_ocio.c @@ -90,7 +90,7 @@ PyObject *BPY_app_ocio_struct(void) BlenderAppOCIOType.tp_init = NULL; BlenderAppOCIOType.tp_new = NULL; BlenderAppOCIOType.tp_hash = (hashfunc) - _Py_HashPointer; /* without this we can't do set(sys.modules) T29635. */ + _Py_HashPointer; /* without this we can't do set(sys.modules) #29635. */ return ret; } diff --git a/source/blender/python/intern/bpy_app_oiio.c b/source/blender/python/intern/bpy_app_oiio.c index ec0bc31c8449..ae1c2176dd3d 100644 --- a/source/blender/python/intern/bpy_app_oiio.c +++ b/source/blender/python/intern/bpy_app_oiio.c @@ -86,7 +86,7 @@ PyObject *BPY_app_oiio_struct(void) BlenderAppOIIOType.tp_init = NULL; BlenderAppOIIOType.tp_new = NULL; BlenderAppOIIOType.tp_hash = (hashfunc) - _Py_HashPointer; /* without this we can't do set(sys.modules) T29635. */ + _Py_HashPointer; /* without this we can't do set(sys.modules) #29635. */ return ret; } diff --git a/source/blender/python/intern/bpy_app_opensubdiv.c b/source/blender/python/intern/bpy_app_opensubdiv.c index 61250147d672..5ffa23789e70 100644 --- a/source/blender/python/intern/bpy_app_opensubdiv.c +++ b/source/blender/python/intern/bpy_app_opensubdiv.c @@ -82,7 +82,7 @@ PyObject *BPY_app_opensubdiv_struct(void) /* prevent user from creating new instances */ BlenderAppOpenSubdivType.tp_init = NULL; BlenderAppOpenSubdivType.tp_new = NULL; - /* without this we can't do set(sys.modules) T29635. */ + /* without this we can't do set(sys.modules) #29635. */ BlenderAppOpenSubdivType.tp_hash = (hashfunc)_Py_HashPointer; return ret; diff --git a/source/blender/python/intern/bpy_app_openvdb.c b/source/blender/python/intern/bpy_app_openvdb.c index 6cc476cebccb..91ff0cd04ce3 100644 --- a/source/blender/python/intern/bpy_app_openvdb.c +++ b/source/blender/python/intern/bpy_app_openvdb.c @@ -88,7 +88,7 @@ PyObject *BPY_app_openvdb_struct(void) BlenderAppOVDBType.tp_init = NULL; BlenderAppOVDBType.tp_new = NULL; BlenderAppOVDBType.tp_hash = (hashfunc) - _Py_HashPointer; /* without this we can't do set(sys.modules) T29635. */ + _Py_HashPointer; /* without this we can't do set(sys.modules) #29635. */ return ret; } diff --git a/source/blender/python/intern/bpy_app_sdl.c b/source/blender/python/intern/bpy_app_sdl.c index ff659cf43c4b..6f13058b8e1c 100644 --- a/source/blender/python/intern/bpy_app_sdl.c +++ b/source/blender/python/intern/bpy_app_sdl.c @@ -123,7 +123,7 @@ PyObject *BPY_app_sdl_struct(void) BlenderAppSDLType.tp_init = NULL; BlenderAppSDLType.tp_new = NULL; BlenderAppSDLType.tp_hash = (hashfunc) - _Py_HashPointer; /* without this we can't do set(sys.modules) T29635. */ + _Py_HashPointer; /* without this we can't do set(sys.modules) #29635. */ return ret; } diff --git a/source/blender/python/intern/bpy_app_translations.c b/source/blender/python/intern/bpy_app_translations.c index ccd0228d9e4a..3fa3c5d75b17 100644 --- a/source/blender/python/intern/bpy_app_translations.c +++ b/source/blender/python/intern/bpy_app_translations.c @@ -854,7 +854,7 @@ PyObject *BPY_app_translations_struct(void) /* prevent user from creating new instances */ BlenderAppTranslationsType.tp_new = NULL; - /* without this we can't do set(sys.modules) T29635. */ + /* without this we can't do set(sys.modules) #29635. */ BlenderAppTranslationsType.tp_hash = (hashfunc)_Py_HashPointer; return ret; @@ -862,7 +862,7 @@ PyObject *BPY_app_translations_struct(void) void BPY_app_translations_end(void) { - /* In case the object remains in a module's name-space, see T44127. */ + /* In case the object remains in a module's name-space, see #44127. */ #ifdef WITH_INTERNATIONAL _clear_translations_cache(); #endif diff --git a/source/blender/python/intern/bpy_app_usd.c b/source/blender/python/intern/bpy_app_usd.c index 811a4e4c085f..3fcdb1aa3c73 100644 --- a/source/blender/python/intern/bpy_app_usd.c +++ b/source/blender/python/intern/bpy_app_usd.c @@ -85,7 +85,7 @@ PyObject *BPY_app_usd_struct(void) BlenderAppUSDType.tp_init = NULL; BlenderAppUSDType.tp_new = NULL; BlenderAppUSDType.tp_hash = (hashfunc) - _Py_HashPointer; /* without this we can't do set(sys.modules) T29635. */ + _Py_HashPointer; /* without this we can't do set(sys.modules) #29635. */ return ret; } diff --git a/source/blender/python/intern/bpy_driver.c b/source/blender/python/intern/bpy_driver.c index be1ae1abf5f5..ae19e99151b6 100644 --- a/source/blender/python/intern/bpy_driver.c +++ b/source/blender/python/intern/bpy_driver.c @@ -211,7 +211,7 @@ static PyObject *bpy_pydriver_depsgraph_as_pyobject(struct Depsgraph *depsgraph) /** * Adds a variable `depsgraph` to the name-space. This can then be used to obtain evaluated - * data-blocks, and the current view layer and scene. See T75553. + * data-blocks, and the current view layer and scene. See #75553. */ static void bpy_pydriver_namespace_update_depsgraph(struct Depsgraph *depsgraph) { @@ -560,9 +560,9 @@ float BPY_driver_exec(struct PathResolvedRNA *anim_rna, /* (old) NOTE: PyGILState_Ensure() isn't always called because python can call * the bake operator which intern starts a thread which calls scene update * which does a driver update. to avoid a deadlock check #PyC_IsInterpreterActive() - * if #PyGILState_Ensure() is needed, see T27683. + * if #PyGILState_Ensure() is needed, see #27683. * - * (new) NOTE: checking if python is running is not thread-safe T28114 + * (new) NOTE: checking if python is running is not thread-safe #28114 * now release the GIL on python operator execution instead, using * #PyEval_SaveThread() / #PyEval_RestoreThread() so we don't lock up blender. * @@ -612,7 +612,7 @@ float BPY_driver_exec(struct PathResolvedRNA *anim_rna, gilstate = PyGILState_Ensure(); } - /* Needed since drivers are updated directly after undo where `main` is re-allocated T28807. */ + /* Needed since drivers are updated directly after undo where `main` is re-allocated #28807. */ BPY_update_rna_module(); /* Initialize global dictionary for Python driver evaluation settings. */ diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index e94adbedabe1..4fe39e1c5b05 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -316,7 +316,7 @@ void BPY_python_start(bContext *C, int argc, const char **argv) PyPreConfig preconfig; PyStatus status; - /* To narrow down reports where the systems Python is inexplicably used, see: T98131. */ + /* To narrow down reports where the systems Python is inexplicably used, see: #98131. */ CLOG_INFO( BPY_LOG_INTERFACE, 2, @@ -329,7 +329,7 @@ void BPY_python_start(bContext *C, int argc, const char **argv) } else { /* Only use the systems environment variables and site when explicitly requested. - * Since an incorrect 'PYTHONPATH' causes difficult to debug errors, see: T72807. + * Since an incorrect 'PYTHONPATH' causes difficult to debug errors, see: #72807. * An alternative to setting `preconfig.use_environment = 0` */ PyPreConfig_InitIsolatedConfig(&preconfig); } @@ -372,7 +372,7 @@ void BPY_python_start(bContext *C, int argc, const char **argv) config.pathconfig_warnings = 0; /* Allow the user site directory because this is used - * when PIP installing packages from Blender, see: T104000. + * when PIP installing packages from Blender, see: #104000. * * NOTE(@ideasman42): While an argument can be made for isolating Blender's Python * from the users home directory entirely, an alternative directory should be used in that @@ -507,7 +507,7 @@ void BPY_python_start(bContext *C, int argc, const char **argv) #endif #ifdef WITH_PYTHON_MODULE - /* Disable all add-ons at exit, not essential, it just avoids resource leaks, see T71362. */ + /* Disable all add-ons at exit, not essential, it just avoids resource leaks, see #71362. */ BPY_run_string_eval(C, (const char *[]){"atexit", "addon_utils", NULL}, "atexit.register(addon_utils.disable_all)"); diff --git a/source/blender/python/intern/bpy_interface_run.c b/source/blender/python/intern/bpy_interface_run.c index 49f5261ba198..0ed2fc0b63c4 100644 --- a/source/blender/python/intern/bpy_interface_run.c +++ b/source/blender/python/intern/bpy_interface_run.c @@ -64,7 +64,7 @@ static void bpy_text_filepath_get(char *filepath, text->id.name + 2); } -/* Very annoying! Undo #_PyModule_Clear(), see T23871. */ +/* Very annoying! Undo #_PyModule_Clear(), see #23871. */ #define PYMODULE_CLEAR_WORKAROUND #ifdef PYMODULE_CLEAR_WORKAROUND @@ -154,7 +154,7 @@ static bool python_script_exec(bContext *C, * Note on use of 'globals()', it's important not copy the dictionary because * tools may inspect 'sys.modules["__main__"]' for variables defined in the code * where using a copy of 'globals()' causes code execution - * to leave the main namespace untouched. see: T51444 + * to leave the main namespace untouched. see: #51444 * * This leaves us with the problem of variables being included, * currently this is worked around using 'dict.__del__' it's ugly but works. diff --git a/source/blender/python/intern/bpy_props.c b/source/blender/python/intern/bpy_props.c index dec4c65e48d6..8777a0393dad 100644 --- a/source/blender/python/intern/bpy_props.c +++ b/source/blender/python/intern/bpy_props.c @@ -91,7 +91,7 @@ * * This struct adds/removes the user-count of each #PyObject it references, * it's needed in case the function is removed from the class (unlikely but possible), - * also when an annotation evaluates to a `lambda` with Python 3.10 and newer e.g: T86332. + * also when an annotation evaluates to a `lambda` with Python 3.10 and newer e.g: #86332. * * Pointers to this struct are held in: * diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 6480573a2f50..1c21d00ab3bd 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -2264,7 +2264,7 @@ static PyObject *pyrna_prop_collection_subscript_int(BPy_PropertyRNA *self, Py_s } } /* It's important to end the iterator after `result` has been created - * so iterators may optionally invalidate items that were iterated over, see: T100286. */ + * so iterators may optionally invalidate items that were iterated over, see: #100286. */ RNA_property_collection_end(&iter); if (found) { if (result && (pyrna_prop_collection_subscript_is_valid_or_error(result) == -1)) { @@ -2384,7 +2384,7 @@ static PyObject *pyrna_prop_collection_subscript_str(BPy_PropertyRNA *self, cons } } /* It's important to end the iterator after `result` has been created - * so iterators may optionally invalidate items that were iterated over, see: T100286. */ + * so iterators may optionally invalidate items that were iterated over, see: #100286. */ RNA_property_collection_end(&iter); if (found) { if (result && (pyrna_prop_collection_subscript_is_valid_or_error(result) == -1)) { @@ -8495,7 +8495,7 @@ static int bpy_class_call(bContext *C, PointerRNA *ptr, FunctionRNA *func, Param } #ifdef USE_PEDANTIC_WRITE - /* Handle nested draw calls, see: T89253. */ + /* Handle nested draw calls, see: #89253. */ const bool rna_disallow_writes_prev = rna_disallow_writes; rna_disallow_writes = is_readonly ? true : false; #endif diff --git a/source/blender/python/intern/bpy_rna_context.c b/source/blender/python/intern/bpy_rna_context.c index 1d033fee026a..df0a10050a11 100644 --- a/source/blender/python/intern/bpy_rna_context.c +++ b/source/blender/python/intern/bpy_rna_context.c @@ -121,7 +121,7 @@ static PyObject *bpy_rna_context_temp_override_exit(BPyContextTempOverride *self bContext *C = self->context; /* Special case where the window is expected to be freed on file-read, - * in this case the window should not be restored, see: T92818. */ + * in this case the window should not be restored, see: #92818. */ bool do_restore = true; if (self->ctx_init.win) { wmWindowManager *wm = CTX_wm_manager(C); diff --git a/source/blender/python/intern/bpy_rna_driver.c b/source/blender/python/intern/bpy_rna_driver.c index a74381eb5710..74d3f77b0c20 100644 --- a/source/blender/python/intern/bpy_rna_driver.c +++ b/source/blender/python/intern/bpy_rna_driver.c @@ -43,7 +43,7 @@ PyObject *pyrna_driver_get_variable_value(struct ChannelDriver *driver, struct D const PropertyType type = RNA_property_type(prop); if (type == PROP_ENUM) { /* Note that enum's are converted to strings by default, - * we want to avoid that, see: T52213 */ + * we want to avoid that, see: #52213 */ driver_arg = PyLong_FromLong(RNA_property_enum_get(&ptr, prop)); } else { diff --git a/source/blender/python/intern/bpy_traceback.c b/source/blender/python/intern/bpy_traceback.c index 2c1201922755..63da19b8c9e8 100644 --- a/source/blender/python/intern/bpy_traceback.c +++ b/source/blender/python/intern/bpy_traceback.c @@ -168,7 +168,7 @@ bool python_script_error_jump( { /* WARNING(@ideasman42): The normalized exception is restored (losing line number info). * Ideally this would leave the exception state as it found it, but that needs to be done - * carefully with regards to reference counting, see: T97731. */ + * carefully with regards to reference counting, see: #97731. */ bool success = false; PyObject *exception, *value; diff --git a/source/blender/python/mathutils/mathutils_Vector.c b/source/blender/python/mathutils/mathutils_Vector.c index d01c3d8587c4..84f694c3d589 100644 --- a/source/blender/python/mathutils/mathutils_Vector.c +++ b/source/blender/python/mathutils/mathutils_Vector.c @@ -2696,7 +2696,7 @@ static int Vector_swizzle_set(VectorObject *self, PyObject *value, void *closure swizzleClosure = POINTER_AS_INT(closure); /* We must first copy current vec into tvec, else some org values may be lost. - * See T31760. + * See #31760. * Assuming self->vec_num can't be higher than MAX_DIMENSIONS! */ memcpy(tvec, self->vec, self->vec_num * sizeof(float)); @@ -2708,7 +2708,7 @@ static int Vector_swizzle_set(VectorObject *self, PyObject *value, void *closure } /* We must copy back the whole tvec into vec, else some changes may be lost (e.g. xz...). - * See T31760. */ + * See #31760. */ memcpy(self->vec, tvec, self->vec_num * sizeof(float)); /* continue with BaseMathObject_WriteCallback at the end */ diff --git a/source/blender/render/intern/bake.cc b/source/blender/render/intern/bake.cc index dc2eb26a70ea..c8ecb827c6db 100644 --- a/source/blender/render/intern/bake.cc +++ b/source/blender/render/intern/bake.cc @@ -777,7 +777,7 @@ void RE_bake_pixels_populate(Mesh *me, /* NOTE(@ideasman42): workaround for pixel aligned UVs which are common and can screw * up our intersection tests where a pixel gets in between 2 faces or the middle of a quad, * camera aligned quads also have this problem but they are less common. - * Add a small offset to the UVs, fixes bug T18685. */ + * Add a small offset to the UVs, fixes bug #18685. */ vec[a][0] = (uv[0] - bk_image->uv_offset[0]) * float(bk_image->width) - (0.5f + 0.001f); vec[a][1] = (uv[1] - bk_image->uv_offset[1]) * float(bk_image->height) - (0.5f + 0.002f); } diff --git a/source/blender/render/intern/texture_image.c b/source/blender/render/intern/texture_image.c index 60a769348e85..8c7d842ee47e 100644 --- a/source/blender/render/intern/texture_image.c +++ b/source/blender/render/intern/texture_image.c @@ -220,7 +220,7 @@ int imagewrap(Tex *tex, } } - /* Keep this before interpolation T29761. */ + /* Keep this before interpolation #29761. */ if (ima) { if ((tex->imaflag & TEX_USEALPHA) && (ima->alpha_mode != IMA_ALPHA_IGNORE)) { if ((tex->imaflag & TEX_CALCALPHA) == 0) { @@ -235,7 +235,7 @@ int imagewrap(Tex *tex, filterx = (0.5f * tex->filtersize) / ibuf->x; filtery = (0.5f * tex->filtersize) / ibuf->y; - /* Important that this value is wrapped T27782. + /* Important that this value is wrapped #27782. * this applies the modifications made by the checks above, * back to the floating point values */ fx -= (float)(xi - x) / (float)ibuf->x; diff --git a/source/blender/render/intern/texture_margin.cc b/source/blender/render/intern/texture_margin.cc index f29fa3163758..e0e2781b5623 100644 --- a/source/blender/render/intern/texture_margin.cc +++ b/source/blender/render/intern/texture_margin.cc @@ -561,7 +561,7 @@ static void generate_margin(ImBuf *ibuf, /* NOTE(@ideasman42): workaround for pixel aligned UVs which are common and can screw up * our intersection tests where a pixel gets in between 2 faces or the middle of a quad, * camera aligned quads also have this problem but they are less common. - * Add a small offset to the UVs, fixes bug T18685. */ + * Add a small offset to the UVs, fixes bug #18685. */ vec[a][0] = (uv[0] - uv_offset[0]) * float(ibuf->x) - (0.5f + 0.001f); vec[a][1] = (uv[1] - uv_offset[1]) * float(ibuf->y) - (0.5f + 0.002f); } diff --git a/source/blender/sequencer/intern/sequencer.c b/source/blender/sequencer/intern/sequencer.c index c6f4d47ac753..25f633ef27cd 100644 --- a/source/blender/sequencer/intern/sequencer.c +++ b/source/blender/sequencer/intern/sequencer.c @@ -562,10 +562,10 @@ static Sequence *seq_dupli(const Scene *scene_src, /* When using SEQ_DUPE_UNIQUE_NAME, it is mandatory to add new sequences in relevant container * (scene or meta's one), *before* checking for unique names. Otherwise the meta's list is empty - * and hence we miss all seqs in that meta that have already been duplicated (see T55668). + * and hence we miss all seqs in that meta that have already been duplicated (see #55668). * Note that unique name check itself could be done at a later step in calling code, once all * seqs have bee duplicated (that was first, simpler solution), but then handling of animation - * data will be broken (see T60194). */ + * data will be broken (see #60194). */ if (new_seq_list != NULL) { BLI_addtail(new_seq_list, seqn); } diff --git a/source/blender/sequencer/intern/strip_add.c b/source/blender/sequencer/intern/strip_add.c index 7744bc4ce1cf..89da6bb17699 100644 --- a/source/blender/sequencer/intern/strip_add.c +++ b/source/blender/sequencer/intern/strip_add.c @@ -314,7 +314,7 @@ Sequence *SEQ_add_sound_strip(Main *bmain, Scene *scene, ListBase *seqbase, SeqL * line up with the video frames. Therefore we round this number to the * nearest frame as the audio track usually overshoots or undershoots the * end frame of the video by a little bit. - * See T47135 for under shoot example. */ + * See #47135 for under shoot example. */ seq->len = MAX2(1, round((info.length - sound->offset_time) * FPS)); Strip *strip = seq->strip; diff --git a/source/blender/sequencer/intern/strip_transform.c b/source/blender/sequencer/intern/strip_transform.c index 1edc4b85f964..c81482c878cb 100644 --- a/source/blender/sequencer/intern/strip_transform.c +++ b/source/blender/sequencer/intern/strip_transform.c @@ -526,7 +526,7 @@ static void seq_transform_handle_overwrite(Scene *scene, SEQ_collection_free(targets); /* Remove covered strips. This must be done in separate loop, because `SEQ_edit_strip_split()` - * also uses `SEQ_edit_remove_flagged_sequences()`. See T91096. */ + * also uses `SEQ_edit_remove_flagged_sequences()`. See #91096. */ if (SEQ_collection_len(strips_to_delete) > 0) { Sequence *seq; SEQ_ITERATOR_FOREACH (seq, strips_to_delete) { @@ -575,7 +575,7 @@ void SEQ_transform_handle_overlap(Scene *scene, } /* If any effects still overlap, we need to move them up. - * In some cases other strips can be overlapping still, see T90646. */ + * In some cases other strips can be overlapping still, see #90646. */ Sequence *seq; SEQ_ITERATOR_FOREACH (seq, transformed_strips) { if (SEQ_transform_test_overlap(scene, seqbasep, seq)) { diff --git a/source/blender/simulation/intern/SIM_mass_spring.cpp b/source/blender/simulation/intern/SIM_mass_spring.cpp index 5858e16da6e5..a5413678de20 100644 --- a/source/blender/simulation/intern/SIM_mass_spring.cpp +++ b/source/blender/simulation/intern/SIM_mass_spring.cpp @@ -496,7 +496,7 @@ BLI_INLINE void cloth_calc_spring_force(ClothModifierData *clmd, ClothSpring *s) scaling = parms->bending + s->lin_stiffness * fabsf(parms->max_bend - parms->bending); kb = scaling / (20.0f * (parms->avg_spring_len + FLT_EPSILON)); - /* Fix for T45084 for cloth stiffness must have cb proportional to kb */ + /* Fix for #45084 for cloth stiffness must have cb proportional to kb */ cb = kb * parms->bending_damping; SIM_mass_spring_force_spring_bending(data, s->ij, s->kl, s->restlen, kb, cb); @@ -515,7 +515,7 @@ BLI_INLINE void cloth_calc_spring_force(ClothModifierData *clmd, ClothSpring *s) scaling = s->lin_stiffness * parms->bending; kb = scaling / (20.0f * (parms->avg_spring_len + FLT_EPSILON)); - /* Fix for T45084 for cloth stiffness must have cb proportional to kb */ + /* Fix for #45084 for cloth stiffness must have cb proportional to kb */ cb = kb * parms->bending_damping; /* XXX assuming same restlen for ij and jk segments here, diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 0c12bd15b5b4..80785954a4e9 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -622,7 +622,7 @@ int WM_operator_props_popup_confirm(struct bContext *C, /** * Same as #WM_operator_props_popup but call the operator first, * This way - the button values correspond to the result of the operator. - * Without this, first access to a button will make the result jump, see T32452. + * Without this, first access to a button will make the result jump, see #32452. */ int WM_operator_props_popup_call(struct bContext *C, struct wmOperator *op, @@ -672,7 +672,7 @@ bool WM_operator_poll_context(struct bContext *C, struct wmOperatorType *ot, sho * \param store: Store properties for re-use when an operator has finished * (unless #PROP_SKIP_SAVE is set). * - * \warning do not use this within an operator to call itself! T29537. + * \warning do not use this within an operator to call itself! #29537. */ int WM_operator_call_ex(struct bContext *C, struct wmOperator *op, bool store); int WM_operator_call(struct bContext *C, struct wmOperator *op); diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index b23b5c67b1f0..4c912f379dcd 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -668,7 +668,7 @@ typedef struct wmTabletData { * - The reason to differentiate between "press" and the previous event state is * the previous event may be set by key-release events. In the case of a single key click * this isn't a problem however releasing other keys such as modifiers prevents click/click-drag - * events from being detected, see: T89989. + * events from being detected, see: #89989. * * - Mouse-wheel events are excluded even though they generate #KM_PRESS * as clicking and dragging don't make sense for mouse wheel events. diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c index 11c1bb618122..4fd130cc0c41 100644 --- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c +++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c @@ -514,7 +514,7 @@ static int gizmo_tweak_modal(bContext *C, wmOperator *op, const wmEvent *event) /* handle gizmo */ wmGizmoFnModal modal_fn = gz->custom_modal ? gz->custom_modal : gz->type->modal; if (modal_fn) { - /* Ugly hack to ensure Python won't get 'EVT_MODAL_MAP' which isn't supported, see T73727. + /* Ugly hack to ensure Python won't get 'EVT_MODAL_MAP' which isn't supported, see #73727. * note that we could move away from wrapping modal gizmos in a modal operator, * since it's causing the need for code like this. */ wmEvent *evil_event = (wmEvent *)event; @@ -997,7 +997,7 @@ wmGizmoGroup *WM_gizmomaptype_group_init_runtime_with_region(wmGizmoMapType *gzm wmGizmoGroup *gzgroup = wm_gizmogroup_new_from_type(gzmap, gzgt); - /* Don't allow duplicates when switching modes for e.g. see: T66229. */ + /* Don't allow duplicates when switching modes for e.g. see: #66229. */ LISTBASE_FOREACH (wmGizmoGroup *, gzgroup_iter, &gzmap->groups) { if (gzgroup_iter->type == gzgt) { if (gzgroup_iter != gzgroup) { diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c index a08584bd65f6..03fb91c95d89 100644 --- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c +++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c @@ -576,7 +576,7 @@ static int gizmo_find_intersected_3d_intern(wmGizmo **visible_gizmos, /* TODO: waiting for the GPU in the middle of the event loop for every * mouse move is bad for performance, we need to find a solution to not - * use the GPU or draw something once. (see T61474) */ + * use the GPU or draw something once. (see #61474) */ GPU_select_begin(buffer, ARRAY_SIZE(buffer), &rect, GPU_SELECT_NEAREST_FIRST_PASS, 0); /* do the drawing */ gizmo_draw_select_3d_loop(C, visible_gizmos, visible_gizmos_len, &use_select_bias); diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c index aad7cc6ac934..671a69003dd2 100644 --- a/source/blender/windowmanager/intern/wm.c +++ b/source/blender/windowmanager/intern/wm.c @@ -619,7 +619,7 @@ void wm_close_and_free_all(bContext *C, ListBase *wmlist) BLI_remlink(wmlist, wm); /* Don't handle user counts as this is only ever called once #G_MAIN has already been freed via * #BKE_main_free so any ID's referenced by the window-manager (from ID properties) will crash. - * See: T100703. */ + * See: #100703. */ BKE_libblock_free_data(&wm->id, false); BKE_libblock_free_data_py(&wm->id); MEM_freeN(wm); diff --git a/source/blender/windowmanager/intern/wm_cursors.c b/source/blender/windowmanager/intern/wm_cursors.c index 74e760013fde..94f0d79a3a5b 100644 --- a/source/blender/windowmanager/intern/wm_cursors.c +++ b/source/blender/windowmanager/intern/wm_cursors.c @@ -291,7 +291,7 @@ void WM_cursor_grab_disable(wmWindow *win, const int mouse_ungrab_xy[2]) static void wm_cursor_warp_relative(wmWindow *win, int x, int y) { - /* NOTE: don't use wmEvent coords because of continuous grab T36409. */ + /* NOTE: don't use wmEvent coords because of continuous grab #36409. */ int cx, cy; wm_cursor_position_get(win, &cx, &cy); WM_cursor_warp(win, cx + x, cy + y); diff --git a/source/blender/windowmanager/intern/wm_dragdrop.cc b/source/blender/windowmanager/intern/wm_dragdrop.cc index 4b4b516f0b9b..7b0056cc987c 100644 --- a/source/blender/windowmanager/intern/wm_dragdrop.cc +++ b/source/blender/windowmanager/intern/wm_dragdrop.cc @@ -694,7 +694,7 @@ void WM_drag_free_imported_drag_ID(Main *bmain, wmDrag *drag, wmDropBox *drop) bmain, drop->ptr, static_cast(asset_drag->id_type)); if (id != nullptr) { /* Do not delete the dragged ID if it has any user, otherwise if it is a 're-used' ID it will - * cause T95636. Note that we need first to add the user that we want to remove in + * cause #95636. Note that we need first to add the user that we want to remove in * #BKE_id_free_us. */ id_us_plus(id); BKE_id_free_us(bmain, id); diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c index be1bdd665602..290fd602dfa9 100644 --- a/source/blender/windowmanager/intern/wm_draw.c +++ b/source/blender/windowmanager/intern/wm_draw.c @@ -132,7 +132,7 @@ static void wm_paintcursor_draw(bContext *C, ScrArea *area, ARegion *region) * deltas without it escaping from the window. In this case we never want to show the actual * cursor coordinates so limit reading the cursor location to when the cursor is grabbed and * wrapping in a region since this is the case when it would otherwise attempt to draw the - * cursor outside the view/window. See: T102792. */ + * cursor outside the view/window. See: #102792. */ if ((WM_capabilities_flag() & WM_CAPABILITY_CURSOR_WARP) && wm_window_grab_warp_region_is_set(win)) { int x = 0, y = 0; @@ -1214,7 +1214,7 @@ uint *WM_window_pixels_read_offscreen(bContext *C, wmWindow *win, int r_size[2]) * not to initialize at all. * Confusingly there are some cases where this *does* work, depending on the state of the window * and prior calls to swap-buffers, however ensuring the state exactly as needed to satisfy a - * particular GPU back-end is fragile, see T98462. + * particular GPU back-end is fragile, see #98462. * * So provide an alternative to #WM_window_pixels_read that avoids using the front-buffer. */ @@ -1362,8 +1362,8 @@ void wm_draw_update(bContext *C) GHOST_TWindowState state = GHOST_GetWindowState(win->ghostwin); if (state == GHOST_kWindowStateMinimized) { - /* do not update minimized windows, gives issues on Intel (see T33223) - * and AMD (see T50856). it seems logical to skip update for invisible + /* do not update minimized windows, gives issues on Intel (see #33223) + * and AMD (see #50856). it seems logical to skip update for invisible * window anyway. */ continue; diff --git a/source/blender/windowmanager/intern/wm_event_query.c b/source/blender/windowmanager/intern/wm_event_query.c index a1d94c33f278..2e1afe808ad8 100644 --- a/source/blender/windowmanager/intern/wm_event_query.c +++ b/source/blender/windowmanager/intern/wm_event_query.c @@ -236,7 +236,7 @@ bool WM_event_is_modal_drag_exit(const wmEvent *event, } else { /* If the initial event wasn't a drag event then - * ignore #USER_RELEASECONFIRM setting: see T26756. */ + * ignore #USER_RELEASECONFIRM setting: see #26756. */ if (init_event_val != KM_CLICK_DRAG) { return 1; } @@ -582,7 +582,7 @@ int WM_event_absolute_delta_y(const struct wmEvent *event) * Most OS's use `Ctrl+Space` / `OsKey+Space` to switch IME, * so don't type in the space character. * - * \note Shift is excluded from this check since it prevented typing `Shift+Space`, see: T85517. + * \note Shift is excluded from this check since it prevented typing `Shift+Space`, see: #85517. */ bool WM_event_is_ime_switch(const struct wmEvent *event) { diff --git a/source/blender/windowmanager/intern/wm_event_system.cc b/source/blender/windowmanager/intern/wm_event_system.cc index 700b1d1f8b7f..52e0f43567e4 100644 --- a/source/blender/windowmanager/intern/wm_event_system.cc +++ b/source/blender/windowmanager/intern/wm_event_system.cc @@ -92,7 +92,7 @@ * Without tools using press events which would prevent click/drag events getting to the gizmos. * * This is not a fool proof solution since it's possible the gizmo operators would pass - * through these events when called, see: T65479. + * through these events when called, see: #65479. */ #define USE_GIZMO_MOUSE_PRIORITY_HACK @@ -434,7 +434,7 @@ void wm_event_do_depsgraph(bContext *C, bool is_after_open_file) if (wm->is_interface_locked) { return; } - /* Combine data-masks so one window doesn't disable UVs in another T26448. */ + /* Combine data-masks so one window doesn't disable UVs in another #26448. */ CustomData_MeshMasks win_combine_v3d_datamask = {0}; LISTBASE_FOREACH (wmWindow *, win, &wm->windows) { const Scene *scene = WM_window_get_active_scene(win); @@ -450,7 +450,7 @@ void wm_event_do_depsgraph(bContext *C, bool is_after_open_file) Main *bmain = CTX_data_main(C); /* Copied to set's in scene_update_tagged_recursive() */ scene->customdata_mask = win_combine_v3d_datamask; - /* XXX, hack so operators can enforce data-masks T26482, GPU render. */ + /* XXX, hack so operators can enforce data-masks #26482, GPU render. */ CustomData_MeshMasks_update(&scene->customdata_mask, &scene->customdata_mask_modal); /* TODO(sergey): For now all dependency graphs which are evaluated from * workspace are considered active. This will work all fine with "locked" @@ -509,7 +509,7 @@ void wm_event_do_notifiers(bContext *C) /* Ensure inside render boundary. */ GPU_render_begin(); - /* Run the timer before assigning `wm` in the unlikely case a timer loads a file, see T80028. */ + /* Run the timer before assigning `wm` in the unlikely case a timer loads a file, see #80028. */ wm_event_execute_timers(C); wmWindowManager *wm = CTX_wm_manager(C); @@ -566,7 +566,7 @@ void wm_event_do_notifiers(bContext *C) bScreen *ref_screen = BKE_workspace_layout_screen_get( static_cast(note->reference)); - /* Free popup handlers only T35434. */ + /* Free popup handlers only #35434. */ UI_popup_handlers_remove_all(C, &win->modalhandlers); ED_screen_change(C, ref_screen); /* XXX: hum, think this over! */ @@ -789,7 +789,7 @@ static eHandlerActionFlag wm_handler_ui_call(bContext *C, } /* Don't block file-select events. Those are triggered by a separate file browser window. - * See T75292. */ + * See #75292. */ if (event->type == EVT_FILESELECT) { return WM_HANDLER_CONTINUE; } @@ -1144,8 +1144,8 @@ static void wm_operator_finished(bContext *C, else if (has_undo_step) { /* An undo step was added but the operator wasn't registered (and won't register it's self), * therefor a redo panel wouldn't redo this action but the previous registered action, - * causing the "redo" to remove/loose this operator. See: T101743. - * Register check is needed so nested operator calls don't clear the HUD. See: T103587. */ + * causing the "redo" to remove/loose this operator. See: #101743. + * Register check is needed so nested operator calls don't clear the HUD. See: #103587. */ if (!(has_register || do_register)) { if (repeat == 0) { hud_status = CLEAR; @@ -1228,7 +1228,7 @@ static int wm_operator_exec(bContext *C, wmOperator *op, const bool repeat, cons } } - /* XXX(@mont29): Disabled the repeat check to address part 2 of T31840. + /* XXX(@mont29): Disabled the repeat check to address part 2 of #31840. * Carefully checked all calls to wm_operator_exec and WM_operator_repeat, don't see any reason * why this was needed, but worth to note it in case something turns bad. */ if (retval & (OPERATOR_FINISHED | OPERATOR_CANCELLED) /* && repeat == 0 */) { @@ -2572,7 +2572,7 @@ static eHandlerActionFlag wm_handler_operator_call(bContext *C, wmGizmoGroup *gzgroup = WM_gizmomaptype_group_init_runtime_with_region( gzmap_type, gzgt, region); /* We can't rely on drawing to initialize gizmo's since disabling - * overlays/gizmos will prevent pre-drawing setup calls. (see T60905) */ + * overlays/gizmos will prevent pre-drawing setup calls. (see #60905) */ WM_gizmogroup_ensure_init(C, gzgroup); } } @@ -3059,7 +3059,7 @@ static eHandlerActionFlag wm_handlers_do_gizmo_handler(bContext *C, wmGizmo *gz = wm_gizmomap_highlight_get(gzmap); /* Needed so UI blocks over gizmos don't let events fall through to the gizmos, - * noticeable for the node editor - where dragging on a node should move it, see: T73212. + * noticeable for the node editor - where dragging on a node should move it, see: #73212. * note we still allow for starting the gizmo drag outside, then travel 'inside' the node. */ if (region->type->clip_gizmo_events_by_ui) { if (UI_region_block_find_mouse_over(region, event->xy, true)) { @@ -3245,7 +3245,7 @@ static eHandlerActionFlag wm_handlers_do_intern(bContext *C, * NOTE: check 'handlers->first' because in rare cases the handlers can be cleared * by the event that's called, for eg: * - * Calling a python script which changes the area.type, see T32232. */ + * Calling a python script which changes the area.type, see #32232. */ for (wmEventHandler *handler_base = static_cast(handlers->first), *handler_base_next; handler_base && handlers->first; @@ -3495,7 +3495,7 @@ static eHandlerActionFlag wm_handlers_do(bContext *C, wmEvent *event, ListBase * if (win->event_queue_check_drag) { if ((event->prev_press_type != event->type) && (ISKEYMODIFIER(event->type) || (event->type == event->prev_press_keymodifier))) { - /* Support releasing modifier keys without canceling the drag event, see T89989. */ + /* Support releasing modifier keys without canceling the drag event, see #89989. */ } else { CLOG_INFO( @@ -3562,7 +3562,7 @@ static eHandlerActionFlag wm_handlers_do(bContext *C, wmEvent *event, ListBase * } else if (ISMOUSE_WHEEL(event->type) || ISMOUSE_GESTURE(event->type)) { /* Modifiers which can trigger click event's, - * however we don't want this if the mouse wheel has been used, see T74607. */ + * however we don't want this if the mouse wheel has been used, see #74607. */ if (wm_action_not_handled(action)) { /* Pass. */ } @@ -3725,7 +3725,7 @@ static bool wm_event_pie_filter(wmWindow *win, const wmEvent *event) * In this case event handling exits early, however when "Load UI" is disabled * the even will still be in #wmWindow.event_queue. * - * Without this it's possible to continuously handle the same event, see: T76484. + * Without this it's possible to continuously handle the same event, see: #76484. */ static void wm_event_free_and_remove_from_queue_if_valid(wmEvent *event) { @@ -4063,7 +4063,7 @@ void wm_event_do_handlers(bContext *C) action |= wm_event_do_handlers_area_regions(C, event, area); - /* File-read case (Python), T29489. */ + /* File-read case (Python), #29489. */ if (CTX_wm_window(C) == nullptr) { wm_event_free_and_remove_from_queue_if_valid(event); GPU_render_end(); @@ -4109,7 +4109,7 @@ void wm_event_do_handlers(bContext *C) } /* If the drag even was handled, don't attempt to keep re-handing the same - * drag event on every cursor motion, see: T87511. */ + * drag event on every cursor motion, see: #87511. */ if (win->event_queue_check_drag_handled) { win->event_queue_check_drag = false; win->event_queue_check_drag_handled = false; @@ -4405,7 +4405,7 @@ wmEventHandler_Keymap *WM_event_add_keymap_handler(ListBase *handlers, wmKeyMap * allowing both the fallback-tool and active-tool to be activated * providing the key-map is configured so the keys don't conflict. * For example one mouse button can run the active-tool, another button for the fallback-tool. - * See T72567. + * See #72567. * * Follow #wmEventHandler_KeymapDynamicFn signature. */ @@ -5247,7 +5247,7 @@ static void wm_event_state_update_and_click_set_ex(wmEvent *event, event_state->type = event->type; /* It's important only to write into the `event_state` modifier for keyboard * events because emulate MMB clears one of the modifiers in `event->modifier`, - * making the second press not behave as if the modifier is pressed, see T96279. */ + * making the second press not behave as if the modifier is pressed, see #96279. */ if (is_keyboard) { event_state->modifier = event->modifier; } @@ -5359,7 +5359,7 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, const int type, event.prev_val = event.val; /* Always use modifiers from the active window since - * changes to modifiers aren't sent to inactive windows, see: T66088. */ + * changes to modifiers aren't sent to inactive windows, see: #66088. */ if ((wm->winactive != win) && (wm->winactive && wm->winactive->eventstate)) { event.modifier = wm->winactive->eventstate->modifier; event.keymodifier = wm->winactive->eventstate->keymodifier; diff --git a/source/blender/windowmanager/intern/wm_files.cc b/source/blender/windowmanager/intern/wm_files.cc index f9555e750059..c4903f3ff233 100644 --- a/source/blender/windowmanager/intern/wm_files.cc +++ b/source/blender/windowmanager/intern/wm_files.cc @@ -220,7 +220,7 @@ static void wm_window_match_init(bContext *C, ListBase *wmlist) * causing use-after-free error in later handling of the button callbacks in UI code * (see ui_apply_but_funcs_after()). * Tried solving this by always nullptr-ing context's menu when setting wm/win/etc., - * but it broke popups refreshing (see T47632), + * but it broke popups refreshing (see #47632), * so for now just handling this specific case here. */ CTX_wm_menu_set(C, nullptr); @@ -329,7 +329,7 @@ static void wm_window_match_replace_by_file_wm(bContext *C, * #Main.wm.first memory address in-place, while swapping all of it's contents. * * This is needed so items such as key-maps can be held by an add-on, - * without it pointing to invalid memory, see: T86431 */ + * without it pointing to invalid memory, see: #86431 */ { /* Referencing the window-manager pointer from elsewhere in the file is highly unlikely * however it's possible with ID-properties & animation-drivers. @@ -387,7 +387,7 @@ static void wm_window_match_replace_by_file_wm(bContext *C, } } } - /* make sure at least one window is kept open so we don't lose the context, check T42303 */ + /* make sure at least one window is kept open so we don't lose the context, check #42303 */ if (!has_match) { wm_window_substitute_old(oldwm, wm, @@ -473,7 +473,7 @@ static void wm_init_userdef(Main *bmain) UI_init_userdef(); - /* needed so loading a file from the command line respects user-pref T26156. */ + /* needed so loading a file from the command line respects user-pref #26156. */ SET_FLAG_FROM_TEST(G.fileflags, U.flag & USER_FILENOUI, G_FILE_NO_UI); /* set the python auto-execute setting from user prefs */ @@ -1100,7 +1100,7 @@ void wm_homefile_read_ex(bContext *C, /* Currently this only impacts preferences as it doesn't make much sense to keep the default * startup open in the case the app-template doesn't happen to define it's own startup. * Unlike preferences where we might want to only reset the app-template part of the preferences - * so as not to reset the preferences for all other Blender instances, see: T96427. */ + * so as not to reset the preferences for all other Blender instances, see: #96427. */ const bool use_factory_settings_app_template_only = params_homefile->use_factory_settings_app_template_only; const bool use_empty_data = params_homefile->use_empty_data; @@ -1168,7 +1168,7 @@ void wm_homefile_read_ex(bContext *C, if (CTX_py_init_get(C)) { /* This is restored by 'wm_file_read_post', disable before loading any preferences * so an add-on can read their own preferences when un-registering, - * and use new preferences if/when re-registering, see T67577. + * and use new preferences if/when re-registering, see #67577. * * Note that this fits into 'wm_file_read_pre' function but gets messy * since we need to know if 'reset_app_template' is true. */ @@ -1815,10 +1815,10 @@ static bool wm_file_write(bContext *C, BKE_lib_override_library_main_operations_create(bmain, true, nullptr); /* NOTE: Ideally we would call `WM_redraw_windows` here to remove any open menus. - * But we can crash if saving from a script, see T92704 & T97627. + * But we can crash if saving from a script, see #92704 & #97627. * Just checking `!G.background && BLI_thread_is_main()` is not sufficient to fix this. * Additionally some EGL configurations don't support reading the front-buffer - * immediately after drawing, see: T98462. In that case off-screen drawing is necessary. */ + * immediately after drawing, see: #98462. In that case off-screen drawing is necessary. */ /* don't forget not to return without! */ WM_cursor_wait(true); @@ -1827,7 +1827,7 @@ static bool wm_file_write(bContext *C, /* Blend file thumbnail. * * - Save before exiting edit-mode, otherwise evaluated-mesh for shared data gets corrupted. - * See T27765. + * See #27765. * - Main can store a '.blend' thumbnail, * useful for background-mode or thumbnail customization. */ @@ -3288,7 +3288,7 @@ static int wm_save_mainfile_invoke(bContext *C, wmOperator *op, const wmEvent * /* if we're saving for the first time and prefer relative paths - * any existing paths will be absolute, - * enable the option to remap paths to avoid confusion T37240. */ + * enable the option to remap paths to avoid confusion #37240. */ const char *blendfile_path = BKE_main_blendfile_path_from_global(); if ((blendfile_path[0] == '\0') && (U.flag & USER_RELPATHS)) { PropertyRNA *prop = RNA_struct_find_property(op->ptr, "relative_remap"); diff --git a/source/blender/windowmanager/intern/wm_gesture_ops.c b/source/blender/windowmanager/intern/wm_gesture_ops.c index e38929339051..ae8c446bd87b 100644 --- a/source/blender/windowmanager/intern/wm_gesture_ops.c +++ b/source/blender/windowmanager/intern/wm_gesture_ops.c @@ -330,7 +330,7 @@ static void gesture_circle_apply(bContext *C, wmOperator *op) /* When 'wait_for_input' is false, * use properties to get the selection state (typically tool settings). - * This is done so executing as a mode can select & de-select, see: T58594. */ + * This is done so executing as a mode can select & de-select, see: #58594. */ if (gesture->wait_for_input) { gesture_modal_state_to_operator(op, gesture->modal_state); } diff --git a/source/blender/windowmanager/intern/wm_init_exit.cc b/source/blender/windowmanager/intern/wm_init_exit.cc index 400921274ba4..243480c84e6c 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.cc +++ b/source/blender/windowmanager/intern/wm_init_exit.cc @@ -249,7 +249,7 @@ void WM_init(bContext *C, int argc, const char **argv) BLT_lang_init(); /* Must call first before doing any `.blend` file reading, - * since versioning code may create new IDs. See T57066. */ + * since versioning code may create new IDs. See #57066. */ BLT_lang_set(nullptr); /* Init icons before reading .blend files for preview icons, which can @@ -278,7 +278,7 @@ void WM_init(bContext *C, int argc, const char **argv) * - Some sub-systems depend on the preferences (initializing icons depend on the theme). * - Add-ons depends on the preferences to know what has been enabled. * - Add-ons depends on the window-manger to register their key-maps. - * - Evaluating the startup file depends on Python for animation-drivers (see T89046). + * - Evaluating the startup file depends on Python for animation-drivers (see #89046). * - Starting Python depends on the startup file so key-maps can be added in the window-manger. * * Loading preferences early, then application subsystems and finally the startup data would @@ -485,12 +485,12 @@ void WM_exit_ex(bContext *C, const bool do_python) #if defined(WITH_PYTHON) && !defined(WITH_PYTHON_MODULE) /* Without this, we there isn't a good way to manage false-positive resource leaks - * where a #PyObject references memory allocated with guarded-alloc, T71362. + * where a #PyObject references memory allocated with guarded-alloc, #71362. * * This allows add-ons to free resources when unregistered (which is good practice anyway). * * Don't run this code when built as a Python module as this runs when Python is in the - * process of shutting down, where running a snippet like this will crash, see T82675. + * process of shutting down, where running a snippet like this will crash, see #82675. * Instead use the `atexit` module, installed by #BPY_python_start */ const char *imports[2] = {"addon_utils", nullptr}; BPY_run_string_eval(C, imports, "addon_utils.disable_all()"); @@ -631,7 +631,7 @@ void WM_exit_ex(bContext *C, const bool do_python) BLI_task_scheduler_exit(); /* No need to call this early, rather do it late so that other - * pieces of Blender using sound may exit cleanly, see also T50676. */ + * pieces of Blender using sound may exit cleanly, see also #50676. */ BKE_sound_exit(); BKE_appdir_exit(); diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c index c6513a908cf7..9e4e06035376 100644 --- a/source/blender/windowmanager/intern/wm_keymap.c +++ b/source/blender/windowmanager/intern/wm_keymap.c @@ -102,7 +102,7 @@ static void wm_keymap_item_properties_set(wmKeyMapItem *kmi) /** * Similar to #wm_keymap_item_properties_set - * but checks for the #wmOperatorType having changed, see T38042. + * but checks for the #wmOperatorType having changed, see #38042. */ static void wm_keymap_item_properties_update_ot(wmKeyMapItem *kmi) { @@ -652,13 +652,13 @@ static void wm_keymap_patch(wmKeyMap *km, wmKeyMap *diff_km) /* add item */ if (kmdi->add_item) { - /* Do not re-add an already existing keymap item! See T42088. */ - /* We seek only for exact copy here! See T42137. */ + /* Do not re-add an already existing keymap item! See #42088. */ + /* We seek only for exact copy here! See #42137. */ wmKeyMapItem *kmi_add = wm_keymap_find_item_equals(km, kmdi->add_item); /** If kmi_add is same as kmi_remove (can happen in some cases, * typically when we got kmi_remove from #wm_keymap_find_item_equals_result()), - * no need to add or remove anything, see T45579. */ + * no need to add or remove anything, see #45579. */ /** * \note This typically happens when we apply user-defined keymap diff to a base one that @@ -1313,7 +1313,7 @@ static wmKeyMapItem *wm_keymap_item_find_in_keymap(wmKeyMap *keymap, const struct wmKeyMapItemFind_Params *params) { LISTBASE_FOREACH (wmKeyMapItem *, kmi, &keymap->items) { - /* skip disabled keymap items [T38447] */ + /* skip disabled keymap items [#38447] */ if (kmi->flag & KMI_INACTIVE) { continue; } @@ -1566,7 +1566,7 @@ static wmKeyMapItem *wm_keymap_item_find(const bContext *C, * Otherwise: * * If non-strict, unset properties always match set ones in IDP_EqualsProperties_ex. * * If strict, unset properties never match set ones in IDP_EqualsProperties_ex, - * and we do not want that to change (else we get things like T41757)! + * and we do not want that to change (else we get things like #41757)! * ...so in either case, re-running a comparison with unset props set to default is useless. */ if (!found && properties) { diff --git a/source/blender/windowmanager/intern/wm_operator_type.c b/source/blender/windowmanager/intern/wm_operator_type.c index d7a01419450d..b90c110efbb3 100644 --- a/source/blender/windowmanager/intern/wm_operator_type.c +++ b/source/blender/windowmanager/intern/wm_operator_type.c @@ -384,7 +384,7 @@ static int wm_macro_modal(bContext *C, wmOperator *op, const wmEvent *event) retval = opm->type->modal(C, opm, event); OPERATOR_RETVAL_CHECK(retval); - /* if we're halfway through using a tool and cancel it, clear the options T37149. */ + /* if we're halfway through using a tool and cancel it, clear the options #37149. */ if (retval & OPERATOR_CANCELLED) { WM_operator_properties_clear(opm->ptr); } diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 8ffaf8a06035..94b342129337 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -1437,7 +1437,7 @@ static void dialog_exec_cb(bContext *C, void *arg1, void *arg2) uiBlock *block = arg2; /* Explicitly set UI_RETURN_OK flag, otherwise the menu might be canceled - * in case WM_operator_call_ex exits/reloads the current file (T49199). */ + * in case WM_operator_call_ex exits/reloads the current file (#49199). */ UI_popup_menu_retval_set(block, UI_RETURN_OK, true); @@ -1473,7 +1473,7 @@ static uiBlock *wm_block_dialog_create(bContext *C, ARegion *region, void *userD /* clear so the OK button is left alone */ UI_block_func_set(block, NULL, NULL, NULL); - /* new column so as not to interfere with custom layouts T26436. */ + /* new column so as not to interfere with custom layouts #26436. */ { uiLayout *col = uiLayoutColumn(layout, false); uiBlock *col_block = uiLayoutGetBlock(col); diff --git a/source/blender/windowmanager/intern/wm_playanim.c b/source/blender/windowmanager/intern/wm_playanim.c index 6378c756d4f6..31c0dfcceb08 100644 --- a/source/blender/windowmanager/intern/wm_playanim.c +++ b/source/blender/windowmanager/intern/wm_playanim.c @@ -650,7 +650,7 @@ static void build_pict_list_ex( } else { /* Load images into cache until the cache is full, - * this resolves choppiness for images that are slow to load, see: T81751. */ + * this resolves choppiness for images that are slow to load, see: #81751. */ #ifdef USE_FRAME_CACHE_LIMIT bool fill_cache = true; #else diff --git a/source/blender/windowmanager/intern/wm_splash_screen.c b/source/blender/windowmanager/intern/wm_splash_screen.c index 16e5f983beab..1bcd51ed9c75 100644 --- a/source/blender/windowmanager/intern/wm_splash_screen.c +++ b/source/blender/windowmanager/intern/wm_splash_screen.c @@ -179,7 +179,7 @@ static uiBlock *wm_block_create_splash(bContext *C, ARegion *region, void *UNUSE /* note on UI_BLOCK_NO_WIN_CLIP, the window size is not always synchronized * with the OS when the splash shows, window clipping in this case gives - * ugly results and clipping the splash isn't useful anyway, just disable it T32938. */ + * ugly results and clipping the splash isn't useful anyway, just disable it #32938. */ UI_block_flag_enable(block, UI_BLOCK_LOOP | UI_BLOCK_KEEP_OPEN | UI_BLOCK_NO_WIN_CLIP); UI_block_theme_style_set(block, UI_BLOCK_THEME_STYLE_POPUP); diff --git a/source/blender/windowmanager/intern/wm_stereo.c b/source/blender/windowmanager/intern/wm_stereo.c index 48a0d47f26ad..6487fd978203 100644 --- a/source/blender/windowmanager/intern/wm_stereo.c +++ b/source/blender/windowmanager/intern/wm_stereo.c @@ -291,7 +291,7 @@ int wm_stereo3d_set_exec(bContext *C, wmOperator *op) else if (win_src->stereo3d_format->display_mode == S3D_DISPLAY_PAGEFLIP) { const bScreen *screen = WM_window_get_active_screen(win_src); - /* ED_workspace_layout_duplicate() can't handle other cases yet T44688 */ + /* ED_workspace_layout_duplicate() can't handle other cases yet #44688 */ if (screen->state != SCREENNORMAL) { BKE_report( op->reports, RPT_ERROR, "Failed to switch to Time Sequential mode when in fullscreen"); @@ -334,7 +334,7 @@ int wm_stereo3d_set_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } - /* Without this, the popup won't be freed properly, see T44688. */ + /* Without this, the popup won't be freed properly, see #44688. */ CTX_wm_window_set(C, win_src); win_src->stereo3d_format->display_mode = prev_display_mode; return OPERATOR_CANCELLED; diff --git a/source/blender/windowmanager/intern/wm_toolsystem.c b/source/blender/windowmanager/intern/wm_toolsystem.c index 6e08f607bae2..1a6aa974a7be 100644 --- a/source/blender/windowmanager/intern/wm_toolsystem.c +++ b/source/blender/windowmanager/intern/wm_toolsystem.c @@ -561,7 +561,7 @@ void WM_toolsystem_refresh_active(bContext *C) workspace->id.tag &= ~LIB_TAG_DOIT; /* Refresh to ensure data is initialized. * This is needed because undo can load a state which no longer has the underlying DNA data - * needed for the tool (un-initialized paint-slots for eg), see: T64339. */ + * needed for the tool (un-initialized paint-slots for eg), see: #64339. */ LISTBASE_FOREACH (bToolRef *, tref, &workspace->tools) { toolsystem_refresh_ref(C, workspace, tref); } diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index 1f5b5fc3ff65..46213bea1209 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -85,7 +85,7 @@ /** * When windows are activated, simulate modifier press/release to match the current state of - * held modifier keys, see T40317. + * held modifier keys, see #40317. */ #define USE_WIN_ACTIVATE @@ -99,7 +99,7 @@ * opt to use this. * * NOTE(@ideasman42): Events generated for non-active windows are rare, - * this happens when using the mouse-wheel over an unfocused window, see: T103722. + * this happens when using the mouse-wheel over an unfocused window, see: #103722. */ #define USE_WIN_DEACTIVATE @@ -212,8 +212,8 @@ static void wm_ghostwindow_destroy(wmWindowManager *wm, wmWindow *win) return; } - /* Prevents non-drawable state of main windows (bugs T22967, - * T25071 and possibly T22477 too). Always clear it even if + /* Prevents non-drawable state of main windows (bugs #22967, + * #25071 and possibly #22477 too). Always clear it even if * this window was not the drawable one, because we mess with * drawing context to discard the GW context. */ wm_window_clear_drawable(wm); @@ -632,7 +632,7 @@ static void wm_window_ghostwindow_add(wmWindowManager *wm, wm_window_swap_buffers(win); - /* Clear double buffer to avoids flickering of new windows on certain drivers. (See T97600) */ + /* Clear double buffer to avoids flickering of new windows on certain drivers. (See #97600) */ GPU_clear_color(0.55f, 0.55f, 0.55f, 1.0f); // GHOST_SetWindowState(ghostwin, GHOST_kWindowStateModified); @@ -666,7 +666,7 @@ static void wm_window_ghostwindow_ensure(wmWindowManager *wm, wmWindow *win, boo wm_init_state.override_flag &= ~WIN_OVERRIDE_WINSTATE; } - /* without this, cursor restore may fail, T45456 */ + /* without this, cursor restore may fail, #45456 */ if (win->cursor == 0) { win->cursor = WM_CURSOR_DEFAULT; } @@ -2134,7 +2134,7 @@ uint *WM_window_pixels_read(wmWindowManager *wm, wmWindow *win, int r_size[2]) { /* WARNING: Reading from the front-buffer immediately after drawing may fail, * for a slower but more reliable version of this function #WM_window_pixels_read_offscreen - * should be preferred. See it's comments for details on why it's needed, see also T98462. */ + * should be preferred. See it's comments for details on why it's needed, see also #98462. */ bool setup_context = wm->windrawable != win; if (setup_context) { diff --git a/source/blender/windowmanager/wm_files.h b/source/blender/windowmanager/wm_files.h index da8ec0ef82ab..0b31b13cef13 100644 --- a/source/blender/windowmanager/wm_files.h +++ b/source/blender/windowmanager/wm_files.h @@ -69,7 +69,7 @@ void wm_homefile_read(struct bContext *C, /** * Special case, support deferred execution of #wm_file_read_post, - * Needed when loading for the first time to workaround order of initialization bug, see T89046. + * Needed when loading for the first time to workaround order of initialization bug, see #89046. */ void wm_homefile_read_post(struct bContext *C, const struct wmFileReadPost_Params *params_file_read_post); diff --git a/source/creator/creator.c b/source/creator/creator.c index 63998b7b4c24..fe6d501164ad 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -301,7 +301,7 @@ int main(int argc, /* Un-buffered `stdout` makes `stdout` and `stderr` better synchronized, and helps * when stepping through code in a debugger (prints are immediately * visible). However disabling buffering causes lock contention on windows - * see T76767 for details, since this is a debugging aid, we do not enable + * see #76767 for details, since this is a debugging aid, we do not enable * the un-buffered behavior for release builds. */ #ifndef NDEBUG setvbuf(stdout, NULL, _IONBF, 0); diff --git a/source/creator/creator_args.c b/source/creator/creator_args.c index b39d581b54c8..41708cc81a86 100644 --- a/source/creator/creator_args.c +++ b/source/creator/creator_args.c @@ -1725,7 +1725,7 @@ static int arg_handle_scene_set(int argc, const char **argv, void *data) if (scene) { CTX_data_scene_set(C, scene); - /* Set the scene of the first window, see: T55991, + /* Set the scene of the first window, see: #55991, * otherwise scripts that run later won't get this scene back from the context. */ wmWindow *win = CTX_wm_window(C); if (win == NULL) { diff --git a/tests/python/alembic_export_tests.py b/tests/python/alembic_export_tests.py index 95ae3ee9feb2..4fb04405d053 100644 --- a/tests/python/alembic_export_tests.py +++ b/tests/python/alembic_export_tests.py @@ -396,7 +396,7 @@ class UVMapExportTest(AbstractAlembicTest): def test_uvmap_export(self, tempdir: pathlib.Path): """Minimal test for exporting multiple UV maps on an animated mesh. - This covers the issue reported in T77021. + This covers the issue reported in #77021. """ basename = 'T77021-multiple-uvmaps-animated-mesh' abc = tempdir / f'{basename}.abc' diff --git a/tests/python/bl_id_management.py b/tests/python/bl_id_management.py index 9ca53b4214b7..c29640d01e7b 100644 --- a/tests/python/bl_id_management.py +++ b/tests/python/bl_id_management.py @@ -173,7 +173,7 @@ class TestIdRename(TestHelper, unittest.TestCase): data = dt break data.name = name - # This can fail currently, see T71244. + # This can fail currently, see #71244. # ~ self.assertEqual(data.name, self.default_name + ".001") self.ensure_proper_order() diff --git a/tests/python/bl_keymap_completeness.py b/tests/python/bl_keymap_completeness.py index 97335a94c01c..1d16cf752a72 100644 --- a/tests/python/bl_keymap_completeness.py +++ b/tests/python/bl_keymap_completeness.py @@ -36,7 +36,7 @@ def check_maps(): # Keymap functions of tools are not in blender anyway... continue print("\t%s" % km_id) - # TODO T65963, broken keymap hierarchy tests disabled until fixed. + # TODO #65963, broken keymap hierarchy tests disabled until fixed. # err = True test = maps_bl - maps_py @@ -45,7 +45,7 @@ def check_maps(): for km_id in test: km = keyconf.keymaps[km_id] print(" ('%s', '%s', '%s', [])," % (km_id, km.space_type, km.region_type)) - # TODO T65963, broken keymap hierarchy tests disabled until fixed. + # TODO #65963, broken keymap hierarchy tests disabled until fixed. # err = True # Check space/region's are OK diff --git a/tests/python/bl_rigging_symmetrize.py b/tests/python/bl_rigging_symmetrize.py index 10ba99ac6e9f..035560b624e8 100644 --- a/tests/python/bl_rigging_symmetrize.py +++ b/tests/python/bl_rigging_symmetrize.py @@ -153,12 +153,12 @@ class ArmatureSymmetrizeTest(AbstractAnimationTest, unittest.TestCase): bpy.ops.wm.open_mainfile(filepath=str( self.testdir / "symm_test.blend")) - # T81541 (D9214) + # #81541 (D9214) arm = bpy.data.objects['transform_const_rig'] expected_arm = bpy.data.objects['expected_transform_const_rig'] self.assertEqualSymmetrize(arm, expected_arm) - # T66751 (D6009) + # #66751 (D6009) arm = bpy.data.objects['dragon_rig'] expected_arm = bpy.data.objects['expected_dragon_rig'] self.assertEqualSymmetrize(arm, expected_arm) diff --git a/tests/python/cycles_render_tests.py b/tests/python/cycles_render_tests.py index 1d30a696e985..36eceb0558d1 100644 --- a/tests/python/cycles_render_tests.py +++ b/tests/python/cycles_render_tests.py @@ -139,7 +139,7 @@ def main(): else: report.set_compare_engine('cycles', 'CPU') - # Increase threshold for motion blur, see T78777. + # Increase threshold for motion blur, see #78777. test_dir_name = Path(test_dir).name if test_dir_name == 'motion_blur': report.set_fail_threshold(0.032) diff --git a/tests/python/operators.py b/tests/python/operators.py index 884910e159c1..da05ee59dbff 100644 --- a/tests/python/operators.py +++ b/tests/python/operators.py @@ -549,7 +549,7 @@ def main(): ), - # T87259 - test cases + # #87259 - test cases SpecMeshTest( "CubeEdgeUnsubdivide", "testCubeEdgeUnsubdivide", "expectedCubeEdgeUnsubdivide", [OperatorSpecEditMode("unsubdivide", {}, "EDGE", {i for i in range(6)})], diff --git a/tests/python/view_layer/test_evaluation_render_settings_a.py b/tests/python/view_layer/test_evaluation_render_settings_a.py index 526e7462716c..732877aa2881 100644 --- a/tests/python/view_layer/test_evaluation_render_settings_a.py +++ b/tests/python/view_layer/test_evaluation_render_settings_a.py @@ -16,7 +16,7 @@ from view_layer_common import * # ############################################################ class UnitTesting(ViewLayerTesting): - @unittest.skip("Uses the clay engine, that is removed T55454") + @unittest.skip("Uses the clay engine, that is removed #55454") def test_render_settings(self): """ See if the depsgraph evaluation is correct diff --git a/tests/python/view_layer/test_evaluation_render_settings_b.py b/tests/python/view_layer/test_evaluation_render_settings_b.py index 1674ae6a93ee..9eef79733227 100644 --- a/tests/python/view_layer/test_evaluation_render_settings_b.py +++ b/tests/python/view_layer/test_evaluation_render_settings_b.py @@ -16,7 +16,7 @@ from view_layer_common import * # ############################################################ class UnitTesting(ViewLayerTesting): - @unittest.skip("Uses the clay engine, that is removed T55454") + @unittest.skip("Uses the clay engine, that is removed #55454") def test_render_settings(self): """ See if the depsgraph evaluation is correct diff --git a/tests/python/view_layer/test_evaluation_render_settings_c.py b/tests/python/view_layer/test_evaluation_render_settings_c.py index ca572253dffd..7159a725f99a 100644 --- a/tests/python/view_layer/test_evaluation_render_settings_c.py +++ b/tests/python/view_layer/test_evaluation_render_settings_c.py @@ -16,7 +16,7 @@ from view_layer_common import * # ############################################################ class UnitTesting(ViewLayerTesting): - @unittest.skip("Uses the clay engine, that is removed T55454") + @unittest.skip("Uses the clay engine, that is removed #55454") def test_render_settings(self): """ See if the depsgraph evaluation is correct diff --git a/tests/python/view_layer/test_evaluation_render_settings_d.py b/tests/python/view_layer/test_evaluation_render_settings_d.py index 2c2173af0d6b..3ef70d45f39c 100644 --- a/tests/python/view_layer/test_evaluation_render_settings_d.py +++ b/tests/python/view_layer/test_evaluation_render_settings_d.py @@ -16,7 +16,7 @@ from view_layer_common import * # ############################################################ class UnitTesting(ViewLayerTesting): - @unittest.skip("Uses the clay engine, that is removed T55454") + @unittest.skip("Uses the clay engine, that is removed #55454") def test_render_settings(self): """ See if the depsgraph evaluation is correct diff --git a/tests/python/view_layer/test_evaluation_render_settings_e.py b/tests/python/view_layer/test_evaluation_render_settings_e.py index f2cc6f579d7b..d14c42b3ff6a 100644 --- a/tests/python/view_layer/test_evaluation_render_settings_e.py +++ b/tests/python/view_layer/test_evaluation_render_settings_e.py @@ -16,7 +16,7 @@ from view_layer_common import * # ############################################################ class UnitTesting(ViewLayerTesting): - @unittest.skip("Uses the clay engine, that is removed T55454") + @unittest.skip("Uses the clay engine, that is removed #55454") def test_render_settings(self): """ See if the depsgraph evaluation is correct diff --git a/tests/python/view_layer/test_evaluation_render_settings_f.py b/tests/python/view_layer/test_evaluation_render_settings_f.py index 966bdbd4392a..56a41c2d5a6c 100644 --- a/tests/python/view_layer/test_evaluation_render_settings_f.py +++ b/tests/python/view_layer/test_evaluation_render_settings_f.py @@ -16,7 +16,7 @@ from view_layer_common import * # ############################################################ class UnitTesting(ViewLayerTesting): - @unittest.skip("Uses the clay engine, that is removed T55454") + @unittest.skip("Uses the clay engine, that is removed #55454") def test_render_settings(self): """ See if the depsgraph evaluation is correct diff --git a/tests/python/view_layer/test_evaluation_render_settings_g.py b/tests/python/view_layer/test_evaluation_render_settings_g.py index dfc34e76975d..91f03ef7973a 100644 --- a/tests/python/view_layer/test_evaluation_render_settings_g.py +++ b/tests/python/view_layer/test_evaluation_render_settings_g.py @@ -16,7 +16,7 @@ from view_layer_common import * # ############################################################ class UnitTesting(ViewLayerTesting): - @unittest.skip("Uses the clay engine, that is removed T55454") + @unittest.skip("Uses the clay engine, that is removed #55454") def test_render_settings(self): """ See if the depsgraph evaluation is correct diff --git a/tests/python/view_layer/test_evaluation_render_settings_h.py b/tests/python/view_layer/test_evaluation_render_settings_h.py index 0e3bc5faaa86..ed6965face69 100644 --- a/tests/python/view_layer/test_evaluation_render_settings_h.py +++ b/tests/python/view_layer/test_evaluation_render_settings_h.py @@ -16,7 +16,7 @@ from view_layer_common import * # ############################################################ class UnitTesting(ViewLayerTesting): - @unittest.skip("Uses the clay engine, that is removed T55454") + @unittest.skip("Uses the clay engine, that is removed #55454") def test_render_settings(self): """ See if the depsgraph evaluation is correct diff --git a/tests/python/view_layer/test_evaluation_render_settings_i.py b/tests/python/view_layer/test_evaluation_render_settings_i.py index d44e00ae665f..958f78ea3dc0 100644 --- a/tests/python/view_layer/test_evaluation_render_settings_i.py +++ b/tests/python/view_layer/test_evaluation_render_settings_i.py @@ -16,7 +16,7 @@ from view_layer_common import * # ############################################################ class UnitTesting(ViewLayerTesting): - @unittest.skip("Uses the clay engine, that is removed T55454") + @unittest.skip("Uses the clay engine, that is removed #55454") def test_render_settings(self): """ See if the depsgraph evaluation is correct -- 2.30.2 From 3605c4bdfe7dd379ad3081f102f9da2bd9f9ef9c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 12 Feb 2023 16:12:52 +1100 Subject: [PATCH 018/182] Tests: add polyfill2d test to ensure the result has no zero area tris Add a test to address the issue raised in #103913, where zero area triangles could be created from polygons that have co-linear edges but were not degenerate. --- .../blenlib/tests/BLI_polyfill_2d_test.cc | 126 ++++++++++++------ 1 file changed, 85 insertions(+), 41 deletions(-) diff --git a/source/blender/blenlib/tests/BLI_polyfill_2d_test.cc b/source/blender/blenlib/tests/BLI_polyfill_2d_test.cc index 2a688bb512f1..547300a098e3 100644 --- a/source/blender/blenlib/tests/BLI_polyfill_2d_test.cc +++ b/source/blender/blenlib/tests/BLI_polyfill_2d_test.cc @@ -33,6 +33,12 @@ static void polyfill_to_obj(const char *id, const uint tris[][3], const uint tris_num); +using ePolyFill2DTestFlag = enum ePolyFill2DTestFlag { + POLYFILL2D_TEST_IS_DEGENERATE = (1 << 0), + POLYFILL2D_TEST_NO_ZERO_AREA_TRIS = (1 << 1), + POLYFILL2D_TEST_NOP = 0, +}; + /* -------------------------------------------------------------------- */ /* test utility functions */ @@ -159,13 +165,31 @@ static void test_polyfill_area(const float poly[][2], EXPECT_NEAR(area_total, area_total_tris, eps); } +/** + * Check that none of the tessellated triangles are zero area. + */ +static void test_polyfill_area_tri_nonzero(const float poly[][2], + const uint /*poly_num*/, + const uint tris[][3], + const uint tris_num) +{ + uint i; + uint total = 0; + for (i = 0; i < tris_num; i++) { + if (area_tri_v2(poly[tris[i][0]], poly[tris[i][1]], poly[tris[i][2]]) < 1e-6f) { + total += 1; + } + } + EXPECT_EQ(total, 0); +} + /* -------------------------------------------------------------------- */ /* Macro and helpers to manage checking */ /** * Main template for polyfill testing. */ static void test_polyfill_template_check(const char *id, - bool is_degenerate, + const ePolyFill2DTestFlag test_flag, const float poly[][2], const uint poly_num, const uint tris[][3], @@ -173,16 +197,22 @@ static void test_polyfill_template_check(const char *id, { test_polyfill_simple(poly, poly_num, tris, tris_num); test_polyfill_topology(poly, poly_num, tris, tris_num); - if (!is_degenerate) { + if (!(test_flag & POLYFILL2D_TEST_IS_DEGENERATE)) { test_polyfill_winding(poly, poly_num, tris, tris_num); test_polyfill_area(poly, poly_num, tris, tris_num); + + /* Only check when non-degenerate, because the number of zero area triangles + * are undefined for degenerate polygons as there is no correct solution. */ + if (test_flag & POLYFILL2D_TEST_NO_ZERO_AREA_TRIS) { + test_polyfill_area_tri_nonzero(poly, poly_num, tris, tris_num); + } } polyfill_to_obj(id, poly, poly_num, tris, tris_num); } static void test_polyfill_template(const char *id, - bool is_degenerate, + const ePolyFill2DTestFlag test_flag, const float poly[][2], const uint poly_num, uint tris[][3], @@ -192,7 +222,7 @@ static void test_polyfill_template(const char *id, BLI_polyfill_calc(poly, poly_num, 0, tris); /* check all went well */ - test_polyfill_template_check(id, is_degenerate, poly, poly_num, tris, tris_num); + test_polyfill_template_check(id, test_flag, poly, poly_num, tris, tris_num); #ifdef USE_BEAUTIFY /* check beautify gives good results too */ @@ -202,7 +232,7 @@ static void test_polyfill_template(const char *id, BLI_polyfill_beautify(poly, poly_num, tris, pf_arena, pf_heap); - test_polyfill_template_check(id, is_degenerate, poly, poly_num, tris, tris_num); + test_polyfill_template_check(id, test_flag, poly, poly_num, tris, tris_num); BLI_memarena_free(pf_arena); BLI_heap_free(pf_heap, nullptr); @@ -211,7 +241,7 @@ static void test_polyfill_template(const char *id, } static void test_polyfill_template_flip_sign(const char *id, - bool is_degenerate, + const ePolyFill2DTestFlag test_flag, const float poly[][2], const uint poly_num, uint tris[][3], @@ -226,7 +256,7 @@ static void test_polyfill_template_flip_sign(const char *id, poly_copy[i][0] = poly[i][0] * sign_x; poly_copy[i][1] = poly[i][1] * sign_y; } - test_polyfill_template(id, is_degenerate, poly_copy, poly_num, tris, tris_num); + test_polyfill_template(id, test_flag, poly_copy, poly_num, tris, tris_num); } } MEM_freeN(poly_copy); @@ -234,7 +264,7 @@ static void test_polyfill_template_flip_sign(const char *id, #ifdef USE_COMBINATIONS_ALL static void test_polyfill_template_main(const char *id, - bool is_degenerate, + const ePolyFill2DTestFlag test_flag, const float poly[][2], const uint poly_num, uint tris[][3], @@ -256,7 +286,7 @@ static void test_polyfill_template_main(const char *id, for (poly_cycle = 0; poly_cycle < poly_num; poly_cycle++) { // printf("polytest %s ofs=%d, reverse=%d\n", id, poly_cycle, poly_reverse); - test_polyfill_template_flip_sign(id, is_degenerate, poly, poly_num, tris, tris_num); + test_polyfill_template_flip_sign(id, test_flag, poly, poly_num, tris, tris_num); /* cycle */ copy_v2_v2(tmp, poly_copy[0]); @@ -269,24 +299,24 @@ static void test_polyfill_template_main(const char *id, } #else /* USE_COMBINATIONS_ALL */ static void test_polyfill_template_main(const char *id, - bool is_degenerate, + const ePolyFill2DTestFlag test_flag, const float poly[][2], const uint poly_num, uint tris[][3], const uint tris_num) { - test_polyfill_template_flip_sign(id, is_degenerate, poly, poly_num, tris, tris_num); + test_polyfill_template_flip_sign(id, test_flag, poly, poly_num, tris, tris_num); } #endif /* USE_COMBINATIONS_ALL */ -#define TEST_POLYFILL_TEMPLATE_STATIC(poly, is_degenerate) \ +#define TEST_POLYFILL_TEMPLATE_STATIC(poly, test_flag) \ { \ uint tris[POLY_TRI_COUNT(ARRAY_SIZE(poly))][3]; \ const uint poly_num = ARRAY_SIZE(poly); \ const uint tris_num = ARRAY_SIZE(tris); \ const char *id = typeid(*this).name(); \ \ - test_polyfill_template_main(id, is_degenerate, poly, poly_num, tris, tris_num); \ + test_polyfill_template_main(id, test_flag, poly, poly_num, tris, tris_num); \ } \ (void)0 @@ -380,56 +410,56 @@ static void polyfill_to_obj(const char *id, TEST(polyfill2d, TriangleCCW) { const float poly[][2] = {{0, 0}, {0, 1}, {1, 0}}; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* A counterclockwise square */ TEST(polyfill2d, SquareCCW) { const float poly[][2] = {{0, 0}, {0, 1}, {1, 1}, {1, 0}}; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* A clockwise square */ TEST(polyfill2d, SquareCW) { const float poly[][2] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}}; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Starfleet insigna */ TEST(polyfill2d, Starfleet) { const float poly[][2] = {{0, 0}, {0.6f, 0.4f}, {1, 0}, {0.5f, 1}}; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Starfleet insigna with repeated point */ TEST(polyfill2d, StarfleetDegenerate) { const float poly[][2] = {{0, 0}, {0.6f, 0.4f}, {0.6f, 0.4f}, {1, 0}, {0.5f, 1}}; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Three collinear points */ TEST(polyfill2d, 3Colinear) { const float poly[][2] = {{0, 0}, {1, 0}, {2, 0}}; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Four collinear points */ TEST(polyfill2d, 4Colinear) { const float poly[][2] = {{0, 0}, {1, 0}, {2, 0}, {3, 0}}; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Non-consecutive collinear points */ TEST(polyfill2d, UnorderedColinear) { const float poly[][2] = {{0, 0}, {1, 1}, {2, 0}, {3, 1}, {4, 0}}; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Plus shape */ @@ -449,14 +479,14 @@ TEST(polyfill2d, PlusShape) {0, 1}, {1, 1}, }; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Star shape */ TEST(polyfill2d, StarShape) { const float poly[][2] = {{4, 0}, {5, 3}, {8, 4}, {5, 5}, {4, 8}, {3, 5}, {0, 4}, {3, 3}}; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* U shape */ @@ -464,7 +494,7 @@ TEST(polyfill2d, UShape) { const float poly[][2] = { {1, 0}, {2, 0}, {3, 1}, {3, 3}, {2, 3}, {2, 1}, {1, 1}, {1, 3}, {0, 3}, {0, 1}}; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Spiral */ @@ -488,7 +518,7 @@ TEST(polyfill2d, Spiral) {4, 1}, {0, 1}, }; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Test case from http://www.flipcode.com/archives/Efficient_Polygon_Triangulation.shtml */ @@ -511,14 +541,14 @@ TEST(polyfill2d, TestFlipCode) {4, 3}, {2, 6}, }; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Self-intersection */ TEST(polyfill2d, SelfIntersect) { const float poly[][2] = {{0, 0}, {1, 1}, {2, -1}, {3, 1}, {4, 0}}; - TEST_POLYFILL_TEMPLATE_STATIC(poly, true); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_IS_DEGENERATE); } /* Self-touching */ @@ -538,7 +568,7 @@ TEST(polyfill2d, SelfTouch) {2, 4}, {0, 4}, }; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Self-overlapping */ @@ -558,7 +588,7 @@ TEST(polyfill2d, SelfOverlap) {3, 4}, {0, 4}, }; - TEST_POLYFILL_TEMPLATE_STATIC(poly, true); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_IS_DEGENERATE); } /* Test case from http://www.davdata.nl/math/polygons.html */ @@ -570,7 +600,7 @@ TEST(polyfill2d, TestDavData) {410, 30}, {470, 440}, {640, 410}, {630, 140}, {590, 140}, {580, 360}, {510, 370}, {510, 60}, {650, 70}, {660, 450}, {190, 480}, }; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Issue 815, http://code.google.com/p/libgdx/issues/detail?id=815 */ @@ -586,7 +616,7 @@ TEST(polyfill2d, Issue815) {2.0f, 1.0f}, {2.0f, 0.0f}, }; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Issue 207, comment #1, http://code.google.com/p/libgdx/issues/detail?id=207#c1 */ @@ -605,7 +635,7 @@ TEST(polyfill2d, Issue207_1) {126.70667f, 170.07617f}, {73.22717f, 199.51062f}, }; - TEST_POLYFILL_TEMPLATE_STATIC(poly, true); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_IS_DEGENERATE); } /* Issue 207, comment #11, http://code.google.com/p/libgdx/issues/detail?id=207#c11 */ @@ -625,7 +655,7 @@ TEST(polyfill2d, Issue207_11) {1934.0381f, 485.3833f}, {1934.5234f, 484.11328f}, {1934.9502f, 482.9663f}, {1935.3125f, 481.96875f}, {1935.6045f, 481.14697f}, {1935.8203f, 480.52734f}, {1935.9541f, 480.13623f}, {1936.0f, 480.0f}}; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Issue 1407, http://code.google.com/p/libgdx/issues/detail?id=1407 */ @@ -637,7 +667,7 @@ TEST(polyfill2d, Issue1407) {4.8973203f, 1.9063174f}, {5.4979978f, 1.9096732f}, }; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Issue 1407, http://code.google.com/p/libgdx/issues/detail?id=1407, */ @@ -651,7 +681,7 @@ TEST(polyfill2d, Issue1407_pt) {5.4979978f, 1.9096732f}, {4, 4}, }; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Simplified from Blender bug #40777 */ @@ -662,7 +692,7 @@ TEST(polyfill2d, IssueT40777_colinear) {0.88, 0.4}, {0.94, 0.4}, {0.94, 0}, {1, 0}, {1, 0.4}, {0.03, 0.62}, {0.03, 0.89}, {0.59, 0.89}, {0.03, 1}, {0, 1}, {0, 0}, {0.03, 0}, {0.03, 0.37}, }; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Blender bug #41986 */ @@ -677,7 +707,7 @@ TEST(polyfill2d, IssueT41986_axis_align) {0.68, 0.06}, {0.57, -0.36}, {-0.25, -0.37}, {0.49, -0.74}, {-0.59, -1.21}, {-0.25, -0.15}, {-0.46, -0.52}, {-1.08, -0.83}, {-1.45, -0.33}, {-1.25, -0.04}}; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Blender bug #52834 */ @@ -692,7 +722,7 @@ TEST(polyfill2d, IssueT52834_axis_align_co_linear) {18, -2}, {23, -2}, {24, -2}, {29, -2}, {30, -2}, {35, -2}, {36, -2}, {40, -2}, }; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Blender bug #67109 (version a). */ @@ -711,7 +741,7 @@ TEST(polyfill2d, IssueT67109_axis_align_co_linear_a) {2.8720665, -2.6659985}, {2.8720665, -0.15499878}, }; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Blender bug #67109, (version b). */ @@ -729,7 +759,7 @@ TEST(polyfill2d, IssueT67109_axis_align_co_linear_b) {25.825695, -6.320076}, {24.00582, -4.5899982}, }; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); } /* Blender bug #67109 (version c). */ @@ -747,5 +777,19 @@ TEST(polyfill2d, IssueT67109_axis_align_co_linear_c) {-60.546703, 71.07365}, {-58.37554, 78.83239}, }; - TEST_POLYFILL_TEMPLATE_STATIC(poly, false); + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NOP); +} + +/* Blender bug #103913 where co-linear edges create zero area tessellation + * when a valid solution exists without zero area triangles. */ +TEST(polyfill2d, Issue103913_axis_align_co_linear_no_zero_area_tri) +{ + const float poly[][2] = { + {-10, 0}, {-10, 2}, {-8, 2}, {-6, 2}, {-4, 2}, {-2, 2}, {-2, 4}, {-2, 6}, + {-2, 8}, {-2, 10}, {0, 10}, {2, 10}, {2, 8}, {2, 6}, {2, 4}, {2, 2}, + {4, 2}, {6, 2}, {8, 2}, {10, 2}, {10, 0}, {10, -2}, {8, -2}, {6, -2}, + {4, -2}, {2, -2}, {2, -4}, {2, -6}, {2, -8}, {2, -10}, {0, -10}, {-2, -10}, + {-2, -8}, {-2, -6}, {-2, -4}, {-2, -2}, {-4, -2}, {-6, -2}, {-8, -2}, {-10, -2}, + }; + TEST_POLYFILL_TEMPLATE_STATIC(poly, POLYFILL2D_TEST_NO_ZERO_AREA_TRIS); } -- 2.30.2 From 94b7741288308b73e263c9a4382427aaf581671e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 12 Feb 2023 16:32:45 +1100 Subject: [PATCH 019/182] Cleanup: use sized int types for polyfill_2d Also correct building when USE_CLIP_EVEN is disabled. --- source/blender/blenlib/intern/polyfill_2d.c | 101 +++++++++++--------- 1 file changed, 54 insertions(+), 47 deletions(-) diff --git a/source/blender/blenlib/intern/polyfill_2d.c b/source/blender/blenlib/intern/polyfill_2d.c index 4f4166d8de87..c5a877a9539b 100644 --- a/source/blender/blenlib/intern/polyfill_2d.c +++ b/source/blender/blenlib/intern/polyfill_2d.c @@ -58,7 +58,7 @@ # include "PIL_time_utildefines.h" #endif -typedef signed char eSign; +typedef int8_t eSign; #ifdef USE_KDTREE /** @@ -84,24 +84,24 @@ typedef bool axis_t; /* use for sorting */ typedef struct KDTreeNode2D_head { - uint neg, pos; - uint index; + uint32_t neg, pos; + uint32_t index; } KDTreeNode2D_head; typedef struct KDTreeNode2D { - uint neg, pos; - uint index; + uint32_t neg, pos; + uint32_t index; axis_t axis; /* range is only (0-1) */ - ushort flag; - uint parent; + uint16_t flag; + uint32_t parent; } KDTreeNode2D; struct KDTree2D { KDTreeNode2D *nodes; const float (*coords)[2]; - uint root; - uint node_num; - uint *nodes_map; /* index -> node lookup */ + uint32_t root; + uint32_t node_num; + uint32_t *nodes_map; /* index -> node lookup */ }; struct KDRange2D { @@ -119,14 +119,14 @@ typedef struct PolyFill { struct PolyIndex *indices; /* vertex aligned */ const float (*coords)[2]; - uint coords_num; + uint32_t coords_num; #ifdef USE_CONVEX_SKIP - uint coords_num_concave; + uint32_t coords_num_concave; #endif /* A polygon with n vertices has a triangulation of n-2 triangles. */ - uint (*tris)[3]; - uint tris_num; + uint32_t (*tris)[3]; + uint32_t tris_num; #ifdef USE_KDTREE struct KDTree2D kdtree; @@ -136,7 +136,7 @@ typedef struct PolyFill { /** Circular double linked-list. */ typedef struct PolyIndex { struct PolyIndex *next, *prev; - uint index; + uint32_t index; eSign sign; } PolyIndex; @@ -189,13 +189,13 @@ static eSign span_tri_v2_sign(const float v1[2], const float v2[2], const float } #ifdef USE_KDTREE -# define KDNODE_UNSET ((uint)-1) +# define KDNODE_UNSET ((uint32_t)-1) enum { KDNODE_FLAG_REMOVED = (1 << 0), }; -static void kdtree2d_new(struct KDTree2D *tree, uint tot, const float (*coords)[2]) +static void kdtree2d_new(struct KDTree2D *tree, uint32_t tot, const float (*coords)[2]) { /* set by caller */ // tree->nodes = nodes; @@ -207,10 +207,12 @@ static void kdtree2d_new(struct KDTree2D *tree, uint tot, const float (*coords)[ /** * no need for kdtree2d_insert, since we know the coords array. */ -static void kdtree2d_init(struct KDTree2D *tree, const uint coords_num, const PolyIndex *indices) +static void kdtree2d_init(struct KDTree2D *tree, + const uint32_t coords_num, + const PolyIndex *indices) { KDTreeNode2D *node; - uint i; + uint32_t i; for (i = 0, node = tree->nodes; i < coords_num; i++) { if (indices[i].sign != CONVEX) { @@ -222,14 +224,17 @@ static void kdtree2d_init(struct KDTree2D *tree, const uint coords_num, const Po } } - BLI_assert(tree->node_num == (uint)(node - tree->nodes)); + BLI_assert(tree->node_num == (uint32_t)(node - tree->nodes)); } -static uint kdtree2d_balance_recursive( - KDTreeNode2D *nodes, uint node_num, axis_t axis, const float (*coords)[2], const uint ofs) +static uint32_t kdtree2d_balance_recursive(KDTreeNode2D *nodes, + uint32_t node_num, + axis_t axis, + const float (*coords)[2], + const uint32_t ofs) { KDTreeNode2D *node; - uint neg, pos, median, i, j; + uint32_t neg, pos, median, i, j; if (node_num <= 0) { return KDNODE_UNSET; @@ -287,7 +292,7 @@ static void kdtree2d_balance(struct KDTree2D *tree) static void kdtree2d_init_mapping(struct KDTree2D *tree) { - uint i; + uint32_t i; KDTreeNode2D *node; for (i = 0, node = tree->nodes; i < tree->node_num; i++, node++) { @@ -306,9 +311,9 @@ static void kdtree2d_init_mapping(struct KDTree2D *tree) tree->nodes[tree->root].parent = KDNODE_UNSET; } -static void kdtree2d_node_remove(struct KDTree2D *tree, uint index) +static void kdtree2d_node_remove(struct KDTree2D *tree, uint32_t index) { - uint node_index = tree->nodes_map[index]; + uint32_t node_index = tree->nodes_map[index]; KDTreeNode2D *node; if (node_index == KDNODE_UNSET) { @@ -327,7 +332,7 @@ static void kdtree2d_node_remove(struct KDTree2D *tree, uint index) (node->parent != KDNODE_UNSET)) { KDTreeNode2D *node_parent = &tree->nodes[node->parent]; - BLI_assert((uint)(node - tree->nodes) == node_index); + BLI_assert((uint32_t)(node - tree->nodes) == node_index); if (node_parent->neg == node_index) { node_parent->neg = KDNODE_UNSET; } @@ -347,7 +352,7 @@ static void kdtree2d_node_remove(struct KDTree2D *tree, uint index) } static bool kdtree2d_isect_tri_recursive(const struct KDTree2D *tree, - const uint tri_index[3], + const uint32_t tri_index[3], const float *tri_coords[3], const float tri_center[2], const struct KDRange2D bounds[2], @@ -404,10 +409,10 @@ static bool kdtree2d_isect_tri_recursive(const struct KDTree2D *tree, return false; } -static bool kdtree2d_isect_tri(struct KDTree2D *tree, const uint ind[3]) +static bool kdtree2d_isect_tri(struct KDTree2D *tree, const uint32_t ind[3]) { const float *vs[3]; - uint i; + uint32_t i; struct KDRange2D bounds[2] = { {FLT_MAX, -FLT_MAX}, {FLT_MAX, -FLT_MAX}, @@ -432,7 +437,7 @@ static bool kdtree2d_isect_tri(struct KDTree2D *tree, const uint ind[3]) #endif /* USE_KDTREE */ -static uint *pf_tri_add(PolyFill *pf) +static uint32_t *pf_tri_add(PolyFill *pf) { return pf->tris[pf->tris_num++]; } @@ -453,7 +458,7 @@ static void pf_coord_remove(PolyFill *pf, PolyIndex *pi) pf->indices = pi->next; } #ifdef DEBUG - pi->index = (uint)-1; + pi->index = (uint32_t)-1; pi->next = pi->prev = NULL; #endif @@ -544,14 +549,16 @@ static void pf_triangulate(PolyFill *pf) } # endif #else +# ifdef USE_CLIP_SWEEP if ((reverse ? pi_prev->prev : pi_next->next)->sign != CONVEX) { reverse = !reverse; } +# endif #endif } if (pf->coords_num == 3) { - uint *tri = pf_tri_add(pf); + uint32_t *tri = pf_tri_add(pf); pi_ear = pf->indices; tri[0] = pi_ear->index; pi_ear = pi_ear->next; @@ -584,10 +591,10 @@ static PolyIndex *pf_ear_tip_find(PolyFill *pf ) { /* localize */ - const uint coords_num = pf->coords_num; + const uint32_t coords_num = pf->coords_num; PolyIndex *pi_ear; - uint i; + uint32_t i; /* Use two passes when looking for an ear. * @@ -670,7 +677,7 @@ static bool pf_ear_tip_check(PolyFill *pf, PolyIndex *pi_ear_tip, const eSign si #endif #if defined(USE_CONVEX_SKIP) && !defined(USE_KDTREE) - uint coords_num_concave_checked = 0; + uint32_t coords_num_concave_checked = 0; #endif #ifdef USE_CONVEX_SKIP @@ -678,7 +685,7 @@ static bool pf_ear_tip_check(PolyFill *pf, PolyIndex *pi_ear_tip, const eSign si # ifdef USE_CONVEX_SKIP_TEST /* check if counting is wrong */ { - uint coords_num_concave_test = 0; + uint32_t coords_num_concave_test = 0; PolyIndex *pi_iter = pi_ear_tip; do { if (pi_iter->sign != CONVEX) { @@ -701,7 +708,7 @@ static bool pf_ear_tip_check(PolyFill *pf, PolyIndex *pi_ear_tip, const eSign si #ifdef USE_KDTREE { - const uint ind[3] = {pi_ear_tip->index, pi_ear_tip->next->index, pi_ear_tip->prev->index}; + const uint32_t ind[3] = {pi_ear_tip->index, pi_ear_tip->next->index, pi_ear_tip->prev->index}; if (kdtree2d_isect_tri(&pf->kdtree, ind)) { return false; @@ -750,7 +757,7 @@ static bool pf_ear_tip_check(PolyFill *pf, PolyIndex *pi_ear_tip, const eSign si static void pf_ear_tip_cut(PolyFill *pf, PolyIndex *pi_ear_tip) { - uint *tri = pf_tri_add(pf); + uint32_t *tri = pf_tri_add(pf); tri[0] = pi_ear_tip->prev->index; tri[1] = pi_ear_tip->index; @@ -764,15 +771,15 @@ static void pf_ear_tip_cut(PolyFill *pf, PolyIndex *pi_ear_tip) */ static void polyfill_prepare(PolyFill *pf, const float (*coords)[2], - const uint coords_num, + const uint32_t coords_num, int coords_sign, - uint (*r_tris)[3], + uint32_t (*r_tris)[3], PolyIndex *r_indices) { /* localize */ PolyIndex *indices = r_indices; - uint i; + uint32_t i; /* assign all polyfill members here */ pf->indices = r_indices; @@ -810,7 +817,7 @@ static void polyfill_prepare(PolyFill *pf, } else { /* reversed */ - uint n = coords_num - 1; + uint32_t n = coords_num - 1; for (i = 0; i < coords_num; i++) { indices[i].next = &indices[i + 1]; indices[i].prev = &indices[i - 1]; @@ -849,9 +856,9 @@ static void polyfill_calc(PolyFill *pf) } void BLI_polyfill_calc_arena(const float (*coords)[2], - const uint coords_num, + const uint32_t coords_num, const int coords_sign, - uint (*r_tris)[3], + uint32_t (*r_tris)[3], struct MemArena *arena) { @@ -894,9 +901,9 @@ void BLI_polyfill_calc_arena(const float (*coords)[2], } void BLI_polyfill_calc(const float (*coords)[2], - const uint coords_num, + const uint32_t coords_num, const int coords_sign, - uint (*r_tris)[3]) + uint32_t (*r_tris)[3]) { /* Fallback to heap memory for large allocations. * Avoid running out of stack memory on systems with 512kb stack (macOS). -- 2.30.2 From 1888a5daa1a18f8a4680bce328db3c5f3a0c59bf Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Sun, 12 Feb 2023 18:00:48 +0100 Subject: [PATCH 020/182] BLI: use larger integer type in BitVector Using larger integer types allows for more efficient code, because we can use the hardware better. Instead of working on individual bytes, the code can now work on 8 bytes at a time. We don't really benefit from this immediately but I'm planning to implement some more optimized bit vector operations for #104629. Pull Request #104658 --- source/blender/blenlib/BLI_bit_vector.hh | 158 ++++++++++++----------- 1 file changed, 85 insertions(+), 73 deletions(-) diff --git a/source/blender/blenlib/BLI_bit_vector.hh b/source/blender/blenlib/BLI_bit_vector.hh index bad371fc88a0..237bdce14526 100644 --- a/source/blender/blenlib/BLI_bit_vector.hh +++ b/source/blender/blenlib/BLI_bit_vector.hh @@ -16,13 +16,13 @@ * * The compact nature of storing bools in individual bits has some downsides that have to be kept * in mind: - * - Writing to separate bits in the same byte is not thread-safe. Therefore, an existing vector of + * - Writing to separate bits in the same int is not thread-safe. Therefore, an existing vector of * bool can't easily be replaced with a bit vector, if it is written to from multiple threads. * Read-only access from multiple threads is fine though. * - Writing individual elements is more expensive when the array is in cache already. That is - * because changing a bit is always a read-modify-write operation on the byte the bit resides in. + * because changing a bit is always a read-modify-write operation on the int the bit resides in. * - Reading individual elements is more expensive when the array is in cache already. That is - * because additional bit-wise operations have to be applied after the corresponding byte is + * because additional bit-wise operations have to be applied after the corresponding int is * read. * * Comparison to `std::vector`: @@ -42,18 +42,27 @@ #include "BLI_memory_utils.hh" #include "BLI_span.hh" -namespace blender { +namespace blender::bits { /** - * This is a read-only pointer to a specific bit. The value of the bit can be retrieved, but not - * changed. + * Using a large integer type is better because then it's easier to process many bits at once. + */ +using IntType = uint64_t; +static constexpr int64_t BitsPerInt = int64_t(sizeof(IntType) * 8); +static constexpr int64_t BitToIntIndexShift = 3 + (sizeof(IntType) >= 2) + (sizeof(IntType) >= 4) + + (sizeof(IntType) >= 8); +static constexpr IntType BitIndexMask = (IntType(1) << BitToIntIndexShift) - 1; + +/** + * This is a read-only pointer to a specific bit. The value of the bit can be retrieved, but + * not changed. */ class BitRef { private: - /** Points to the exact byte that the bit is in. */ - const uint8_t *byte_ptr_; + /** Points to the integer that the bit is in. */ + const IntType *ptr_; /** All zeros except for a single one at the bit that is referenced. */ - uint8_t mask_; + IntType mask_; friend class MutableBitRef; @@ -61,13 +70,13 @@ class BitRef { BitRef() = default; /** - * Reference a specific bit in a byte array. Note that #byte_ptr does *not* have to point to the - * exact byte the bit is in. + * Reference a specific bit in an array. Note that #ptr does *not* have to point to the + * exact integer the bit is in. */ - BitRef(const uint8_t *byte_ptr, const int64_t bit_index) + BitRef(const IntType *ptr, const int64_t bit_index) { - byte_ptr_ = byte_ptr + (bit_index >> 3); - mask_ = 1 << (bit_index & 7); + ptr_ = ptr + (bit_index >> BitToIntIndexShift); + mask_ = IntType(1) << (bit_index & BitIndexMask); } /** @@ -75,9 +84,9 @@ class BitRef { */ bool test() const { - const uint8_t byte = *byte_ptr_; - const uint8_t masked_byte = byte & mask_; - return masked_byte != 0; + const IntType value = *ptr_; + const IntType masked_value = value & mask_; + return masked_value != 0; } operator bool() const @@ -91,22 +100,22 @@ class BitRef { */ class MutableBitRef { private: - /** Points to the exact byte that the bit is in. */ - uint8_t *byte_ptr_; + /** Points to the integer that the bit is in. */ + IntType *ptr_; /** All zeros except for a single one at the bit that is referenced. */ - uint8_t mask_; + IntType mask_; public: MutableBitRef() = default; /** - * Reference a specific bit in a byte array. Note that #byte_ptr does *not* have to point to the - * exact byte the bit is in. + * Reference a specific bit in an array. Note that #ptr does *not* have to point to the + * exact int the bit is in. */ - MutableBitRef(uint8_t *byte_ptr, const int64_t bit_index) + MutableBitRef(IntType *ptr, const int64_t bit_index) { - byte_ptr_ = byte_ptr + (bit_index >> 3); - mask_ = 1 << uint8_t(bit_index & 7); + ptr_ = ptr + (bit_index >> BitToIntIndexShift); + mask_ = IntType(1) << IntType(bit_index & BitIndexMask); } /** @@ -115,7 +124,7 @@ class MutableBitRef { operator BitRef() const { BitRef bit_ref; - bit_ref.byte_ptr_ = byte_ptr_; + bit_ref.ptr_ = ptr_; bit_ref.mask_ = mask_; return bit_ref; } @@ -125,9 +134,9 @@ class MutableBitRef { */ bool test() const { - const uint8_t byte = *byte_ptr_; - const uint8_t masked_byte = byte & mask_; - return masked_byte != 0; + const IntType value = *ptr_; + const IntType masked_value = value & mask_; + return masked_value != 0; } operator bool() const @@ -140,7 +149,7 @@ class MutableBitRef { */ void set() { - *byte_ptr_ |= mask_; + *ptr_ |= mask_; } /** @@ -148,7 +157,7 @@ class MutableBitRef { */ void reset() { - *byte_ptr_ &= ~mask_; + *ptr_ &= ~mask_; } /** @@ -177,21 +186,20 @@ template< typename Allocator = GuardedAllocator> class BitVector { private: - static constexpr int64_t required_bytes_for_bits(const int64_t number_of_bits) + static constexpr int64_t required_ints_for_bits(const int64_t number_of_bits) { - return (number_of_bits + BitsPerByte - 1) / BitsPerByte; + return (number_of_bits + BitsPerInt - 1) / BitsPerInt; } - static constexpr int64_t BitsPerByte = 8; - static constexpr int64_t BytesInInlineBuffer = required_bytes_for_bits(InlineBufferCapacity); - static constexpr int64_t BitsInInlineBuffer = BytesInInlineBuffer * BitsPerByte; - static constexpr int64_t AllocationAlignment = 8; + static constexpr int64_t IntsInInlineBuffer = required_ints_for_bits(InlineBufferCapacity); + static constexpr int64_t BitsInInlineBuffer = IntsInInlineBuffer * BitsPerInt; + static constexpr int64_t AllocationAlignment = alignof(IntType); /** - * Points to the first byte used by the vector. It might point to the memory in the inline + * Points to the first integer used by the vector. It might point to the memory in the inline * buffer. */ - uint8_t *data_; + IntType *data_; /** Current size of the vector in bits. */ int64_t size_in_bits_; @@ -203,7 +211,7 @@ class BitVector { BLI_NO_UNIQUE_ADDRESS Allocator allocator_; /** Contains the bits as long as the vector is small enough. */ - BLI_NO_UNIQUE_ADDRESS TypedBuffer inline_buffer_; + BLI_NO_UNIQUE_ADDRESS TypedBuffer inline_buffer_; public: BitVector(Allocator allocator = {}) noexcept : allocator_(allocator) @@ -211,7 +219,7 @@ class BitVector { data_ = inline_buffer_; size_in_bits_ = 0; capacity_in_bits_ = BitsInInlineBuffer; - uninitialized_fill_n(data_, BytesInInlineBuffer, uint8_t(0)); + uninitialized_fill_n(data_, IntsInInlineBuffer, IntType(0)); } BitVector(NoExceptConstructor, Allocator allocator = {}) noexcept : BitVector(allocator) @@ -220,29 +228,29 @@ class BitVector { BitVector(const BitVector &other) : BitVector(NoExceptConstructor(), other.allocator_) { - const int64_t bytes_to_copy = other.used_bytes_amount(); + const int64_t ints_to_copy = other.used_ints_amount(); if (other.size_in_bits_ <= BitsInInlineBuffer) { /* The data is copied into the owned inline buffer. */ data_ = inline_buffer_; capacity_in_bits_ = BitsInInlineBuffer; } else { - /* Allocate a new byte array because the inline buffer is too small. */ - data_ = static_cast( - allocator_.allocate(bytes_to_copy, AllocationAlignment, __func__)); - capacity_in_bits_ = bytes_to_copy * BitsPerByte; + /* Allocate a new array because the inline buffer is too small. */ + data_ = static_cast( + allocator_.allocate(ints_to_copy * sizeof(IntType), AllocationAlignment, __func__)); + capacity_in_bits_ = ints_to_copy * BitsPerInt; } size_in_bits_ = other.size_in_bits_; - uninitialized_copy_n(other.data_, bytes_to_copy, data_); + uninitialized_copy_n(other.data_, ints_to_copy, data_); } BitVector(BitVector &&other) noexcept : BitVector(NoExceptConstructor(), other.allocator_) { if (other.is_inline()) { /* Copy the data into the inline buffer. */ - const int64_t bytes_to_copy = other.used_bytes_amount(); + const int64_t ints_to_copy = other.used_ints_amount(); data_ = inline_buffer_; - uninitialized_copy_n(other.data_, bytes_to_copy, data_); + uninitialized_copy_n(other.data_, ints_to_copy, data_); } else { /* Steal the pointer. */ @@ -305,7 +313,7 @@ class BitVector { bool is_empty() const { - return this->size() == 0; + return size_in_bits_ == 0; } /** @@ -442,20 +450,20 @@ class BitVector { */ void fill_range(const IndexRange range, const bool value) { - const AlignedIndexRanges aligned_ranges = split_index_range_by_alignment(range, BitsPerByte); + const AlignedIndexRanges aligned_ranges = split_index_range_by_alignment(range, BitsPerInt); /* Fill first few bits. */ for (const int64_t i : aligned_ranges.prefix) { (*this)[i].set(value); } - /* Fill entire bytes at once. */ - const int64_t start_fill_byte_index = aligned_ranges.aligned.start() / BitsPerByte; - const int64_t bytes_to_fill = aligned_ranges.aligned.size() / BitsPerByte; - const uint8_t fill_value = value ? uint8_t(0xff) : uint8_t(0x00); - initialized_fill_n(data_ + start_fill_byte_index, bytes_to_fill, fill_value); + /* Fill entire ints at once. */ + const int64_t start_fill_int_index = aligned_ranges.aligned.start() / BitsPerInt; + const int64_t ints_to_fill = aligned_ranges.aligned.size() / BitsPerInt; + const IntType fill_value = value ? IntType(-1) : IntType(0); + initialized_fill_n(data_ + start_fill_int_index, ints_to_fill, fill_value); - /* Fill bits in the end that don't cover a full byte. */ + /* Fill bits in the end that don't cover a full int. */ for (const int64_t i : aligned_ranges.suffix) { (*this)[i].set(value); } @@ -509,37 +517,35 @@ class BitVector { } BLI_NOINLINE void realloc_to_at_least(const int64_t min_capacity_in_bits, - const uint8_t initial_value_for_new_bytes = 0x00) + const IntType initial_value_for_new_ints = 0x00) { if (capacity_in_bits_ >= min_capacity_in_bits) { return; } - const int64_t min_capacity_in_bytes = this->required_bytes_for_bits(min_capacity_in_bits); + const int64_t min_capacity_in_ints = this->required_ints_for_bits(min_capacity_in_bits); /* At least double the size of the previous allocation. */ - const int64_t min_new_capacity_in_bytes = capacity_in_bits_ * 2; + const int64_t min_new_capacity_in_ints = 2 * this->required_ints_for_bits(capacity_in_bits_); - const int64_t new_capacity_in_bytes = std::max(min_capacity_in_bytes, - min_new_capacity_in_bytes); - const int64_t bytes_to_copy = this->used_bytes_amount(); + const int64_t new_capacity_in_ints = std::max(min_capacity_in_ints, min_new_capacity_in_ints); + const int64_t ints_to_copy = this->used_ints_amount(); - uint8_t *new_data = static_cast( - allocator_.allocate(new_capacity_in_bytes, AllocationAlignment, __func__)); - uninitialized_copy_n(data_, bytes_to_copy, new_data); + IntType *new_data = static_cast(allocator_.allocate( + new_capacity_in_ints * sizeof(IntType), AllocationAlignment, __func__)); + uninitialized_copy_n(data_, ints_to_copy, new_data); /* Always initialize new capacity even if it isn't used yet. That's necessary to avoid warnings * caused by using uninitialized memory. This happens when e.g. setting a clearing a bit in an - * uninitialized byte. */ - uninitialized_fill_n(new_data + bytes_to_copy, - new_capacity_in_bytes - bytes_to_copy, - uint8_t(initial_value_for_new_bytes)); + * uninitialized int. */ + uninitialized_fill_n( + new_data + ints_to_copy, new_capacity_in_ints - ints_to_copy, initial_value_for_new_ints); if (!this->is_inline()) { allocator_.deallocate(data_); } data_ = new_data; - capacity_in_bits_ = new_capacity_in_bytes * BitsPerByte; + capacity_in_bits_ = new_capacity_in_ints * BitsPerInt; } bool is_inline() const @@ -547,10 +553,16 @@ class BitVector { return data_ == inline_buffer_; } - int64_t used_bytes_amount() const + int64_t used_ints_amount() const { - return this->required_bytes_for_bits(size_in_bits_); + return this->required_ints_for_bits(size_in_bits_); } }; +} // namespace blender::bits + +namespace blender { +using bits::BitRef; +using bits::BitVector; +using bits::MutableBitRef; } // namespace blender -- 2.30.2 From 6c391ffbe3fe1152da606072e11fe6f27d692986 Mon Sep 17 00:00:00 2001 From: Miguel Pozo Date: Sun, 12 Feb 2023 23:06:21 +0100 Subject: [PATCH 021/182] Fix #104637: EEVEE Displacement regression after #104595 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Keep using the 3 evaluations dF_branch method for the Displacement output. The optimized 2 evaluations method used by node_bump is now on its own macro (dF_branch_incomplete). displacement_bump modifies the normal that nodetree_exec uses, so even with a refactor it wouldn’t be possible to re-use the computation anyway. --- source/blender/gpu/intern/gpu_node_graph.cc | 2 +- .../gpu/shaders/gpu_shader_codegen_lib.glsl | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/source/blender/gpu/intern/gpu_node_graph.cc b/source/blender/gpu/intern/gpu_node_graph.cc index 8f51a6b91aa0..2c905f8474b0 100644 --- a/source/blender/gpu/intern/gpu_node_graph.cc +++ b/source/blender/gpu/intern/gpu_node_graph.cc @@ -149,7 +149,7 @@ static void gpu_node_input_link(GPUNode *node, GPUNodeLink *link, const eGPUType case GPU_NODE_LINK_DIFFERENTIATE_FLOAT_FN: input->source = GPU_SOURCE_FUNCTION_CALL; /* NOTE(@fclem): End of function call is the return variable set during codegen. */ - SNPRINTF(input->function_call, "dF_branch(%s(), ", link->function_name); + SNPRINTF(input->function_call, "dF_branch_incomplete(%s(), ", link->function_name); break; default: break; diff --git a/source/blender/gpu/shaders/gpu_shader_codegen_lib.glsl b/source/blender/gpu/shaders/gpu_shader_codegen_lib.glsl index 3775f7f7ee38..1f7482a1b517 100644 --- a/source/blender/gpu/shaders/gpu_shader_codegen_lib.glsl +++ b/source/blender/gpu/shaders/gpu_shader_codegen_lib.glsl @@ -228,6 +228,11 @@ void dF_branch(float fn, out vec2 result) result = vec2(0.0); } +void dF_branch_incomplete(float fn, out vec2 result) +{ + result = vec2(0.0); +} + #elif 0 /* TODO(@fclem): User Option? */ /* Fast derivatives */ vec3 dF_impl(vec3 v) @@ -257,6 +262,17 @@ vec3 dF_impl(vec3 v) } # define dF_branch(fn, result) \ + if (true) { \ + g_derivative_flag = 1; \ + result.x = (fn); \ + g_derivative_flag = -1; \ + result.y = (fn); \ + g_derivative_flag = 0; \ + result -= vec2((fn)); \ + } + +/* Used when the non-offset value is already computed elsewhere */ +# define dF_branch_incomplete(fn, result) \ if (true) { \ g_derivative_flag = 1; \ result.x = (fn); \ -- 2.30.2 From 45fb9ee832bffa5bfe6d596ac8ca376a0df6b00d Mon Sep 17 00:00:00 2001 From: Miguel Pozo Date: Sun, 12 Feb 2023 23:40:28 +0100 Subject: [PATCH 022/182] Fix: Workbench Next: Extruded frustum binding --- source/blender/draw/engines/workbench/workbench_shadow.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/draw/engines/workbench/workbench_shadow.cc b/source/blender/draw/engines/workbench/workbench_shadow.cc index 942f7244a836..2bc5584abe73 100644 --- a/source/blender/draw/engines/workbench/workbench_shadow.cc +++ b/source/blender/draw/engines/workbench/workbench_shadow.cc @@ -260,7 +260,7 @@ void ShadowPass::ShadowView::compute_visibility(ObjectBoundsBuf &bounds, GPU_shader_uniform_1b(shader, "force_fail_method", force_fail_method_); GPU_shader_uniform_3fv(shader, "shadow_direction", light_direction_); GPU_uniformbuf_bind(extruded_frustum_, - GPU_shader_get_uniform_block(shader, "extruded_frustum")); + GPU_shader_get_uniform_block_binding(shader, "extruded_frustum")); GPU_storagebuf_bind(bounds, GPU_shader_get_ssbo(shader, "bounds_buf")); if (current_pass_type_ == ShadowPass::FORCED_FAIL) { GPU_storagebuf_bind(visibility_buf_, GPU_shader_get_ssbo(shader, "visibility_buf")); -- 2.30.2 From 737cb51f529e0709cd9fce9a4450ec8c6f0f243d Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Sun, 12 Feb 2023 20:17:41 -0500 Subject: [PATCH 023/182] Fix: Missing const specifier for curve field input Mistake in 000e722c7d99320ce51d, which probably made the viewer node auto-domain detection behave differently when the special case was used. --- .../geometry/nodes/node_geo_curve_topology_points_of_curve.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_topology_points_of_curve.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_topology_points_of_curve.cc index 086a68401ed0..b8138ef67693 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_topology_points_of_curve.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_topology_points_of_curve.cc @@ -219,7 +219,7 @@ class CurveStartPointInput final : public bke::CurvesFieldInput { return false; } - std::optional preferred_domain(const bke::CurvesGeometry & /*curves*/) + std::optional preferred_domain(const bke::CurvesGeometry & /*curves*/) const final { return ATTR_DOMAIN_CURVE; } -- 2.30.2 From 0ffbe499780ed12ff648bfc22becd2704d976d8c Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Sun, 12 Feb 2023 22:27:07 -0500 Subject: [PATCH 024/182] Cleanup: Quiet unused variable warning Also name another argument for consistency. --- intern/cycles/scene/shader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intern/cycles/scene/shader.cpp b/intern/cycles/scene/shader.cpp index f0faa91b4be1..dfd86f82bb69 100644 --- a/intern/cycles/scene/shader.cpp +++ b/intern/cycles/scene/shader.cpp @@ -573,7 +573,7 @@ void ShaderManager::device_update_common(Device * /*device*/, kfilm->is_rec709 = is_rec709; } -void ShaderManager::device_free_common(Device *, DeviceScene *dscene, Scene *scene) +void ShaderManager::device_free_common(Device * /*device*/, DeviceScene *dscene, Scene * /*scene*/) { dscene->shaders.free(); } -- 2.30.2 From 1caa70dad97ebb796d0edc253e389135c4bbeae3 Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Mon, 13 Feb 2023 08:34:19 +0100 Subject: [PATCH 025/182] GPU: Use same read back API as SSBOs The GPU module has 2 different styles when reading back data from GPU buffers. The SSBOs used a memcpy to copy the data to a pre-allocated buffer. IndexBuf/VertBuf gave back a driver/platform controlled pointer to the memory. Readback is done for test cases returning mapped pointers is not safe. For this reason we settled on using the same approach as the SSBO. Copy the data to a caller pre-allocated buffer. Reason why this API is currently changed is that the Vulkan API is more strict on mapping/unmapping buffers that can lead to potential issues down the road. Pull Request #104571 --- source/blender/gpu/GPU_index_buffer.h | 8 +++----- source/blender/gpu/GPU_vertex_buffer.h | 9 +++------ source/blender/gpu/intern/gpu_index_buffer.cc | 17 ++--------------- .../gpu/intern/gpu_index_buffer_private.hh | 3 +-- source/blender/gpu/intern/gpu_vertex_buffer.cc | 9 ++------- .../gpu/intern/gpu_vertex_buffer_private.hh | 3 +-- source/blender/gpu/metal/mtl_index_buffer.hh | 2 +- source/blender/gpu/metal/mtl_index_buffer.mm | 9 +++------ source/blender/gpu/metal/mtl_vertex_buffer.hh | 3 +-- source/blender/gpu/metal/mtl_vertex_buffer.mm | 15 +++------------ source/blender/gpu/opengl/gl_index_buffer.cc | 8 ++++---- source/blender/gpu/opengl/gl_index_buffer.hh | 2 +- source/blender/gpu/opengl/gl_vertex_buffer.cc | 12 +++--------- source/blender/gpu/opengl/gl_vertex_buffer.hh | 3 +-- source/blender/gpu/tests/gpu_shader_test.cc | 8 ++++---- source/blender/gpu/vulkan/vk_index_buffer.cc | 3 +-- source/blender/gpu/vulkan/vk_index_buffer.hh | 2 +- source/blender/gpu/vulkan/vk_vertex_buffer.cc | 8 +------- source/blender/gpu/vulkan/vk_vertex_buffer.hh | 3 +-- 19 files changed, 37 insertions(+), 90 deletions(-) diff --git a/source/blender/gpu/GPU_index_buffer.h b/source/blender/gpu/GPU_index_buffer.h index e5fefda527db..9d152b01c8b0 100644 --- a/source/blender/gpu/GPU_index_buffer.h +++ b/source/blender/gpu/GPU_index_buffer.h @@ -89,13 +89,11 @@ void GPU_indexbuf_create_subrange_in_place(GPUIndexBuf *elem, uint length); /** - * (Download and) return a pointer containing the data of an index buffer. + * (Download and) fill data with the contents of the index buffer. * - * Note that the returned pointer is still owned by the driver. To get an - * local copy, use `GPU_indexbuf_unmap` after calling `GPU_indexbuf_read`. + * NOTE: caller is responsible to reserve enough memory. */ -const uint32_t *GPU_indexbuf_read(GPUIndexBuf *elem); -uint32_t *GPU_indexbuf_unmap(const GPUIndexBuf *elem, const uint32_t *mapped_buffer); +void GPU_indexbuf_read(GPUIndexBuf *elem, uint32_t *data); void GPU_indexbuf_discard(GPUIndexBuf *elem); diff --git a/source/blender/gpu/GPU_vertex_buffer.h b/source/blender/gpu/GPU_vertex_buffer.h index 979b7cc06cf0..5fcb97a2a6b6 100644 --- a/source/blender/gpu/GPU_vertex_buffer.h +++ b/source/blender/gpu/GPU_vertex_buffer.h @@ -64,13 +64,10 @@ GPUVertBuf *GPU_vertbuf_create_with_format_ex(const GPUVertFormat *, GPUUsageTyp GPU_vertbuf_create_with_format_ex(format, GPU_USAGE_STATIC) /** - * (Download and) return a pointer containing the data of a vertex buffer. - * - * Note that the returned pointer is still owned by the driver. To get an - * local copy, use `GPU_vertbuf_unmap` after calling `GPU_vertbuf_read`. + * (Download and) fill data with the data from the vertex buffer. + * NOTE: caller is responsible to reserve enough memory of the data parameter. */ -const void *GPU_vertbuf_read(GPUVertBuf *verts); -void *GPU_vertbuf_unmap(const GPUVertBuf *verts, const void *mapped_data); +void GPU_vertbuf_read(GPUVertBuf *verts, void *data); /** Same as discard but does not free. */ void GPU_vertbuf_clear(GPUVertBuf *verts); void GPU_vertbuf_discard(GPUVertBuf *); diff --git a/source/blender/gpu/intern/gpu_index_buffer.cc b/source/blender/gpu/intern/gpu_index_buffer.cc index 99e47f5452ab..c5fd6ff22062 100644 --- a/source/blender/gpu/intern/gpu_index_buffer.cc +++ b/source/blender/gpu/intern/gpu_index_buffer.cc @@ -399,14 +399,6 @@ void IndexBuf::squeeze_indices_short(uint min_idx, } } -uint32_t *IndexBuf::unmap(const uint32_t *mapped_memory) const -{ - size_t size = size_get(); - uint32_t *result = static_cast(MEM_mallocN(size, __func__)); - memcpy(result, mapped_memory, size); - return result; -} - } // namespace blender::gpu /** \} */ @@ -456,14 +448,9 @@ void GPU_indexbuf_create_subrange_in_place(GPUIndexBuf *elem, unwrap(elem)->init_subrange(unwrap(elem_src), start, length); } -const uint32_t *GPU_indexbuf_read(GPUIndexBuf *elem) +void GPU_indexbuf_read(GPUIndexBuf *elem, uint32_t *data) { - return unwrap(elem)->read(); -} - -uint32_t *GPU_indexbuf_unmap(const GPUIndexBuf *elem, const uint32_t *mapped_buffer) -{ - return unwrap(elem)->unmap(mapped_buffer); + return unwrap(elem)->read(data); } void GPU_indexbuf_discard(GPUIndexBuf *elem) diff --git a/source/blender/gpu/intern/gpu_index_buffer_private.hh b/source/blender/gpu/intern/gpu_index_buffer_private.hh index cb55045d7758..8689d805f237 100644 --- a/source/blender/gpu/intern/gpu_index_buffer_private.hh +++ b/source/blender/gpu/intern/gpu_index_buffer_private.hh @@ -98,8 +98,7 @@ class IndexBuf { virtual void bind_as_ssbo(uint binding) = 0; - virtual const uint32_t *read() const = 0; - uint32_t *unmap(const uint32_t *mapped_memory) const; + virtual void read(uint32_t *data) const = 0; virtual void update_sub(uint start, uint len, const void *data) = 0; diff --git a/source/blender/gpu/intern/gpu_vertex_buffer.cc b/source/blender/gpu/intern/gpu_vertex_buffer.cc index abf5d2dc4c02..d24dd6af95b6 100644 --- a/source/blender/gpu/intern/gpu_vertex_buffer.cc +++ b/source/blender/gpu/intern/gpu_vertex_buffer.cc @@ -153,14 +153,9 @@ GPUVertBuf *GPU_vertbuf_duplicate(GPUVertBuf *verts_) return wrap(unwrap(verts_)->duplicate()); } -const void *GPU_vertbuf_read(GPUVertBuf *verts) +void GPU_vertbuf_read(GPUVertBuf *verts, void *data) { - return unwrap(verts)->read(); -} - -void *GPU_vertbuf_unmap(const GPUVertBuf *verts, const void *mapped_data) -{ - return unwrap(verts)->unmap(mapped_data); + unwrap(verts)->read(data); } void GPU_vertbuf_clear(GPUVertBuf *verts) diff --git a/source/blender/gpu/intern/gpu_vertex_buffer_private.hh b/source/blender/gpu/intern/gpu_vertex_buffer_private.hh index f20f6caf6de5..be8e4f0c1859 100644 --- a/source/blender/gpu/intern/gpu_vertex_buffer_private.hh +++ b/source/blender/gpu/intern/gpu_vertex_buffer_private.hh @@ -94,8 +94,7 @@ class VertBuf { } virtual void update_sub(uint start, uint len, const void *data) = 0; - virtual const void *read() const = 0; - virtual void *unmap(const void *mapped_data) const = 0; + virtual void read(void *data) const = 0; protected: virtual void acquire_data() = 0; diff --git a/source/blender/gpu/metal/mtl_index_buffer.hh b/source/blender/gpu/metal/mtl_index_buffer.hh index 702aa7f27d61..dd828598110a 100644 --- a/source/blender/gpu/metal/mtl_index_buffer.hh +++ b/source/blender/gpu/metal/mtl_index_buffer.hh @@ -48,7 +48,7 @@ class MTLIndexBuf : public IndexBuf { ~MTLIndexBuf(); void bind_as_ssbo(uint32_t binding) override; - const uint32_t *read() const override; + void read(uint32_t *data) const override; void upload_data() override; void update_sub(uint32_t start, uint32_t len, const void *data) override; diff --git a/source/blender/gpu/metal/mtl_index_buffer.mm b/source/blender/gpu/metal/mtl_index_buffer.mm index cf921e43a4b7..6a912983492c 100644 --- a/source/blender/gpu/metal/mtl_index_buffer.mm +++ b/source/blender/gpu/metal/mtl_index_buffer.mm @@ -46,16 +46,13 @@ void MTLIndexBuf::bind_as_ssbo(uint32_t binding) MTL_LOG_WARNING("MTLIndexBuf::bind_as_ssbo not yet implemented!\n"); } -const uint32_t *MTLIndexBuf::read() const +void MTLIndexBuf::read(uint32_t *data) const { if (ibo_ != nullptr) { - - /* Return host pointer. */ - void *data = ibo_->get_host_ptr(); - return static_cast(data); + void *host_ptr = ibo_->get_host_ptr(); + memcpy(data, host_ptr, size_get()); } BLI_assert(false && "Index buffer not ready to be read."); - return nullptr; } void MTLIndexBuf::upload_data() diff --git a/source/blender/gpu/metal/mtl_vertex_buffer.hh b/source/blender/gpu/metal/mtl_vertex_buffer.hh index 54d2b7a86a3b..056e2062ab16 100644 --- a/source/blender/gpu/metal/mtl_vertex_buffer.hh +++ b/source/blender/gpu/metal/mtl_vertex_buffer.hh @@ -56,8 +56,7 @@ class MTLVertBuf : public VertBuf { void update_sub(uint start, uint len, const void *data) override; - const void *read() const override; - void *unmap(const void *mapped_data) const override; + void read(void *data) const override; void wrap_handle(uint64_t handle) override; diff --git a/source/blender/gpu/metal/mtl_vertex_buffer.mm b/source/blender/gpu/metal/mtl_vertex_buffer.mm index 919eb1e3267c..6114e1057c84 100644 --- a/source/blender/gpu/metal/mtl_vertex_buffer.mm +++ b/source/blender/gpu/metal/mtl_vertex_buffer.mm @@ -328,21 +328,12 @@ void MTLVertBuf::bind_as_texture(uint binding) GPU_texture_bind(buffer_texture_, binding); } -const void *MTLVertBuf::read() const +void MTLVertBuf::read(void *data) const { BLI_assert(vbo_ != nullptr); BLI_assert(usage_ != GPU_USAGE_DEVICE_ONLY); - void *return_ptr = vbo_->get_host_ptr(); - BLI_assert(return_ptr != nullptr); - - return return_ptr; -} - -void *MTLVertBuf::unmap(const void *mapped_data) const -{ - void *result = MEM_mallocN(alloc_size_, __func__); - memcpy(result, mapped_data, alloc_size_); - return result; + void *host_ptr = vbo_->get_host_ptr(); + memcpy(data, host_ptr, alloc_size_); } void MTLVertBuf::wrap_handle(uint64_t handle) diff --git a/source/blender/gpu/opengl/gl_index_buffer.cc b/source/blender/gpu/opengl/gl_index_buffer.cc index 566169182e30..2125583cd6b7 100644 --- a/source/blender/gpu/opengl/gl_index_buffer.cc +++ b/source/blender/gpu/opengl/gl_index_buffer.cc @@ -46,12 +46,12 @@ void GLIndexBuf::bind_as_ssbo(uint binding) glBindBufferBase(GL_SHADER_STORAGE_BUFFER, binding, ibo_id_); } -const uint32_t *GLIndexBuf::read() const +void GLIndexBuf::read(uint32_t *data) const { BLI_assert(is_active()); - void *data = glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_READ_ONLY); - uint32_t *result = static_cast(data); - return result; + void *buffer = glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_READ_ONLY); + memcpy(data, buffer, size_get()); + glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); } bool GLIndexBuf::is_active() const diff --git a/source/blender/gpu/opengl/gl_index_buffer.hh b/source/blender/gpu/opengl/gl_index_buffer.hh index 78159db764c3..eeb7aeeca884 100644 --- a/source/blender/gpu/opengl/gl_index_buffer.hh +++ b/source/blender/gpu/opengl/gl_index_buffer.hh @@ -29,7 +29,7 @@ class GLIndexBuf : public IndexBuf { void bind(); void bind_as_ssbo(uint binding) override; - const uint32_t *read() const override; + void read(uint32_t *data) const override; void *offset_ptr(uint additional_vertex_offset) const { diff --git a/source/blender/gpu/opengl/gl_vertex_buffer.cc b/source/blender/gpu/opengl/gl_vertex_buffer.cc index d186c2025b3f..3a22480e190d 100644 --- a/source/blender/gpu/opengl/gl_vertex_buffer.cc +++ b/source/blender/gpu/opengl/gl_vertex_buffer.cc @@ -125,18 +125,12 @@ void GLVertBuf::bind_as_texture(uint binding) GPU_texture_bind(buffer_texture_, binding); } -const void *GLVertBuf::read() const +void GLVertBuf::read(void *data) const { BLI_assert(is_active()); void *result = glMapBuffer(GL_ARRAY_BUFFER, GL_READ_ONLY); - return result; -} - -void *GLVertBuf::unmap(const void *mapped_data) const -{ - void *result = MEM_mallocN(vbo_size_, __func__); - memcpy(result, mapped_data, vbo_size_); - return result; + memcpy(data, result, size_used_get()); + glUnmapBuffer(GL_ARRAY_BUFFER); } void GLVertBuf::wrap_handle(uint64_t handle) diff --git a/source/blender/gpu/opengl/gl_vertex_buffer.hh b/source/blender/gpu/opengl/gl_vertex_buffer.hh index deb966961f26..5137781309ef 100644 --- a/source/blender/gpu/opengl/gl_vertex_buffer.hh +++ b/source/blender/gpu/opengl/gl_vertex_buffer.hh @@ -37,8 +37,7 @@ class GLVertBuf : public VertBuf { void update_sub(uint start, uint len, const void *data) override; - const void *read() const override; - void *unmap(const void *mapped_data) const override; + void read(void *data) const override; void wrap_handle(uint64_t handle) override; diff --git a/source/blender/gpu/tests/gpu_shader_test.cc b/source/blender/gpu/tests/gpu_shader_test.cc index 2125c67108e9..c07fda843c7a 100644 --- a/source/blender/gpu/tests/gpu_shader_test.cc +++ b/source/blender/gpu/tests/gpu_shader_test.cc @@ -151,8 +151,8 @@ static void test_gpu_shader_compute_vbo() GPU_memory_barrier(GPU_BARRIER_SHADER_STORAGE); /* Download the vertex buffer. */ - const float *data = static_cast(GPU_vertbuf_read(vbo)); - ASSERT_NE(data, nullptr); + float data[SIZE * 4]; + GPU_vertbuf_read(vbo, data); for (int index = 0; index < SIZE; index++) { float expected_value = index; EXPECT_FLOAT_EQ(data[index * 4 + 0], expected_value); @@ -195,8 +195,8 @@ static void test_gpu_shader_compute_ibo() GPU_memory_barrier(GPU_BARRIER_SHADER_STORAGE); /* Download the index buffer. */ - const uint32_t *data = GPU_indexbuf_read(ibo); - ASSERT_NE(data, nullptr); + uint32_t data[SIZE]; + GPU_indexbuf_read(ibo, data); for (int index = 0; index < SIZE; index++) { uint32_t expected = index; EXPECT_EQ(data[index], expected); diff --git a/source/blender/gpu/vulkan/vk_index_buffer.cc b/source/blender/gpu/vulkan/vk_index_buffer.cc index ca3ce48dc64e..70387bd0fceb 100644 --- a/source/blender/gpu/vulkan/vk_index_buffer.cc +++ b/source/blender/gpu/vulkan/vk_index_buffer.cc @@ -17,9 +17,8 @@ void VKIndexBuffer::bind_as_ssbo(uint /*binding*/) { } -const uint32_t *VKIndexBuffer::read() const +void VKIndexBuffer::read(uint32_t * /*data*/) const { - return 0; } void VKIndexBuffer::update_sub(uint /*start*/, uint /*len*/, const void * /*data*/) diff --git a/source/blender/gpu/vulkan/vk_index_buffer.hh b/source/blender/gpu/vulkan/vk_index_buffer.hh index 94a584086e01..7586b49ff212 100644 --- a/source/blender/gpu/vulkan/vk_index_buffer.hh +++ b/source/blender/gpu/vulkan/vk_index_buffer.hh @@ -17,7 +17,7 @@ class VKIndexBuffer : public IndexBuf { void bind_as_ssbo(uint binding) override; - const uint32_t *read() const override; + void read(uint32_t *data) const override; void update_sub(uint start, uint len, const void *data) override; diff --git a/source/blender/gpu/vulkan/vk_vertex_buffer.cc b/source/blender/gpu/vulkan/vk_vertex_buffer.cc index 3931c9274992..f2326ddb1347 100644 --- a/source/blender/gpu/vulkan/vk_vertex_buffer.cc +++ b/source/blender/gpu/vulkan/vk_vertex_buffer.cc @@ -32,14 +32,8 @@ void VKVertexBuffer::update_sub(uint /*start*/, uint /*len*/, const void * /*dat { } -const void *VKVertexBuffer::read() const +void VKVertexBuffer::read(void * /*data*/) const { - return nullptr; -} - -void *VKVertexBuffer::unmap(const void * /*mapped_data*/) const -{ - return nullptr; } void VKVertexBuffer::acquire_data() diff --git a/source/blender/gpu/vulkan/vk_vertex_buffer.hh b/source/blender/gpu/vulkan/vk_vertex_buffer.hh index e42407871383..ebc3e105553a 100644 --- a/source/blender/gpu/vulkan/vk_vertex_buffer.hh +++ b/source/blender/gpu/vulkan/vk_vertex_buffer.hh @@ -20,8 +20,7 @@ class VKVertexBuffer : public VertBuf { void wrap_handle(uint64_t handle) override; void update_sub(uint start, uint len, const void *data) override; - const void *read() const override; - void *unmap(const void *mapped_data) const override; + void read(void *data) const override; protected: void acquire_data() override; -- 2.30.2 From 25c641a8f696bc99795b2b433a62cc1441981c4f Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Mon, 13 Feb 2023 08:37:35 +0100 Subject: [PATCH 026/182] Vulkan: Use guardedalloc for driver allocations. Vulkan has a pluggable memory allocation feature, which allows internal driver allocations to be done by the client application provided allocator. Vulkan uses this for more client application allocations done inside the driver, but can also do it for more internal oriented allocations. VK_ALLOCATION_CALLBACKS initializes allocation callbacks for host allocations. The macro creates a local static variable with the name vk_allocation_callbacks that can be passed to vulkan API functions that expect const VkAllocationCallbacks *pAllocator. When WITH_VULKAN_GUARDEDALLOC=Off the memory allocation implemented in the vulkan device driver is used for both internal and application oriented memory operations. For now this would help during the development of Vulkan backend to detect hidden memory leaks that are hidden inside the driver part of the stack. In a later stage we need to measure the overhead and if this should become the default behavior. Pull Request #104434 --- CMakeLists.txt | 2 + source/blender/gpu/CMakeLists.txt | 6 +++ source/blender/gpu/vulkan/vk_memory.cc | 45 ++++++++++++++++++ source/blender/gpu/vulkan/vk_memory.hh | 64 ++++++++++++++++++++++++++ source/blender/gpu/vulkan/vk_shader.cc | 15 ++++-- 5 files changed, 127 insertions(+), 5 deletions(-) create mode 100644 source/blender/gpu/vulkan/vk_memory.cc create mode 100644 source/blender/gpu/vulkan/vk_memory.hh diff --git a/CMakeLists.txt b/CMakeLists.txt index 1445b0a87e25..c6de0fb001d2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -625,8 +625,10 @@ mark_as_advanced( # Vulkan option(WITH_VULKAN_BACKEND "Enable Vulkan as graphics backend (only for development)" OFF) +option(WITH_VULKAN_GUARDEDALLOC "Use guardedalloc for host allocations done inside Vulkan (development option)" OFF) mark_as_advanced( WITH_VULKAN_BACKEND + WITH_VULKAN_GUARDEDALLOC ) # Metal diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index 4967d8984c5f..623dd8997177 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -195,6 +195,7 @@ set(VULKAN_SRC vulkan/vk_fence.cc vulkan/vk_framebuffer.cc vulkan/vk_index_buffer.cc + vulkan/vk_memory.cc vulkan/vk_pixel_buffer.cc vulkan/vk_query.cc vulkan/vk_shader.cc @@ -211,6 +212,7 @@ set(VULKAN_SRC vulkan/vk_fence.hh vulkan/vk_framebuffer.hh vulkan/vk_index_buffer.hh + vulkan/vk_memory.hh vulkan/vk_pixel_buffer.hh vulkan/vk_query.hh vulkan/vk_shader.hh @@ -303,6 +305,10 @@ if(WITH_VULKAN_BACKEND) add_definitions(-DWITH_VULKAN_BACKEND) endif() +if(WITH_VULKAN_GUARDEDALLOC) + add_definitions(-DWITH_VULKAN_GUARDEDALLOC) +endif() + set(MSL_SRC shaders/metal/mtl_shader_defines.msl shaders/metal/mtl_shader_common.msl diff --git a/source/blender/gpu/vulkan/vk_memory.cc b/source/blender/gpu/vulkan/vk_memory.cc new file mode 100644 index 000000000000..e02ca0b014ff --- /dev/null +++ b/source/blender/gpu/vulkan/vk_memory.cc @@ -0,0 +1,45 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later + * Copyright 2023 Blender Foundation. All rights reserved. */ + +/** \file + * \ingroup gpu + */ + +#include "vk_memory.hh" + +#include "MEM_guardedalloc.h" + +namespace blender::gpu { + +#ifdef WITH_VULKAN_GUARDEDALLOC + +void *vk_memory_allocation(void *user_data, + size_t size, + size_t alignment, + VkSystemAllocationScope /*scope*/) +{ + const char *name = static_cast(const_cast(user_data)); + if (alignment) { + return MEM_mallocN_aligned(size, alignment, name); + } + return MEM_mallocN(size, name); +} + +void *vk_memory_reallocation(void *user_data, + void *original, + size_t size, + size_t /*alignment*/, + VkSystemAllocationScope /*scope*/) +{ + const char *name = static_cast(const_cast(user_data)); + return MEM_reallocN_id(original, size, name); +} + +void vk_memory_free(void * /*user_data*/, void *memory) +{ + MEM_freeN(memory); +} + +#endif + +} // namespace blender::gpu diff --git a/source/blender/gpu/vulkan/vk_memory.hh b/source/blender/gpu/vulkan/vk_memory.hh new file mode 100644 index 000000000000..91802cb81933 --- /dev/null +++ b/source/blender/gpu/vulkan/vk_memory.hh @@ -0,0 +1,64 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later + * Copyright 2023 Blender Foundation. All rights reserved. */ + +/** \file + * \ingroup gpu + */ + +#pragma once + +#ifdef __APPLE__ +# include +#else +# include +#endif + +namespace blender::gpu { + +/** + * `VK_ALLOCATION_CALLBACKS` initializes allocation callbacks for host allocations. + * The macro creates a local static variable with the name `vk_allocation_callbacks` + * that can be passed to vulkan API functions that expect + * `const VkAllocationCallbacks *pAllocator`. + * + * When Blender is compiled with `WITH_VULKAN_GUARDEDALLOC` this will use + * `MEM_guardedalloc` for host allocations that the driver does on behalf + * of blender. More internal allocations are still being allocated via the + * implemention inside the vulkan device driver. + * + * When `WITH_VULKAN_GUARDEDALLOC=Off` the memory allocation implemented + * in the vulkan device driver is used for both internal and application + * focussed memory operations. + */ + +#ifdef WITH_VULKAN_GUARDEDALLOC +void *vk_memory_allocation(void *user_data, + size_t size, + size_t alignment, + VkSystemAllocationScope scope); +void *vk_memory_reallocation( + void *user_data, void *original, size_t size, size_t alignment, VkSystemAllocationScope scope); +void vk_memory_free(void *user_data, void *memory); + +constexpr VkAllocationCallbacks vk_allocation_callbacks_init(const char *name) +{ + VkAllocationCallbacks callbacks = {}; + callbacks.pUserData = const_cast(name); + callbacks.pfnAllocation = vk_memory_allocation; + callbacks.pfnReallocation = vk_memory_reallocation; + callbacks.pfnFree = vk_memory_free; + callbacks.pfnInternalAllocation = nullptr; + callbacks.pfnInternalFree = nullptr; + return callbacks; +} + +# define VK_ALLOCATION_CALLBACKS \ + static constexpr const VkAllocationCallbacks vk_allocation_callbacks_ = \ + vk_allocation_callbacks_init(__func__); \ + static constexpr const VkAllocationCallbacks *vk_allocation_callbacks = &vk_allocation_callbacks_; +#else +# define VK_ALLOCATION_CALLBACKS \ + static constexpr const VkAllocationCallbacks *vk_allocation_callbacks = nullptr; +#endif + +} // namespace blender::gpu diff --git a/source/blender/gpu/vulkan/vk_shader.cc b/source/blender/gpu/vulkan/vk_shader.cc index 17c06fb42e69..3f145bd47632 100644 --- a/source/blender/gpu/vulkan/vk_shader.cc +++ b/source/blender/gpu/vulkan/vk_shader.cc @@ -8,6 +8,7 @@ #include "vk_shader.hh" #include "vk_backend.hh" +#include "vk_memory.hh" #include "vk_shader_log.hh" #include "BLI_string_utils.h" @@ -559,6 +560,8 @@ Vector VKShader::compile_glsl_to_spirv(Span sources, void VKShader::build_shader_module(Span spirv_module, VkShaderModule *r_shader_module) { + VK_ALLOCATION_CALLBACKS; + VkShaderModuleCreateInfo create_info = {}; create_info.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; create_info.codeSize = spirv_module.size() * sizeof(uint32_t); @@ -567,7 +570,7 @@ void VKShader::build_shader_module(Span spirv_module, VkShaderModule * VKContext &context = *static_cast(VKContext::get()); VkResult result = vkCreateShaderModule( - context.device_get(), &create_info, nullptr, r_shader_module); + context.device_get(), &create_info, vk_allocation_callbacks, r_shader_module); if (result != VK_SUCCESS) { compilation_failed_ = true; *r_shader_module = VK_NULL_HANDLE; @@ -581,21 +584,23 @@ VKShader::VKShader(const char *name) : Shader(name) VKShader::~VKShader() { + VK_ALLOCATION_CALLBACKS + VkDevice device = context_->device_get(); if (vertex_module_ != VK_NULL_HANDLE) { - vkDestroyShaderModule(device, vertex_module_, nullptr); + vkDestroyShaderModule(device, vertex_module_, vk_allocation_callbacks); vertex_module_ = VK_NULL_HANDLE; } if (geometry_module_ != VK_NULL_HANDLE) { - vkDestroyShaderModule(device, geometry_module_, nullptr); + vkDestroyShaderModule(device, geometry_module_, vk_allocation_callbacks); geometry_module_ = VK_NULL_HANDLE; } if (fragment_module_ != VK_NULL_HANDLE) { - vkDestroyShaderModule(device, fragment_module_, nullptr); + vkDestroyShaderModule(device, fragment_module_, vk_allocation_callbacks); fragment_module_ = VK_NULL_HANDLE; } if (compute_module_ != VK_NULL_HANDLE) { - vkDestroyShaderModule(device, compute_module_, nullptr); + vkDestroyShaderModule(device, compute_module_, vk_allocation_callbacks); compute_module_ = VK_NULL_HANDLE; } } -- 2.30.2 From 768db16409b66a7a087279516096045aa083bf53 Mon Sep 17 00:00:00 2001 From: Leon Schittek Date: Mon, 13 Feb 2023 09:03:00 +0100 Subject: [PATCH 027/182] Fix #104341: Handle edge case in Curve to Mesh node Don't create caps when using cyclic profile splines with two or fewer points. This case wasn't handled, yet, leading to invalid meshes or crashes. Co-authored-by: Leon Schittek Pull Request #104594 --- source/blender/blenkernel/intern/curve_to_mesh_convert.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/blenkernel/intern/curve_to_mesh_convert.cc b/source/blender/blenkernel/intern/curve_to_mesh_convert.cc index d49bc0435685..ccecfadb474d 100644 --- a/source/blender/blenkernel/intern/curve_to_mesh_convert.cc +++ b/source/blender/blenkernel/intern/curve_to_mesh_convert.cc @@ -120,7 +120,7 @@ static void fill_mesh_topology(const int vert_offset, } } - const bool has_caps = fill_caps && !main_cyclic && profile_cyclic; + const bool has_caps = fill_caps && !main_cyclic && profile_cyclic && profile_point_num > 2; if (has_caps) { const int poly_num = main_segment_num * profile_segment_num; const int cap_loop_offset = loop_offset + poly_num * 4; @@ -271,7 +271,7 @@ static ResultOffsets calculate_result_offsets(const CurvesInfo &info, const bool const int profile_point_num = profile_offsets.size(i_profile); const int profile_segment_num = curves::segments_num(profile_point_num, profile_cyclic); - const bool has_caps = fill_caps && !main_cyclic && profile_cyclic; + const bool has_caps = fill_caps && !main_cyclic && profile_cyclic && profile_point_num > 2; const int tube_face_num = main_segment_num * profile_segment_num; vert_offset += main_point_num * profile_point_num; -- 2.30.2 From b24661ff3e2a4465ef826babefbe38ca62061f33 Mon Sep 17 00:00:00 2001 From: Damien Picard Date: Mon, 13 Feb 2023 09:15:34 +0100 Subject: [PATCH 028/182] UI: add camera passepartout color to theme Currently the passepartout color is hardcoded to black. While a sensible default for cinema, it may make less sense for other media, whether video, print, web, etc. It greatly affects viewing conditions of the image and should be user selectable, much like painting programs allow. Pull Request #104486 --- release/datafiles/userdef/userdef_default_theme.c | 1 + source/blender/editors/include/UI_resources.h | 1 + source/blender/editors/interface/resources.cc | 3 +++ source/blender/editors/space_view3d/view3d_draw.cc | 2 +- source/blender/makesdna/DNA_userdef_types.h | 3 ++- source/blender/makesrna/intern/rna_userdef.c | 5 +++++ 6 files changed, 13 insertions(+), 2 deletions(-) diff --git a/release/datafiles/userdef/userdef_default_theme.c b/release/datafiles/userdef/userdef_default_theme.c index 04ad04d48128..7d0cf9b031cf 100644 --- a/release/datafiles/userdef/userdef_default_theme.c +++ b/release/datafiles/userdef/userdef_default_theme.c @@ -370,6 +370,7 @@ const bTheme U_theme_default = { .clipping_border_3d = RGBA(0x3f3f3fff), .bundle_solid = RGBA(0xc8c8c8ff), .camera_path = RGBA(0x000000ff), + .camera_passepartout = RGBA(0x000000), .gp_vertex_size = 3, .gp_vertex = RGBA(0x000000ff), .gp_vertex_select = RGBA(0xff8500ff), diff --git a/source/blender/editors/include/UI_resources.h b/source/blender/editors/include/UI_resources.h index 9a46728097c8..9023f1662abb 100644 --- a/source/blender/editors/include/UI_resources.h +++ b/source/blender/editors/include/UI_resources.h @@ -236,6 +236,7 @@ typedef enum ThemeColorID { TH_PATH_KEYFRAME_BEFORE, TH_PATH_KEYFRAME_AFTER, TH_CAMERA_PATH, + TH_CAMERA_PASSEPARTOUT, TH_LOCK_MARKER, TH_STITCH_PREVIEW_FACE, diff --git a/source/blender/editors/interface/resources.cc b/source/blender/editors/interface/resources.cc index 606f9d5a11f7..5982f8ad1c93 100644 --- a/source/blender/editors/interface/resources.cc +++ b/source/blender/editors/interface/resources.cc @@ -803,6 +803,9 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid) case TH_CAMERA_PATH: cp = ts->camera_path; break; + case TH_CAMERA_PASSEPARTOUT: + cp = ts->camera_passepartout; + break; case TH_LOCK_MARKER: cp = ts->lock_marker; break; diff --git a/source/blender/editors/space_view3d/view3d_draw.cc b/source/blender/editors/space_view3d/view3d_draw.cc index 7146f5e1f670..7018fa16fe6b 100644 --- a/source/blender/editors/space_view3d/view3d_draw.cc +++ b/source/blender/editors/space_view3d/view3d_draw.cc @@ -585,7 +585,7 @@ static void drawviewborder(Scene *scene, Depsgraph *depsgraph, ARegion *region, alpha = ca->passepartalpha; } - immUniformColor4f(0.0f, 0.0f, 0.0f, alpha); + immUniformThemeColorAlpha(TH_CAMERA_PASSEPARTOUT, alpha); if (x1i > 0.0f) { immRectf(shdr_pos, 0.0f, winy, x1i, 0.0f); diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index b48c58ee7527..bdf2210deae3 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -354,7 +354,8 @@ typedef struct ThemeSpace { unsigned char path_before[4], path_after[4]; unsigned char path_keyframe_before[4], path_keyframe_after[4]; unsigned char camera_path[4]; - unsigned char _pad1[6]; + unsigned char camera_passepartout[4]; + unsigned char _pad1[2]; unsigned char gp_vertex_size; unsigned char gp_vertex[4], gp_vertex_select[4]; diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 3015c34f2f35..1b10a924b128 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -2345,6 +2345,11 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Camera Path", ""); RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); + prop = RNA_def_property(srna, "camera_passepartout", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Camera Passepartout", ""); + RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); + prop = RNA_def_property(srna, "skin_root", PROP_FLOAT, PROP_COLOR_GAMMA); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Skin Root", ""); -- 2.30.2 From 6c4908e82c614e14642dfbddba1148fba5d77d11 Mon Sep 17 00:00:00 2001 From: Leon Schittek Date: Mon, 13 Feb 2023 10:43:36 +0100 Subject: [PATCH 029/182] Fix #80307: Underline shortcut not working in enum context menus The buttons of enum context menus are of type `UI_BUT_ROW`. They are part of the set of buttons we create underline shortcuts for in `ui_menu_block_set_keyaccels`. But since they weren't handled in `ui_handle_button_activate_by_type`, pressing the underline shortcuts didn't do anyting in those cases. Co-authored-by: Leon Schittek Co-authored-by: Brecht Van Lommel Pull Request #104433 --- source/blender/editors/interface/interface_handlers.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/interface/interface_handlers.cc b/source/blender/editors/interface/interface_handlers.cc index 8649a65057b0..9a9c0d841604 100644 --- a/source/blender/editors/interface/interface_handlers.cc +++ b/source/blender/editors/interface/interface_handlers.cc @@ -9039,7 +9039,7 @@ static void ui_handle_button_activate(bContext *C, */ static bool ui_handle_button_activate_by_type(bContext *C, ARegion *region, uiBut *but) { - if (but->type == UI_BTYPE_BUT_MENU) { + if (ELEM(but->type, UI_BTYPE_BUT_MENU, UI_BTYPE_ROW)) { /* mainly for operator buttons */ ui_handle_button_activate(C, region, but, BUTTON_ACTIVATE_APPLY); } -- 2.30.2 From 19515022d8c1210301cc5d25087da25e807faaa0 Mon Sep 17 00:00:00 2001 From: Weizhen Huang Date: Mon, 13 Feb 2023 10:48:31 +0100 Subject: [PATCH 030/182] Gizmo: make cage gizmo follow the cursor exactly when scaling Ref #104280 The scaling of area light / spot light blend was wrong because it is calculated for pivot at the edges. The new implementation in theory works for all `abs(pivot) <= 0.5f`, although we only have -0.5, 0, and 0.5. - Axis constraint for box cage was only applied when there is translate flag, now the same logic is applied regardless of the translate flag, this means when dragging the edge, the scaling in the other axis stays the same; when dragging the corners, it applies free-form scaling. - Due to the existence of margin, `data->orig_mouse` does not lie exactly on the boundary. Using that value to compute the scaling causes the error to accumulate over distance. The new implementation uses the original dimension of the object instead, and only uses `data->orig_mouse` to determine the side of the original cursor relative to the pivot. - For circular gizmo with unsigned scaling, the gizmo only follow the cursor exactly when the cursor stays in the original quadrant, otherwise it's hard to handle the logic when we should clamp the scaling. --- .../gizmo_library/gizmo_types/cage2d_gizmo.c | 76 +++++++++++-------- .../gizmo_library/gizmo_types/cage3d_gizmo.c | 50 ++++++------ 2 files changed, 69 insertions(+), 57 deletions(-) diff --git a/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c index 55f7319b2f0b..cc75d83b923c 100644 --- a/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c +++ b/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c @@ -959,55 +959,60 @@ static int gizmo_cage2d_invoke(bContext *C, wmGizmo *gz, const wmEvent *event) return OPERATOR_RUNNING_MODAL; } -static void gizmo_rect_pivot_from_scale_part(int part, float r_pt[2], bool r_constrain_axis[2]) +static void gizmo_constrain_from_scale_part(int part, bool r_constrain_axis[2]) +{ + r_constrain_axis[0] = (part > ED_GIZMO_CAGE2D_PART_SCALE_MAX_X && + part < ED_GIZMO_CAGE2D_PART_SCALE_MIN_X_MIN_Y) ? + true : + false; + r_constrain_axis[1] = (part > ED_GIZMO_CAGE2D_PART_SCALE && + part < ED_GIZMO_CAGE2D_PART_SCALE_MIN_Y) ? + true : + false; +} + +static void gizmo_pivot_from_scale_part(int part, float r_pt[2]) { - bool x = true, y = true; switch (part) { + case ED_GIZMO_CAGE2D_PART_SCALE: { + ARRAY_SET_ITEMS(r_pt, 0.0, 0.0); + break; + } case ED_GIZMO_CAGE2D_PART_SCALE_MIN_X: { ARRAY_SET_ITEMS(r_pt, 0.5, 0.0); - x = false; break; } case ED_GIZMO_CAGE2D_PART_SCALE_MAX_X: { ARRAY_SET_ITEMS(r_pt, -0.5, 0.0); - x = false; break; } case ED_GIZMO_CAGE2D_PART_SCALE_MIN_Y: { ARRAY_SET_ITEMS(r_pt, 0.0, 0.5); - y = false; break; } case ED_GIZMO_CAGE2D_PART_SCALE_MAX_Y: { ARRAY_SET_ITEMS(r_pt, 0.0, -0.5); - y = false; break; } case ED_GIZMO_CAGE2D_PART_SCALE_MIN_X_MIN_Y: { ARRAY_SET_ITEMS(r_pt, 0.5, 0.5); - x = y = false; break; } case ED_GIZMO_CAGE2D_PART_SCALE_MIN_X_MAX_Y: { ARRAY_SET_ITEMS(r_pt, 0.5, -0.5); - x = y = false; break; } case ED_GIZMO_CAGE2D_PART_SCALE_MAX_X_MIN_Y: { ARRAY_SET_ITEMS(r_pt, -0.5, 0.5); - x = y = false; break; } case ED_GIZMO_CAGE2D_PART_SCALE_MAX_X_MAX_Y: { ARRAY_SET_ITEMS(r_pt, -0.5, -0.5); - x = y = false; break; } default: BLI_assert(0); } - r_constrain_axis[0] = x; - r_constrain_axis[1] = y; } static int gizmo_cage2d_modal(bContext *C, @@ -1105,46 +1110,55 @@ static int gizmo_cage2d_modal(bContext *C, else { /* scale */ copy_m4_m4(gz->matrix_offset, data->orig_matrix_offset); - float pivot[2]; - bool constrain_axis[2] = {false}; + const int draw_style = RNA_enum_get(gz->ptr, "draw_style"); + float pivot[2]; if (transform_flag & ED_GIZMO_CAGE_XFORM_FLAG_TRANSLATE) { - gizmo_rect_pivot_from_scale_part(gz->highlight_part, pivot, constrain_axis); + gizmo_pivot_from_scale_part(gz->highlight_part, pivot); } else { zero_v2(pivot); } - /* Cursor deltas scaled to (-0.5..0.5). */ - float delta_orig[2], delta_curr[2]; - for (int i = 0; i < 2; i++) { - delta_orig[i] = ((data->orig_mouse[i] - data->orig_matrix_offset[3][i]) / dims[i]) - - pivot[i]; - delta_curr[i] = ((point_local[i] - data->orig_matrix_offset[3][i]) / dims[i]) - pivot[i]; - } + bool constrain_axis[2] = {false}; + gizmo_constrain_from_scale_part(gz->highlight_part, constrain_axis); float scale[2] = {1.0f, 1.0f}; for (int i = 0; i < 2; i++) { if (constrain_axis[i] == false) { - if (delta_orig[i] < 0.0f) { - delta_orig[i] *= -1.0f; - delta_curr[i] *= -1.0f; - } - const int sign = signum_i(scale[i]); - - scale[i] = 1.0f + ((delta_curr[i] - delta_orig[i]) / len_v3(data->orig_matrix_offset[i])); + /* Original cursor position relative to pivot, remapped to [-1, 1] */ + const float delta_orig = (data->orig_mouse[i] - data->orig_matrix_offset[3][i]) / + (dims[i] * len_v3(data->orig_matrix_offset[i])) - + pivot[i]; + const float delta_curr = (point_local[i] - data->orig_matrix_offset[3][i]) / + (dims[i] * len_v3(data->orig_matrix_offset[i])) - + pivot[i]; if ((transform_flag & ED_GIZMO_CAGE_XFORM_FLAG_SCALE_SIGNED) == 0) { - if (sign != signum_i(scale[i])) { + if (signum_i(delta_orig) != signum_i(delta_curr)) { scale[i] = 0.0f; + continue; } } + + if (delta_orig < 0) { + scale[i] = -delta_curr / (pivot[i] + 0.5f); + } + else { + scale[i] = delta_curr / (0.5f - pivot[i]); + } } } if (transform_flag & ED_GIZMO_CAGE_XFORM_FLAG_SCALE_UNIFORM) { if (constrain_axis[0] == false && constrain_axis[1] == false) { - scale[1] = scale[0] = (scale[1] + scale[0]) / 2.0f; + if (draw_style == ED_GIZMO_CAGE2D_STYLE_CIRCLE) { + /* So that the cursor lies on the circle. */ + scale[1] = scale[0] = len_v2(scale); + } + else { + scale[1] = scale[0] = (scale[1] + scale[0]) / 2.0f; + } } else if (constrain_axis[0] == false) { scale[1] = scale[0]; diff --git a/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c index 598d437e2468..295d76f2f58c 100644 --- a/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c +++ b/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c @@ -88,7 +88,10 @@ static void gizmo_calc_rect_view_margin(const wmGizmo *gz, const float dims[3], /* -------------------------------------------------------------------- */ -static void gizmo_rect_pivot_from_scale_part(int part, float r_pt[3], bool r_constrain_axis[3]) +static void gizmo_rect_pivot_from_scale_part(int part, + float r_pt[3], + bool r_constrain_axis[3], + bool has_translation) { if (part >= ED_GIZMO_CAGE3D_PART_SCALE_MIN_X_MIN_Y_MIN_Z && part <= ED_GIZMO_CAGE3D_PART_SCALE_MAX_X_MAX_Y_MAX_Z) { @@ -102,7 +105,7 @@ static void gizmo_rect_pivot_from_scale_part(int part, float r_pt[3], bool r_con const float sign[3] = {0.5f, 0.0f, -0.5f}; for (int i = 0; i < 3; i++) { - r_pt[i] = sign[range[i]]; + r_pt[i] = has_translation ? sign[range[i]] : 0.0f; r_constrain_axis[i] = (range[i] == 1); } } @@ -512,41 +515,36 @@ static int gizmo_cage3d_modal(bContext *C, else { /* scale */ copy_m4_m4(gz->matrix_offset, data->orig_matrix_offset); + float pivot[3]; bool constrain_axis[3] = {false}; - - if (transform_flag & ED_GIZMO_CAGE_XFORM_FLAG_TRANSLATE) { - gizmo_rect_pivot_from_scale_part(gz->highlight_part, pivot, constrain_axis); - } - else { - zero_v3(pivot); - } - - /* Cursor deltas scaled to (-0.5..0.5). */ - float delta_orig[3], delta_curr[3]; - - for (int i = 0; i < 3; i++) { - delta_orig[i] = ((data->orig_mouse[i] - data->orig_matrix_offset[3][i]) / dims[i]) - - pivot[i]; - delta_curr[i] = ((point_local[i] - data->orig_matrix_offset[3][i]) / dims[i]) - pivot[i]; - } + bool has_translation = transform_flag & ED_GIZMO_CAGE_XFORM_FLAG_TRANSLATE; + gizmo_rect_pivot_from_scale_part(gz->highlight_part, pivot, constrain_axis, has_translation); float scale[3] = {1.0f, 1.0f, 1.0f}; for (int i = 0; i < 3; i++) { if (constrain_axis[i] == false) { - if (delta_orig[i] < 0.0f) { - delta_orig[i] *= -1.0f; - delta_curr[i] *= -1.0f; - } - const int sign = signum_i(scale[i]); - - scale[i] = 1.0f + ((delta_curr[i] - delta_orig[i]) / len_v3(data->orig_matrix_offset[i])); + /* Original cursor position relative to pivot, remapped to [-1, 1] */ + const float delta_orig = (data->orig_mouse[i] - data->orig_matrix_offset[3][i]) / + (dims[i] * len_v3(data->orig_matrix_offset[i])) - + pivot[i]; + const float delta_curr = (point_local[i] - data->orig_matrix_offset[3][i]) / + (dims[i] * len_v3(data->orig_matrix_offset[i])) - + pivot[i]; if ((transform_flag & ED_GIZMO_CAGE_XFORM_FLAG_SCALE_SIGNED) == 0) { - if (sign != signum_i(scale[i])) { + if (signum_i(delta_orig) != signum_i(delta_curr)) { scale[i] = 0.0f; + continue; } } + + if (delta_orig < 0) { + scale[i] = -delta_curr / (pivot[i] + 0.5f); + } + else { + scale[i] = delta_curr / (0.5f - pivot[i]); + } } } -- 2.30.2 From ea9bf0d0280af94ecb7c382926fd9a12e6ce5aec Mon Sep 17 00:00:00 2001 From: Weizhen Huang Date: Mon, 13 Feb 2023 11:18:21 +0100 Subject: [PATCH 031/182] Gizmo: add gizmos for spot and point light radius Ref #104280 Pull Request #104410 --- .../editors/space_view3d/space_view3d.cc | 1 + .../editors/space_view3d/view3d_gizmo_light.c | 171 ++++++++++++++++++ .../editors/space_view3d/view3d_intern.h | 1 + source/blender/makesrna/intern/rna_light.c | 2 +- 4 files changed, 174 insertions(+), 1 deletion(-) diff --git a/source/blender/editors/space_view3d/space_view3d.cc b/source/blender/editors/space_view3d/space_view3d.cc index 5825b5466f64..25708ee7a670 100644 --- a/source/blender/editors/space_view3d/space_view3d.cc +++ b/source/blender/editors/space_view3d/space_view3d.cc @@ -1022,6 +1022,7 @@ static void view3d_widgets() WM_gizmogrouptype_append_and_link(gzmap_type, VIEW3D_GGT_xform_gizmo_context); WM_gizmogrouptype_append_and_link(gzmap_type, VIEW3D_GGT_light_spot); + WM_gizmogrouptype_append_and_link(gzmap_type, VIEW3D_GGT_light_point); WM_gizmogrouptype_append_and_link(gzmap_type, VIEW3D_GGT_light_area); WM_gizmogrouptype_append_and_link(gzmap_type, VIEW3D_GGT_light_target); WM_gizmogrouptype_append_and_link(gzmap_type, VIEW3D_GGT_force_field); diff --git a/source/blender/editors/space_view3d/view3d_gizmo_light.c b/source/blender/editors/space_view3d/view3d_gizmo_light.c index d967b950bc57..f3db63b9a202 100644 --- a/source/blender/editors/space_view3d/view3d_gizmo_light.c +++ b/source/blender/editors/space_view3d/view3d_gizmo_light.c @@ -42,6 +42,7 @@ typedef struct LightSpotWidgetGroup { wmGizmo *spot_angle; wmGizmo *spot_blend; + wmGizmo *spot_radius; } LightSpotWidgetGroup; static void gizmo_spot_blend_prop_matrix_get(const wmGizmo *UNUSED(gz), @@ -94,6 +95,48 @@ static void gizmo_spot_blend_prop_matrix_set(const wmGizmo *UNUSED(gz), RNA_property_update_main(CTX_data_main(C), scene, &light_ptr, spot_blend_prop); } +/* Used by spot light and point light. */ +static void gizmo_light_radius_prop_matrix_get(const wmGizmo *UNUSED(gz), + wmGizmoProperty *gz_prop, + void *value_p) +{ + BLI_assert(gz_prop->type->array_length == 16); + float(*matrix)[4] = value_p; + + const bContext *C = gz_prop->custom_func.user_data; + ViewLayer *view_layer = CTX_data_view_layer(C); + BKE_view_layer_synced_ensure(CTX_data_scene(C), view_layer); + const Light *la = BKE_view_layer_active_object_get(view_layer)->data; + + /* Draw gizmo even when radius is zero. */ + const float diameter = fmaxf(2.0f * la->radius, 1e-2f); + matrix[0][0] = diameter; + matrix[1][1] = diameter; +} + +static void gizmo_light_radius_prop_matrix_set(const wmGizmo *UNUSED(gz), + wmGizmoProperty *gz_prop, + const void *value_p) +{ + const float(*matrix)[4] = value_p; + BLI_assert(gz_prop->type->array_length == 16); + + const bContext *C = gz_prop->custom_func.user_data; + Scene *scene = CTX_data_scene(C); + ViewLayer *view_layer = CTX_data_view_layer(C); + BKE_view_layer_synced_ensure(scene, view_layer); + Light *la = BKE_view_layer_active_object_get(view_layer)->data; + + const float radius = 0.5f * len_v3(matrix[0]); + + PointerRNA light_ptr; + RNA_pointer_create(&la->id, &RNA_Light, la, &light_ptr); + PropertyRNA *radius_prop = RNA_struct_find_property(&light_ptr, "shadow_soft_size"); + RNA_property_float_set(&light_ptr, radius_prop, radius); + + RNA_property_update_main(CTX_data_main(C), scene, &light_ptr, radius_prop); +} + static bool WIDGETGROUP_light_spot_poll(const bContext *C, wmGizmoGroupType *UNUSED(gzgt)) { View3D *v3d = CTX_wm_view3d(C); @@ -154,6 +197,28 @@ static void WIDGETGROUP_light_spot_setup(const bContext *C, wmGizmoGroup *gzgrou .user_data = (void *)C, }); } + + /* Spot radius gizmo. */ + { + ls_gzgroup->spot_radius = WM_gizmo_new("GIZMO_GT_cage_2d", gzgroup, NULL); + wmGizmo *gz = ls_gzgroup->spot_radius; + RNA_enum_set(gz->ptr, + "transform", + ED_GIZMO_CAGE_XFORM_FLAG_SCALE | ED_GIZMO_CAGE_XFORM_FLAG_SCALE_UNIFORM); + RNA_enum_set(gz->ptr, "draw_style", ED_GIZMO_CAGE2D_STYLE_CIRCLE); + WM_gizmo_set_flag(gz, WM_GIZMO_DRAW_HOVER, true); + UI_GetThemeColor3fv(TH_GIZMO_PRIMARY, gz->color); + UI_GetThemeColor3fv(TH_GIZMO_HI, gz->color_hi); + + WM_gizmo_target_property_def_func(gz, + "matrix", + &(const struct wmGizmoPropertyFnParams){ + .value_get_fn = gizmo_light_radius_prop_matrix_get, + .value_set_fn = gizmo_light_radius_prop_matrix_set, + .range_get_fn = NULL, + .user_data = (void *)C, + }); + } } static void WIDGETGROUP_light_spot_refresh(const bContext *C, wmGizmoGroup *gzgroup) @@ -165,6 +230,7 @@ static void WIDGETGROUP_light_spot_refresh(const bContext *C, wmGizmoGroup *gzgr Object *ob = BKE_view_layer_active_object_get(view_layer); Light *la = ob->data; + /* Spot angle gizmo. */ { PointerRNA lamp_ptr; RNA_pointer_create(&la->id, &RNA_Light, la, &lamp_ptr); @@ -179,6 +245,7 @@ static void WIDGETGROUP_light_spot_refresh(const bContext *C, wmGizmoGroup *gzgr WM_gizmo_target_property_def_rna(gz, "offset", &lamp_ptr, propname, -1); } + /* Spot blend gizmo. */ { wmGizmo *gz = ls_gzgroup->spot_blend; @@ -192,6 +259,23 @@ static void WIDGETGROUP_light_spot_refresh(const bContext *C, wmGizmoGroup *gzgr } } +static void WIDGETGROUP_light_spot_draw_prepare(const bContext *C, wmGizmoGroup *gzgroup) +{ + LightSpotWidgetGroup *ls_gzgroup = gzgroup->customdata; + ViewLayer *view_layer = CTX_data_view_layer(C); + BKE_view_layer_synced_ensure(CTX_data_scene(C), view_layer); + Object *ob = BKE_view_layer_active_object_get(view_layer); + + /* Spot radius gizmo. */ + wmGizmo *gz = ls_gzgroup->spot_radius; + + /* Draw circle in the screen space. */ + RegionView3D *rv3d = CTX_wm_region(C)->regiondata; + WM_gizmo_set_matrix_rotation_from_z_axis(gz, rv3d->viewinv[2]); + + WM_gizmo_set_matrix_location(gz, ob->object_to_world[3]); +} + void VIEW3D_GGT_light_spot(wmGizmoGroupType *gzgt) { gzgt->name = "Spot Light Widgets"; @@ -203,6 +287,93 @@ void VIEW3D_GGT_light_spot(wmGizmoGroupType *gzgt) gzgt->setup = WIDGETGROUP_light_spot_setup; gzgt->setup_keymap = WM_gizmogroup_setup_keymap_generic_maybe_drag; gzgt->refresh = WIDGETGROUP_light_spot_refresh; + gzgt->draw_prepare = WIDGETGROUP_light_spot_draw_prepare; +} + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Point Light Gizmo + * \{ */ + +static bool WIDGETGROUP_light_point_poll(const bContext *C, wmGizmoGroupType *UNUSED(gzgt)) +{ + const View3D *v3d = CTX_wm_view3d(C); + if (v3d->gizmo_flag & (V3D_GIZMO_HIDE | V3D_GIZMO_HIDE_CONTEXT)) { + return false; + } + if ((v3d->gizmo_show_light & V3D_GIZMO_SHOW_LIGHT_SIZE) == 0) { + return false; + } + + const Scene *scene = CTX_data_scene(C); + ViewLayer *view_layer = CTX_data_view_layer(C); + BKE_view_layer_synced_ensure(scene, view_layer); + const Base *base = BKE_view_layer_active_base_get(view_layer); + if (base && BASE_SELECTABLE(v3d, base)) { + const Object *ob = base->object; + if (ob->type == OB_LAMP) { + const Light *la = ob->data; + return (la->type == LA_LOCAL); + } + } + return false; +} + +static void WIDGETGROUP_light_point_setup(const bContext *C, wmGizmoGroup *gzgroup) +{ + wmGizmoWrapper *wwrapper = MEM_mallocN(sizeof(wmGizmoWrapper), __func__); + wwrapper->gizmo = WM_gizmo_new("GIZMO_GT_cage_2d", gzgroup, NULL); + /* Point radius gizmo. */ + wmGizmo *gz = wwrapper->gizmo; + gzgroup->customdata = wwrapper; + + RNA_enum_set(gz->ptr, + "transform", + ED_GIZMO_CAGE_XFORM_FLAG_SCALE | ED_GIZMO_CAGE_XFORM_FLAG_SCALE_UNIFORM); + RNA_enum_set(gz->ptr, "draw_style", ED_GIZMO_CAGE2D_STYLE_CIRCLE); + WM_gizmo_set_flag(gz, WM_GIZMO_DRAW_HOVER, true); + UI_GetThemeColor3fv(TH_GIZMO_PRIMARY, gz->color); + UI_GetThemeColor3fv(TH_GIZMO_HI, gz->color_hi); + + WM_gizmo_target_property_def_func(gz, + "matrix", + &(const struct wmGizmoPropertyFnParams){ + .value_get_fn = gizmo_light_radius_prop_matrix_get, + .value_set_fn = gizmo_light_radius_prop_matrix_set, + .range_get_fn = NULL, + .user_data = (void *)C, + }); +} + +static void WIDGETGROUP_light_point_draw_prepare(const bContext *C, wmGizmoGroup *gzgroup) +{ + wmGizmoWrapper *wwrapper = gzgroup->customdata; + ViewLayer *view_layer = CTX_data_view_layer(C); + BKE_view_layer_synced_ensure(CTX_data_scene(C), view_layer); + const Object *ob = BKE_view_layer_active_object_get(view_layer); + + /* Point radius gizmo. */ + wmGizmo *gz = wwrapper->gizmo; + + /* Draw circle in the screen space. */ + const RegionView3D *rv3d = CTX_wm_region(C)->regiondata; + WM_gizmo_set_matrix_rotation_from_z_axis(gz, rv3d->viewinv[2]); + + WM_gizmo_set_matrix_location(gz, ob->object_to_world[3]); +} + +void VIEW3D_GGT_light_point(wmGizmoGroupType *gzgt) +{ + gzgt->name = "Point Light Widgets"; + gzgt->idname = "VIEW3D_GGT_light_point"; + + gzgt->flag |= (WM_GIZMOGROUPTYPE_PERSISTENT | WM_GIZMOGROUPTYPE_3D | WM_GIZMOGROUPTYPE_DEPTH_3D); + + gzgt->poll = WIDGETGROUP_light_point_poll; + gzgt->setup = WIDGETGROUP_light_point_setup; + gzgt->setup_keymap = WM_gizmogroup_setup_keymap_generic_maybe_drag; + gzgt->draw_prepare = WIDGETGROUP_light_point_draw_prepare; } /** \} */ diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 4e768078fe5c..b94833dd2769 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -212,6 +212,7 @@ extern const char *view3d_context_dir[]; /* doc access */ /* view3d_widgets.c */ void VIEW3D_GGT_light_spot(struct wmGizmoGroupType *gzgt); +void VIEW3D_GGT_light_point(struct wmGizmoGroupType *gzgt); void VIEW3D_GGT_light_area(struct wmGizmoGroupType *gzgt); void VIEW3D_GGT_light_target(struct wmGizmoGroupType *gzgt); void VIEW3D_GGT_camera(struct wmGizmoGroupType *gzgt); diff --git a/source/blender/makesrna/intern/rna_light.c b/source/blender/makesrna/intern/rna_light.c index f429fd73cdb8..0ff0787de502 100644 --- a/source/blender/makesrna/intern/rna_light.c +++ b/source/blender/makesrna/intern/rna_light.c @@ -341,7 +341,7 @@ static void rna_def_light_shadow(StructRNA *srna, bool sun) RNA_def_property_ui_range(prop, 0, 100, 0.1, 3); RNA_def_property_ui_text( prop, "Shadow Soft Size", "Light size for ray shadow sampling (Raytraced shadows)"); - RNA_def_property_update(prop, 0, "rna_Light_update"); + RNA_def_property_update(prop, 0, "rna_Light_draw_update"); /* Eevee */ prop = RNA_def_property(srna, "use_contact_shadow", PROP_BOOLEAN, PROP_NONE); -- 2.30.2 From bdf33706a6c95345c521ab96a9b32aaf8e396b12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Foucault?= Date: Sun, 12 Feb 2023 16:09:23 +0100 Subject: [PATCH 032/182] GPU: Move gpu_shader_builtin.c to C++ This also removes all unused part of it now that we have converted all shaders to use create infos. --- source/blender/gpu/CMakeLists.txt | 2 +- ...shader_builtin.c => gpu_shader_builtin.cc} | 162 ++---------------- 2 files changed, 18 insertions(+), 146 deletions(-) rename source/blender/gpu/intern/{gpu_shader_builtin.c => gpu_shader_builtin.cc} (55%) diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index 623dd8997177..4f207fd75723 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -70,7 +70,7 @@ set(SRC intern/gpu_select_pick.c intern/gpu_select_sample_query.cc intern/gpu_shader.cc - intern/gpu_shader_builtin.c + intern/gpu_shader_builtin.cc intern/gpu_shader_create_info.cc intern/gpu_shader_dependency.cc intern/gpu_shader_interface.cc diff --git a/source/blender/gpu/intern/gpu_shader_builtin.c b/source/blender/gpu/intern/gpu_shader_builtin.cc similarity index 55% rename from source/blender/gpu/intern/gpu_shader_builtin.c rename to source/blender/gpu/intern/gpu_shader_builtin.cc index 470643ba8638..a2f4addf36d7 100644 --- a/source/blender/gpu/intern/gpu_shader_builtin.c +++ b/source/blender/gpu/intern/gpu_shader_builtin.cc @@ -9,109 +9,13 @@ #include "GPU_shader.h" -/* Adjust these constants as needed. */ -#define MAX_DEFINE_LENGTH 256 -#define MAX_EXT_DEFINE_LENGTH 512 - -/* Non-generated shaders */ -extern char datatoc_gpu_shader_depth_only_frag_glsl[]; -extern char datatoc_gpu_shader_uniform_color_frag_glsl[]; -extern char datatoc_gpu_shader_checker_frag_glsl[]; -extern char datatoc_gpu_shader_diag_stripes_frag_glsl[]; -extern char datatoc_gpu_shader_simple_lighting_frag_glsl[]; -extern char datatoc_gpu_shader_flat_color_frag_glsl[]; -extern char datatoc_gpu_shader_flat_color_alpha_test_0_frag_glsl[]; -extern char datatoc_gpu_shader_flat_id_frag_glsl[]; -extern char datatoc_gpu_shader_2D_area_borders_vert_glsl[]; -extern char datatoc_gpu_shader_2D_area_borders_frag_glsl[]; -extern char datatoc_gpu_shader_2D_vert_glsl[]; -extern char datatoc_gpu_shader_2D_smooth_color_uniform_alpha_vert_glsl[]; -extern char datatoc_gpu_shader_2D_image_vert_glsl[]; -extern char datatoc_gpu_shader_2D_image_rect_vert_glsl[]; -extern char datatoc_gpu_shader_2D_image_multi_rect_vert_glsl[]; -extern char datatoc_gpu_shader_2D_widget_base_vert_glsl[]; -extern char datatoc_gpu_shader_2D_widget_base_frag_glsl[]; -extern char datatoc_gpu_shader_2D_widget_shadow_vert_glsl[]; -extern char datatoc_gpu_shader_2D_widget_shadow_frag_glsl[]; -extern char datatoc_gpu_shader_2D_nodelink_frag_glsl[]; -extern char datatoc_gpu_shader_2D_nodelink_vert_glsl[]; - -extern char datatoc_gpu_shader_3D_image_vert_glsl[]; -extern char datatoc_gpu_shader_image_frag_glsl[]; -extern char datatoc_gpu_shader_image_overlays_merge_frag_glsl[]; -extern char datatoc_gpu_shader_image_overlays_stereo_merge_frag_glsl[]; -extern char datatoc_gpu_shader_image_color_frag_glsl[]; -extern char datatoc_gpu_shader_image_desaturate_frag_glsl[]; -extern char datatoc_gpu_shader_image_modulate_alpha_frag_glsl[]; -extern char datatoc_gpu_shader_image_varying_color_frag_glsl[]; -extern char datatoc_gpu_shader_image_shuffle_color_frag_glsl[]; -extern char datatoc_gpu_shader_3D_vert_glsl[]; -extern char datatoc_gpu_shader_3D_normal_vert_glsl[]; -extern char datatoc_gpu_shader_3D_flat_color_vert_glsl[]; -extern char datatoc_gpu_shader_3D_polyline_frag_glsl[]; -extern char datatoc_gpu_shader_3D_polyline_geom_glsl[]; -extern char datatoc_gpu_shader_3D_polyline_vert_glsl[]; -extern char datatoc_gpu_shader_3D_smooth_color_vert_glsl[]; -extern char datatoc_gpu_shader_3D_smooth_color_frag_glsl[]; -extern char datatoc_gpu_shader_3D_passthrough_vert_glsl[]; -extern char datatoc_gpu_shader_3D_clipped_uniform_color_vert_glsl[]; - -extern char datatoc_gpu_shader_instance_variying_size_variying_color_vert_glsl[]; - -extern char datatoc_gpu_shader_point_uniform_color_aa_frag_glsl[]; -extern char datatoc_gpu_shader_point_uniform_color_outline_aa_frag_glsl[]; -extern char datatoc_gpu_shader_point_varying_color_varying_outline_aa_frag_glsl[]; -extern char datatoc_gpu_shader_point_varying_color_frag_glsl[]; -extern char datatoc_gpu_shader_3D_point_fixed_size_varying_color_vert_glsl[]; -extern char datatoc_gpu_shader_3D_point_varying_size_varying_color_vert_glsl[]; -extern char datatoc_gpu_shader_3D_point_uniform_size_aa_vert_glsl[]; -extern char datatoc_gpu_shader_2D_point_uniform_size_aa_vert_glsl[]; -extern char datatoc_gpu_shader_2D_point_uniform_size_outline_aa_vert_glsl[]; - -extern char datatoc_gpu_shader_2D_line_dashed_uniform_color_vert_glsl[]; -extern char datatoc_gpu_shader_2D_line_dashed_frag_glsl[]; -extern char datatoc_gpu_shader_3D_line_dashed_uniform_color_vert_glsl[]; - -extern char datatoc_gpu_shader_text_vert_glsl[]; -extern char datatoc_gpu_shader_text_frag_glsl[]; -extern char datatoc_gpu_shader_keyframe_shape_vert_glsl[]; -extern char datatoc_gpu_shader_keyframe_shape_frag_glsl[]; - -extern char datatoc_gpu_shader_gpencil_stroke_vert_glsl[]; -extern char datatoc_gpu_shader_gpencil_stroke_frag_glsl[]; -extern char datatoc_gpu_shader_gpencil_stroke_geom_glsl[]; - -extern char datatoc_gpu_shader_cfg_world_clip_lib_glsl[]; - -extern char datatoc_gpu_shader_colorspace_lib_glsl[]; - -const struct GPUShaderConfigData GPU_shader_cfg_data[GPU_SHADER_CFG_LEN] = { - [GPU_SHADER_CFG_DEFAULT] = - { - .lib = "", - .def = "#define blender_srgb_to_framebuffer_space(a) a\n", - }, - [GPU_SHADER_CFG_CLIPPED] = - { - .lib = datatoc_gpu_shader_cfg_world_clip_lib_glsl, - .def = "#define USE_WORLD_CLIP_PLANES\n" - "#define blender_srgb_to_framebuffer_space(a) a\n", - }, -}; - -/* cache of built-in shaders (each is created on first use) */ -static GPUShader *builtin_shaders[GPU_SHADER_CFG_LEN][GPU_SHADER_BUILTIN_LEN] = {{NULL}}; +/* Cache of built-in shaders (each is created on first use). */ +static GPUShader *builtin_shaders[GPU_SHADER_CFG_LEN][GPU_SHADER_BUILTIN_LEN] = {{nullptr}}; typedef struct { const char *name; - const char *vert; - /** Optional. */ - const char *geom; - const char *frag; - /** Optional. */ - const char *defs; - const char *create_info; + /** Optional. */ const char *clipped_create_info; } GPUShaderStages; @@ -287,7 +191,6 @@ static const GPUShaderStages builtin_shader_stages[GPU_SHADER_BUILTIN_LEN] = { [GPU_SHADER_2D_WIDGET_BASE_INST] = { .name = "GPU_SHADER_2D_WIDGET_BASE_INST", - .defs = "#define USE_INSTANCE\n", .create_info = "gpu_shader_2D_widget_base_inst", }, [GPU_SHADER_2D_WIDGET_SHADOW] = @@ -321,61 +224,30 @@ GPUShader *GPU_shader_get_builtin_shader_with_config(eGPUBuiltinShader shader, BLI_assert(sh_cfg < GPU_SHADER_CFG_LEN); GPUShader **sh_p = &builtin_shaders[sh_cfg][shader]; - if (*sh_p == NULL) { + if (*sh_p == nullptr) { const GPUShaderStages *stages = &builtin_shader_stages[shader]; /* common case */ if (sh_cfg == GPU_SHADER_CFG_DEFAULT) { - if (stages->create_info != NULL) { - *sh_p = GPU_shader_create_from_info_name(stages->create_info); - if (ELEM(shader, - GPU_SHADER_3D_POLYLINE_CLIPPED_UNIFORM_COLOR, - GPU_SHADER_3D_POLYLINE_UNIFORM_COLOR, - GPU_SHADER_3D_POLYLINE_FLAT_COLOR, - GPU_SHADER_3D_POLYLINE_SMOOTH_COLOR)) { - /* Set a default value for `lineSmooth`. - * Ideally this value should be set by the caller. */ - GPU_shader_bind(*sh_p); - GPU_shader_uniform_1i(*sh_p, "lineSmooth", 1); - } - } - else { - *sh_p = GPU_shader_create_from_arrays_named( - stages->name, - { - .vert = (const char *[]){stages->vert, NULL}, - .geom = (const char *[]){stages->geom, NULL}, - .frag = - (const char *[]){datatoc_gpu_shader_colorspace_lib_glsl, stages->frag, NULL}, - .defs = (const char *[]){stages->defs, NULL}, - }); + *sh_p = GPU_shader_create_from_info_name(stages->create_info); + if (ELEM(shader, + GPU_SHADER_3D_POLYLINE_CLIPPED_UNIFORM_COLOR, + GPU_SHADER_3D_POLYLINE_UNIFORM_COLOR, + GPU_SHADER_3D_POLYLINE_FLAT_COLOR, + GPU_SHADER_3D_POLYLINE_SMOOTH_COLOR)) { + /* Set a default value for `lineSmooth`. + * Ideally this value should be set by the caller. */ + GPU_shader_bind(*sh_p); + GPU_shader_uniform_1i(*sh_p, "lineSmooth", 1); } } else if (sh_cfg == GPU_SHADER_CFG_CLIPPED) { - /* Remove eventually, for now ensure support for each shader has been added. */ - BLI_assert(ELEM(shader, - GPU_SHADER_3D_UNIFORM_COLOR, - GPU_SHADER_3D_SMOOTH_COLOR, - GPU_SHADER_3D_DEPTH_ONLY, - GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA, - GPU_SHADER_3D_FLAT_COLOR, - GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR)); /* In rare cases geometry shaders calculate clipping themselves. */ - if (stages->clipped_create_info != NULL) { + if (stages->clipped_create_info != nullptr) { *sh_p = GPU_shader_create_from_info_name(stages->clipped_create_info); } else { - const char *world_clip_lib = datatoc_gpu_shader_cfg_world_clip_lib_glsl; - const char *world_clip_def = "#define USE_WORLD_CLIP_PLANES\n"; - *sh_p = GPU_shader_create_from_arrays_named( - stages->name, - { - .vert = (const char *[]){world_clip_lib, stages->vert, NULL}, - .geom = (const char *[]){stages->geom ? world_clip_lib : NULL, stages->geom, NULL}, - .frag = - (const char *[]){datatoc_gpu_shader_colorspace_lib_glsl, stages->frag, NULL}, - .defs = (const char *[]){world_clip_def, stages->defs, NULL}, - }); + BLI_assert_msg(0, "Shader doesn't support clip mode."); } } else { @@ -397,7 +269,7 @@ void GPU_shader_free_builtin_shaders(void) for (int j = 0; j < GPU_SHADER_BUILTIN_LEN; j++) { if (builtin_shaders[i][j]) { GPU_shader_free(builtin_shaders[i][j]); - builtin_shaders[i][j] = NULL; + builtin_shaders[i][j] = nullptr; } } } -- 2.30.2 From 0c6488907005c7c46da1ebc72cbc74d27e0692af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Foucault?= Date: Sun, 12 Feb 2023 17:20:18 +0100 Subject: [PATCH 033/182] GPU: Remove GPU_SHADER_3D_POINT_FIXED_SIZE_VARYING_COLOR This replaces `GPU_SHADER_3D_POINT_FIXED_SIZE_VARYING_COLOR` by GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA`. None of the usage made sense to not use the AA shader. Scale the point size to account for the rounded shape. --- source/blender/editors/gpencil/gpencil_fill.c | 4 ++-- .../blender/editors/sculpt_paint/curves_sculpt_ops.cc | 5 ++--- source/blender/editors/space_view3d/view3d_draw.cc | 4 ++-- source/blender/gpu/CMakeLists.txt | 1 - source/blender/gpu/GPU_shader.h | 8 -------- source/blender/gpu/intern/gpu_shader_builtin.cc | 5 ----- ..._shader_3D_point_fixed_size_varying_color_vert.glsl | 6 ------ .../gpu/shaders/infos/gpu_shader_3D_point_info.hh | 10 ---------- source/blender/gpu/tests/gpu_shader_builtin_test.cc | 2 -- 9 files changed, 6 insertions(+), 39 deletions(-) delete mode 100644 source/blender/gpu/shaders/gpu_shader_3D_point_fixed_size_varying_color_vert.glsl diff --git a/source/blender/editors/gpencil/gpencil_fill.c b/source/blender/editors/gpencil/gpencil_fill.c index 0401fdfc963d..7f8ff54cc122 100644 --- a/source/blender/editors/gpencil/gpencil_fill.c +++ b/source/blender/editors/gpencil/gpencil_fill.c @@ -1003,8 +1003,8 @@ static void draw_mouse_position(tGPDfill *tgpf) uint col = GPU_vertformat_attr_add(format, "color", GPU_COMP_U8, 4, GPU_FETCH_INT_TO_FLOAT_UNIT); /* Draw mouse click position in Blue. */ - immBindBuiltinProgram(GPU_SHADER_3D_POINT_FIXED_SIZE_VARYING_COLOR); - GPU_point_size(point_size); + immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA); + immUniform1f("size", point_size * M_SQRT2); immBegin(GPU_PRIM_POINTS, 1); immAttr4ubv(col, mouse_color); immVertex3fv(pos, &pt->x); diff --git a/source/blender/editors/sculpt_paint/curves_sculpt_ops.cc b/source/blender/editors/sculpt_paint/curves_sculpt_ops.cc index 89f0f9031df4..54bef8d2257d 100644 --- a/source/blender/editors/sculpt_paint/curves_sculpt_ops.cc +++ b/source/blender/editors/sculpt_paint/curves_sculpt_ops.cc @@ -966,9 +966,8 @@ static void min_distance_edit_draw(bContext *C, int /*x*/, int /*y*/, void *cust const uint pos3d = GPU_vertformat_attr_add(format3d, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); const uint col3d = GPU_vertformat_attr_add(format3d, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT); - immBindBuiltinProgram(GPU_SHADER_3D_POINT_FIXED_SIZE_VARYING_COLOR); - - GPU_point_size(3.0f); + immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA); + immUniform1f("size", 4.0f); immBegin(GPU_PRIM_POINTS, points_wo.size()); float3 brush_origin_wo = math::transform_point(op_data.curves_to_world_mat, op_data.pos_cu); diff --git a/source/blender/editors/space_view3d/view3d_draw.cc b/source/blender/editors/space_view3d/view3d_draw.cc index 7018fa16fe6b..b50721a22c55 100644 --- a/source/blender/editors/space_view3d/view3d_draw.cc +++ b/source/blender/editors/space_view3d/view3d_draw.cc @@ -1104,8 +1104,8 @@ static void draw_rotation_guide(const RegionView3D *rv3d) immUnbindProgram(); /* -- draw rotation center -- */ - immBindBuiltinProgram(GPU_SHADER_3D_POINT_FIXED_SIZE_VARYING_COLOR); - GPU_point_size(5.0f); + immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA); + immUniform1f("size", 7.0f); immBegin(GPU_PRIM_POINTS, 1); immAttr4ubv(col, color); immVertex3fv(pos, o); diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index 4f207fd75723..2f345ec6a90c 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -377,7 +377,6 @@ set(GLSL_SRC shaders/gpu_shader_point_uniform_color_outline_aa_frag.glsl shaders/gpu_shader_point_varying_color_varying_outline_aa_frag.glsl shaders/gpu_shader_point_varying_color_frag.glsl - shaders/gpu_shader_3D_point_fixed_size_varying_color_vert.glsl shaders/gpu_shader_3D_point_varying_size_varying_color_vert.glsl shaders/gpu_shader_3D_point_uniform_size_aa_vert.glsl shaders/gpu_shader_2D_point_varying_size_varying_color_vert.glsl diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h index 3cf64edaa6e8..48cbc13b530a 100644 --- a/source/blender/gpu/GPU_shader.h +++ b/source/blender/gpu/GPU_shader.h @@ -322,14 +322,6 @@ typedef enum eGPUBuiltinShader { * \param pos: in vec2 */ GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA, - /** - * Draw round points with a hardcoded size. - * Take a single color for all the vertices and a 3D position for each vertex. - * - * \param color: uniform vec4 - * \param pos: in vec3 - */ - GPU_SHADER_3D_POINT_FIXED_SIZE_VARYING_COLOR, /** * Draw round points with a constant size. * Take a single color for all the vertices and a 3D position for each vertex. diff --git a/source/blender/gpu/intern/gpu_shader_builtin.cc b/source/blender/gpu/intern/gpu_shader_builtin.cc index a2f4addf36d7..03c3702c08b1 100644 --- a/source/blender/gpu/intern/gpu_shader_builtin.cc +++ b/source/blender/gpu/intern/gpu_shader_builtin.cc @@ -161,11 +161,6 @@ static const GPUShaderStages builtin_shader_stages[GPU_SHADER_BUILTIN_LEN] = { .name = "GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA", .create_info = "gpu_shader_2D_point_uniform_size_uniform_color_outline_aa", }, - [GPU_SHADER_3D_POINT_FIXED_SIZE_VARYING_COLOR] = - { - .name = "GPU_SHADER_3D_POINT_FIXED_SIZE_VARYING_COLOR", - .create_info = "gpu_shader_3D_point_fixed_size_varying_color", - }, [GPU_SHADER_3D_POINT_VARYING_SIZE_VARYING_COLOR] = { .name = "GPU_SHADER_3D_POINT_VARYING_SIZE_VARYING_COLOR", diff --git a/source/blender/gpu/shaders/gpu_shader_3D_point_fixed_size_varying_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_point_fixed_size_varying_color_vert.glsl deleted file mode 100644 index a43c1aa40cf9..000000000000 --- a/source/blender/gpu/shaders/gpu_shader_3D_point_fixed_size_varying_color_vert.glsl +++ /dev/null @@ -1,6 +0,0 @@ - -void main() -{ - gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0); - finalColor = color; -} diff --git a/source/blender/gpu/shaders/infos/gpu_shader_3D_point_info.hh b/source/blender/gpu/shaders/infos/gpu_shader_3D_point_info.hh index c71d7cf632a6..e7a4705761f4 100644 --- a/source/blender/gpu/shaders/infos/gpu_shader_3D_point_info.hh +++ b/source/blender/gpu/shaders/infos/gpu_shader_3D_point_info.hh @@ -7,16 +7,6 @@ #include "gpu_shader_create_info.hh" -GPU_SHADER_CREATE_INFO(gpu_shader_3D_point_fixed_size_varying_color) - .vertex_in(0, Type::VEC3, "pos") - .vertex_in(1, Type::VEC4, "color") - .vertex_out(smooth_color_iface) - .fragment_out(0, Type::VEC4, "fragColor") - .push_constant(Type::MAT4, "ModelViewProjectionMatrix") - .vertex_source("gpu_shader_3D_point_fixed_size_varying_color_vert.glsl") - .fragment_source("gpu_shader_point_varying_color_frag.glsl") - .do_static_compilation(true); - GPU_SHADER_CREATE_INFO(gpu_shader_3D_point_varying_size_varying_color) .vertex_in(0, Type::VEC3, "pos") .vertex_in(1, Type::VEC4, "color") diff --git a/source/blender/gpu/tests/gpu_shader_builtin_test.cc b/source/blender/gpu/tests/gpu_shader_builtin_test.cc index 567f1370f009..bb3f9f1a2ae9 100644 --- a/source/blender/gpu/tests/gpu_shader_builtin_test.cc +++ b/source/blender/gpu/tests/gpu_shader_builtin_test.cc @@ -52,8 +52,6 @@ static void test_shader_builtin() GPU_SHADER_CFG_DEFAULT); test_compile_builtin_shader(GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA, GPU_SHADER_CFG_DEFAULT); - test_compile_builtin_shader(GPU_SHADER_3D_POINT_FIXED_SIZE_VARYING_COLOR, - GPU_SHADER_CFG_DEFAULT); test_compile_builtin_shader(GPU_SHADER_3D_POINT_VARYING_SIZE_VARYING_COLOR, GPU_SHADER_CFG_DEFAULT); test_compile_builtin_shader(GPU_SHADER_GPENCIL_STROKE, GPU_SHADER_CFG_DEFAULT); -- 2.30.2 From 167b45fd2fad52fe8bbe4b1dc45da303be78c422 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Foucault?= Date: Sun, 12 Feb 2023 17:37:01 +0100 Subject: [PATCH 034/182] Cleanup: GPUShader: Split Builtins to their own header Also improve documentation and cleanup. --- source/blender/gpu/GPU_shader.h | 175 +----------------------- source/blender/gpu/GPU_shader_builtin.h | 147 ++++++++++++++++++++ 2 files changed, 149 insertions(+), 173 deletions(-) create mode 100644 source/blender/gpu/GPU_shader_builtin.h diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h index 48cbc13b530a..92c74234871b 100644 --- a/source/blender/gpu/GPU_shader.h +++ b/source/blender/gpu/GPU_shader.h @@ -7,6 +7,8 @@ #pragma once +#include "GPU_shader_builtin.h" + #ifdef __cplusplus extern "C" { #endif @@ -202,179 +204,6 @@ bool GPU_shader_get_attribute_info(const GPUShader *shader, void GPU_shader_set_framebuffer_srgb_target(int use_srgb_to_linear); -/* Builtin/Non-generated shaders */ -typedef enum eGPUBuiltinShader { - /* specialized drawing */ - GPU_SHADER_TEXT, - GPU_SHADER_KEYFRAME_SHAPE, - GPU_SHADER_SIMPLE_LIGHTING, - /** - * Draw an icon, leaving a semi-transparent rectangle on top of the icon. - */ - GPU_SHADER_ICON, - /** - * Take a 2D position and color for each vertex with linear interpolation in window space. - * - * \param color: in vec4 - * \param pos: in vec2 - */ - GPU_SHADER_2D_IMAGE_DESATURATE_COLOR, - GPU_SHADER_2D_IMAGE_RECT_COLOR, - GPU_SHADER_2D_IMAGE_MULTI_RECT_COLOR, - GPU_SHADER_2D_CHECKER, - GPU_SHADER_2D_DIAG_STRIPES, - /* for simple 3D drawing */ - /** - * Take a single color for all the vertices and a 3D position for each vertex. - * - * \param color: uniform vec4 - * \param pos: in vec3 - */ - GPU_SHADER_3D_UNIFORM_COLOR, - GPU_SHADER_3D_CLIPPED_UNIFORM_COLOR, - /** - * Take a 3D position and color for each vertex without color interpolation. - * - * \param color: in vec4 - * \param pos: in vec3 - */ - GPU_SHADER_3D_FLAT_COLOR, - /** - * Take a 3D position and color for each vertex with perspective correct interpolation. - * - * \param color: in vec4 - * \param pos: in vec3 - */ - GPU_SHADER_3D_SMOOTH_COLOR, - /** - * Take a single color for all the vertices and a 3D position for each vertex. - * Used for drawing wide lines. - * - * \param color: uniform vec4 - * \param pos: in vec3 - */ - GPU_SHADER_3D_POLYLINE_UNIFORM_COLOR, - GPU_SHADER_3D_POLYLINE_CLIPPED_UNIFORM_COLOR, - /** - * Take a 3D position and color for each vertex without color interpolation. - * Used for drawing wide lines. - * - * \param color: in vec4 - * \param pos: in vec3 - */ - GPU_SHADER_3D_POLYLINE_FLAT_COLOR, - /** - * Take a 3D position and color for each vertex with perspective correct interpolation. - * Used for drawing wide lines. - * - * \param color: in vec4 - * \param pos: in vec3 - */ - GPU_SHADER_3D_POLYLINE_SMOOTH_COLOR, - /** - * Take a 3D position for each vertex and output only depth. - * Used for drawing wide lines. - * - * \param pos: in vec3 - */ - GPU_SHADER_3D_DEPTH_ONLY, - /* basic image drawing */ - GPU_SHADER_2D_IMAGE_OVERLAYS_MERGE, - GPU_SHADER_2D_IMAGE_OVERLAYS_STEREO_MERGE, - GPU_SHADER_2D_IMAGE_SHUFFLE_COLOR, - /** - * Draw a texture in 3D. Take a 3D position and a 2D texture coordinate for each vertex. - * - * Exposed via Python-API for add-ons. - * - * \param image: uniform sampler2D - * \param texCoord: in vec2 - * \param pos: in vec3 - */ - GPU_SHADER_3D_IMAGE, - /** - * Take a 3D position and color for each vertex with linear interpolation in window space. - * - * \param color: uniform vec4 - * \param image: uniform sampler2D - * \param texCoord: in vec2 - * \param pos: in vec3 - */ - GPU_SHADER_3D_IMAGE_COLOR, - /* points */ - /** - * Draw round points with a constant size. - * Take a single color for all the vertices and a 2D position for each vertex. - * - * \param size: uniform float - * \param color: uniform vec4 - * \param pos: in vec2 - */ - GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA, - /** - * Draw round points with a constant size and an outline. - * Take a single color for all the vertices and a 2D position for each vertex. - * - * \param size: uniform float - * \param outlineWidth: uniform float - * \param color: uniform vec4 - * \param outlineColor: uniform vec4 - * \param pos: in vec2 - */ - GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA, - /** - * Draw round points with a constant size. - * Take a single color for all the vertices and a 3D position for each vertex. - * - * \param size: uniform float - * \param color: uniform vec4 - * \param pos: in vec3 - */ - GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA, - /** - * Draw round points with a constant size and an outline. - * Take a 3D position and a color for each vertex. - * - * \param size: in float - * \param color: in vec4 - * \param pos: in vec3 - */ - GPU_SHADER_3D_POINT_VARYING_SIZE_VARYING_COLOR, - /* lines */ - GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR, - /* grease pencil drawing */ - GPU_SHADER_GPENCIL_STROKE, - /* specialized for widget drawing */ - GPU_SHADER_2D_AREA_BORDERS, - GPU_SHADER_2D_WIDGET_BASE, - GPU_SHADER_2D_WIDGET_BASE_INST, - GPU_SHADER_2D_WIDGET_SHADOW, - GPU_SHADER_2D_NODELINK, - GPU_SHADER_2D_NODELINK_INST, -} eGPUBuiltinShader; -#define GPU_SHADER_BUILTIN_LEN (GPU_SHADER_2D_NODELINK_INST + 1) - -/** Support multiple configurations. */ -typedef enum eGPUShaderConfig { - GPU_SHADER_CFG_DEFAULT = 0, - GPU_SHADER_CFG_CLIPPED = 1, -} eGPUShaderConfig; -#define GPU_SHADER_CFG_LEN (GPU_SHADER_CFG_CLIPPED + 1) - -typedef struct GPUShaderConfigData { - const char *lib; - const char *def; -} GPUShaderConfigData; -/* gpu_shader.c */ - -extern const GPUShaderConfigData GPU_shader_cfg_data[GPU_SHADER_CFG_LEN]; - -GPUShader *GPU_shader_get_builtin_shader_with_config(eGPUBuiltinShader shader, - eGPUShaderConfig sh_cfg); -GPUShader *GPU_shader_get_builtin_shader(eGPUBuiltinShader shader); - -void GPU_shader_free_builtin_shaders(void); - /* Vertex attributes for shaders */ /* Hardware limit is 16. Position attribute is always needed so we reduce to 15. diff --git a/source/blender/gpu/GPU_shader_builtin.h b/source/blender/gpu/GPU_shader_builtin.h new file mode 100644 index 000000000000..bd9fa9eb232f --- /dev/null +++ b/source/blender/gpu/GPU_shader_builtin.h @@ -0,0 +1,147 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later + * Copyright 2023 Blender Foundation. All rights reserved. */ + +/** \file + * \ingroup gpu + * + * Set of shaders used for interface drawing. + * + * 2D shaders are not expected to work in 3D. + * 3D shaders can work with 2D geometry and matrices. + * + * `INST` suffix means instance, which means the shader is build to leverage instancing + * capabilities to reduce the number of draw-calls. + * + * For full list of parameters, search for the the associated #ShaderCreateInfo. + * Example: `GPU_SHADER_ICON` is defined by `GPU_SHADER_CREATE_INFO(gpu_shader_icon)` + * Some parameters are builtins and are set automatically (ex: `ModelViewProjectionMatrix`). + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +struct GPUShader; + +typedef enum eGPUBuiltinShader { + /** Glyph drawing shader used by the BLF module. */ + GPU_SHADER_TEXT, + /** Draws keyframe markers. All markers shapes are supported through a single shader. */ + GPU_SHADER_KEYFRAME_SHAPE, + /** Draw solid mesh with a single distant light using a clamped simple dot product. */ + GPU_SHADER_SIMPLE_LIGHTING, + /** Draw an icon, leaving a semi-transparent rectangle on top of the icon. */ + GPU_SHADER_ICON, + /** Draw a texture with a uniform color multiplied. */ + GPU_SHADER_2D_IMAGE_RECT_COLOR, + /** Draw a texture with a desaturation factor. */ + GPU_SHADER_2D_IMAGE_DESATURATE_COLOR, + /** Draw a group of texture rectangle with an associated color multiplied. */ + GPU_SHADER_2D_IMAGE_MULTI_RECT_COLOR, + /** Draw a two color checker based on screen position (not UV coordinates). */ + GPU_SHADER_2D_CHECKER, + /** Draw diagonal stripes with two alternating colors. */ + GPU_SHADER_2D_DIAG_STRIPES, + /** Draw dashed lines with custom dash length and uniform color. */ + GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR, + /** Draw triangles / lines / points with only depth output. */ + GPU_SHADER_3D_DEPTH_ONLY, + /** Merge viewport overlay texture with the render output. */ + GPU_SHADER_2D_IMAGE_OVERLAYS_MERGE, + GPU_SHADER_2D_IMAGE_OVERLAYS_STEREO_MERGE, + /** Merge viewport overlay texture with the render output. */ + GPU_SHADER_2D_IMAGE_SHUFFLE_COLOR, + /** Used for drawing of annotations (former grease pencil). */ + GPU_SHADER_GPENCIL_STROKE, + /** Draw rounded area borders with silky smooth anti-aliasing without any over-draw. */ + GPU_SHADER_2D_AREA_BORDERS, + /** Multi usage widget shaders for drawing buttons and other UI elements. */ + GPU_SHADER_2D_WIDGET_BASE, + GPU_SHADER_2D_WIDGET_BASE_INST, + GPU_SHADER_2D_WIDGET_SHADOW, + /** Draw a node link given an input quadratic Bezier curve. */ + GPU_SHADER_2D_NODELINK, + GPU_SHADER_2D_NODELINK_INST, + + /** Draw round points with per vertex size and color. */ + GPU_SHADER_3D_POINT_VARYING_SIZE_VARYING_COLOR, + /** Draw round points with a uniform size. Disabling blending will disable AA. */ + GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA, + GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA, + /** Draw round points with a uniform size and an outline. Disabling blending will disable AA. */ + GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA, + + /** Draw geometry with uniform color. Has an additional clip plane parameter. */ + GPU_SHADER_3D_CLIPPED_UNIFORM_COLOR, + /** Draw wide lines with uniform color. Has an additional clip plane parameter. */ + GPU_SHADER_3D_POLYLINE_CLIPPED_UNIFORM_COLOR, + + /** + * ----------------------- Shaders exposed through pyGPU module ----------------------- + * + * Avoid breaking the interface of these shaders as they are used by addons. + * Polyline versions are used for drawing wide lines (> 1px width). + */ + + /** + * Take a 3D position and color for each vertex without color interpolation. + * + * \param color: in vec4 + * \param pos: in vec3 + */ + GPU_SHADER_3D_FLAT_COLOR, + GPU_SHADER_3D_POLYLINE_FLAT_COLOR, + /** + * Take a 3D position and color for each vertex with perspective correct interpolation. + * + * \param color: in vec4 + * \param pos: in vec3 + */ + GPU_SHADER_3D_SMOOTH_COLOR, + GPU_SHADER_3D_POLYLINE_SMOOTH_COLOR, + /** + * Take a single color for all the vertices and a 3D position for each vertex. + * + * \param color: uniform vec4 + * \param pos: in vec3 + */ + GPU_SHADER_3D_UNIFORM_COLOR, + GPU_SHADER_3D_POLYLINE_UNIFORM_COLOR, + /** + * Draw a texture in 3D. Take a 3D position and a 2D texture coordinate for each vertex. + * + * \param image: uniform sampler2D + * \param texCoord: in vec2 + * \param pos: in vec3 + */ + GPU_SHADER_3D_IMAGE, + /** + * Take a 3D position and color for each vertex with linear interpolation in window space. + * + * \param color: uniform vec4 + * \param image: uniform sampler2D + * \param texCoord: in vec2 + * \param pos: in vec3 + */ + GPU_SHADER_3D_IMAGE_COLOR, +} eGPUBuiltinShader; +#define GPU_SHADER_BUILTIN_LEN (GPU_SHADER_3D_IMAGE_COLOR + 1) + +/** Support multiple configurations. */ +typedef enum eGPUShaderConfig { + GPU_SHADER_CFG_DEFAULT = 0, + GPU_SHADER_CFG_CLIPPED = 1, +} eGPUShaderConfig; +#define GPU_SHADER_CFG_LEN (GPU_SHADER_CFG_CLIPPED + 1) + +struct GPUShader *GPU_shader_get_builtin_shader_with_config(eGPUBuiltinShader shader, + eGPUShaderConfig sh_cfg); +struct GPUShader *GPU_shader_get_builtin_shader(eGPUBuiltinShader shader); + +void GPU_shader_free_builtin_shaders(void); + +#ifdef __cplusplus +} +#endif -- 2.30.2 From 15dbc0c8ff3935107e60ab0ffac006217b43e0e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Foucault?= Date: Sun, 12 Feb 2023 17:40:13 +0100 Subject: [PATCH 035/182] Cleanup: GPUShader: Reorganize GPU_shader.h to separate depecated API This avoid confusion to what to use nowadays. Also improves documentation. --- source/blender/gpu/GPU_shader.h | 275 +++++++++++------- source/blender/gpu/intern/gpu_immediate.cc | 2 +- source/blender/gpu/intern/gpu_shader.cc | 102 ++----- .../blender/gpu/intern/gpu_shader_private.hh | 4 + source/blender/gpu/metal/mtl_framebuffer.mm | 2 +- source/blender/gpu/opengl/gl_framebuffer.cc | 2 +- 6 files changed, 210 insertions(+), 177 deletions(-) diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h index 92c74234871b..33a5fa01860a 100644 --- a/source/blender/gpu/GPU_shader.h +++ b/source/blender/gpu/GPU_shader.h @@ -3,6 +3,8 @@ /** \file * \ingroup gpu + * + * A #GPUShader is a container for backend specific shader program. */ #pragma once @@ -20,6 +22,162 @@ typedef struct GPUShaderCreateInfo GPUShaderCreateInfo; /** Opaque type hiding #blender::gpu::Shader */ typedef struct GPUShader GPUShader; +/* Hardware limit is 16. Position attribute is always needed so we reduce to 15. + * This makes sure the GPUVertexFormat name buffer does not overflow. */ +#define GPU_MAX_ATTR 15 + +/* Determined by the maximum uniform buffer size divided by chunk size. */ +#define GPU_MAX_UNIFORM_ATTR 8 + +/* -------------------------------------------------------------------- */ +/** \name Creation + * \{ */ + +/** + * Create a shader using the given #GPUShaderCreateInfo. + * Can return a NULL pointer if compilation fails. + */ +GPUShader *GPU_shader_create_from_info(const GPUShaderCreateInfo *_info); + +/** + * Create a shader using a named #GPUShaderCreateInfo registered at startup. + * These are declared inside `*_info.hh` files using the `GPU_SHADER_CREATE_INFO()` macro. + * They are also expected to have been flagged using `do_static_compilation`. + * Can return a NULL pointer if compilation fails. + */ +GPUShader *GPU_shader_create_from_info_name(const char *info_name); + +/** + * Fetch a named #GPUShaderCreateInfo registered at startup. + * These are declared inside `*_info.hh` files using the `GPU_SHADER_CREATE_INFO()` macro. + * Can return a NULL pointer if no match is found. + */ +const GPUShaderCreateInfo *GPU_shader_create_info_get(const char *info_name); + +/** + * Error checking for user created shaders. + * \return true is create info is valid. + */ +bool GPU_shader_create_info_check_error(const GPUShaderCreateInfo *_info, char r_error[128]); + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Free + * \{ */ + +void GPU_shader_free(GPUShader *shader); + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Binding + * \{ */ + +/** + * Set the given shader as active shader for the active GPU context. + * It replaces any already bound shader. + * All following draw-calls and dispatches will use this shader. + * Uniform functions need to have the shader bound in order to work. (TODO: until we use + * glProgramUniform) + */ +void GPU_shader_bind(GPUShader *shader); + +/** + * Unbind the active shader. + * \note this is a no-op in release builds. But it make sense to actually do it in user land code + * to detect incorrect API usage. + */ +void GPU_shader_unbind(void); + +/** + * Return the currently bound shader to the active GPU context. + * \return NULL pointer if no shader is bound of if no context is active. + */ +GPUShader *GPU_shader_get_bound(void); + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Debugging introspection API. + * \{ */ + +const char *GPU_shader_get_name(GPUShader *shader); + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Uniform API. + * \{ */ + +/** + * Returns binding point location. + * Binding location are given to be set at compile time and immutable. + */ +/* TODO(fclem): Make naming consistent. ubo_binding, ssbo_binding */ +int GPU_shader_get_uniform_block_binding(GPUShader *shader, const char *name); +int GPU_shader_get_texture_binding(GPUShader *shader, const char *name); +int GPU_shader_get_ssbo(GPUShader *shader, const char *name); + +/** + * Returns uniform location. + * If cached, it is faster than querying the interface for each uniform assignment. + */ +int GPU_shader_get_uniform(GPUShader *shader, const char *name); + +/** + * Sets a generic push constant (a.k.a. uniform). + * \a length and \a array_size should match the create info push_constant declaration. + */ +void GPU_shader_uniform_vector( + GPUShader *shader, int location, int length, int array_size, const float *value); +void GPU_shader_uniform_vector_int( + GPUShader *shader, int location, int length, int array_size, const int *value); + +/** + * Sets a generic push constant (a.k.a. uniform). + * \a length and \a array_size should match the create info push_constant declaration. + * These functions need to have the shader bound in order to work. (TODO: until we use + * glProgramUniform) + */ +void GPU_shader_uniform_1i(GPUShader *sh, const char *name, int value); +void GPU_shader_uniform_1b(GPUShader *sh, const char *name, bool value); +void GPU_shader_uniform_1f(GPUShader *sh, const char *name, float value); +void GPU_shader_uniform_2f(GPUShader *sh, const char *name, float x, float y); +void GPU_shader_uniform_3f(GPUShader *sh, const char *name, float x, float y, float z); +void GPU_shader_uniform_4f(GPUShader *sh, const char *name, float x, float y, float z, float w); +void GPU_shader_uniform_2fv(GPUShader *sh, const char *name, const float data[2]); +void GPU_shader_uniform_3fv(GPUShader *sh, const char *name, const float data[3]); +void GPU_shader_uniform_4fv(GPUShader *sh, const char *name, const float data[4]); +void GPU_shader_uniform_2iv(GPUShader *sh, const char *name, const int data[2]); +void GPU_shader_uniform_mat4(GPUShader *sh, const char *name, const float data[4][4]); +void GPU_shader_uniform_mat3_as_mat4(GPUShader *sh, const char *name, const float data[3][3]); +void GPU_shader_uniform_2fv_array(GPUShader *sh, const char *name, int len, const float (*val)[2]); +void GPU_shader_uniform_4fv_array(GPUShader *sh, const char *name, int len, const float (*val)[4]); + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Attribute API. + * + * Used to create #GPUVertexFormat from the shader's vertex input layout. + * \{ */ + +unsigned int GPU_shader_get_attribute_len(const GPUShader *shader); +int GPU_shader_get_attribute(const GPUShader *shader, const char *name); +bool GPU_shader_get_attribute_info(const GPUShader *shader, + int attr_location, + char r_name[256], + int *r_type); + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Legacy API + * + * All of this section is deprecated and should be ported to use the API described above. + * \{ */ + typedef enum eGPUShaderTFBType { GPU_SHADER_TFB_NONE = 0, /* Transform feedback unsupported. */ GPU_SHADER_TFB_POINTS = 1, @@ -53,54 +211,6 @@ GPUShader *GPU_shader_create_ex(const char *vertcode, const char **tf_names, int tf_count, const char *shname); -GPUShader *GPU_shader_create_from_info(const GPUShaderCreateInfo *_info); -GPUShader *GPU_shader_create_from_info_name(const char *info_name); - -const GPUShaderCreateInfo *GPU_shader_create_info_get(const char *info_name); -bool GPU_shader_create_info_check_error(const GPUShaderCreateInfo *_info, char r_error[128]); - -struct GPU_ShaderCreateFromArray_Params { - const char **vert, **geom, **frag, **defs; -}; -/** - * Use via #GPU_shader_create_from_arrays macro (avoids passing in param). - * - * Similar to #DRW_shader_create_with_lib with the ability to include libraries for each type of - * shader. - * - * It has the advantage that each item can be conditionally included - * without having to build the string inline, then free it. - * - * \param params: NULL terminated arrays of strings. - * - * Example: - * \code{.c} - * sh = GPU_shader_create_from_arrays({ - * .vert = (const char *[]){shader_lib_glsl, shader_vert_glsl, NULL}, - * .geom = (const char *[]){shader_geom_glsl, NULL}, - * .frag = (const char *[]){shader_frag_glsl, NULL}, - * .defs = (const char *[]){"#define DEFINE\n", test ? "#define OTHER_DEFINE\n" : "", NULL}, - * }); - * \endcode - */ -struct GPUShader *GPU_shader_create_from_arrays_impl( - const struct GPU_ShaderCreateFromArray_Params *params, const char *func, int line); - -#define GPU_shader_create_from_arrays(...) \ - GPU_shader_create_from_arrays_impl( \ - &(const struct GPU_ShaderCreateFromArray_Params)__VA_ARGS__, __func__, __LINE__) - -#define GPU_shader_create_from_arrays_named(name, ...) \ - GPU_shader_create_from_arrays_impl( \ - &(const struct GPU_ShaderCreateFromArray_Params)__VA_ARGS__, name, 0) - -void GPU_shader_free(GPUShader *shader); - -void GPU_shader_bind(GPUShader *shader); -void GPU_shader_unbind(void); -GPUShader *GPU_shader_get_bound(void); - -const char *GPU_shader_get_name(GPUShader *shader); /** * Returns true if transform feedback was successfully enabled. @@ -111,6 +221,9 @@ void GPU_shader_transform_feedback_disable(GPUShader *shader); /** DEPRECATED: Kept only because of BGL API. */ int GPU_shader_get_program(GPUShader *shader); +/** + * Indexed commonly used uniform name for faster lookup into the uniform cache. + */ typedef enum { GPU_UNIFORM_MODEL = 0, /* mat4 ModelMatrix */ GPU_UNIFORM_VIEW, /* mat4 ViewMatrix */ @@ -134,16 +247,19 @@ typedef enum { GPU_UNIFORM_RESOURCE_CHUNK, /* int resourceChunk */ GPU_UNIFORM_RESOURCE_ID, /* int resourceId */ GPU_UNIFORM_SRGB_TRANSFORM, /* bool srgbTarget */ - - GPU_NUM_UNIFORMS, /* Special value, denotes number of builtin uniforms. */ } GPUUniformBuiltin; +#define GPU_NUM_UNIFORMS (GPU_UNIFORM_SRGB_TRANSFORM + 1) +/** TODO: To be moved as private API. Not really used outside of gpu_matrix.cc and doesn't really + * offer a noticeable perf boost. */ +int GPU_shader_get_builtin_uniform(GPUShader *shader, int builtin); + +/** DEPRECATED: Use hardcoded buffer location instead. */ typedef enum { - /** Deprecated */ GPU_UNIFORM_BLOCK_VIEW = 0, /* viewBlock */ GPU_UNIFORM_BLOCK_MODEL, /* modelBlock */ GPU_UNIFORM_BLOCK_INFO, /* infoBlock */ - /** New ones */ + GPU_UNIFORM_BLOCK_DRW_VIEW, GPU_UNIFORM_BLOCK_DRW_MODEL, GPU_UNIFORM_BLOCK_DRW_INFOS, @@ -152,6 +268,10 @@ typedef enum { GPU_NUM_UNIFORM_BLOCKS, /* Special value, denotes number of builtin uniforms block. */ } GPUUniformBlockBuiltin; +/** DEPRECATED: Use hardcoded buffer location instead. */ +int GPU_shader_get_builtin_block(GPUShader *shader, int builtin); + +/** DEPRECATED: Use hardcoded buffer location instead. */ typedef enum { GPU_STORAGE_BUFFER_DEBUG_VERTS = 0, /* drw_debug_verts_buf */ GPU_STORAGE_BUFFER_DEBUG_PRINT, /* drw_debug_print_buf */ @@ -159,60 +279,19 @@ typedef enum { GPU_NUM_STORAGE_BUFFERS, /* Special value, denotes number of builtin buffer blocks. */ } GPUStorageBufferBuiltin; -void GPU_shader_set_srgb_uniform(GPUShader *shader); - -int GPU_shader_get_uniform(GPUShader *shader, const char *name); -int GPU_shader_get_builtin_uniform(GPUShader *shader, int builtin); -int GPU_shader_get_builtin_block(GPUShader *shader, int builtin); +/** DEPRECATED: Use hardcoded buffer location instead. */ int GPU_shader_get_builtin_ssbo(GPUShader *shader, int builtin); + /** DEPRECATED: Kept only because of Python GPU API. */ int GPU_shader_get_uniform_block(GPUShader *shader, const char *name); -int GPU_shader_get_ssbo(GPUShader *shader, const char *name); - -int GPU_shader_get_uniform_block_binding(GPUShader *shader, const char *name); -int GPU_shader_get_texture_binding(GPUShader *shader, const char *name); - -void GPU_shader_uniform_vector( - GPUShader *shader, int location, int length, int arraysize, const float *value); -void GPU_shader_uniform_vector_int( - GPUShader *shader, int location, int length, int arraysize, const int *value); +/** DEPRECATED: To be replaced by GPU_shader_uniform_vector. */ void GPU_shader_uniform_float(GPUShader *shader, int location, float value); void GPU_shader_uniform_int(GPUShader *shader, int location, int value); -void GPU_shader_uniform_1i(GPUShader *sh, const char *name, int value); -void GPU_shader_uniform_1b(GPUShader *sh, const char *name, bool value); -void GPU_shader_uniform_1f(GPUShader *sh, const char *name, float value); -void GPU_shader_uniform_2f(GPUShader *sh, const char *name, float x, float y); -void GPU_shader_uniform_3f(GPUShader *sh, const char *name, float x, float y, float z); -void GPU_shader_uniform_4f(GPUShader *sh, const char *name, float x, float y, float z, float w); -void GPU_shader_uniform_2fv(GPUShader *sh, const char *name, const float data[2]); -void GPU_shader_uniform_3fv(GPUShader *sh, const char *name, const float data[3]); -void GPU_shader_uniform_4fv(GPUShader *sh, const char *name, const float data[4]); -void GPU_shader_uniform_2iv(GPUShader *sh, const char *name, const int data[2]); -void GPU_shader_uniform_mat4(GPUShader *sh, const char *name, const float data[4][4]); -void GPU_shader_uniform_mat3_as_mat4(GPUShader *sh, const char *name, const float data[3][3]); -void GPU_shader_uniform_2fv_array(GPUShader *sh, const char *name, int len, const float (*val)[2]); -void GPU_shader_uniform_4fv_array(GPUShader *sh, const char *name, int len, const float (*val)[4]); - -unsigned int GPU_shader_get_attribute_len(const GPUShader *shader); -int GPU_shader_get_attribute(GPUShader *shader, const char *name); -bool GPU_shader_get_attribute_info(const GPUShader *shader, - int attr_location, - char r_name[256], - int *r_type); - -void GPU_shader_set_framebuffer_srgb_target(int use_srgb_to_linear); - -/* Vertex attributes for shaders */ - -/* Hardware limit is 16. Position attribute is always needed so we reduce to 15. - * This makes sure the GPUVertexFormat name buffer does not overflow. */ -#define GPU_MAX_ATTR 15 - -/* Determined by the maximum uniform buffer size divided by chunk size. */ -#define GPU_MAX_UNIFORM_ATTR 8 +/** \} */ +/* TODO: Move to shader shared. */ typedef enum eGPUKeyframeShapes { GPU_KEYFRAME_SHAPE_DIAMOND = (1 << 0), GPU_KEYFRAME_SHAPE_CIRCLE = (1 << 1), diff --git a/source/blender/gpu/intern/gpu_immediate.cc b/source/blender/gpu/intern/gpu_immediate.cc index 2c4f43cdde8b..a983d1da6ca2 100644 --- a/source/blender/gpu/intern/gpu_immediate.cc +++ b/source/blender/gpu/intern/gpu_immediate.cc @@ -54,7 +54,7 @@ void immBindShader(GPUShader *shader) GPU_shader_bind(shader); GPU_matrix_bind(shader); - GPU_shader_set_srgb_uniform(shader); + Shader::set_srgb_uniform(shader); } void immBindBuiltinProgram(eGPUBuiltinShader shader_id) diff --git a/source/blender/gpu/intern/gpu_shader.cc b/source/blender/gpu/intern/gpu_shader.cc index 0653ae11a0ae..b073f9939192 100644 --- a/source/blender/gpu/intern/gpu_shader.cc +++ b/source/blender/gpu/intern/gpu_shader.cc @@ -46,8 +46,6 @@ std::string Shader::defines_declare(const shader::ShaderCreateInfo &info) const using namespace blender; using namespace blender::gpu; -static bool gpu_shader_srgb_uniform_dirty_get(); - /* -------------------------------------------------------------------- */ /** \name Creation / Destruction * \{ */ @@ -443,58 +441,6 @@ GPUShader *GPU_shader_create_from_python(const char *vertcode, return sh; } -static const char *string_join_array_maybe_alloc(const char **str_arr, bool *r_is_alloc) -{ - bool is_alloc = false; - if (str_arr == nullptr) { - *r_is_alloc = false; - return nullptr; - } - /* Skip empty strings (avoid alloc if we can). */ - while (str_arr[0] && str_arr[0][0] == '\0') { - str_arr++; - } - int i; - for (i = 0; str_arr[i]; i++) { - if (i != 0 && str_arr[i][0] != '\0') { - is_alloc = true; - } - } - *r_is_alloc = is_alloc; - if (is_alloc) { - return BLI_string_join_arrayN(str_arr, i); - } - - return str_arr[0]; -} - -struct GPUShader *GPU_shader_create_from_arrays_impl( - const struct GPU_ShaderCreateFromArray_Params *params, const char *func, int line) -{ - struct { - const char *str; - bool is_alloc; - } str_dst[4] = {{nullptr}}; - const char **str_src[4] = {params->vert, params->frag, params->geom, params->defs}; - - for (int i = 0; i < ARRAY_SIZE(str_src); i++) { - str_dst[i].str = string_join_array_maybe_alloc(str_src[i], &str_dst[i].is_alloc); - } - - char name[64]; - BLI_snprintf(name, sizeof(name), "%s_%d", func, line); - - GPUShader *sh = GPU_shader_create( - str_dst[0].str, str_dst[1].str, str_dst[2].str, nullptr, str_dst[3].str, name); - - for (auto &i : str_dst) { - if (i.is_alloc) { - MEM_freeN((void *)i.str); - } - } - return sh; -} - /** \} */ /* -------------------------------------------------------------------- */ @@ -511,11 +457,11 @@ void GPU_shader_bind(GPUShader *gpu_shader) ctx->shader = shader; shader->bind(); GPU_matrix_bind(gpu_shader); - GPU_shader_set_srgb_uniform(gpu_shader); + Shader::set_srgb_uniform(gpu_shader); } else { - if (gpu_shader_srgb_uniform_dirty_get()) { - GPU_shader_set_srgb_uniform(gpu_shader); + if (Shader::srgb_uniform_dirty_get()) { + Shader::set_srgb_uniform(gpu_shader); } if (GPU_matrix_dirty_get()) { GPU_matrix_bind(gpu_shader); @@ -580,66 +526,66 @@ void GPU_shader_transform_feedback_disable(GPUShader *shader) int GPU_shader_get_uniform(GPUShader *shader, const char *name) { - ShaderInterface *interface = unwrap(shader)->interface; + const ShaderInterface *interface = unwrap(shader)->interface; const ShaderInput *uniform = interface->uniform_get(name); return uniform ? uniform->location : -1; } int GPU_shader_get_builtin_uniform(GPUShader *shader, int builtin) { - ShaderInterface *interface = unwrap(shader)->interface; + const ShaderInterface *interface = unwrap(shader)->interface; return interface->uniform_builtin((GPUUniformBuiltin)builtin); } int GPU_shader_get_builtin_block(GPUShader *shader, int builtin) { - ShaderInterface *interface = unwrap(shader)->interface; + const ShaderInterface *interface = unwrap(shader)->interface; return interface->ubo_builtin((GPUUniformBlockBuiltin)builtin); } int GPU_shader_get_builtin_ssbo(GPUShader *shader, int builtin) { - ShaderInterface *interface = unwrap(shader)->interface; + const ShaderInterface *interface = unwrap(shader)->interface; return interface->ssbo_builtin((GPUStorageBufferBuiltin)builtin); } int GPU_shader_get_ssbo(GPUShader *shader, const char *name) { - ShaderInterface *interface = unwrap(shader)->interface; + const ShaderInterface *interface = unwrap(shader)->interface; const ShaderInput *ssbo = interface->ssbo_get(name); return ssbo ? ssbo->location : -1; } int GPU_shader_get_uniform_block(GPUShader *shader, const char *name) { - ShaderInterface *interface = unwrap(shader)->interface; + const ShaderInterface *interface = unwrap(shader)->interface; const ShaderInput *ubo = interface->ubo_get(name); return ubo ? ubo->location : -1; } int GPU_shader_get_uniform_block_binding(GPUShader *shader, const char *name) { - ShaderInterface *interface = unwrap(shader)->interface; + const ShaderInterface *interface = unwrap(shader)->interface; const ShaderInput *ubo = interface->ubo_get(name); return ubo ? ubo->binding : -1; } int GPU_shader_get_texture_binding(GPUShader *shader, const char *name) { - ShaderInterface *interface = unwrap(shader)->interface; + const ShaderInterface *interface = unwrap(shader)->interface; const ShaderInput *tex = interface->uniform_get(name); return tex ? tex->binding : -1; } uint GPU_shader_get_attribute_len(const GPUShader *shader) { - ShaderInterface *interface = unwrap(shader)->interface; + const ShaderInterface *interface = unwrap(shader)->interface; return interface->attr_len_; } -int GPU_shader_get_attribute(GPUShader *shader, const char *name) +int GPU_shader_get_attribute(const GPUShader *shader, const char *name) { - ShaderInterface *interface = unwrap(shader)->interface; + const ShaderInterface *interface = unwrap(shader)->interface; const ShaderInput *attr = interface->attr_get(name); return attr ? attr->location : -1; } @@ -649,7 +595,7 @@ bool GPU_shader_get_attribute_info(const GPUShader *shader, char r_name[256], int *r_type) { - ShaderInterface *interface = unwrap(shader)->interface; + const ShaderInterface *interface = unwrap(shader)->interface; const ShaderInput *attr = interface->attr_get(attr_location); if (!attr) { @@ -679,15 +625,15 @@ int GPU_shader_get_program(GPUShader *shader) * \{ */ void GPU_shader_uniform_vector( - GPUShader *shader, int loc, int len, int arraysize, const float *value) + GPUShader *shader, int loc, int len, int array_size, const float *value) { - unwrap(shader)->uniform_float(loc, len, arraysize, value); + unwrap(shader)->uniform_float(loc, len, array_size, value); } void GPU_shader_uniform_vector_int( - GPUShader *shader, int loc, int len, int arraysize, const int *value) + GPUShader *shader, int loc, int len, int array_size, const int *value) { - unwrap(shader)->uniform_int(loc, len, arraysize, value); + unwrap(shader)->uniform_int(loc, len, array_size, value); } void GPU_shader_uniform_int(GPUShader *shader, int location, int value) @@ -797,15 +743,17 @@ void GPU_shader_uniform_4fv_array(GPUShader *sh, const char *name, int len, cons * frame-buffer color-space. * \{ */ +namespace blender::gpu { + static int g_shader_builtin_srgb_transform = 0; static bool g_shader_builtin_srgb_is_dirty = false; -static bool gpu_shader_srgb_uniform_dirty_get() +bool Shader::srgb_uniform_dirty_get() { return g_shader_builtin_srgb_is_dirty; } -void GPU_shader_set_srgb_uniform(GPUShader *shader) +void Shader::set_srgb_uniform(GPUShader *shader) { int32_t loc = GPU_shader_get_builtin_uniform(shader, GPU_UNIFORM_SRGB_TRANSFORM); if (loc != -1) { @@ -814,7 +762,7 @@ void GPU_shader_set_srgb_uniform(GPUShader *shader) g_shader_builtin_srgb_is_dirty = false; } -void GPU_shader_set_framebuffer_srgb_target(int use_srgb_to_linear) +void Shader::set_framebuffer_srgb_target(int use_srgb_to_linear) { if (g_shader_builtin_srgb_transform != use_srgb_to_linear) { g_shader_builtin_srgb_transform = use_srgb_to_linear; @@ -822,4 +770,6 @@ void GPU_shader_set_framebuffer_srgb_target(int use_srgb_to_linear) } } +} // namespace blender::gpu + /** \} */ diff --git a/source/blender/gpu/intern/gpu_shader_private.hh b/source/blender/gpu/intern/gpu_shader_private.hh index a822cd8aa38d..e4d036a95547 100644 --- a/source/blender/gpu/intern/gpu_shader_private.hh +++ b/source/blender/gpu/intern/gpu_shader_private.hh @@ -71,6 +71,10 @@ class Shader { return name; }; + static bool srgb_uniform_dirty_get(); + static void set_srgb_uniform(GPUShader *shader); + static void set_framebuffer_srgb_target(int use_srgb_to_linear); + protected: void print_log( Span sources, char *log, const char *stage, bool error, GPULogParser *parser); diff --git a/source/blender/gpu/metal/mtl_framebuffer.mm b/source/blender/gpu/metal/mtl_framebuffer.mm index dc8741e377bc..9b334dd71664 100644 --- a/source/blender/gpu/metal/mtl_framebuffer.mm +++ b/source/blender/gpu/metal/mtl_framebuffer.mm @@ -109,7 +109,7 @@ void MTLFrameBuffer::bind(bool enabled_srgb) this->mark_dirty(); } enabled_srgb_ = enabled_srgb; - GPU_shader_set_framebuffer_srgb_target(enabled_srgb && srgb_); + Shader::set_framebuffer_srgb_target(enabled_srgb && srgb_); } /* Reset clear state on bind -- Clears and load/store ops are set after binding. */ diff --git a/source/blender/gpu/opengl/gl_framebuffer.cc b/source/blender/gpu/opengl/gl_framebuffer.cc index e94f5b66b97b..cc7ecae5c559 100644 --- a/source/blender/gpu/opengl/gl_framebuffer.cc +++ b/source/blender/gpu/opengl/gl_framebuffer.cc @@ -280,7 +280,7 @@ void GLFrameBuffer::bind(bool enabled_srgb) else { glDisable(GL_FRAMEBUFFER_SRGB); } - GPU_shader_set_framebuffer_srgb_target(enabled_srgb && srgb_); + Shader::set_framebuffer_srgb_target(enabled_srgb && srgb_); } if (context_->active_fb != this) { -- 2.30.2 From db9e351271473ac4594e747ed4e5c4c72d263b2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Foucault?= Date: Sun, 12 Feb 2023 20:53:42 +0100 Subject: [PATCH 036/182] Cleanup: GPU: Move `eGPUKeyframeShapes` to shader shared Removes code duplication. --- source/blender/editors/animation/keyframes_draw.c | 1 + source/blender/editors/space_node/node_draw.cc | 1 + source/blender/gpu/GPU_shader.h | 14 -------------- source/blender/gpu/GPU_shader_shared.h | 13 +++++++++++++ .../shaders/gpu_shader_keyframe_shape_frag.glsl | 12 ------------ .../shaders/gpu_shader_keyframe_shape_vert.glsl | 12 ------------ .../infos/gpu_shader_keyframe_shape_info.hh | 1 + 7 files changed, 16 insertions(+), 38 deletions(-) diff --git a/source/blender/editors/animation/keyframes_draw.c b/source/blender/editors/animation/keyframes_draw.c index d0b978b7adf0..6b1fdb977ff4 100644 --- a/source/blender/editors/animation/keyframes_draw.c +++ b/source/blender/editors/animation/keyframes_draw.c @@ -22,6 +22,7 @@ #include "DNA_scene_types.h" #include "GPU_immediate.h" +#include "GPU_shader_shared.h" #include "GPU_state.h" #include "UI_interface.h" diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc index 53a86e23ce10..31dc2695c97e 100644 --- a/source/blender/editors/space_node/node_draw.cc +++ b/source/blender/editors/space_node/node_draw.cc @@ -51,6 +51,7 @@ #include "GPU_immediate.h" #include "GPU_immediate_util.h" #include "GPU_matrix.h" +#include "GPU_shader_shared.h" #include "GPU_state.h" #include "GPU_viewport.h" diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h index 33a5fa01860a..d1824de62edf 100644 --- a/source/blender/gpu/GPU_shader.h +++ b/source/blender/gpu/GPU_shader.h @@ -291,20 +291,6 @@ void GPU_shader_uniform_int(GPUShader *shader, int location, int value); /** \} */ -/* TODO: Move to shader shared. */ -typedef enum eGPUKeyframeShapes { - GPU_KEYFRAME_SHAPE_DIAMOND = (1 << 0), - GPU_KEYFRAME_SHAPE_CIRCLE = (1 << 1), - GPU_KEYFRAME_SHAPE_CLIPPED_VERTICAL = (1 << 2), - GPU_KEYFRAME_SHAPE_CLIPPED_HORIZONTAL = (1 << 3), - GPU_KEYFRAME_SHAPE_INNER_DOT = (1 << 4), - GPU_KEYFRAME_SHAPE_ARROW_END_MAX = (1 << 8), - GPU_KEYFRAME_SHAPE_ARROW_END_MIN = (1 << 9), - GPU_KEYFRAME_SHAPE_ARROW_END_MIXED = (1 << 10), -} eGPUKeyframeShapes; -#define GPU_KEYFRAME_SHAPE_SQUARE \ - (GPU_KEYFRAME_SHAPE_CLIPPED_VERTICAL | GPU_KEYFRAME_SHAPE_CLIPPED_HORIZONTAL) - #ifdef __cplusplus } #endif diff --git a/source/blender/gpu/GPU_shader_shared.h b/source/blender/gpu/GPU_shader_shared.h index 4fb321ce502b..630a503690e1 100644 --- a/source/blender/gpu/GPU_shader_shared.h +++ b/source/blender/gpu/GPU_shader_shared.h @@ -11,6 +11,19 @@ typedef struct TestOutputRawData TestOutputRawData; #endif +enum eGPUKeyframeShapes { + GPU_KEYFRAME_SHAPE_DIAMOND = (1u << 0u), + GPU_KEYFRAME_SHAPE_CIRCLE = (1u << 1u), + GPU_KEYFRAME_SHAPE_CLIPPED_VERTICAL = (1u << 2u), + GPU_KEYFRAME_SHAPE_CLIPPED_HORIZONTAL = (1u << 3u), + GPU_KEYFRAME_SHAPE_INNER_DOT = (1u << 4u), + GPU_KEYFRAME_SHAPE_ARROW_END_MAX = (1u << 8u), + GPU_KEYFRAME_SHAPE_ARROW_END_MIN = (1u << 9u), + GPU_KEYFRAME_SHAPE_ARROW_END_MIXED = (1u << 10u), + GPU_KEYFRAME_SHAPE_SQUARE = (GPU_KEYFRAME_SHAPE_CLIPPED_VERTICAL | + GPU_KEYFRAME_SHAPE_CLIPPED_HORIZONTAL), +}; + struct NodeLinkData { float4 colors[3]; /* bezierPts Is actually a float2, but due to std140 each element needs to be aligned to 16 diff --git a/source/blender/gpu/shaders/gpu_shader_keyframe_shape_frag.glsl b/source/blender/gpu/shaders/gpu_shader_keyframe_shape_frag.glsl index 3690dd8d1d2a..3b1dad241824 100644 --- a/source/blender/gpu/shaders/gpu_shader_keyframe_shape_frag.glsl +++ b/source/blender/gpu/shaders/gpu_shader_keyframe_shape_frag.glsl @@ -1,16 +1,4 @@ -/* Values in GPU_shader.h. */ -#define GPU_KEYFRAME_SHAPE_DIAMOND (1u << 0) -#define GPU_KEYFRAME_SHAPE_CIRCLE (1u << 1) -#define GPU_KEYFRAME_SHAPE_CLIPPED_VERTICAL (1u << 2) -#define GPU_KEYFRAME_SHAPE_CLIPPED_HORIZONTAL (1u << 3) -#define GPU_KEYFRAME_SHAPE_INNER_DOT (1u << 4) -#define GPU_KEYFRAME_SHAPE_ARROW_END_MAX (1u << 8) -#define GPU_KEYFRAME_SHAPE_ARROW_END_MIN (1u << 9) -#define GPU_KEYFRAME_SHAPE_ARROW_END_MIXED (1u << 10) -#define GPU_KEYFRAME_SHAPE_SQUARE \ - (GPU_KEYFRAME_SHAPE_CLIPPED_VERTICAL | GPU_KEYFRAME_SHAPE_CLIPPED_HORIZONTAL) - const float diagonal_scale = sqrt(0.5); const float minmax_bias = 0.7; diff --git a/source/blender/gpu/shaders/gpu_shader_keyframe_shape_vert.glsl b/source/blender/gpu/shaders/gpu_shader_keyframe_shape_vert.glsl index 78e8f40b25ee..22599ca9fe5d 100644 --- a/source/blender/gpu/shaders/gpu_shader_keyframe_shape_vert.glsl +++ b/source/blender/gpu/shaders/gpu_shader_keyframe_shape_vert.glsl @@ -1,16 +1,4 @@ -/* Values in GPU_shader.h. */ -#define GPU_KEYFRAME_SHAPE_DIAMOND (1u << 0) -#define GPU_KEYFRAME_SHAPE_CIRCLE (1u << 1) -#define GPU_KEYFRAME_SHAPE_CLIPPED_VERTICAL (1u << 2) -#define GPU_KEYFRAME_SHAPE_CLIPPED_HORIZONTAL (1u << 3) -#define GPU_KEYFRAME_SHAPE_INNER_DOT (1u << 4) -#define GPU_KEYFRAME_SHAPE_ARROW_END_MAX (1u << 8) -#define GPU_KEYFRAME_SHAPE_ARROW_END_MIN (1u << 9) -#define GPU_KEYFRAME_SHAPE_ARROW_END_MIXED (1u << 10) -#define GPU_KEYFRAME_SHAPE_SQUARE \ - (GPU_KEYFRAME_SHAPE_CLIPPED_VERTICAL | GPU_KEYFRAME_SHAPE_CLIPPED_HORIZONTAL) - const float line_falloff = 1.0; const float circle_scale = sqrt(2.0 / 3.1416); const float square_scale = sqrt(0.5); diff --git a/source/blender/gpu/shaders/infos/gpu_shader_keyframe_shape_info.hh b/source/blender/gpu/shaders/infos/gpu_shader_keyframe_shape_info.hh index f203a08eea55..eccbd50bf21e 100644 --- a/source/blender/gpu/shaders/infos/gpu_shader_keyframe_shape_info.hh +++ b/source/blender/gpu/shaders/infos/gpu_shader_keyframe_shape_info.hh @@ -15,6 +15,7 @@ GPU_SHADER_INTERFACE_INFO(keyframe_shape_iface, "") .flat(Type::UINT, "finalFlags"); GPU_SHADER_CREATE_INFO(gpu_shader_keyframe_shape) + .typedef_source("GPU_shader_shared.h") .vertex_in(0, Type::VEC4, "color") .vertex_in(1, Type::VEC4, "outlineColor") .vertex_in(2, Type::VEC2, "pos") -- 2.30.2 From 997d2561bc6674977b22e1351e6e1bf11ec77786 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Foucault?= Date: Sun, 12 Feb 2023 22:52:27 +0100 Subject: [PATCH 037/182] Cleanup: GPU: Rename some functions for consistency --- .../intern/algorithm_parallel_reduction.cc | 4 +-- .../morphological_distance_feather_weights.cc | 4 +-- .../intern/symmetric_blur_weights.cc | 2 +- .../symmetric_separable_blur_weights.cc | 2 +- .../realtime_compositor/intern/result.cc | 4 +-- .../intern/shader_operation.cc | 4 +-- .../engines/workbench/workbench_shadow.cc | 11 +++---- .../intern/draw_cache_impl_subdivision.cc | 2 +- source/blender/draw/intern/draw_command.cc | 8 ++--- source/blender/draw/intern/draw_manager.cc | 6 ++-- .../blender/draw/intern/draw_manager_data.cc | 31 +++++++++--------- source/blender/draw/intern/draw_pass.hh | 32 +++++++++---------- source/blender/draw/intern/draw_view.cc | 6 ++-- .../editors/interface/interface_icons.cc | 6 ++-- source/blender/gpu/GPU_batch.h | 4 +-- source/blender/gpu/GPU_shader.h | 9 +++--- source/blender/gpu/intern/gpu_immediate.cc | 6 ++-- source/blender/gpu/intern/gpu_shader.cc | 6 ++-- source/blender/gpu/tests/gpu_shader_test.cc | 14 ++++---- .../nodes/node_composite_composite.cc | 6 ++-- .../composite/nodes/node_composite_dilate.cc | 8 ++--- .../composite/nodes/node_composite_image.cc | 6 ++-- .../nodes/node_composite_movieclip.cc | 4 +-- .../nodes/node_composite_split_viewer.cc | 2 +- .../composite/nodes/node_composite_viewer.cc | 6 ++-- source/blender/python/gpu/gpu_py_shader.c | 4 +-- source/blender/windowmanager/intern/wm_draw.c | 2 +- 27 files changed, 98 insertions(+), 101 deletions(-) diff --git a/source/blender/compositor/realtime_compositor/algorithms/intern/algorithm_parallel_reduction.cc b/source/blender/compositor/realtime_compositor/algorithms/intern/algorithm_parallel_reduction.cc index ba0e7eb21aca..b45b3e100e88 100644 --- a/source/blender/compositor/realtime_compositor/algorithms/intern/algorithm_parallel_reduction.cc +++ b/source/blender/compositor/realtime_compositor/algorithms/intern/algorithm_parallel_reduction.cc @@ -41,10 +41,10 @@ static float *parallel_reduction_dispatch(Context &context, GPUTexture *reduced_texture = context.texture_pool().acquire(reduced_size, format); GPU_memory_barrier(GPU_BARRIER_TEXTURE_FETCH); - const int texture_image_unit = GPU_shader_get_texture_binding(shader, "input_tx"); + const int texture_image_unit = GPU_shader_get_sampler_binding(shader, "input_tx"); GPU_texture_bind(texture_to_reduce, texture_image_unit); - const int image_unit = GPU_shader_get_texture_binding(shader, "output_img"); + const int image_unit = GPU_shader_get_sampler_binding(shader, "output_img"); GPU_texture_image_bind(reduced_texture, image_unit); GPU_compute_dispatch(shader, reduced_size.x, reduced_size.y, 1); diff --git a/source/blender/compositor/realtime_compositor/cached_resources/intern/morphological_distance_feather_weights.cc b/source/blender/compositor/realtime_compositor/cached_resources/intern/morphological_distance_feather_weights.cc index eac88b907b8e..98e7b67dca79 100644 --- a/source/blender/compositor/realtime_compositor/cached_resources/intern/morphological_distance_feather_weights.cc +++ b/source/blender/compositor/realtime_compositor/cached_resources/intern/morphological_distance_feather_weights.cc @@ -135,7 +135,7 @@ void MorphologicalDistanceFeatherWeights::compute_distance_falloffs(int type, in void MorphologicalDistanceFeatherWeights::bind_weights_as_texture(GPUShader *shader, const char *texture_name) const { - const int texture_image_unit = GPU_shader_get_texture_binding(shader, texture_name); + const int texture_image_unit = GPU_shader_get_sampler_binding(shader, texture_name); GPU_texture_bind(weights_texture_, texture_image_unit); } @@ -147,7 +147,7 @@ void MorphologicalDistanceFeatherWeights::unbind_weights_as_texture() const void MorphologicalDistanceFeatherWeights::bind_distance_falloffs_as_texture( GPUShader *shader, const char *texture_name) const { - const int texture_image_unit = GPU_shader_get_texture_binding(shader, texture_name); + const int texture_image_unit = GPU_shader_get_sampler_binding(shader, texture_name); GPU_texture_bind(distance_falloffs_texture_, texture_image_unit); } diff --git a/source/blender/compositor/realtime_compositor/cached_resources/intern/symmetric_blur_weights.cc b/source/blender/compositor/realtime_compositor/cached_resources/intern/symmetric_blur_weights.cc index b3200d468c9b..db4c0f777f21 100644 --- a/source/blender/compositor/realtime_compositor/cached_resources/intern/symmetric_blur_weights.cc +++ b/source/blender/compositor/realtime_compositor/cached_resources/intern/symmetric_blur_weights.cc @@ -103,7 +103,7 @@ SymmetricBlurWeights::~SymmetricBlurWeights() void SymmetricBlurWeights::bind_as_texture(GPUShader *shader, const char *texture_name) const { - const int texture_image_unit = GPU_shader_get_texture_binding(shader, texture_name); + const int texture_image_unit = GPU_shader_get_sampler_binding(shader, texture_name); GPU_texture_bind(texture_, texture_image_unit); } diff --git a/source/blender/compositor/realtime_compositor/cached_resources/intern/symmetric_separable_blur_weights.cc b/source/blender/compositor/realtime_compositor/cached_resources/intern/symmetric_separable_blur_weights.cc index b8c47d5a5d00..07d45531921d 100644 --- a/source/blender/compositor/realtime_compositor/cached_resources/intern/symmetric_separable_blur_weights.cc +++ b/source/blender/compositor/realtime_compositor/cached_resources/intern/symmetric_separable_blur_weights.cc @@ -81,7 +81,7 @@ SymmetricSeparableBlurWeights::~SymmetricSeparableBlurWeights() void SymmetricSeparableBlurWeights::bind_as_texture(GPUShader *shader, const char *texture_name) const { - const int texture_image_unit = GPU_shader_get_texture_binding(shader, texture_name); + const int texture_image_unit = GPU_shader_get_sampler_binding(shader, texture_name); GPU_texture_bind(texture_, texture_image_unit); } diff --git a/source/blender/compositor/realtime_compositor/intern/result.cc b/source/blender/compositor/realtime_compositor/intern/result.cc index e301aa6e0ed9..902eede7dd7f 100644 --- a/source/blender/compositor/realtime_compositor/intern/result.cc +++ b/source/blender/compositor/realtime_compositor/intern/result.cc @@ -82,7 +82,7 @@ void Result::bind_as_texture(GPUShader *shader, const char *texture_name) const /* Make sure any prior writes to the texture are reflected before reading from it. */ GPU_memory_barrier(GPU_BARRIER_TEXTURE_FETCH); - const int texture_image_unit = GPU_shader_get_texture_binding(shader, texture_name); + const int texture_image_unit = GPU_shader_get_sampler_binding(shader, texture_name); GPU_texture_bind(texture_, texture_image_unit); } @@ -93,7 +93,7 @@ void Result::bind_as_image(GPUShader *shader, const char *image_name, bool read) GPU_memory_barrier(GPU_BARRIER_SHADER_IMAGE_ACCESS); } - const int image_unit = GPU_shader_get_texture_binding(shader, image_name); + const int image_unit = GPU_shader_get_sampler_binding(shader, image_name); GPU_texture_image_bind(texture_, image_unit); } diff --git a/source/blender/compositor/realtime_compositor/intern/shader_operation.cc b/source/blender/compositor/realtime_compositor/intern/shader_operation.cc index 4ac997db42b2..b4976e5eff0a 100644 --- a/source/blender/compositor/realtime_compositor/intern/shader_operation.cc +++ b/source/blender/compositor/realtime_compositor/intern/shader_operation.cc @@ -95,14 +95,14 @@ void ShaderOperation::bind_material_resources(GPUShader *shader) * no uniforms. */ GPUUniformBuf *ubo = GPU_material_uniform_buffer_get(material_); if (ubo) { - GPU_uniformbuf_bind(ubo, GPU_shader_get_uniform_block_binding(shader, GPU_UBO_BLOCK_NAME)); + GPU_uniformbuf_bind(ubo, GPU_shader_get_ubo_binding(shader, GPU_UBO_BLOCK_NAME)); } /* Bind color band textures needed by curve and ramp nodes. */ ListBase textures = GPU_material_textures(material_); LISTBASE_FOREACH (GPUMaterialTexture *, texture, &textures) { if (texture->colorband) { - const int texture_image_unit = GPU_shader_get_texture_binding(shader, texture->sampler_name); + const int texture_image_unit = GPU_shader_get_sampler_binding(shader, texture->sampler_name); GPU_texture_bind(*texture->colorband, texture_image_unit); } } diff --git a/source/blender/draw/engines/workbench/workbench_shadow.cc b/source/blender/draw/engines/workbench/workbench_shadow.cc index 2bc5584abe73..ff50fd3732c1 100644 --- a/source/blender/draw/engines/workbench/workbench_shadow.cc +++ b/source/blender/draw/engines/workbench/workbench_shadow.cc @@ -259,17 +259,16 @@ void ShadowPass::ShadowView::compute_visibility(ObjectBoundsBuf &bounds, GPU_shader_uniform_1i(shader, "visibility_word_per_draw", word_per_draw); GPU_shader_uniform_1b(shader, "force_fail_method", force_fail_method_); GPU_shader_uniform_3fv(shader, "shadow_direction", light_direction_); - GPU_uniformbuf_bind(extruded_frustum_, - GPU_shader_get_uniform_block_binding(shader, "extruded_frustum")); - GPU_storagebuf_bind(bounds, GPU_shader_get_ssbo(shader, "bounds_buf")); + GPU_uniformbuf_bind(extruded_frustum_, GPU_shader_get_ubo_binding(shader, "extruded_frustum")); + GPU_storagebuf_bind(bounds, GPU_shader_get_ssbo_binding(shader, "bounds_buf")); if (current_pass_type_ == ShadowPass::FORCED_FAIL) { - GPU_storagebuf_bind(visibility_buf_, GPU_shader_get_ssbo(shader, "visibility_buf")); + GPU_storagebuf_bind(visibility_buf_, GPU_shader_get_ssbo_binding(shader, "visibility_buf")); } else { GPU_storagebuf_bind(pass_visibility_buf_, - GPU_shader_get_ssbo(shader, "pass_visibility_buf")); + GPU_shader_get_ssbo_binding(shader, "pass_visibility_buf")); GPU_storagebuf_bind(fail_visibility_buf_, - GPU_shader_get_ssbo(shader, "fail_visibility_buf")); + GPU_shader_get_ssbo_binding(shader, "fail_visibility_buf")); } GPU_uniformbuf_bind(data_, DRW_VIEW_UBO_SLOT); GPU_compute_dispatch(shader, divide_ceil_u(resource_len, DRW_VISIBILITY_GROUP_SIZE), 1, 1); diff --git a/source/blender/draw/intern/draw_cache_impl_subdivision.cc b/source/blender/draw/intern/draw_cache_impl_subdivision.cc index fb21e58d527b..0fe5eba26f40 100644 --- a/source/blender/draw/intern/draw_cache_impl_subdivision.cc +++ b/source/blender/draw/intern/draw_cache_impl_subdivision.cc @@ -1350,7 +1350,7 @@ static void draw_subdiv_ubo_update_and_bind(const DRWSubdivCache *cache, GPU_uniformbuf_update(cache->ubo, &storage); - const int binding = GPU_shader_get_uniform_block_binding(shader, "shader_data"); + const int binding = GPU_shader_get_ubo_binding(shader, "shader_data"); GPU_uniformbuf_bind(cache->ubo, binding); } diff --git a/source/blender/draw/intern/draw_command.cc b/source/blender/draw/intern/draw_command.cc index 775ee9f695be..c06ff88537a0 100644 --- a/source/blender/draw/intern/draw_command.cc +++ b/source/blender/draw/intern/draw_command.cc @@ -646,10 +646,10 @@ void DrawMultiBuf::bind(RecordingState &state, GPU_shader_uniform_1i(shader, "prototype_len", prototype_count_); GPU_shader_uniform_1i(shader, "visibility_word_per_draw", visibility_word_per_draw); GPU_shader_uniform_1i(shader, "view_shift", log2_ceil_u(view_len)); - GPU_storagebuf_bind(group_buf_, GPU_shader_get_ssbo(shader, "group_buf")); - GPU_storagebuf_bind(visibility_buf, GPU_shader_get_ssbo(shader, "visibility_buf")); - GPU_storagebuf_bind(prototype_buf_, GPU_shader_get_ssbo(shader, "prototype_buf")); - GPU_storagebuf_bind(command_buf_, GPU_shader_get_ssbo(shader, "command_buf")); + GPU_storagebuf_bind(group_buf_, GPU_shader_get_ssbo_binding(shader, "group_buf")); + GPU_storagebuf_bind(visibility_buf, GPU_shader_get_ssbo_binding(shader, "visibility_buf")); + GPU_storagebuf_bind(prototype_buf_, GPU_shader_get_ssbo_binding(shader, "prototype_buf")); + GPU_storagebuf_bind(command_buf_, GPU_shader_get_ssbo_binding(shader, "command_buf")); GPU_storagebuf_bind(resource_id_buf_, DRW_RESOURCE_ID_SLOT); GPU_compute_dispatch(shader, divide_ceil_u(prototype_count_, DRW_COMMAND_GROUP_SIZE), 1, 1); if (GPU_shader_draw_parameters_support() == false) { diff --git a/source/blender/draw/intern/draw_manager.cc b/source/blender/draw/intern/draw_manager.cc index 74108ab2f7cd..f34650255a53 100644 --- a/source/blender/draw/intern/draw_manager.cc +++ b/source/blender/draw/intern/draw_manager.cc @@ -114,9 +114,9 @@ void Manager::end_sync() GPUShader *shader = DRW_shader_draw_resource_finalize_get(); GPU_shader_bind(shader); GPU_shader_uniform_1i(shader, "resource_len", resource_len_); - GPU_storagebuf_bind(matrix_buf.current(), GPU_shader_get_ssbo(shader, "matrix_buf")); - GPU_storagebuf_bind(bounds_buf.current(), GPU_shader_get_ssbo(shader, "bounds_buf")); - GPU_storagebuf_bind(infos_buf.current(), GPU_shader_get_ssbo(shader, "infos_buf")); + GPU_storagebuf_bind(matrix_buf.current(), GPU_shader_get_ssbo_binding(shader, "matrix_buf")); + GPU_storagebuf_bind(bounds_buf.current(), GPU_shader_get_ssbo_binding(shader, "bounds_buf")); + GPU_storagebuf_bind(infos_buf.current(), GPU_shader_get_ssbo_binding(shader, "infos_buf")); GPU_compute_dispatch(shader, thread_groups, 1, 1); GPU_memory_barrier(GPU_BARRIER_SHADER_STORAGE); diff --git a/source/blender/draw/intern/draw_manager_data.cc b/source/blender/draw/intern/draw_manager_data.cc index a88d59fbd282..2079baf53a2f 100644 --- a/source/blender/draw/intern/draw_manager_data.cc +++ b/source/blender/draw/intern/draw_manager_data.cc @@ -256,7 +256,7 @@ void DRW_shgroup_uniform_texture_ex(DRWShadingGroup *shgroup, eGPUSamplerState sampler_state) { BLI_assert(tex != nullptr); - int loc = GPU_shader_get_texture_binding(shgroup->shader, name); + int loc = GPU_shader_get_sampler_binding(shgroup->shader, name); drw_shgroup_uniform_create_ex(shgroup, loc, DRW_UNIFORM_TEXTURE, tex, sampler_state, 0, 1); } @@ -271,7 +271,7 @@ void DRW_shgroup_uniform_texture_ref_ex(DRWShadingGroup *shgroup, eGPUSamplerState sampler_state) { BLI_assert(tex != nullptr); - int loc = GPU_shader_get_texture_binding(shgroup->shader, name); + int loc = GPU_shader_get_sampler_binding(shgroup->shader, name); drw_shgroup_uniform_create_ex(shgroup, loc, DRW_UNIFORM_TEXTURE_REF, tex, sampler_state, 0, 1); } @@ -283,14 +283,14 @@ void DRW_shgroup_uniform_texture_ref(DRWShadingGroup *shgroup, const char *name, void DRW_shgroup_uniform_image(DRWShadingGroup *shgroup, const char *name, const GPUTexture *tex) { BLI_assert(tex != nullptr); - int loc = GPU_shader_get_texture_binding(shgroup->shader, name); + int loc = GPU_shader_get_sampler_binding(shgroup->shader, name); drw_shgroup_uniform_create_ex(shgroup, loc, DRW_UNIFORM_IMAGE, tex, GPU_SAMPLER_DEFAULT, 0, 1); } void DRW_shgroup_uniform_image_ref(DRWShadingGroup *shgroup, const char *name, GPUTexture **tex) { BLI_assert(tex != nullptr); - int loc = GPU_shader_get_texture_binding(shgroup->shader, name); + int loc = GPU_shader_get_sampler_binding(shgroup->shader, name); drw_shgroup_uniform_create_ex( shgroup, loc, DRW_UNIFORM_IMAGE_REF, tex, GPU_SAMPLER_DEFAULT, 0, 1); } @@ -300,7 +300,7 @@ void DRW_shgroup_uniform_block_ex(DRWShadingGroup *shgroup, const GPUUniformBuf *ubo DRW_DEBUG_FILE_LINE_ARGS) { BLI_assert(ubo != nullptr); - int loc = GPU_shader_get_uniform_block_binding(shgroup->shader, name); + int loc = GPU_shader_get_ubo_binding(shgroup->shader, name); if (loc == -1) { #ifdef DRW_UNUSED_RESOURCE_TRACKING printf("%s:%d: Unable to locate binding of shader uniform buffer object: %s.\n", @@ -321,7 +321,7 @@ void DRW_shgroup_uniform_block_ref_ex(DRWShadingGroup *shgroup, GPUUniformBuf **ubo DRW_DEBUG_FILE_LINE_ARGS) { BLI_assert(ubo != nullptr); - int loc = GPU_shader_get_uniform_block_binding(shgroup->shader, name); + int loc = GPU_shader_get_ubo_binding(shgroup->shader, name); if (loc == -1) { #ifdef DRW_UNUSED_RESOURCE_TRACKING printf("%s:%d: Unable to locate binding of shader uniform buffer object: %s.\n", @@ -344,7 +344,7 @@ void DRW_shgroup_storage_block_ex(DRWShadingGroup *shgroup, { BLI_assert(ssbo != nullptr); /* TODO(@fclem): Fix naming inconsistency. */ - int loc = GPU_shader_get_ssbo(shgroup->shader, name); + int loc = GPU_shader_get_ssbo_binding(shgroup->shader, name); if (loc == -1) { #ifdef DRW_UNUSED_RESOURCE_TRACKING printf("%s:%d: Unable to locate binding of shader storage buffer object: %s.\n", @@ -367,7 +367,7 @@ void DRW_shgroup_storage_block_ref_ex(DRWShadingGroup *shgroup, { BLI_assert(ssbo != nullptr); /* TODO(@fclem): Fix naming inconsistency. */ - int loc = GPU_shader_get_ssbo(shgroup->shader, name); + int loc = GPU_shader_get_ssbo_binding(shgroup->shader, name); if (loc == -1) { #ifdef DRW_UNUSED_RESOURCE_TRACKING printf("%s:%d: Unable to locate binding of shader storage buffer object: %s.\n", @@ -539,7 +539,7 @@ void DRW_shgroup_vertex_buffer_ex(DRWShadingGroup *shgroup, const char *name, GPUVertBuf *vertex_buffer DRW_DEBUG_FILE_LINE_ARGS) { - int location = GPU_shader_get_ssbo(shgroup->shader, name); + int location = GPU_shader_get_ssbo_binding(shgroup->shader, name); if (location == -1) { #ifdef DRW_UNUSED_RESOURCE_TRACKING printf("%s:%d: Unable to locate binding of shader storage buffer object: %s.\n", @@ -564,7 +564,7 @@ void DRW_shgroup_vertex_buffer_ref_ex(DRWShadingGroup *shgroup, const char *name, GPUVertBuf **vertex_buffer DRW_DEBUG_FILE_LINE_ARGS) { - int location = GPU_shader_get_ssbo(shgroup->shader, name); + int location = GPU_shader_get_ssbo_binding(shgroup->shader, name); if (location == -1) { #ifdef DRW_UNUSED_RESOURCE_TRACKING printf("%s:%d: Unable to locate binding of shader storage buffer object: %s.\n", @@ -589,7 +589,7 @@ void DRW_shgroup_buffer_texture(DRWShadingGroup *shgroup, const char *name, GPUVertBuf *vertex_buffer) { - int location = GPU_shader_get_texture_binding(shgroup->shader, name); + int location = GPU_shader_get_sampler_binding(shgroup->shader, name); if (location == -1) { return; } @@ -606,7 +606,7 @@ void DRW_shgroup_buffer_texture_ref(DRWShadingGroup *shgroup, const char *name, GPUVertBuf **vertex_buffer) { - int location = GPU_shader_get_texture_binding(shgroup->shader, name); + int location = GPU_shader_get_sampler_binding(shgroup->shader, name); if (location == -1) { return; } @@ -698,7 +698,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); @@ -1850,15 +1850,14 @@ void DRW_shgroup_add_material_resources(DRWShadingGroup *grp, GPUMaterial *mater const GPUUniformAttrList *uattrs = GPU_material_uniform_attributes(material); if (uattrs != nullptr) { - int loc = GPU_shader_get_uniform_block_binding(grp->shader, GPU_ATTRIBUTE_UBO_BLOCK_NAME); + int loc = GPU_shader_get_ubo_binding(grp->shader, GPU_ATTRIBUTE_UBO_BLOCK_NAME); drw_shgroup_uniform_create_ex( grp, loc, DRW_UNIFORM_BLOCK_OBATTRS, uattrs, GPU_SAMPLER_DEFAULT, 0, 1); grp->uniform_attrs = uattrs; } if (GPU_material_layer_attributes(material) != nullptr) { - int loc = GPU_shader_get_uniform_block_binding(grp->shader, - GPU_LAYER_ATTRIBUTE_UBO_BLOCK_NAME); + int loc = GPU_shader_get_ubo_binding(grp->shader, GPU_LAYER_ATTRIBUTE_UBO_BLOCK_NAME); drw_shgroup_uniform_create_ex( grp, loc, DRW_UNIFORM_BLOCK_VLATTRS, nullptr, GPU_SAMPLER_DEFAULT, 0, 1); } diff --git a/source/blender/draw/intern/draw_pass.hh b/source/blender/draw/intern/draw_pass.hh index 8fc8298491ee..d05564c415a4 100644 --- a/source/blender/draw/intern/draw_pass.hh +++ b/source/blender/draw/intern/draw_pass.hh @@ -861,42 +861,42 @@ template inline int PassBase::push_constant_offset(const char *name) template inline void PassBase::bind_ssbo(const char *name, GPUStorageBuf *buffer) { - this->bind_ssbo(GPU_shader_get_ssbo(shader_, name), buffer); + this->bind_ssbo(GPU_shader_get_ssbo_binding(shader_, name), buffer); } template inline void PassBase::bind_ssbo(const char *name, GPUUniformBuf *buffer) { - this->bind_ssbo(GPU_shader_get_ssbo(shader_, name), buffer); + this->bind_ssbo(GPU_shader_get_ssbo_binding(shader_, name), buffer); } template inline void PassBase::bind_ssbo(const char *name, GPUUniformBuf **buffer) { - this->bind_ssbo(GPU_shader_get_ssbo(shader_, name), buffer); + this->bind_ssbo(GPU_shader_get_ssbo_binding(shader_, name), buffer); } template inline void PassBase::bind_ssbo(const char *name, GPUVertBuf *buffer) { - this->bind_ssbo(GPU_shader_get_ssbo(shader_, name), buffer); + this->bind_ssbo(GPU_shader_get_ssbo_binding(shader_, name), buffer); } template inline void PassBase::bind_ssbo(const char *name, GPUVertBuf **buffer) { - this->bind_ssbo(GPU_shader_get_ssbo(shader_, name), buffer); + this->bind_ssbo(GPU_shader_get_ssbo_binding(shader_, name), buffer); } template inline void PassBase::bind_ssbo(const char *name, GPUIndexBuf *buffer) { - this->bind_ssbo(GPU_shader_get_ssbo(shader_, name), buffer); + this->bind_ssbo(GPU_shader_get_ssbo_binding(shader_, name), buffer); } template inline void PassBase::bind_ssbo(const char *name, GPUIndexBuf **buffer) { - this->bind_ssbo(GPU_shader_get_ssbo(shader_, name), buffer); + this->bind_ssbo(GPU_shader_get_ssbo_binding(shader_, name), buffer); } template inline void PassBase::bind_ubo(const char *name, GPUUniformBuf *buffer) { - this->bind_ubo(GPU_shader_get_uniform_block_binding(shader_, name), buffer); + this->bind_ubo(GPU_shader_get_ubo_binding(shader_, name), buffer); } template @@ -904,22 +904,22 @@ inline void PassBase::bind_texture(const char *name, GPUTexture *texture, eGPUSamplerState state) { - this->bind_texture(GPU_shader_get_texture_binding(shader_, name), texture, state); + this->bind_texture(GPU_shader_get_sampler_binding(shader_, name), texture, state); } template inline void PassBase::bind_texture(const char *name, GPUVertBuf *buffer) { - this->bind_texture(GPU_shader_get_texture_binding(shader_, name), buffer); + this->bind_texture(GPU_shader_get_sampler_binding(shader_, name), buffer); } template inline void PassBase::bind_texture(const char *name, GPUVertBuf **buffer) { - this->bind_texture(GPU_shader_get_texture_binding(shader_, name), buffer); + this->bind_texture(GPU_shader_get_sampler_binding(shader_, name), buffer); } template inline void PassBase::bind_image(const char *name, GPUTexture *image) { - this->bind_image(GPU_shader_get_texture_binding(shader_, name), image); + this->bind_image(GPU_shader_get_sampler_binding(shader_, name), image); } template inline void PassBase::bind_ssbo(int slot, GPUStorageBuf *buffer) @@ -991,12 +991,12 @@ template inline void PassBase::bind_image(int slot, GPUTexture *imag template inline void PassBase::bind_ssbo(const char *name, GPUStorageBuf **buffer) { - this->bind_ssbo(GPU_shader_get_ssbo(shader_, name), buffer); + this->bind_ssbo(GPU_shader_get_ssbo_binding(shader_, name), buffer); } template inline void PassBase::bind_ubo(const char *name, GPUUniformBuf **buffer) { - this->bind_ubo(GPU_shader_get_uniform_block_binding(shader_, name), buffer); + this->bind_ubo(GPU_shader_get_ubo_binding(shader_, name), buffer); } template @@ -1004,12 +1004,12 @@ inline void PassBase::bind_texture(const char *name, GPUTexture **texture, eGPUSamplerState state) { - this->bind_texture(GPU_shader_get_texture_binding(shader_, name), texture, state); + this->bind_texture(GPU_shader_get_sampler_binding(shader_, name), texture, state); } template inline void PassBase::bind_image(const char *name, GPUTexture **image) { - this->bind_image(GPU_shader_get_texture_binding(shader_, name), image); + this->bind_image(GPU_shader_get_sampler_binding(shader_, name), image); } template inline void PassBase::bind_ssbo(int slot, GPUStorageBuf **buffer) diff --git a/source/blender/draw/intern/draw_view.cc b/source/blender/draw/intern/draw_view.cc index 670b0c5ecf5d..46fd82a239e2 100644 --- a/source/blender/draw/intern/draw_view.cc +++ b/source/blender/draw/intern/draw_view.cc @@ -244,7 +244,7 @@ void View::compute_procedural_bounds() GPUShader *shader = DRW_shader_draw_view_finalize_get(); GPU_shader_bind(shader); - GPU_uniformbuf_bind_as_ssbo(culling_, GPU_shader_get_ssbo(shader, "view_culling_buf")); + GPU_uniformbuf_bind_as_ssbo(culling_, GPU_shader_get_ssbo_binding(shader, "view_culling_buf")); GPU_uniformbuf_bind(data_, DRW_VIEW_UBO_SLOT); GPU_compute_dispatch(shader, 1, 1, 1); GPU_memory_barrier(GPU_BARRIER_UNIFORM); @@ -289,8 +289,8 @@ void View::compute_visibility(ObjectBoundsBuf &bounds, uint resource_len, bool d GPU_shader_uniform_1i(shader, "resource_len", resource_len); GPU_shader_uniform_1i(shader, "view_len", view_len_); GPU_shader_uniform_1i(shader, "visibility_word_per_draw", word_per_draw); - GPU_storagebuf_bind(bounds, GPU_shader_get_ssbo(shader, "bounds_buf")); - GPU_storagebuf_bind(visibility_buf_, GPU_shader_get_ssbo(shader, "visibility_buf")); + GPU_storagebuf_bind(bounds, GPU_shader_get_ssbo_binding(shader, "bounds_buf")); + GPU_storagebuf_bind(visibility_buf_, GPU_shader_get_ssbo_binding(shader, "visibility_buf")); GPU_uniformbuf_bind(frozen_ ? data_freeze_ : data_, DRW_VIEW_UBO_SLOT); GPU_uniformbuf_bind(frozen_ ? culling_freeze_ : culling_, DRW_VIEW_CULLING_UBO_SLOT); GPU_compute_dispatch(shader, divide_ceil_u(resource_len, DRW_VISIBILITY_GROUP_SIZE), 1, 1); diff --git a/source/blender/editors/interface/interface_icons.cc b/source/blender/editors/interface/interface_icons.cc index 7959339980a0..634f45283f61 100644 --- a/source/blender/editors/interface/interface_icons.cc +++ b/source/blender/editors/interface/interface_icons.cc @@ -1620,12 +1620,12 @@ static void icon_draw_cache_texture_flush_ex(GPUTexture *texture, GPUShader *shader = GPU_shader_get_builtin_shader(GPU_SHADER_2D_IMAGE_MULTI_RECT_COLOR); GPU_shader_bind(shader); - const int data_binding = GPU_shader_get_uniform_block_binding(shader, "multi_rect_data"); + const int data_binding = GPU_shader_get_ubo_binding(shader, "multi_rect_data"); GPUUniformBuf *ubo = GPU_uniformbuf_create_ex( sizeof(MultiRectCallData), texture_draw_calls->drawcall_cache, __func__); GPU_uniformbuf_bind(ubo, data_binding); - const int img_binding = GPU_shader_get_texture_binding(shader, "image"); + const int img_binding = GPU_shader_get_sampler_binding(shader, "image"); GPU_texture_bind_ex(texture, GPU_SAMPLER_ICON, img_binding, false); GPUBatch *quad = GPU_batch_preset_quad(); @@ -1797,7 +1797,7 @@ static void icon_draw_texture(float x, GPUShader *shader = GPU_shader_get_builtin_shader(GPU_SHADER_ICON); GPU_shader_bind(shader); - const int img_binding = GPU_shader_get_texture_binding(shader, "image"); + const int img_binding = GPU_shader_get_sampler_binding(shader, "image"); const int color_loc = GPU_shader_get_builtin_uniform(shader, GPU_UNIFORM_COLOR); const int rect_tex_loc = GPU_shader_get_uniform(shader, "rect_icon"); const int rect_geom_loc = GPU_shader_get_uniform(shader, "rect_geom"); diff --git a/source/blender/gpu/GPU_batch.h b/source/blender/gpu/GPU_batch.h index 1e5adab15d43..35d2d3f6e1a7 100644 --- a/source/blender/gpu/GPU_batch.h +++ b/source/blender/gpu/GPU_batch.h @@ -263,9 +263,9 @@ void GPU_batch_program_set_imm_shader(GPUBatch *batch); #define GPU_batch_uniform_mat4(batch, name, val) \ GPU_shader_uniform_mat4((batch)->shader, name, val); #define GPU_batch_uniformbuf_bind(batch, name, ubo) \ - GPU_uniformbuf_bind(ubo, GPU_shader_get_uniform_block_binding((batch)->shader, name)); + GPU_uniformbuf_bind(ubo, GPU_shader_get_ubo_binding((batch)->shader, name)); #define GPU_batch_texture_bind(batch, name, tex) \ - GPU_texture_bind(tex, GPU_shader_get_texture_binding((batch)->shader, name)); + GPU_texture_bind(tex, GPU_shader_get_sampler_binding((batch)->shader, name)); /** \} */ diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h index d1824de62edf..bbb74f1970ef 100644 --- a/source/blender/gpu/GPU_shader.h +++ b/source/blender/gpu/GPU_shader.h @@ -112,12 +112,11 @@ const char *GPU_shader_get_name(GPUShader *shader); /** * Returns binding point location. - * Binding location are given to be set at compile time and immutable. + * Binding location are given to be set at shader compile time and immutable. */ -/* TODO(fclem): Make naming consistent. ubo_binding, ssbo_binding */ -int GPU_shader_get_uniform_block_binding(GPUShader *shader, const char *name); -int GPU_shader_get_texture_binding(GPUShader *shader, const char *name); -int GPU_shader_get_ssbo(GPUShader *shader, const char *name); +int GPU_shader_get_ubo_binding(GPUShader *shader, const char *name); +int GPU_shader_get_ssbo_binding(GPUShader *shader, const char *name); +int GPU_shader_get_sampler_binding(GPUShader *shader, const char *name); /** * Returns uniform location. diff --git a/source/blender/gpu/intern/gpu_immediate.cc b/source/blender/gpu/intern/gpu_immediate.cc index a983d1da6ca2..ada34fdaeeed 100644 --- a/source/blender/gpu/intern/gpu_immediate.cc +++ b/source/blender/gpu/intern/gpu_immediate.cc @@ -602,19 +602,19 @@ void immUniform1i(const char *name, int x) void immBindTexture(const char *name, GPUTexture *tex) { - int binding = GPU_shader_get_texture_binding(imm->shader, name); + int binding = GPU_shader_get_sampler_binding(imm->shader, name); GPU_texture_bind(tex, binding); } void immBindTextureSampler(const char *name, GPUTexture *tex, eGPUSamplerState state) { - int binding = GPU_shader_get_texture_binding(imm->shader, name); + int binding = GPU_shader_get_sampler_binding(imm->shader, name); GPU_texture_bind_ex(tex, state, binding, true); } void immBindUniformBuf(const char *name, GPUUniformBuf *ubo) { - int binding = GPU_shader_get_uniform_block_binding(imm->shader, name); + int binding = GPU_shader_get_ubo_binding(imm->shader, name); GPU_uniformbuf_bind(ubo, binding); } diff --git a/source/blender/gpu/intern/gpu_shader.cc b/source/blender/gpu/intern/gpu_shader.cc index b073f9939192..8d845b36d5b4 100644 --- a/source/blender/gpu/intern/gpu_shader.cc +++ b/source/blender/gpu/intern/gpu_shader.cc @@ -549,7 +549,7 @@ int GPU_shader_get_builtin_ssbo(GPUShader *shader, int builtin) return interface->ssbo_builtin((GPUStorageBufferBuiltin)builtin); } -int GPU_shader_get_ssbo(GPUShader *shader, const char *name) +int GPU_shader_get_ssbo_binding(GPUShader *shader, const char *name) { const ShaderInterface *interface = unwrap(shader)->interface; const ShaderInput *ssbo = interface->ssbo_get(name); @@ -563,14 +563,14 @@ int GPU_shader_get_uniform_block(GPUShader *shader, const char *name) return ubo ? ubo->location : -1; } -int GPU_shader_get_uniform_block_binding(GPUShader *shader, const char *name) +int GPU_shader_get_ubo_binding(GPUShader *shader, const char *name) { const ShaderInterface *interface = unwrap(shader)->interface; const ShaderInput *ubo = interface->ubo_get(name); return ubo ? ubo->binding : -1; } -int GPU_shader_get_texture_binding(GPUShader *shader, const char *name) +int GPU_shader_get_sampler_binding(GPUShader *shader, const char *name) { const ShaderInterface *interface = unwrap(shader)->interface; const ShaderInput *tex = interface->uniform_get(name); diff --git a/source/blender/gpu/tests/gpu_shader_test.cc b/source/blender/gpu/tests/gpu_shader_test.cc index c07fda843c7a..ce1397f33277 100644 --- a/source/blender/gpu/tests/gpu_shader_test.cc +++ b/source/blender/gpu/tests/gpu_shader_test.cc @@ -47,7 +47,7 @@ static void test_gpu_shader_compute_2d() EXPECT_NE(texture, nullptr); GPU_shader_bind(shader); - GPU_texture_image_bind(texture, GPU_shader_get_texture_binding(shader, "img_output")); + GPU_texture_image_bind(texture, GPU_shader_get_sampler_binding(shader, "img_output")); /* Dispatch compute task. */ GPU_compute_dispatch(shader, SIZE, SIZE, 1); @@ -93,7 +93,7 @@ static void test_gpu_shader_compute_1d() EXPECT_NE(texture, nullptr); GPU_shader_bind(shader); - GPU_texture_image_bind(texture, GPU_shader_get_texture_binding(shader, "img_output")); + GPU_texture_image_bind(texture, GPU_shader_get_sampler_binding(shader, "img_output")); /* Dispatch compute task. */ GPU_compute_dispatch(shader, SIZE, 1, 1); @@ -142,7 +142,7 @@ static void test_gpu_shader_compute_vbo() GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 4, GPU_FETCH_FLOAT); GPUVertBuf *vbo = GPU_vertbuf_create_with_format_ex(&format, GPU_USAGE_DEVICE_ONLY); GPU_vertbuf_data_alloc(vbo, SIZE); - GPU_vertbuf_bind_as_ssbo(vbo, GPU_shader_get_ssbo(shader, "out_positions")); + GPU_vertbuf_bind_as_ssbo(vbo, GPU_shader_get_ssbo_binding(shader, "out_positions")); /* Dispatch compute task. */ GPU_compute_dispatch(shader, SIZE, 1, 1); @@ -186,7 +186,7 @@ static void test_gpu_shader_compute_ibo() /* Construct IBO. */ GPUIndexBuf *ibo = GPU_indexbuf_build_on_device(SIZE); - GPU_indexbuf_bind_as_ssbo(ibo, GPU_shader_get_ssbo(shader, "out_indices")); + GPU_indexbuf_bind_as_ssbo(ibo, GPU_shader_get_ssbo_binding(shader, "out_indices")); /* Dispatch compute task. */ GPU_compute_dispatch(shader, SIZE, 1, 1); @@ -228,7 +228,7 @@ static void test_gpu_shader_compute_ssbo() /* Construct IBO. */ GPUStorageBuf *ssbo = GPU_storagebuf_create_ex( SIZE * sizeof(uint32_t), nullptr, GPU_USAGE_DEVICE_ONLY, __func__); - GPU_storagebuf_bind(ssbo, GPU_shader_get_ssbo(shader, "out_indices")); + GPU_storagebuf_bind(ssbo, GPU_shader_get_ssbo_binding(shader, "out_indices")); /* Dispatch compute task. */ GPU_compute_dispatch(shader, SIZE, 1, 1); @@ -264,8 +264,8 @@ static void test_gpu_shader_ssbo_binding() EXPECT_NE(shader, nullptr); GPU_shader_bind(shader); - EXPECT_EQ(0, GPU_shader_get_ssbo(shader, "data0")); - EXPECT_EQ(1, GPU_shader_get_ssbo(shader, "data1")); + EXPECT_EQ(0, GPU_shader_get_ssbo_binding(shader, "data0")); + EXPECT_EQ(1, GPU_shader_get_ssbo_binding(shader, "data1")); /* Cleanup. */ GPU_shader_unbind(); diff --git a/source/blender/nodes/composite/nodes/node_composite_composite.cc b/source/blender/nodes/composite/nodes/node_composite_composite.cc index 70e4c2b5d3b1..dafa87f93f0f 100644 --- a/source/blender/nodes/composite/nodes/node_composite_composite.cc +++ b/source/blender/nodes/composite/nodes/node_composite_composite.cc @@ -94,7 +94,7 @@ class CompositeOperation : public NodeOperation { image.bind_as_texture(shader, "input_tx"); GPUTexture *output_texture = context().get_output_texture(); - const int image_unit = GPU_shader_get_texture_binding(shader, "output_img"); + const int image_unit = GPU_shader_get_sampler_binding(shader, "output_img"); GPU_texture_image_bind(output_texture, image_unit); const int2 compositing_region_size = context().get_compositing_region_size(); @@ -122,7 +122,7 @@ class CompositeOperation : public NodeOperation { image.bind_as_texture(shader, "input_tx"); GPUTexture *output_texture = context().get_output_texture(); - const int image_unit = GPU_shader_get_texture_binding(shader, "output_img"); + const int image_unit = GPU_shader_get_sampler_binding(shader, "output_img"); GPU_texture_image_bind(output_texture, image_unit); const int2 compositing_region_size = context().get_compositing_region_size(); @@ -152,7 +152,7 @@ class CompositeOperation : public NodeOperation { alpha.bind_as_texture(shader, "alpha_tx"); GPUTexture *output_texture = context().get_output_texture(); - const int image_unit = GPU_shader_get_texture_binding(shader, "output_img"); + const int image_unit = GPU_shader_get_sampler_binding(shader, "output_img"); GPU_texture_image_bind(output_texture, image_unit); const int2 compositing_region_size = context().get_compositing_region_size(); diff --git a/source/blender/nodes/composite/nodes/node_composite_dilate.cc b/source/blender/nodes/composite/nodes/node_composite_dilate.cc index 07063c1a06b9..b34a7bd6646b 100644 --- a/source/blender/nodes/composite/nodes/node_composite_dilate.cc +++ b/source/blender/nodes/composite/nodes/node_composite_dilate.cc @@ -122,7 +122,7 @@ class DilateErodeOperation : public NodeOperation { const int2 transposed_domain = int2(domain.size.y, domain.size.x); GPUTexture *horizontal_pass_result = texture_pool().acquire_color(transposed_domain); - const int image_unit = GPU_shader_get_texture_binding(shader, "output_img"); + const int image_unit = GPU_shader_get_sampler_binding(shader, "output_img"); GPU_texture_image_bind(horizontal_pass_result, image_unit); compute_dispatch_threads_at_least(shader, domain.size); @@ -143,7 +143,7 @@ class DilateErodeOperation : public NodeOperation { GPU_shader_uniform_1i(shader, "radius", math::abs(get_distance())); GPU_memory_barrier(GPU_BARRIER_TEXTURE_FETCH); - const int texture_image_unit = GPU_shader_get_texture_binding(shader, "input_tx"); + const int texture_image_unit = GPU_shader_get_sampler_binding(shader, "input_tx"); GPU_texture_bind(horizontal_pass_result, texture_image_unit); const Domain domain = compute_domain(); @@ -273,7 +273,7 @@ class DilateErodeOperation : public NodeOperation { const int2 transposed_domain = int2(domain.size.y, domain.size.x); GPUTexture *horizontal_pass_result = texture_pool().acquire_color(transposed_domain); - const int image_unit = GPU_shader_get_texture_binding(shader, "output_img"); + const int image_unit = GPU_shader_get_sampler_binding(shader, "output_img"); GPU_texture_image_bind(horizontal_pass_result, image_unit); compute_dispatch_threads_at_least(shader, domain.size); @@ -293,7 +293,7 @@ class DilateErodeOperation : public NodeOperation { GPU_shader_bind(shader); GPU_memory_barrier(GPU_BARRIER_TEXTURE_FETCH); - const int texture_image_unit = GPU_shader_get_texture_binding(shader, "input_tx"); + const int texture_image_unit = GPU_shader_get_sampler_binding(shader, "input_tx"); GPU_texture_bind(horizontal_pass_result, texture_image_unit); const MorphologicalDistanceFeatherWeights &weights = diff --git a/source/blender/nodes/composite/nodes/node_composite_image.cc b/source/blender/nodes/composite/nodes/node_composite_image.cc index ad49d687220a..27b864f9856d 100644 --- a/source/blender/nodes/composite/nodes/node_composite_image.cc +++ b/source/blender/nodes/composite/nodes/node_composite_image.cc @@ -525,7 +525,7 @@ class ImageOperation : public NodeOperation { GPUShader *shader = shader_manager().get(get_shader_name(identifier)); GPU_shader_bind(shader); - const int input_unit = GPU_shader_get_texture_binding(shader, "input_tx"); + const int input_unit = GPU_shader_get_sampler_binding(shader, "input_tx"); GPU_texture_bind(image_texture, input_unit); result.bind_as_image(shader, "output_img"); @@ -859,7 +859,7 @@ class RenderLayerOperation : public NodeOperation { const int2 lower_bound = int2(compositing_region.xmin, compositing_region.ymin); GPU_shader_uniform_2iv(shader, "compositing_region_lower_bound", lower_bound); - const int input_unit = GPU_shader_get_texture_binding(shader, "input_tx"); + const int input_unit = GPU_shader_get_sampler_binding(shader, "input_tx"); GPU_texture_bind(pass_texture, input_unit); const int2 compositing_region_size = context().get_compositing_region_size(); @@ -889,7 +889,7 @@ class RenderLayerOperation : public NodeOperation { const int2 lower_bound = int2(compositing_region.xmin, compositing_region.ymin); GPU_shader_uniform_2iv(shader, "compositing_region_lower_bound", lower_bound); - const int input_unit = GPU_shader_get_texture_binding(shader, "input_tx"); + const int input_unit = GPU_shader_get_sampler_binding(shader, "input_tx"); GPU_texture_bind(pass_texture, input_unit); const int2 compositing_region_size = context().get_compositing_region_size(); diff --git a/source/blender/nodes/composite/nodes/node_composite_movieclip.cc b/source/blender/nodes/composite/nodes/node_composite_movieclip.cc index c55df061873d..a3fa99d83565 100644 --- a/source/blender/nodes/composite/nodes/node_composite_movieclip.cc +++ b/source/blender/nodes/composite/nodes/node_composite_movieclip.cc @@ -128,7 +128,7 @@ class MovieClipOperation : public NodeOperation { GPUShader *shader = shader_manager().get("compositor_convert_color_to_half_color"); GPU_shader_bind(shader); - const int input_unit = GPU_shader_get_texture_binding(shader, "input_tx"); + const int input_unit = GPU_shader_get_sampler_binding(shader, "input_tx"); GPU_texture_bind(movie_clip_texture, input_unit); result.bind_as_image(shader, "output_img"); @@ -162,7 +162,7 @@ class MovieClipOperation : public NodeOperation { GPUShader *shader = shader_manager().get("compositor_extract_alpha_from_color"); GPU_shader_bind(shader); - const int input_unit = GPU_shader_get_texture_binding(shader, "input_tx"); + const int input_unit = GPU_shader_get_sampler_binding(shader, "input_tx"); GPU_texture_bind(movie_clip_texture, input_unit); result.bind_as_image(shader, "output_img"); diff --git a/source/blender/nodes/composite/nodes/node_composite_split_viewer.cc b/source/blender/nodes/composite/nodes/node_composite_split_viewer.cc index 73dcf42904c8..c03a3a42dc99 100644 --- a/source/blender/nodes/composite/nodes/node_composite_split_viewer.cc +++ b/source/blender/nodes/composite/nodes/node_composite_split_viewer.cc @@ -77,7 +77,7 @@ class ViewerOperation : public NodeOperation { second_image.bind_as_texture(shader, "second_image_tx"); GPUTexture *output_texture = context().get_output_texture(); - const int image_unit = GPU_shader_get_texture_binding(shader, "output_img"); + const int image_unit = GPU_shader_get_sampler_binding(shader, "output_img"); GPU_texture_image_bind(output_texture, image_unit); compute_dispatch_threads_at_least(shader, compositing_region_size); diff --git a/source/blender/nodes/composite/nodes/node_composite_viewer.cc b/source/blender/nodes/composite/nodes/node_composite_viewer.cc index 66a16905d674..0beee8621acf 100644 --- a/source/blender/nodes/composite/nodes/node_composite_viewer.cc +++ b/source/blender/nodes/composite/nodes/node_composite_viewer.cc @@ -123,7 +123,7 @@ class ViewerOperation : public NodeOperation { image.bind_as_texture(shader, "input_tx"); GPUTexture *output_texture = context().get_output_texture(); - const int image_unit = GPU_shader_get_texture_binding(shader, "output_img"); + const int image_unit = GPU_shader_get_sampler_binding(shader, "output_img"); GPU_texture_image_bind(output_texture, image_unit); const int2 compositing_region_size = context().get_compositing_region_size(); @@ -151,7 +151,7 @@ class ViewerOperation : public NodeOperation { image.bind_as_texture(shader, "input_tx"); GPUTexture *output_texture = context().get_output_texture(); - const int image_unit = GPU_shader_get_texture_binding(shader, "output_img"); + const int image_unit = GPU_shader_get_sampler_binding(shader, "output_img"); GPU_texture_image_bind(output_texture, image_unit); const int2 compositing_region_size = context().get_compositing_region_size(); @@ -181,7 +181,7 @@ class ViewerOperation : public NodeOperation { alpha.bind_as_texture(shader, "alpha_tx"); GPUTexture *output_texture = context().get_output_texture(); - const int image_unit = GPU_shader_get_texture_binding(shader, "output_img"); + const int image_unit = GPU_shader_get_sampler_binding(shader, "output_img"); GPU_texture_image_bind(output_texture, image_unit); const int2 compositing_region_size = context().get_compositing_region_size(); diff --git a/source/blender/python/gpu/gpu_py_shader.c b/source/blender/python/gpu/gpu_py_shader.c index 9352e7cc9b11..2c13e271e369 100644 --- a/source/blender/python/gpu/gpu_py_shader.c +++ b/source/blender/python/gpu/gpu_py_shader.c @@ -533,7 +533,7 @@ static PyObject *pygpu_shader_uniform_sampler(BPyGPUShader *self, PyObject *args } GPU_shader_bind(self->shader); - int slot = GPU_shader_get_texture_binding(self->shader, name); + int slot = GPU_shader_get_sampler_binding(self->shader, name); GPU_texture_bind(py_texture->tex, slot); GPU_shader_uniform_1i(self->shader, name, slot); @@ -559,7 +559,7 @@ static PyObject *pygpu_shader_uniform_block(BPyGPUShader *self, PyObject *args) return NULL; } - int binding = GPU_shader_get_uniform_block_binding(self->shader, name); + int binding = GPU_shader_get_ubo_binding(self->shader, name); if (binding == -1) { PyErr_SetString( PyExc_BufferError, diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c index 290fd602dfa9..5ce080e575a7 100644 --- a/source/blender/windowmanager/intern/wm_draw.c +++ b/source/blender/windowmanager/intern/wm_draw.c @@ -842,7 +842,7 @@ void wm_draw_region_blend(ARegion *region, int view, bool blend) int color_loc = GPU_shader_get_builtin_uniform(shader, GPU_UNIFORM_COLOR); int rect_tex_loc = GPU_shader_get_uniform(shader, "rect_icon"); int rect_geo_loc = GPU_shader_get_uniform(shader, "rect_geom"); - int texture_bind_loc = GPU_shader_get_texture_binding(shader, "image"); + int texture_bind_loc = GPU_shader_get_sampler_binding(shader, "image"); GPU_texture_bind(texture, texture_bind_loc); -- 2.30.2 From dcc41056115855d4b35ba322372a7a91389f6c2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Foucault?= Date: Sun, 12 Feb 2023 23:04:04 +0100 Subject: [PATCH 038/182] GPU: Removes GPU_shader_get_builtin_ssbo Simplify the API. Use hardcoded ssbo location instead. --- source/blender/draw/intern/draw_debug.cc | 10 +++---- .../blender/draw/intern/draw_manager_data.cc | 30 ------------------- .../draw/intern/shaders/draw_debug_info.hh | 4 +-- source/blender/gpu/GPU_shader.h | 11 ------- source/blender/gpu/intern/gpu_shader.cc | 6 ---- .../gpu/intern/gpu_shader_interface.hh | 21 ------------- .../blender/gpu/opengl/gl_shader_interface.cc | 14 --------- 7 files changed, 6 insertions(+), 90 deletions(-) diff --git a/source/blender/draw/intern/draw_debug.cc b/source/blender/draw/intern/draw_debug.cc index ca17aa1de824..4698d6eb5ff3 100644 --- a/source/blender/draw/intern/draw_debug.cc +++ b/source/blender/draw/intern/draw_debug.cc @@ -523,19 +523,18 @@ void DebugDraw::display_lines() GPUBatch *batch = drw_cache_procedural_lines_get(); GPUShader *shader = DRW_shader_debug_draw_display_get(); GPU_batch_set_shader(batch, shader); - int slot = GPU_shader_get_builtin_ssbo(shader, GPU_STORAGE_BUFFER_DEBUG_VERTS); GPU_shader_uniform_mat4(shader, "persmat", persmat.ptr()); if (gpu_draw_buf_used) { GPU_debug_group_begin("GPU"); - GPU_storagebuf_bind(gpu_draw_buf_, slot); + GPU_storagebuf_bind(gpu_draw_buf_, DRW_DEBUG_DRAW_SLOT); GPU_batch_draw_indirect(batch, gpu_draw_buf_, 0); GPU_storagebuf_unbind(gpu_draw_buf_); GPU_debug_group_end(); } GPU_debug_group_begin("CPU"); - GPU_storagebuf_bind(cpu_draw_buf_, slot); + GPU_storagebuf_bind(cpu_draw_buf_, DRW_DEBUG_DRAW_SLOT); GPU_batch_draw_indirect(batch, cpu_draw_buf_, 0); GPU_storagebuf_unbind(cpu_draw_buf_); GPU_debug_group_end(); @@ -556,21 +555,20 @@ void DebugDraw::display_prints() GPUBatch *batch = drw_cache_procedural_points_get(); GPUShader *shader = DRW_shader_debug_print_display_get(); GPU_batch_set_shader(batch, shader); - int slot = GPU_shader_get_builtin_ssbo(shader, GPU_STORAGE_BUFFER_DEBUG_PRINT); float f_viewport[4]; GPU_viewport_size_get_f(f_viewport); GPU_shader_uniform_2fv(shader, "viewport_size", &f_viewport[2]); if (gpu_print_buf_used) { GPU_debug_group_begin("GPU"); - GPU_storagebuf_bind(gpu_print_buf_, slot); + GPU_storagebuf_bind(gpu_print_buf_, DRW_DEBUG_PRINT_SLOT); GPU_batch_draw_indirect(batch, gpu_print_buf_, 0); GPU_storagebuf_unbind(gpu_print_buf_); GPU_debug_group_end(); } GPU_debug_group_begin("CPU"); - GPU_storagebuf_bind(cpu_print_buf_, slot); + GPU_storagebuf_bind(cpu_print_buf_, DRW_DEBUG_PRINT_SLOT); GPU_batch_draw_indirect(batch, cpu_print_buf_, 0); GPU_storagebuf_unbind(cpu_print_buf_); GPU_debug_group_end(); diff --git a/source/blender/draw/intern/draw_manager_data.cc b/source/blender/draw/intern/draw_manager_data.cc index 2079baf53a2f..546ccbf7ef81 100644 --- a/source/blender/draw/intern/draw_manager_data.cc +++ b/source/blender/draw/intern/draw_manager_data.cc @@ -1719,36 +1719,6 @@ static void drw_shgroup_init(DRWShadingGroup *shgroup, GPUShader *shader) 1); } -#ifdef DEBUG - /* TODO(Metal): Support Shader debug print. - * This is not currently supported by Metal Backend. */ - if (GPU_backend_get_type() != GPU_BACKEND_METAL) { - int debug_print_location = GPU_shader_get_builtin_ssbo(shader, GPU_STORAGE_BUFFER_DEBUG_PRINT); - if (debug_print_location != -1) { - GPUStorageBuf *buf = drw_debug_gpu_print_buf_get(); - drw_shgroup_uniform_create_ex(shgroup, - debug_print_location, - DRW_UNIFORM_STORAGE_BLOCK, - buf, - GPU_SAMPLER_DEFAULT, - 0, - 1); -# ifndef DISABLE_DEBUG_SHADER_PRINT_BARRIER - /* Add a barrier to allow multiple shader writing to the same buffer. */ - DRW_shgroup_barrier(shgroup, GPU_BARRIER_SHADER_STORAGE); -# endif - } - - int debug_draw_location = GPU_shader_get_builtin_ssbo(shader, GPU_STORAGE_BUFFER_DEBUG_VERTS); - if (debug_draw_location != -1) { - GPUStorageBuf *buf = drw_debug_gpu_draw_buf_get(); - drw_shgroup_uniform_create_ex( - shgroup, debug_draw_location, DRW_UNIFORM_STORAGE_BLOCK, buf, GPU_SAMPLER_DEFAULT, 0, 1); - /* NOTE(fclem): No barrier as ordering is not important. */ - } - } -#endif - /* Not supported. */ BLI_assert(GPU_shader_get_builtin_uniform(shader, GPU_UNIFORM_MODELVIEW_INV) == -1); BLI_assert(GPU_shader_get_builtin_uniform(shader, GPU_UNIFORM_MODELVIEW) == -1); diff --git a/source/blender/draw/intern/shaders/draw_debug_info.hh b/source/blender/draw/intern/shaders/draw_debug_info.hh index 4b5590824ba5..e2dc2d0208e5 100644 --- a/source/blender/draw/intern/shaders/draw_debug_info.hh +++ b/source/blender/draw/intern/shaders/draw_debug_info.hh @@ -18,7 +18,7 @@ GPU_SHADER_INTERFACE_INFO(draw_debug_print_display_iface, "").flat(Type::UINT, " GPU_SHADER_CREATE_INFO(draw_debug_print_display) .do_static_compilation(true) .typedef_source("draw_shader_shared.h") - .storage_buf(7, Qualifier::READ, "uint", "drw_debug_print_buf[]") + .storage_buf(DRW_DEBUG_PRINT_SLOT, Qualifier::READ, "uint", "drw_debug_print_buf[]") .vertex_out(draw_debug_print_display_iface) .fragment_out(0, Type::VEC4, "out_color") .push_constant(Type::VEC2, "viewport_size") @@ -46,7 +46,7 @@ GPU_SHADER_INTERFACE_INFO(draw_debug_draw_display_iface, "interp").flat(Type::VE GPU_SHADER_CREATE_INFO(draw_debug_draw_display) .do_static_compilation(true) .typedef_source("draw_shader_shared.h") - .storage_buf(6, Qualifier::READ, "DRWDebugVert", "drw_debug_verts_buf[]") + .storage_buf(DRW_DEBUG_DRAW_SLOT, Qualifier::READ, "DRWDebugVert", "drw_debug_verts_buf[]") .vertex_out(draw_debug_draw_display_iface) .fragment_out(0, Type::VEC4, "out_color") .push_constant(Type::MAT4, "persmat") diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h index bbb74f1970ef..6e9998af6253 100644 --- a/source/blender/gpu/GPU_shader.h +++ b/source/blender/gpu/GPU_shader.h @@ -270,17 +270,6 @@ typedef enum { /** DEPRECATED: Use hardcoded buffer location instead. */ int GPU_shader_get_builtin_block(GPUShader *shader, int builtin); -/** DEPRECATED: Use hardcoded buffer location instead. */ -typedef enum { - GPU_STORAGE_BUFFER_DEBUG_VERTS = 0, /* drw_debug_verts_buf */ - GPU_STORAGE_BUFFER_DEBUG_PRINT, /* drw_debug_print_buf */ - - GPU_NUM_STORAGE_BUFFERS, /* Special value, denotes number of builtin buffer blocks. */ -} GPUStorageBufferBuiltin; - -/** DEPRECATED: Use hardcoded buffer location instead. */ -int GPU_shader_get_builtin_ssbo(GPUShader *shader, int builtin); - /** DEPRECATED: Kept only because of Python GPU API. */ int GPU_shader_get_uniform_block(GPUShader *shader, const char *name); diff --git a/source/blender/gpu/intern/gpu_shader.cc b/source/blender/gpu/intern/gpu_shader.cc index 8d845b36d5b4..6460e23e3735 100644 --- a/source/blender/gpu/intern/gpu_shader.cc +++ b/source/blender/gpu/intern/gpu_shader.cc @@ -543,12 +543,6 @@ int GPU_shader_get_builtin_block(GPUShader *shader, int builtin) return interface->ubo_builtin((GPUUniformBlockBuiltin)builtin); } -int GPU_shader_get_builtin_ssbo(GPUShader *shader, int builtin) -{ - const ShaderInterface *interface = unwrap(shader)->interface; - return interface->ssbo_builtin((GPUStorageBufferBuiltin)builtin); -} - int GPU_shader_get_ssbo_binding(GPUShader *shader, const char *name) { const ShaderInterface *interface = unwrap(shader)->interface; diff --git a/source/blender/gpu/intern/gpu_shader_interface.hh b/source/blender/gpu/intern/gpu_shader_interface.hh index c27b5cc1a37b..fc9eafca3a5d 100644 --- a/source/blender/gpu/intern/gpu_shader_interface.hh +++ b/source/blender/gpu/intern/gpu_shader_interface.hh @@ -57,7 +57,6 @@ class ShaderInterface { /** Location of builtin uniforms. Fast access, no lookup needed. */ int32_t builtins_[GPU_NUM_UNIFORMS]; int32_t builtin_blocks_[GPU_NUM_UNIFORM_BLOCKS]; - int32_t builtin_buffers_[GPU_NUM_STORAGE_BUFFERS]; /** * Currently only used for `GPU_shader_get_attribute_info`. @@ -128,17 +127,9 @@ class ShaderInterface { return builtin_blocks_[builtin]; } - /* Returns binding position. */ - inline int32_t ssbo_builtin(const GPUStorageBufferBuiltin builtin) const - { - BLI_assert(builtin >= 0 && builtin < GPU_NUM_STORAGE_BUFFERS); - return builtin_buffers_[builtin]; - } - protected: static inline const char *builtin_uniform_name(GPUUniformBuiltin u); static inline const char *builtin_uniform_block_name(GPUUniformBlockBuiltin u); - static inline const char *builtin_storage_block_name(GPUStorageBufferBuiltin u); inline uint32_t set_input_name(ShaderInput *input, char *name, uint32_t name_len) const; inline void copy_input_name(ShaderInput *input, @@ -234,18 +225,6 @@ inline const char *ShaderInterface::builtin_uniform_block_name(GPUUniformBlockBu } } -inline const char *ShaderInterface::builtin_storage_block_name(GPUStorageBufferBuiltin u) -{ - switch (u) { - case GPU_STORAGE_BUFFER_DEBUG_VERTS: - return "drw_debug_verts_buf"; - case GPU_STORAGE_BUFFER_DEBUG_PRINT: - return "drw_debug_print_buf"; - default: - return nullptr; - } -} - /* Returns string length including '\0' terminator. */ inline uint32_t ShaderInterface::set_input_name(ShaderInput *input, char *name, diff --git a/source/blender/gpu/opengl/gl_shader_interface.cc b/source/blender/gpu/opengl/gl_shader_interface.cc index ef97d74bf81b..4b10780e551e 100644 --- a/source/blender/gpu/opengl/gl_shader_interface.cc +++ b/source/blender/gpu/opengl/gl_shader_interface.cc @@ -371,13 +371,6 @@ GLShaderInterface::GLShaderInterface(GLuint program) builtin_blocks_[u] = (block != nullptr) ? block->binding : -1; } - /* Builtin Storage Buffers */ - for (int32_t u_int = 0; u_int < GPU_NUM_STORAGE_BUFFERS; u_int++) { - GPUStorageBufferBuiltin u = static_cast(u_int); - const ShaderInput *block = this->ssbo_get(builtin_storage_block_name(u)); - builtin_buffers_[u] = (block != nullptr) ? block->binding : -1; - } - MEM_freeN(uniforms_from_blocks); /* Resize name buffer to save some memory. */ @@ -550,13 +543,6 @@ GLShaderInterface::GLShaderInterface(GLuint program, const shader::ShaderCreateI builtin_blocks_[u] = (block != nullptr) ? block->binding : -1; } - /* Builtin Storage Buffers */ - for (int32_t u_int = 0; u_int < GPU_NUM_STORAGE_BUFFERS; u_int++) { - GPUStorageBufferBuiltin u = static_cast(u_int); - const ShaderInput *block = this->ssbo_get(builtin_storage_block_name(u)); - builtin_buffers_[u] = (block != nullptr) ? block->binding : -1; - } - this->sort_inputs(); // this->debug_print(); -- 2.30.2 From 0f23bb8437b61c5c61c7ab0cc712d4ae8bedbd8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Foucault?= Date: Sun, 12 Feb 2023 23:28:06 +0100 Subject: [PATCH 039/182] Cleanup: GPUShader: Remove `GPU_shader_uniform_int/float` Simplify the API, leaving only one function to set uniform without the uniform name. --- intern/cycles/blender/display_driver.cpp | 3 ++- source/blender/draw/intern/draw_manager_exec.c | 10 ++++++---- source/blender/editors/include/BIF_glutil.h | 2 +- source/blender/gpu/GPU_shader.h | 4 ---- source/blender/gpu/intern/gpu_shader.cc | 14 ++------------ source/blender/makesrna/intern/rna_render.c | 5 +---- 6 files changed, 12 insertions(+), 26 deletions(-) diff --git a/intern/cycles/blender/display_driver.cpp b/intern/cycles/blender/display_driver.cpp index 8df0061d8cae..e5b496dab876 100644 --- a/intern/cycles/blender/display_driver.cpp +++ b/intern/cycles/blender/display_driver.cpp @@ -105,7 +105,8 @@ GPUShader *BlenderFallbackDisplayShader::bind(int width, int height) /* Bind shader now to enable uniform assignment. */ GPU_shader_bind(shader_program_); - GPU_shader_uniform_int(shader_program_, image_texture_location_, 0); + float slot = 0; + GPU_shader_uniform_vector_int(shader_program_, image_texture_location_, 1, 1, &slot); float size[2]; size[0] = width; size[1] = height; diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c index 3be04137695d..35a83d5635af 100644 --- a/source/blender/draw/intern/draw_manager_exec.c +++ b/source/blender/draw/intern/draw_manager_exec.c @@ -687,10 +687,12 @@ static void draw_update_uniforms(DRWShadingGroup *shgroup, state->vlattrs_loc = uni->location; GPU_uniformbuf_bind(drw_ensure_layer_attribute_buffer(), uni->location); break; - case DRW_UNIFORM_RESOURCE_CHUNK: + case DRW_UNIFORM_RESOURCE_CHUNK: { state->chunkid_loc = uni->location; - GPU_shader_uniform_int(shgroup->shader, uni->location, 0); + int zero = 0; + GPU_shader_uniform_vector_int(shgroup->shader, uni->location, 1, 1, &zero); break; + } case DRW_UNIFORM_RESOURCE_ID: state->resourceid_loc = uni->location; break; @@ -807,7 +809,7 @@ static void draw_call_resource_bind(DRWCommandsState *state, const DRWResourceHa int chunk = DRW_handle_chunk_get(handle); if (state->resource_chunk != chunk) { if (state->chunkid_loc != -1) { - GPU_shader_uniform_int(DST.shader, state->chunkid_loc, chunk); + GPU_shader_uniform_vector_int(DST.shader, state->chunkid_loc, 1, 1, &chunk); } if (state->obmats_loc != -1) { GPU_uniformbuf_unbind(DST.vmempool->matrices_ubo[state->resource_chunk]); @@ -827,7 +829,7 @@ static void draw_call_resource_bind(DRWCommandsState *state, const DRWResourceHa if (state->resourceid_loc != -1) { int id = DRW_handle_id_get(handle); if (state->resource_id != id) { - GPU_shader_uniform_int(DST.shader, state->resourceid_loc, id); + GPU_shader_uniform_vector_int(DST.shader, state->resourceid_loc, 1, 1, &id); state->resource_id = id; } } diff --git a/source/blender/editors/include/BIF_glutil.h b/source/blender/editors/include/BIF_glutil.h index 84512653a24e..931e0c105750 100644 --- a/source/blender/editors/include/BIF_glutil.h +++ b/source/blender/editors/include/BIF_glutil.h @@ -34,7 +34,7 @@ typedef struct IMMDrawPixelsTexState { * To be used before calling #immDrawPixelsTex * Default shader is #GPU_SHADER_2D_IMAGE_COLOR * You can still set uniforms with: - * `GPU_shader_uniform_int(shader, GPU_shader_get_uniform(shader, "name"), 0);` + * `GPU_shader_uniform_*(shader, "name", value);` */ IMMDrawPixelsTexState immDrawPixelsTexSetup(int builtin); diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h index 6e9998af6253..c8a8f817f96b 100644 --- a/source/blender/gpu/GPU_shader.h +++ b/source/blender/gpu/GPU_shader.h @@ -273,10 +273,6 @@ int GPU_shader_get_builtin_block(GPUShader *shader, int builtin); /** DEPRECATED: Kept only because of Python GPU API. */ int GPU_shader_get_uniform_block(GPUShader *shader, const char *name); -/** DEPRECATED: To be replaced by GPU_shader_uniform_vector. */ -void GPU_shader_uniform_float(GPUShader *shader, int location, float value); -void GPU_shader_uniform_int(GPUShader *shader, int location, int value); - /** \} */ #ifdef __cplusplus diff --git a/source/blender/gpu/intern/gpu_shader.cc b/source/blender/gpu/intern/gpu_shader.cc index 6460e23e3735..2875763fb5e8 100644 --- a/source/blender/gpu/intern/gpu_shader.cc +++ b/source/blender/gpu/intern/gpu_shader.cc @@ -630,20 +630,10 @@ void GPU_shader_uniform_vector_int( unwrap(shader)->uniform_int(loc, len, array_size, value); } -void GPU_shader_uniform_int(GPUShader *shader, int location, int value) -{ - GPU_shader_uniform_vector_int(shader, location, 1, 1, &value); -} - -void GPU_shader_uniform_float(GPUShader *shader, int location, float value) -{ - GPU_shader_uniform_vector(shader, location, 1, 1, &value); -} - void GPU_shader_uniform_1i(GPUShader *sh, const char *name, int value) { const int loc = GPU_shader_get_uniform(sh, name); - GPU_shader_uniform_int(sh, loc, value); + GPU_shader_uniform_vector_int(sh, loc, 1, 1, &value); } void GPU_shader_uniform_1b(GPUShader *sh, const char *name, bool value) @@ -672,7 +662,7 @@ void GPU_shader_uniform_4f(GPUShader *sh, const char *name, float x, float y, fl void GPU_shader_uniform_1f(GPUShader *sh, const char *name, float value) { const int loc = GPU_shader_get_uniform(sh, name); - GPU_shader_uniform_float(sh, loc, value); + GPU_shader_uniform_vector(sh, loc, 1, 1, &value); } void GPU_shader_uniform_2fv(GPUShader *sh, const char *name, const float data[2]) diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c index 6a66445ee4cb..5eb00175c33b 100644 --- a/source/blender/makesrna/intern/rna_render.c +++ b/source/blender/makesrna/intern/rna_render.c @@ -120,10 +120,7 @@ static void engine_bind_display_space_shader(RenderEngine *UNUSED(engine), Scene { GPUShader *shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_IMAGE); GPU_shader_bind(shader); - - int img_loc = GPU_shader_get_uniform(shader, "image"); - - GPU_shader_uniform_int(shader, img_loc, 0); + /** \note "image" binding slot is 0. */ } static void engine_unbind_display_space_shader(RenderEngine *UNUSED(engine)) -- 2.30.2 From 914c3af5c8fb068b993f765c8711536232e3a71e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Foucault?= Date: Sun, 12 Feb 2023 23:39:48 +0100 Subject: [PATCH 040/182] Cleanup: GPUShader: Rename `GPU_shader_uniform_vector` Rename to `GPU_shader_uniform_float/int_ex` to make more sense as a general purpose function. --- intern/cycles/blender/display_driver.cpp | 4 ++-- source/blender/draw/intern/draw_command.cc | 8 +++---- .../blender/draw/intern/draw_manager_exec.c | 22 ++++++++--------- .../editors/interface/interface_icons.cc | 8 +++---- source/blender/editors/mask/mask_draw.c | 2 +- source/blender/gpu/GPU_shader.h | 4 ++-- source/blender/gpu/intern/gpu_immediate.cc | 2 +- source/blender/gpu/intern/gpu_matrix.cc | 13 +++++----- source/blender/gpu/intern/gpu_shader.cc | 24 +++++++++---------- source/blender/gpu/metal/mtl_batch.mm | 20 ++++++++-------- source/blender/gpu/metal/mtl_immediate.mm | 20 ++++++++-------- source/blender/python/gpu/gpu_py_shader.c | 10 ++++---- source/blender/windowmanager/intern/wm_draw.c | 6 ++--- .../blender/windowmanager/intern/wm_gesture.c | 2 +- 14 files changed, 73 insertions(+), 72 deletions(-) diff --git a/intern/cycles/blender/display_driver.cpp b/intern/cycles/blender/display_driver.cpp index e5b496dab876..9b8f031bc253 100644 --- a/intern/cycles/blender/display_driver.cpp +++ b/intern/cycles/blender/display_driver.cpp @@ -106,11 +106,11 @@ GPUShader *BlenderFallbackDisplayShader::bind(int width, int height) /* Bind shader now to enable uniform assignment. */ GPU_shader_bind(shader_program_); float slot = 0; - GPU_shader_uniform_vector_int(shader_program_, image_texture_location_, 1, 1, &slot); + GPU_shader_uniform_int_ex(shader_program_, image_texture_location_, 1, 1, &slot); float size[2]; size[0] = width; size[1] = height; - GPU_shader_uniform_vector(shader_program_, fullscreen_location_, 2, 1, size); + GPU_shader_uniform_float_ex(shader_program_, fullscreen_location_, 2, 1, size); return shader_program_; } diff --git a/source/blender/draw/intern/draw_command.cc b/source/blender/draw/intern/draw_command.cc index c06ff88537a0..86a0480b3f72 100644 --- a/source/blender/draw/intern/draw_command.cc +++ b/source/blender/draw/intern/draw_command.cc @@ -76,16 +76,16 @@ void PushConstant::execute(RecordingState &state) const } switch (type) { case PushConstant::Type::IntValue: - GPU_shader_uniform_vector_int(state.shader, location, comp_len, array_len, int4_value); + GPU_shader_uniform_int_ex(state.shader, location, comp_len, array_len, int4_value); break; case PushConstant::Type::IntReference: - GPU_shader_uniform_vector_int(state.shader, location, comp_len, array_len, int_ref); + GPU_shader_uniform_int_ex(state.shader, location, comp_len, array_len, int_ref); break; case PushConstant::Type::FloatValue: - GPU_shader_uniform_vector(state.shader, location, comp_len, array_len, float4_value); + GPU_shader_uniform_float_ex(state.shader, location, comp_len, array_len, float4_value); break; case PushConstant::Type::FloatReference: - GPU_shader_uniform_vector(state.shader, location, comp_len, array_len, float_ref); + GPU_shader_uniform_float_ex(state.shader, location, comp_len, array_len, float_ref); break; } } diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c index 35a83d5635af..4139ffcb261b 100644 --- a/source/blender/draw/intern/draw_manager_exec.c +++ b/source/blender/draw/intern/draw_manager_exec.c @@ -522,10 +522,10 @@ BLI_INLINE void draw_legacy_matrix_update(DRWShadingGroup *shgroup, /* Still supported for compatibility with gpu_shader_* but should be forbidden. */ DRWObjectMatrix *ob_mats = DRW_memblock_elem_from_handle(DST.vmempool->obmats, handle); if (obmat_loc != -1) { - GPU_shader_uniform_vector(shgroup->shader, obmat_loc, 16, 1, (float *)ob_mats->model); + GPU_shader_uniform_float_ex(shgroup->shader, obmat_loc, 16, 1, (float *)ob_mats->model); } if (obinv_loc != -1) { - GPU_shader_uniform_vector(shgroup->shader, obinv_loc, 16, 1, (float *)ob_mats->modelinverse); + GPU_shader_uniform_float_ex(shgroup->shader, obinv_loc, 16, 1, (float *)ob_mats->modelinverse); } } @@ -549,7 +549,7 @@ BLI_INLINE void draw_geometry_execute(DRWShadingGroup *shgroup, if (baseinst_loc != -1) { /* Fallback when ARB_shader_draw_parameters is not supported. */ - GPU_shader_uniform_vector_int(shgroup->shader, baseinst_loc, 1, 1, (int *)&inst_first); + GPU_shader_uniform_int_ex(shgroup->shader, baseinst_loc, 1, 1, (int *)&inst_first); /* Avoids VAO reconfiguration on older hardware. (see GPU_batch_draw_advanced) */ inst_first = 0; } @@ -615,7 +615,7 @@ static void draw_update_uniforms(DRWShadingGroup *shgroup, memcpy(&mat4_stack[array_index], uni->fvalue, sizeof(float) * uni->length); /* Flush array data to shader. */ if (array_index <= 0) { - GPU_shader_uniform_vector(shgroup->shader, uni->location, 16, 1, mat4_stack); + GPU_shader_uniform_float_ex(shgroup->shader, uni->location, 16, 1, mat4_stack); array_uniform_loc = -1; } continue; @@ -626,23 +626,23 @@ static void draw_update_uniforms(DRWShadingGroup *shgroup, case DRW_UNIFORM_INT_COPY: BLI_assert(uni->arraysize == 1); if (uni->arraysize == 1) { - GPU_shader_uniform_vector_int( + GPU_shader_uniform_int_ex( shgroup->shader, uni->location, uni->length, uni->arraysize, uni->ivalue); } break; case DRW_UNIFORM_INT: - GPU_shader_uniform_vector_int( + GPU_shader_uniform_int_ex( shgroup->shader, uni->location, uni->length, uni->arraysize, uni->pvalue); break; case DRW_UNIFORM_FLOAT_COPY: BLI_assert(uni->arraysize == 1); if (uni->arraysize == 1) { - GPU_shader_uniform_vector( + GPU_shader_uniform_float_ex( shgroup->shader, uni->location, uni->length, uni->arraysize, uni->fvalue); } break; case DRW_UNIFORM_FLOAT: - GPU_shader_uniform_vector( + GPU_shader_uniform_float_ex( shgroup->shader, uni->location, uni->length, uni->arraysize, uni->pvalue); break; case DRW_UNIFORM_TEXTURE: @@ -690,7 +690,7 @@ static void draw_update_uniforms(DRWShadingGroup *shgroup, case DRW_UNIFORM_RESOURCE_CHUNK: { state->chunkid_loc = uni->location; int zero = 0; - GPU_shader_uniform_vector_int(shgroup->shader, uni->location, 1, 1, &zero); + GPU_shader_uniform_int_ex(shgroup->shader, uni->location, 1, 1, &zero); break; } case DRW_UNIFORM_RESOURCE_ID: @@ -809,7 +809,7 @@ static void draw_call_resource_bind(DRWCommandsState *state, const DRWResourceHa int chunk = DRW_handle_chunk_get(handle); if (state->resource_chunk != chunk) { if (state->chunkid_loc != -1) { - GPU_shader_uniform_vector_int(DST.shader, state->chunkid_loc, 1, 1, &chunk); + GPU_shader_uniform_int_ex(DST.shader, state->chunkid_loc, 1, 1, &chunk); } if (state->obmats_loc != -1) { GPU_uniformbuf_unbind(DST.vmempool->matrices_ubo[state->resource_chunk]); @@ -829,7 +829,7 @@ static void draw_call_resource_bind(DRWCommandsState *state, const DRWResourceHa if (state->resourceid_loc != -1) { int id = DRW_handle_id_get(handle); if (state->resource_id != id) { - GPU_shader_uniform_vector_int(DST.shader, state->resourceid_loc, 1, 1, &id); + GPU_shader_uniform_int_ex(DST.shader, state->resourceid_loc, 1, 1, &id); state->resource_id = id; } } diff --git a/source/blender/editors/interface/interface_icons.cc b/source/blender/editors/interface/interface_icons.cc index 634f45283f61..7e0b17aa1282 100644 --- a/source/blender/editors/interface/interface_icons.cc +++ b/source/blender/editors/interface/interface_icons.cc @@ -1804,18 +1804,18 @@ static void icon_draw_texture(float x, if (rgb) { const float color[4] = {rgb[0], rgb[1], rgb[2], alpha}; - GPU_shader_uniform_vector(shader, color_loc, 4, 1, color); + GPU_shader_uniform_float_ex(shader, color_loc, 4, 1, color); } else { const float color[4] = {alpha, alpha, alpha, alpha}; - GPU_shader_uniform_vector(shader, color_loc, 4, 1, color); + GPU_shader_uniform_float_ex(shader, color_loc, 4, 1, color); } const float tex_color[4] = {x1, y1, x2, y2}; const float geom_color[4] = {x, y, x + w, y + h}; - GPU_shader_uniform_vector(shader, rect_tex_loc, 4, 1, tex_color); - GPU_shader_uniform_vector(shader, rect_geom_loc, 4, 1, geom_color); + GPU_shader_uniform_float_ex(shader, rect_tex_loc, 4, 1, tex_color); + GPU_shader_uniform_float_ex(shader, rect_geom_loc, 4, 1, geom_color); GPU_shader_uniform_1f(shader, "text_width", text_width); GPU_texture_bind_ex(texture, GPU_SAMPLER_ICON, img_binding, false); diff --git a/source/blender/editors/mask/mask_draw.c b/source/blender/editors/mask/mask_draw.c index 77014fde8a85..ea4050d0ba06 100644 --- a/source/blender/editors/mask/mask_draw.c +++ b/source/blender/editors/mask/mask_draw.c @@ -722,7 +722,7 @@ void ED_mask_draw_region( GPU_matrix_mul(stabmat); } IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_SHUFFLE_COLOR); - GPU_shader_uniform_vector( + GPU_shader_uniform_float_ex( state.shader, GPU_shader_get_uniform(state.shader, "shuffle"), 4, 1, buf_col); if (overlay_mode == MASK_OVERLAY_COMBINED) { diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h index c8a8f817f96b..b9be4a5ec554 100644 --- a/source/blender/gpu/GPU_shader.h +++ b/source/blender/gpu/GPU_shader.h @@ -128,9 +128,9 @@ int GPU_shader_get_uniform(GPUShader *shader, const char *name); * Sets a generic push constant (a.k.a. uniform). * \a length and \a array_size should match the create info push_constant declaration. */ -void GPU_shader_uniform_vector( +void GPU_shader_uniform_float_ex( GPUShader *shader, int location, int length, int array_size, const float *value); -void GPU_shader_uniform_vector_int( +void GPU_shader_uniform_int_ex( GPUShader *shader, int location, int length, int array_size, const int *value); /** diff --git a/source/blender/gpu/intern/gpu_immediate.cc b/source/blender/gpu/intern/gpu_immediate.cc index ada34fdaeeed..645a920fc835 100644 --- a/source/blender/gpu/intern/gpu_immediate.cc +++ b/source/blender/gpu/intern/gpu_immediate.cc @@ -625,7 +625,7 @@ void immUniformColor4f(float r, float g, float b, float a) int32_t uniform_loc = GPU_shader_get_builtin_uniform(imm->shader, GPU_UNIFORM_COLOR); BLI_assert(uniform_loc != -1); float data[4] = {r, g, b, a}; - GPU_shader_uniform_vector(imm->shader, uniform_loc, 4, 1, data); + GPU_shader_uniform_float_ex(imm->shader, uniform_loc, 4, 1, data); /* For wide Line workaround. */ copy_v4_v4(imm->uniform_color, data); } diff --git a/source/blender/gpu/intern/gpu_matrix.cc b/source/blender/gpu/intern/gpu_matrix.cc index b46860cf0f48..d285ff5ef990 100644 --- a/source/blender/gpu/intern/gpu_matrix.cc +++ b/source/blender/gpu/intern/gpu_matrix.cc @@ -623,30 +623,31 @@ void GPU_matrix_bind(GPUShader *shader) int32_t P_inv = GPU_shader_get_builtin_uniform(shader, GPU_UNIFORM_PROJECTION_INV); if (MV != -1) { - GPU_shader_uniform_vector( + GPU_shader_uniform_float_ex( shader, MV, 16, 1, (const float *)GPU_matrix_model_view_get(nullptr)); } if (P != -1) { - GPU_shader_uniform_vector(shader, P, 16, 1, (const float *)GPU_matrix_projection_get(nullptr)); + GPU_shader_uniform_float_ex( + shader, P, 16, 1, (const float *)GPU_matrix_projection_get(nullptr)); } if (MVP != -1) { - GPU_shader_uniform_vector( + GPU_shader_uniform_float_ex( shader, MVP, 16, 1, (const float *)GPU_matrix_model_view_projection_get(nullptr)); } if (N != -1) { - GPU_shader_uniform_vector(shader, N, 9, 1, (const float *)GPU_matrix_normal_get(nullptr)); + GPU_shader_uniform_float_ex(shader, N, 9, 1, (const float *)GPU_matrix_normal_get(nullptr)); } if (MV_inv != -1) { Mat4 m; GPU_matrix_model_view_get(m); invert_m4(m); - GPU_shader_uniform_vector(shader, MV_inv, 16, 1, (const float *)m); + GPU_shader_uniform_float_ex(shader, MV_inv, 16, 1, (const float *)m); } if (P_inv != -1) { Mat4 m; GPU_matrix_projection_get(m); invert_m4(m); - GPU_shader_uniform_vector(shader, P_inv, 16, 1, (const float *)m); + GPU_shader_uniform_float_ex(shader, P_inv, 16, 1, (const float *)m); } gpu_matrix_state_active_set_dirty(false); diff --git a/source/blender/gpu/intern/gpu_shader.cc b/source/blender/gpu/intern/gpu_shader.cc index 2875763fb5e8..0edc20723026 100644 --- a/source/blender/gpu/intern/gpu_shader.cc +++ b/source/blender/gpu/intern/gpu_shader.cc @@ -618,13 +618,13 @@ int GPU_shader_get_program(GPUShader *shader) /** \name Uniforms setters * \{ */ -void GPU_shader_uniform_vector( +void GPU_shader_uniform_float_ex( GPUShader *shader, int loc, int len, int array_size, const float *value) { unwrap(shader)->uniform_float(loc, len, array_size, value); } -void GPU_shader_uniform_vector_int( +void GPU_shader_uniform_int_ex( GPUShader *shader, int loc, int len, int array_size, const int *value) { unwrap(shader)->uniform_int(loc, len, array_size, value); @@ -633,7 +633,7 @@ void GPU_shader_uniform_vector_int( void GPU_shader_uniform_1i(GPUShader *sh, const char *name, int value) { const int loc = GPU_shader_get_uniform(sh, name); - GPU_shader_uniform_vector_int(sh, loc, 1, 1, &value); + GPU_shader_uniform_int_ex(sh, loc, 1, 1, &value); } void GPU_shader_uniform_1b(GPUShader *sh, const char *name, bool value) @@ -662,37 +662,37 @@ void GPU_shader_uniform_4f(GPUShader *sh, const char *name, float x, float y, fl void GPU_shader_uniform_1f(GPUShader *sh, const char *name, float value) { const int loc = GPU_shader_get_uniform(sh, name); - GPU_shader_uniform_vector(sh, loc, 1, 1, &value); + GPU_shader_uniform_float_ex(sh, loc, 1, 1, &value); } void GPU_shader_uniform_2fv(GPUShader *sh, const char *name, const float data[2]) { const int loc = GPU_shader_get_uniform(sh, name); - GPU_shader_uniform_vector(sh, loc, 2, 1, data); + GPU_shader_uniform_float_ex(sh, loc, 2, 1, data); } void GPU_shader_uniform_3fv(GPUShader *sh, const char *name, const float data[3]) { const int loc = GPU_shader_get_uniform(sh, name); - GPU_shader_uniform_vector(sh, loc, 3, 1, data); + GPU_shader_uniform_float_ex(sh, loc, 3, 1, data); } void GPU_shader_uniform_4fv(GPUShader *sh, const char *name, const float data[4]) { const int loc = GPU_shader_get_uniform(sh, name); - GPU_shader_uniform_vector(sh, loc, 4, 1, data); + GPU_shader_uniform_float_ex(sh, loc, 4, 1, data); } void GPU_shader_uniform_2iv(GPUShader *sh, const char *name, const int data[2]) { const int loc = GPU_shader_get_uniform(sh, name); - GPU_shader_uniform_vector_int(sh, loc, 2, 1, data); + GPU_shader_uniform_int_ex(sh, loc, 2, 1, data); } void GPU_shader_uniform_mat4(GPUShader *sh, const char *name, const float data[4][4]) { const int loc = GPU_shader_get_uniform(sh, name); - GPU_shader_uniform_vector(sh, loc, 16, 1, (const float *)data); + GPU_shader_uniform_float_ex(sh, loc, 16, 1, (const float *)data); } void GPU_shader_uniform_mat3_as_mat4(GPUShader *sh, const char *name, const float data[3][3]) @@ -705,13 +705,13 @@ void GPU_shader_uniform_mat3_as_mat4(GPUShader *sh, const char *name, const floa void GPU_shader_uniform_2fv_array(GPUShader *sh, const char *name, int len, const float (*val)[2]) { const int loc = GPU_shader_get_uniform(sh, name); - GPU_shader_uniform_vector(sh, loc, 2, len, (const float *)val); + GPU_shader_uniform_float_ex(sh, loc, 2, len, (const float *)val); } void GPU_shader_uniform_4fv_array(GPUShader *sh, const char *name, int len, const float (*val)[4]) { const int loc = GPU_shader_get_uniform(sh, name); - GPU_shader_uniform_vector(sh, loc, 4, len, (const float *)val); + GPU_shader_uniform_float_ex(sh, loc, 4, len, (const float *)val); } /** \} */ @@ -741,7 +741,7 @@ void Shader::set_srgb_uniform(GPUShader *shader) { int32_t loc = GPU_shader_get_builtin_uniform(shader, GPU_UNIFORM_SRGB_TRANSFORM); if (loc != -1) { - GPU_shader_uniform_vector_int(shader, loc, 1, 1, &g_shader_builtin_srgb_transform); + GPU_shader_uniform_int_ex(shader, loc, 1, 1, &g_shader_builtin_srgb_transform); } g_shader_builtin_srgb_is_dirty = false; } diff --git a/source/blender/gpu/metal/mtl_batch.mm b/source/blender/gpu/metal/mtl_batch.mm index 13496e8ad6f3..07aaa5cfe62c 100644 --- a/source/blender/gpu/metal/mtl_batch.mm +++ b/source/blender/gpu/metal/mtl_batch.mm @@ -530,16 +530,16 @@ id MTLBatch::bind(uint v_first, uint v_count, uint i_fi /* Set SSBO-fetch-mode status uniforms. */ BLI_assert(active_shader_->uni_ssbo_input_prim_type_loc != -1); BLI_assert(active_shader_->uni_ssbo_input_vert_count_loc != -1); - GPU_shader_uniform_vector_int(reinterpret_cast(wrap(active_shader_)), - active_shader_->uni_ssbo_input_prim_type_loc, - 1, - 1, - (const int *)(&final_prim_type)); - GPU_shader_uniform_vector_int(reinterpret_cast(wrap(active_shader_)), - active_shader_->uni_ssbo_input_vert_count_loc, - 1, - 1, - (const int *)(&v_count)); + GPU_shader_uniform_int_ex(reinterpret_cast(wrap(active_shader_)), + active_shader_->uni_ssbo_input_prim_type_loc, + 1, + 1, + (const int *)(&final_prim_type)); + GPU_shader_uniform_int_ex(reinterpret_cast(wrap(active_shader_)), + active_shader_->uni_ssbo_input_vert_count_loc, + 1, + 1, + (const int *)(&v_count)); } /* Ensure Context Render Pipeline State is fully setup and ready to execute the draw. diff --git a/source/blender/gpu/metal/mtl_immediate.mm b/source/blender/gpu/metal/mtl_immediate.mm index f0809e6e9d37..985b962cc99d 100644 --- a/source/blender/gpu/metal/mtl_immediate.mm +++ b/source/blender/gpu/metal/mtl_immediate.mm @@ -248,16 +248,16 @@ void MTLImmediate::end() "ssbo_input_prim_type uniform location invalid!"); BLI_assert_msg(active_mtl_shader->uni_ssbo_input_vert_count_loc != -1, "ssbo_input_vert_count uniform location invalid!"); - GPU_shader_uniform_vector_int(reinterpret_cast(wrap(active_mtl_shader)), - active_mtl_shader->uni_ssbo_input_prim_type_loc, - 1, - 1, - (const int *)(&this->prim_type)); - GPU_shader_uniform_vector_int(reinterpret_cast(wrap(active_mtl_shader)), - active_mtl_shader->uni_ssbo_input_vert_count_loc, - 1, - 1, - (const int *)(&this->vertex_idx)); + GPU_shader_uniform_int_ex(reinterpret_cast(wrap(active_mtl_shader)), + active_mtl_shader->uni_ssbo_input_prim_type_loc, + 1, + 1, + (const int *)(&this->prim_type)); + GPU_shader_uniform_int_ex(reinterpret_cast(wrap(active_mtl_shader)), + active_mtl_shader->uni_ssbo_input_vert_count_loc, + 1, + 1, + (const int *)(&this->vertex_idx)); } MTLPrimitiveType mtl_prim_type = gpu_prim_type_to_metal(this->prim_type); diff --git a/source/blender/python/gpu/gpu_py_shader.c b/source/blender/python/gpu/gpu_py_shader.c index 2c13e271e369..80c22bd7a974 100644 --- a/source/blender/python/gpu/gpu_py_shader.c +++ b/source/blender/python/gpu/gpu_py_shader.c @@ -269,7 +269,7 @@ static PyObject *pygpu_shader_uniform_vector_float(BPyGPUShader *self, PyObject } GPU_shader_bind(self->shader); - GPU_shader_uniform_vector(self->shader, location, length, count, pybuffer.buf); + GPU_shader_uniform_float_ex(self->shader, location, length, count, pybuffer.buf); PyBuffer_Release(&pybuffer); @@ -292,7 +292,7 @@ static PyObject *pygpu_shader_uniform_vector_int(BPyGPUShader *self, PyObject *a } GPU_shader_bind(self->shader); - GPU_shader_uniform_vector_int(self->shader, location, length, count, pybuffer.buf); + GPU_shader_uniform_int_ex(self->shader, location, length, count, pybuffer.buf); PyBuffer_Release(&pybuffer); @@ -367,7 +367,7 @@ static PyObject *pygpu_shader_uniform_bool(BPyGPUShader *self, PyObject *args) } GPU_shader_bind(self->shader); - GPU_shader_uniform_vector_int(self->shader, location, length, 1, values); + GPU_shader_uniform_int_ex(self->shader, location, length, 1, values); Py_RETURN_NONE; } @@ -437,7 +437,7 @@ static PyObject *pygpu_shader_uniform_float(BPyGPUShader *self, PyObject *args) } GPU_shader_bind(self->shader); - GPU_shader_uniform_vector(self->shader, location, length, 1, values); + GPU_shader_uniform_float_ex(self->shader, location, length, 1, values); Py_RETURN_NONE; } @@ -509,7 +509,7 @@ static PyObject *pygpu_shader_uniform_int(BPyGPUShader *self, PyObject *args) } GPU_shader_bind(self->shader); - GPU_shader_uniform_vector_int(self->shader, location, length, 1, values); + GPU_shader_uniform_int_ex(self->shader, location, length, 1, values); Py_RETURN_NONE; } diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c index 5ce080e575a7..ebe670bfa21c 100644 --- a/source/blender/windowmanager/intern/wm_draw.c +++ b/source/blender/windowmanager/intern/wm_draw.c @@ -846,9 +846,9 @@ void wm_draw_region_blend(ARegion *region, int view, bool blend) GPU_texture_bind(texture, texture_bind_loc); - GPU_shader_uniform_vector(shader, rect_tex_loc, 4, 1, rectt); - GPU_shader_uniform_vector(shader, rect_geo_loc, 4, 1, rectg); - GPU_shader_uniform_vector(shader, color_loc, 4, 1, (const float[4]){1, 1, 1, 1}); + GPU_shader_uniform_float_ex(shader, rect_tex_loc, 4, 1, rectt); + GPU_shader_uniform_float_ex(shader, rect_geo_loc, 4, 1, rectg); + GPU_shader_uniform_float_ex(shader, color_loc, 4, 1, (const float[4]){1, 1, 1, 1}); GPUBatch *quad = GPU_batch_preset_quad(); GPU_batch_set_shader(quad, shader); diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c index bb03c2c14137..fecbcca3c90a 100644 --- a/source/blender/windowmanager/intern/wm_gesture.c +++ b/source/blender/windowmanager/intern/wm_gesture.c @@ -326,7 +326,7 @@ static void draw_filled_lasso(wmGesture *gt) IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_SHUFFLE_COLOR); GPU_shader_bind(state.shader); - GPU_shader_uniform_vector( + GPU_shader_uniform_float_ex( state.shader, GPU_shader_get_uniform(state.shader, "shuffle"), 4, 1, red); immDrawPixelsTexTiled( -- 2.30.2 From 037a340c46b1c9c3963ab9269f9b076e86713e18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Foucault?= Date: Mon, 13 Feb 2023 12:17:46 +0100 Subject: [PATCH 041/182] Cycles: Fix compilation after recent GPU cleanups --- intern/cycles/blender/display_driver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intern/cycles/blender/display_driver.cpp b/intern/cycles/blender/display_driver.cpp index 9b8f031bc253..b000c8379b87 100644 --- a/intern/cycles/blender/display_driver.cpp +++ b/intern/cycles/blender/display_driver.cpp @@ -105,7 +105,7 @@ GPUShader *BlenderFallbackDisplayShader::bind(int width, int height) /* Bind shader now to enable uniform assignment. */ GPU_shader_bind(shader_program_); - float slot = 0; + int slot = 0; GPU_shader_uniform_int_ex(shader_program_, image_texture_location_, 1, 1, &slot); float size[2]; size[0] = width; -- 2.30.2 From 6590357e8cd4a4460e9dce28281a255146ef6d6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Foucault?= Date: Mon, 13 Feb 2023 12:49:22 +0100 Subject: [PATCH 042/182] GPUShader: Fix compilation caused by designated initializers in C++ --- .../blender/gpu/intern/gpu_shader_builtin.cc | 309 ++++++------------ 1 file changed, 101 insertions(+), 208 deletions(-) diff --git a/source/blender/gpu/intern/gpu_shader_builtin.cc b/source/blender/gpu/intern/gpu_shader_builtin.cc index 03c3702c08b1..2a15e6d823d8 100644 --- a/source/blender/gpu/intern/gpu_shader_builtin.cc +++ b/source/blender/gpu/intern/gpu_shader_builtin.cc @@ -12,205 +12,105 @@ /* Cache of built-in shaders (each is created on first use). */ static GPUShader *builtin_shaders[GPU_SHADER_CFG_LEN][GPU_SHADER_BUILTIN_LEN] = {{nullptr}}; -typedef struct { - const char *name; - const char *create_info; - /** Optional. */ - const char *clipped_create_info; -} GPUShaderStages; +static const char *builtin_shader_create_info_name(eGPUBuiltinShader shader) +{ + switch (shader) { + case GPU_SHADER_TEXT: + return "gpu_shader_text"; + case GPU_SHADER_KEYFRAME_SHAPE: + return "gpu_shader_keyframe_shape"; + case GPU_SHADER_SIMPLE_LIGHTING: + return "gpu_shader_simple_lighting"; + case GPU_SHADER_3D_IMAGE: + return "gpu_shader_3D_image"; + case GPU_SHADER_3D_IMAGE_COLOR: + return "gpu_shader_3D_image_color"; + case GPU_SHADER_2D_CHECKER: + return "gpu_shader_2D_checker"; + case GPU_SHADER_2D_DIAG_STRIPES: + return "gpu_shader_2D_diag_stripes"; + case GPU_SHADER_ICON: + return "gpu_shader_icon"; + case GPU_SHADER_2D_IMAGE_OVERLAYS_MERGE: + return "gpu_shader_2D_image_overlays_merge"; + case GPU_SHADER_2D_IMAGE_OVERLAYS_STEREO_MERGE: + return "gpu_shader_2D_image_overlays_stereo_merge"; + case GPU_SHADER_2D_IMAGE_DESATURATE_COLOR: + return "gpu_shader_2D_image_desaturate_color"; + case GPU_SHADER_2D_IMAGE_SHUFFLE_COLOR: + return "gpu_shader_2D_image_shuffle_color"; + case GPU_SHADER_2D_IMAGE_RECT_COLOR: + return "gpu_shader_2D_image_rect_color"; + case GPU_SHADER_2D_IMAGE_MULTI_RECT_COLOR: + return "gpu_shader_2D_image_multi_rect_color"; + case GPU_SHADER_3D_UNIFORM_COLOR: + return "gpu_shader_3D_uniform_color"; + case GPU_SHADER_3D_FLAT_COLOR: + return "gpu_shader_3D_flat_color"; + case GPU_SHADER_3D_SMOOTH_COLOR: + return "gpu_shader_3D_smooth_color"; + case GPU_SHADER_3D_DEPTH_ONLY: + return "gpu_shader_3D_depth_only"; + case GPU_SHADER_3D_CLIPPED_UNIFORM_COLOR: + return "gpu_shader_3D_clipped_uniform_color"; + case GPU_SHADER_3D_POLYLINE_UNIFORM_COLOR: + return "gpu_shader_3D_polyline_uniform_color"; + case GPU_SHADER_3D_POLYLINE_CLIPPED_UNIFORM_COLOR: + return "gpu_shader_3D_polyline_uniform_color_clipped"; + case GPU_SHADER_3D_POLYLINE_FLAT_COLOR: + return "gpu_shader_3D_polyline_flat_color"; + case GPU_SHADER_3D_POLYLINE_SMOOTH_COLOR: + return "gpu_shader_3D_polyline_smooth_color"; + case GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR: + return "gpu_shader_3D_line_dashed_uniform_color"; + case GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA: + return "gpu_shader_2D_point_uniform_size_uniform_color_aa"; + case GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA: + return "gpu_shader_2D_point_uniform_size_uniform_color_outline_aa"; + case GPU_SHADER_3D_POINT_VARYING_SIZE_VARYING_COLOR: + return "gpu_shader_3D_point_varying_size_varying_color"; + case GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA: + return "gpu_shader_3D_point_uniform_size_uniform_color_aa"; + case GPU_SHADER_2D_AREA_BORDERS: + return "gpu_shader_2D_area_borders"; + case GPU_SHADER_2D_WIDGET_BASE: + return "gpu_shader_2D_widget_base"; + case GPU_SHADER_2D_WIDGET_BASE_INST: + return "gpu_shader_2D_widget_base_inst"; + case GPU_SHADER_2D_WIDGET_SHADOW: + return "gpu_shader_2D_widget_shadow"; + case GPU_SHADER_2D_NODELINK: + return "gpu_shader_2D_nodelink"; + case GPU_SHADER_2D_NODELINK_INST: + return "gpu_shader_2D_nodelink_inst"; + case GPU_SHADER_GPENCIL_STROKE: + return "gpu_shader_gpencil_stroke"; + default: + BLI_assert_unreachable(); + return ""; + } +} -static const GPUShaderStages builtin_shader_stages[GPU_SHADER_BUILTIN_LEN] = { - [GPU_SHADER_TEXT] = - { - .name = "GPU_SHADER_TEXT", - .create_info = "gpu_shader_text", - }, - [GPU_SHADER_KEYFRAME_SHAPE] = - { - .name = "GPU_SHADER_KEYFRAME_SHAPE", - .create_info = "gpu_shader_keyframe_shape", - }, - [GPU_SHADER_SIMPLE_LIGHTING] = - { - .name = "GPU_SHADER_SIMPLE_LIGHTING", - .create_info = "gpu_shader_simple_lighting", - }, - [GPU_SHADER_3D_IMAGE] = - { - .name = "GPU_SHADER_3D_IMAGE", - .create_info = "gpu_shader_3D_image", - }, - [GPU_SHADER_3D_IMAGE_COLOR] = - { - .name = "GPU_SHADER_3D_IMAGE_COLOR", - .create_info = "gpu_shader_3D_image_color", - }, - [GPU_SHADER_2D_CHECKER] = - { - .name = "GPU_SHADER_2D_CHECKER", - .create_info = "gpu_shader_2D_checker", - }, - - [GPU_SHADER_2D_DIAG_STRIPES] = - { - .name = "GPU_SHADER_2D_DIAG_STRIPES", - .create_info = "gpu_shader_2D_diag_stripes", - }, - - [GPU_SHADER_ICON] = - { - .name = "GPU_SHADER_ICON", - .create_info = "gpu_shader_icon", - }, - [GPU_SHADER_2D_IMAGE_OVERLAYS_MERGE] = - { - .name = "GPU_SHADER_2D_IMAGE_OVERLAYS_MERGE", - .create_info = "gpu_shader_2D_image_overlays_merge", - }, - [GPU_SHADER_2D_IMAGE_OVERLAYS_STEREO_MERGE] = - { - .name = "GPU_SHADER_2D_IMAGE_OVERLAYS_STEREO_MERGE", - .create_info = "gpu_shader_2D_image_overlays_stereo_merge", - }, - [GPU_SHADER_2D_IMAGE_DESATURATE_COLOR] = - { - .name = "GPU_SHADER_2D_IMAGE_DESATURATE_COLOR", - .create_info = "gpu_shader_2D_image_desaturate_color", - }, - [GPU_SHADER_2D_IMAGE_SHUFFLE_COLOR] = - { - .name = "GPU_SHADER_2D_IMAGE_SHUFFLE_COLOR", - .create_info = "gpu_shader_2D_image_shuffle_color", - }, - [GPU_SHADER_2D_IMAGE_RECT_COLOR] = - { - .name = "GPU_SHADER_2D_IMAGE_RECT_COLOR", - .create_info = "gpu_shader_2D_image_rect_color", - }, - [GPU_SHADER_2D_IMAGE_MULTI_RECT_COLOR] = - { - .name = "GPU_SHADER_2D_IMAGE_MULTI_RECT_COLOR", - .create_info = "gpu_shader_2D_image_multi_rect_color", - }, - - [GPU_SHADER_3D_UNIFORM_COLOR] = - { - .name = "GPU_SHADER_3D_UNIFORM_COLOR", - .create_info = "gpu_shader_3D_uniform_color", - .clipped_create_info = "gpu_shader_3D_uniform_color_clipped", - }, - [GPU_SHADER_3D_FLAT_COLOR] = - { - .name = "GPU_SHADER_3D_FLAT_COLOR", - .create_info = "gpu_shader_3D_flat_color", - .clipped_create_info = "gpu_shader_3D_flat_color_clipped", - }, - [GPU_SHADER_3D_SMOOTH_COLOR] = - { - .name = "GPU_SHADER_3D_SMOOTH_COLOR", - .create_info = "gpu_shader_3D_smooth_color", - .clipped_create_info = "gpu_shader_3D_smooth_color_clipped", - }, - [GPU_SHADER_3D_DEPTH_ONLY] = - { - .name = "GPU_SHADER_3D_DEPTH_ONLY", - .create_info = "gpu_shader_3D_depth_only", - .clipped_create_info = "gpu_shader_3D_depth_only_clipped", - }, - [GPU_SHADER_3D_CLIPPED_UNIFORM_COLOR] = - { - .name = "GPU_SHADER_3D_CLIPPED_UNIFORM_COLOR", - .create_info = "gpu_shader_3D_clipped_uniform_color", - }, - - [GPU_SHADER_3D_POLYLINE_UNIFORM_COLOR] = - { - .name = "GPU_SHADER_3D_POLYLINE_UNIFORM_COLOR", - .create_info = "gpu_shader_3D_polyline_uniform_color", - }, - [GPU_SHADER_3D_POLYLINE_CLIPPED_UNIFORM_COLOR] = - { - .name = "GPU_SHADER_3D_POLYLINE_CLIPPED_UNIFORM_COLOR", - .create_info = "gpu_shader_3D_polyline_uniform_color_clipped", - }, - [GPU_SHADER_3D_POLYLINE_FLAT_COLOR] = - { - .name = "GPU_SHADER_3D_POLYLINE_FLAT_COLOR", - .create_info = "gpu_shader_3D_polyline_flat_color", - }, - [GPU_SHADER_3D_POLYLINE_SMOOTH_COLOR] = - { - .name = "GPU_SHADER_3D_POLYLINE_SMOOTH_COLOR", - .create_info = "gpu_shader_3D_polyline_smooth_color", - }, - - [GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR] = - { - .name = "GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR", - .create_info = "gpu_shader_3D_line_dashed_uniform_color", - .clipped_create_info = "gpu_shader_3D_line_dashed_uniform_color_clipped", - }, - - [GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA] = - { - .name = "GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA", - .create_info = "gpu_shader_2D_point_uniform_size_uniform_color_aa", - }, - [GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA] = - { - .name = "GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA", - .create_info = "gpu_shader_2D_point_uniform_size_uniform_color_outline_aa", - }, - [GPU_SHADER_3D_POINT_VARYING_SIZE_VARYING_COLOR] = - { - .name = "GPU_SHADER_3D_POINT_VARYING_SIZE_VARYING_COLOR", - .create_info = "gpu_shader_3D_point_varying_size_varying_color", - }, - [GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA] = - { - .name = "GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA", - .create_info = "gpu_shader_3D_point_uniform_size_uniform_color_aa", - .clipped_create_info = "gpu_shader_3D_point_uniform_size_uniform_color_aa_clipped", - }, - - [GPU_SHADER_2D_AREA_BORDERS] = - { - .name = "GPU_SHADER_2D_AREA_BORDERS", - .create_info = "gpu_shader_2D_area_borders", - }, - [GPU_SHADER_2D_WIDGET_BASE] = - { - .name = "GPU_SHADER_2D_WIDGET_BASE", - .create_info = "gpu_shader_2D_widget_base", - }, - [GPU_SHADER_2D_WIDGET_BASE_INST] = - { - .name = "GPU_SHADER_2D_WIDGET_BASE_INST", - .create_info = "gpu_shader_2D_widget_base_inst", - }, - [GPU_SHADER_2D_WIDGET_SHADOW] = - { - .name = "GPU_SHADER_2D_WIDGET_SHADOW", - .create_info = "gpu_shader_2D_widget_shadow", - }, - [GPU_SHADER_2D_NODELINK] = - { - .name = "GPU_SHADER_2D_NODELINK", - .create_info = "gpu_shader_2D_nodelink", - }, - - [GPU_SHADER_2D_NODELINK_INST] = - { - .name = "GPU_SHADER_2D_NODELINK_INST", - .create_info = "gpu_shader_2D_nodelink_inst", - }, - - [GPU_SHADER_GPENCIL_STROKE] = - { - .name = "GPU_SHADER_GPENCIL_STROKE", - .create_info = "gpu_shader_gpencil_stroke", - }, -}; +static const char *builtin_shader_create_info_name_clipped(eGPUBuiltinShader shader) +{ + switch (shader) { + case GPU_SHADER_3D_UNIFORM_COLOR: + return "gpu_shader_3D_uniform_color_clipped"; + case GPU_SHADER_3D_FLAT_COLOR: + return "gpu_shader_3D_flat_color_clipped"; + case GPU_SHADER_3D_SMOOTH_COLOR: + return "gpu_shader_3D_smooth_color_clipped"; + case GPU_SHADER_3D_DEPTH_ONLY: + return "gpu_shader_3D_depth_only_clipped"; + case GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR: + return "gpu_shader_3D_line_dashed_uniform_color_clipped"; + case GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA: + return "gpu_shader_3D_point_uniform_size_uniform_color_aa_clipped"; + default: + BLI_assert_unreachable(); + return ""; + } +} GPUShader *GPU_shader_get_builtin_shader_with_config(eGPUBuiltinShader shader, eGPUShaderConfig sh_cfg) @@ -220,11 +120,9 @@ GPUShader *GPU_shader_get_builtin_shader_with_config(eGPUBuiltinShader shader, GPUShader **sh_p = &builtin_shaders[sh_cfg][shader]; if (*sh_p == nullptr) { - const GPUShaderStages *stages = &builtin_shader_stages[shader]; - - /* common case */ if (sh_cfg == GPU_SHADER_CFG_DEFAULT) { - *sh_p = GPU_shader_create_from_info_name(stages->create_info); + /* Common case. */ + *sh_p = GPU_shader_create_from_info_name(builtin_shader_create_info_name(shader)); if (ELEM(shader, GPU_SHADER_3D_POLYLINE_CLIPPED_UNIFORM_COLOR, GPU_SHADER_3D_POLYLINE_UNIFORM_COLOR, @@ -238,12 +136,7 @@ GPUShader *GPU_shader_get_builtin_shader_with_config(eGPUBuiltinShader shader, } else if (sh_cfg == GPU_SHADER_CFG_CLIPPED) { /* In rare cases geometry shaders calculate clipping themselves. */ - if (stages->clipped_create_info != nullptr) { - *sh_p = GPU_shader_create_from_info_name(stages->clipped_create_info); - } - else { - BLI_assert_msg(0, "Shader doesn't support clip mode."); - } + *sh_p = GPU_shader_create_from_info_name(builtin_shader_create_info_name_clipped(shader)); } else { BLI_assert(0); -- 2.30.2 From cbfa019d37eeeac6b3cc9003b31ebd5690fa2ad3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Foucault?= Date: Mon, 13 Feb 2023 12:49:51 +0100 Subject: [PATCH 043/182] Cleanup: EEVEE-Next: Fix typo --- source/blender/draw/engines/eevee_next/eevee_shadow.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/draw/engines/eevee_next/eevee_shadow.cc b/source/blender/draw/engines/eevee_next/eevee_shadow.cc index d3b4eb819256..c7d6dcb62d7f 100644 --- a/source/blender/draw/engines/eevee_next/eevee_shadow.cc +++ b/source/blender/draw/engines/eevee_next/eevee_shadow.cc @@ -409,7 +409,7 @@ void ShadowDirectional::cascade_tilemaps_distribution(Light &light, const Camera /* Offset in tiles from the origin to the center of the first tile-maps. */ int2 origin_offset = int2(round(float2(near_point) / tile_size)); - /* Offset in tiles between the first andlod the last tile-maps. */ + /* Offset in tiles between the first and the last tile-maps. */ int2 offset_vector = int2(round(farthest_tilemap_center / tile_size)); light.clipmap_base_offset = (offset_vector * (1 << 16)) / max_ii(levels_range.size() - 1, 1); -- 2.30.2 From 080352d85be21d392780d3b508e982da74c0cb95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Mon, 13 Feb 2023 12:54:35 +0100 Subject: [PATCH 044/182] Tests: add unit test for `BLI_strnlen` It wasn't there. Now it is. --- .../blender/blenlib/tests/BLI_string_test.cc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/source/blender/blenlib/tests/BLI_string_test.cc b/source/blender/blenlib/tests/BLI_string_test.cc index d726fbccf209..9ea46f22890d 100644 --- a/source/blender/blenlib/tests/BLI_string_test.cc +++ b/source/blender/blenlib/tests/BLI_string_test.cc @@ -612,6 +612,25 @@ TEST(string, StrFormatIntegerUnits) EXPECT_STREQ("-2B", size_str); } +TEST(string, StringNLen) +{ + EXPECT_EQ(0, BLI_strnlen("", 0)); + EXPECT_EQ(0, BLI_strnlen("", 1)); + EXPECT_EQ(0, BLI_strnlen("", 100)); + + EXPECT_EQ(0, BLI_strnlen("x", 0)); + EXPECT_EQ(1, BLI_strnlen("x", 1)); + EXPECT_EQ(1, BLI_strnlen("x", 100)); + + // ü is \xc3\xbc + EXPECT_EQ(2, BLI_strnlen("ü", 100)); + + EXPECT_EQ(0, BLI_strnlen("this is a longer string", 0)); + EXPECT_EQ(1, BLI_strnlen("this is a longer string", 1)); + EXPECT_EQ(5, BLI_strnlen("this is a longer string", 5)); + EXPECT_EQ(47, BLI_strnlen("This string writes about an agent without name.", 100)); +} + struct WordInfo { WordInfo() = default; WordInfo(int start, int end) : start(start), end(end) -- 2.30.2 From 93cdbee7d33ccb3c2f1f92c93cdda10ae5eb9483 Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Mon, 13 Feb 2023 12:42:31 +0100 Subject: [PATCH 045/182] Assets: Store pointer to owning asset library in asset representation This is needed to be able to query asset library information from an asset. This again is relevant especially for the "All" asset library, where you can't just directly access the library itself, which is different for different assets. The current design is that an asset representation is owned by exactly one asset library, so having this pointer is perfectly compatible with the design. Reviewed by: Julian Eisel --- .../asset_system/AS_asset_representation.hh | 12 ++++++++-- .../asset_system/intern/asset_library.cc | 5 +++-- .../intern/asset_representation.cc | 22 +++++++++++++++---- .../asset_system/intern/asset_storage.cc | 13 ++++++----- .../asset_system/intern/asset_storage.hh | 7 ++++-- 5 files changed, 44 insertions(+), 15 deletions(-) diff --git a/source/blender/asset_system/AS_asset_representation.hh b/source/blender/asset_system/AS_asset_representation.hh index 65f7e08f3951..6793cd8097cf 100644 --- a/source/blender/asset_system/AS_asset_representation.hh +++ b/source/blender/asset_system/AS_asset_representation.hh @@ -23,11 +23,15 @@ struct ID; namespace blender::asset_system { +class AssetLibrary; + class AssetRepresentation { AssetIdentifier identifier_; /** Indicate if this is a local or external asset, and as such, which of the union members below * should be used. */ const bool is_local_id_ = false; + /** Asset library that owns this asset representation. */ + const AssetLibrary *owner_asset_library_; struct ExternalAsset { std::string name; @@ -44,10 +48,13 @@ class AssetRepresentation { /** Constructs an asset representation for an external ID. The asset will not be editable. */ AssetRepresentation(AssetIdentifier &&identifier, StringRef name, - std::unique_ptr metadata); + std::unique_ptr metadata, + const AssetLibrary &owner_asset_library); /** Constructs an asset representation for an ID stored in the current file. This makes the asset * local and fully editable. */ - AssetRepresentation(AssetIdentifier &&identifier, ID &id); + AssetRepresentation(AssetIdentifier &&identifier, + ID &id, + const AssetLibrary &owner_asset_library); AssetRepresentation(AssetRepresentation &&other); /* Non-copyable type. */ AssetRepresentation(const AssetRepresentation &other) = delete; @@ -65,6 +72,7 @@ class AssetRepresentation { AssetMetaData &get_metadata() const; /** Returns if this asset is stored inside this current file, and as such fully editable. */ bool is_local_id() const; + const AssetLibrary &owner_asset_library() const; }; } // namespace blender::asset_system diff --git a/source/blender/asset_system/intern/asset_library.cc b/source/blender/asset_system/intern/asset_library.cc index 2379e738e37e..fdb54c16af62 100644 --- a/source/blender/asset_system/intern/asset_library.cc +++ b/source/blender/asset_system/intern/asset_library.cc @@ -169,13 +169,14 @@ AssetRepresentation &AssetLibrary::add_external_asset(StringRef relative_asset_p std::unique_ptr metadata) { AssetIdentifier identifier = asset_identifier_from_library(relative_asset_path); - return asset_storage_->add_external_asset(std::move(identifier), name, std::move(metadata)); + return asset_storage_->add_external_asset( + std::move(identifier), name, std::move(metadata), *this); } AssetRepresentation &AssetLibrary::add_local_id_asset(StringRef relative_asset_path, ID &id) { AssetIdentifier identifier = asset_identifier_from_library(relative_asset_path); - return asset_storage_->add_local_id_asset(std::move(identifier), id); + return asset_storage_->add_local_id_asset(std::move(identifier), id, *this); } bool AssetLibrary::remove_asset(AssetRepresentation &asset) diff --git a/source/blender/asset_system/intern/asset_representation.cc b/source/blender/asset_system/intern/asset_representation.cc index 573358b7df72..13c6236a6dd3 100644 --- a/source/blender/asset_system/intern/asset_representation.cc +++ b/source/blender/asset_system/intern/asset_representation.cc @@ -17,15 +17,24 @@ namespace blender::asset_system { AssetRepresentation::AssetRepresentation(AssetIdentifier &&identifier, StringRef name, - std::unique_ptr metadata) - : identifier_(identifier), is_local_id_(false), external_asset_() + std::unique_ptr metadata, + const AssetLibrary &owner_asset_library) + : identifier_(identifier), + is_local_id_(false), + owner_asset_library_(&owner_asset_library), + external_asset_() { external_asset_.name = name; external_asset_.metadata_ = std::move(metadata); } -AssetRepresentation::AssetRepresentation(AssetIdentifier &&identifier, ID &id) - : identifier_(identifier), is_local_id_(true), local_asset_id_(&id) +AssetRepresentation::AssetRepresentation(AssetIdentifier &&identifier, + ID &id, + const AssetLibrary &owner_asset_library) + : identifier_(identifier), + is_local_id_(true), + owner_asset_library_(&owner_asset_library), + local_asset_id_(&id) { if (!id.asset_data) { throw std::invalid_argument("Passed ID is not an asset"); @@ -75,6 +84,11 @@ bool AssetRepresentation::is_local_id() const return is_local_id_; } +const AssetLibrary &AssetRepresentation::owner_asset_library() const +{ + return *owner_asset_library_; +} + } // namespace blender::asset_system using namespace blender; diff --git a/source/blender/asset_system/intern/asset_storage.cc b/source/blender/asset_system/intern/asset_storage.cc index 73b9d5826161..f14b0cd0f79f 100644 --- a/source/blender/asset_system/intern/asset_storage.cc +++ b/source/blender/asset_system/intern/asset_storage.cc @@ -15,18 +15,21 @@ namespace blender::asset_system { -AssetRepresentation &AssetStorage::add_local_id_asset(AssetIdentifier &&identifier, ID &id) +AssetRepresentation &AssetStorage::add_local_id_asset(AssetIdentifier &&identifier, + ID &id, + const AssetLibrary &owner_asset_library) { return *local_id_assets_.lookup_key_or_add( - std::make_unique(std::move(identifier), id)); + std::make_unique(std::move(identifier), id, owner_asset_library)); } AssetRepresentation &AssetStorage::add_external_asset(AssetIdentifier &&identifier, StringRef name, - std::unique_ptr metadata) + std::unique_ptr metadata, + const AssetLibrary &owner_asset_library) { - return *external_assets_.lookup_key_or_add( - std::make_unique(std::move(identifier), name, std::move(metadata))); + return *external_assets_.lookup_key_or_add(std::make_unique( + std::move(identifier), name, std::move(metadata), owner_asset_library)); } bool AssetStorage::remove_asset(AssetRepresentation &asset) diff --git a/source/blender/asset_system/intern/asset_storage.hh b/source/blender/asset_system/intern/asset_storage.hh index 2b4614abca52..c4a9ec143191 100644 --- a/source/blender/asset_system/intern/asset_storage.hh +++ b/source/blender/asset_system/intern/asset_storage.hh @@ -35,9 +35,12 @@ class AssetStorage { /** See #AssetLibrary::add_external_asset(). */ AssetRepresentation &add_external_asset(AssetIdentifier &&identifier, StringRef name, - std::unique_ptr metadata); + std::unique_ptr metadata, + const AssetLibrary &owner_asset_library); /** See #AssetLibrary::add_external_asset(). */ - AssetRepresentation &add_local_id_asset(AssetIdentifier &&identifier, ID &id); + AssetRepresentation &add_local_id_asset(AssetIdentifier &&identifier, + ID &id, + const AssetLibrary &owner_asset_library); /** See #AssetLibrary::remove_asset(). */ bool remove_asset(AssetRepresentation &asset); -- 2.30.2 From 6e52a74202fb906d85383d5f0f2aae651e3be6aa Mon Sep 17 00:00:00 2001 From: Alaska Date: Mon, 13 Feb 2023 13:02:47 +0100 Subject: [PATCH 046/182] Cycles: Replace resolution divider loop with an analytical formula As a side effect of this change, more resolution divisions are now available. Before this patch the possible resolution divisions were all powers of two. Now the possible resolution divisions are the multiples of pixel_size. This increase in possible resolution divisions is the same idea proposed in https://archive.blender.org/developer/D13590. In that patch there were concerns that this will increase the time between a user navigating and seeing the 1:1 render. To my knowledge this is a non-issue and there should be little to no increase in time between those two events. Pull Request #104450 --- intern/cycles/integrator/render_scheduler.cpp | 66 ++++++++----------- 1 file changed, 27 insertions(+), 39 deletions(-) diff --git a/intern/cycles/integrator/render_scheduler.cpp b/intern/cycles/integrator/render_scheduler.cpp index 2e05dbbaf6ee..3bfcf73eaf2a 100644 --- a/intern/cycles/integrator/render_scheduler.cpp +++ b/intern/cycles/integrator/render_scheduler.cpp @@ -886,7 +886,7 @@ int RenderScheduler::get_num_samples_during_navigation(int resolution_divider) c { /* Special trick for fast navigation: schedule multiple samples during fast navigation * (which will prefer to use lower resolution to keep up with refresh rate). This gives more - * usable visual feedback for artists. There are a couple of tricks though. */ + * usable visual feedback for artists. */ if (is_denoise_active_during_update()) { /* When denoising is used during navigation prefer using a higher resolution with less samples @@ -896,25 +896,12 @@ int RenderScheduler::get_num_samples_during_navigation(int resolution_divider) c return 1; } - if (resolution_divider <= pixel_size_) { - /* When resolution divider is at or below pixel size, schedule one sample. This doesn't effect - * the sample count at this resolution division, but instead assists in the calculation of - * the resolution divider. */ - return 1; - } - - if (resolution_divider == pixel_size_ * 2) { - /* When resolution divider is the previous step to the final resolution, schedule two samples. - * This is so that rendering on lower resolution does not exceed time that it takes to render - * first sample at the full resolution. */ - return 2; - } - - /* Always render 4 samples, even if scene is configured for less. - * The idea here is to have enough information on the screen. Resolution divider of 2 allows us - * to have 4 time extra samples, so overall worst case timing is the same as the final resolution - * at one sample. */ - return 4; + /* Schedule samples equal to the resolution divider up to a maximum of 4. + * The idea is to have enough information on the screen by increasing the sample count as the + * resolution is decreased. */ + /* NOTE: Changeing this formula will change the formula in + * "RenderScheduler::calculate_resolution_divider_for_time()"*/ + return min(max(1, resolution_divider / pixel_size_), 4); } bool RenderScheduler::work_need_adaptive_filter() const @@ -1100,9 +1087,10 @@ void RenderScheduler::update_start_resolution_divider() /* TODO(sergey): Need to add hysteresis to avoid resolution divider bouncing around when actual * render time is somewhere on a boundary between two resolutions. */ - /* Never increase resolution to higher than the pixel size (which is possible if the scene is - * simple and compute device is fast). */ - start_resolution_divider_ = max(resolution_divider_for_update, pixel_size_); + /* Don't let resolution drop below the desired one. It's better to be slow than provide an + * unreadable viewport render. */ + start_resolution_divider_ = min(resolution_divider_for_update, + default_start_resolution_divider_); VLOG_WORK << "Calculated resolution divider is " << start_resolution_divider_; } @@ -1187,24 +1175,24 @@ void RenderScheduler::check_time_limit_reached() int RenderScheduler::calculate_resolution_divider_for_time(double desired_time, double actual_time) { - /* TODO(sergey): There should a non-iterative analytical formula here. */ + const double ratio_between_times = actual_time / desired_time; - int resolution_divider = 1; + /* We can pass "ratio_between_times" to "get_num_samples_during_navigation()" to get our + * navigation samples because the equation for calculating the resolution divider is as follows: + * "actual_time / desired_time = sqr(resolution_divider) / sample_count". + * While "resolution_divider" is less than or equal to 4, "resolution_divider = sample_count" + * (This relationship is determined in "get_num_samples_during_navigation()"). With some + * substitution we end up with "actual_time / desired_time = resolution_divider" while the + * resolution divider is less than or equal to 4. Once the resolution divider increases above 4, + * the relationsip of "actual_time / desired_time = resolution_divider" is no longer true, + * however the sample count retrieved from "get_num_samples_during_navigation()" is still + * accurate if we continue using this assumption. It should be noted that the interaction between + * pixel_size, sample count, and resolution divider are automatically accounted for and that's + * why pixel_size isn't included in any of the equations. */ + const int navigation_samples = get_num_samples_during_navigation( + ceil_to_int(ratio_between_times)); - /* This algorithm iterates through resolution dividers until a divider is found that achieves - * the desired render time. A limit of default_start_resolution_divider_ is put in place as the - * maximum resolution divider to avoid an unreadable viewport due to a low resolution. - * pre_resolution_division_samples and post_resolution_division_samples are used in this - * calculation to better predict the performance impact of changing resolution divisions as - * the sample count can also change between resolution divisions. */ - while (actual_time > desired_time && resolution_divider < default_start_resolution_divider_) { - int pre_resolution_division_samples = get_num_samples_during_navigation(resolution_divider); - resolution_divider = resolution_divider * 2; - int post_resolution_division_samples = get_num_samples_during_navigation(resolution_divider); - actual_time /= 4.0 * pre_resolution_division_samples / post_resolution_division_samples; - } - - return resolution_divider; + return ceil_to_int(sqrt(navigation_samples * ratio_between_times)); } int calculate_resolution_divider_for_resolution(int width, int height, int resolution) -- 2.30.2 From e71650920a69af906bcf9835334b0e6b0f912a0f Mon Sep 17 00:00:00 2001 From: Weizhen Huang Date: Mon, 13 Feb 2023 17:05:45 +0100 Subject: [PATCH 047/182] Cleanup: add comment to cage gizmo scaling regarding the boundary --- .../editors/gizmo_library/gizmo_types/cage2d_gizmo.c | 9 +++------ .../editors/gizmo_library/gizmo_types/cage3d_gizmo.c | 9 +++------ 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c index cc75d83b923c..7d568424c886 100644 --- a/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c +++ b/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c @@ -1141,12 +1141,9 @@ static int gizmo_cage2d_modal(bContext *C, } } - if (delta_orig < 0) { - scale[i] = -delta_curr / (pivot[i] + 0.5f); - } - else { - scale[i] = delta_curr / (0.5f - pivot[i]); - } + /* Original cursor position does not exactly lie on the cage boundary due to margin. */ + const float delta_boundary = signf(delta_orig) * 0.5f - pivot[i]; + scale[i] = delta_curr / delta_boundary; } } diff --git a/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c index 295d76f2f58c..7dd69f722fc2 100644 --- a/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c +++ b/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c @@ -539,12 +539,9 @@ static int gizmo_cage3d_modal(bContext *C, } } - if (delta_orig < 0) { - scale[i] = -delta_curr / (pivot[i] + 0.5f); - } - else { - scale[i] = delta_curr / (0.5f - pivot[i]); - } + /* Original cursor position does not exactly lie on the cage boundary due to margin. */ + const float delta_boundary = signf(delta_orig) * 0.5f - pivot[i]; + scale[i] = delta_curr / delta_boundary; } } -- 2.30.2 From 9653ea3f27cfa04e97ced5587ea9ff454d075a5a Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Mon, 13 Feb 2023 11:22:24 -0500 Subject: [PATCH 048/182] Fix: No update setting curve selection domain with all selected Send a notification and tag for an update even if the selection doesn't exist, which is still necessary for drawing that depends on the selection domain. --- .../editors/curves/intern/curves_ops.cc | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/source/blender/editors/curves/intern/curves_ops.cc b/source/blender/editors/curves/intern/curves_ops.cc index 77641d7a916d..d80ebff2adcb 100644 --- a/source/blender/editors/curves/intern/curves_ops.cc +++ b/source/blender/editors/curves/intern/curves_ops.cc @@ -793,21 +793,19 @@ static int curves_set_selection_domain_exec(bContext *C, wmOperator *op) if (curves.points_num() == 0) { continue; } - const GVArray src = attributes.lookup(".selection", domain); - if (src.is_empty()) { - continue; - } - const CPPType &type = src.type(); - void *dst = MEM_malloc_arrayN(attributes.domain_size(domain), type.size(), __func__); - src.materialize(dst); + if (const GVArray src = attributes.lookup(".selection", domain)) { + const CPPType &type = src.type(); + void *dst = MEM_malloc_arrayN(attributes.domain_size(domain), type.size(), __func__); + src.materialize(dst); - attributes.remove(".selection"); - if (!attributes.add(".selection", - domain, - bke::cpp_type_to_custom_data_type(type), - bke::AttributeInitMoveArray(dst))) { - MEM_freeN(dst); + attributes.remove(".selection"); + if (!attributes.add(".selection", + domain, + bke::cpp_type_to_custom_data_type(type), + bke::AttributeInitMoveArray(dst))) { + MEM_freeN(dst); + } } /* Use #ID_RECALC_GEOMETRY instead of #ID_RECALC_SELECT because it is handled as a generic -- 2.30.2 From 4abbdba2fa461f3f79b299e99d823be3d8f720d8 Mon Sep 17 00:00:00 2001 From: Antonio Vazquez Date: Mon, 13 Feb 2023 17:23:39 +0100 Subject: [PATCH 049/182] GPencil: Fix unreported Eyedropper color difference in Materials The color selected was converted wrongly for materials. The undo of the conversion must be done only for palettes. Also, some code cleanup done. --- .../eyedroppers/eyedropper_gpencil_color.cc | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/source/blender/editors/interface/eyedroppers/eyedropper_gpencil_color.cc b/source/blender/editors/interface/eyedroppers/eyedropper_gpencil_color.cc index ca54fbc15c4c..0c33b9034ada 100644 --- a/source/blender/editors/interface/eyedroppers/eyedropper_gpencil_color.cc +++ b/source/blender/editors/interface/eyedroppers/eyedropper_gpencil_color.cc @@ -49,12 +49,17 @@ #include "eyedropper_intern.hh" #include "interface_intern.hh" +typedef enum eGP_EyeMode { + GP_EYE_MATERIAL = 0, + GP_EYE_PALETTE = 1, +} eGP_EyeMode; + struct EyedropperGPencil { struct ColorManagedDisplay *display; /** color under cursor RGB */ float color[3]; /** Mode */ - int mode; + eGP_EyeMode mode; }; /* Helper: Draw status message while the user is running the operator */ @@ -79,7 +84,7 @@ static bool eyedropper_gpencil_init(bContext *C, wmOperator *op) display_device = scene->display_settings.display_device; eye->display = IMB_colormanagement_display_get_named(display_device); - eye->mode = RNA_enum_get(op->ptr, "mode"); + eye->mode = (eGP_EyeMode)RNA_enum_get(op->ptr, "mode"); return true; } @@ -228,10 +233,10 @@ static void eyedropper_gpencil_color_set(bContext *C, const wmEvent *event, Eyed float col_conv[4]; - /* Convert from linear rgb space to display space because grease pencil colors are in display + /* Convert from linear rgb space to display space because palette colors are in display * space, and this conversion is needed to undo the conversion to linear performed by * eyedropper_color_sample_fl. */ - if (eye->display) { + if ((eye->display) && (eye->mode == GP_EYE_PALETTE)) { copy_v3_v3(col_conv, eye->color); IMB_colormanagement_scene_linear_to_display_v3(col_conv, eye->display); } @@ -240,7 +245,7 @@ static void eyedropper_gpencil_color_set(bContext *C, const wmEvent *event, Eyed } /* Add material or Palette color. */ - if (eye->mode == 0) { + if (eye->mode == GP_EYE_MATERIAL) { eyedropper_add_material(C, col_conv, only_stroke, only_fill, both); } else { @@ -348,8 +353,8 @@ static bool eyedropper_gpencil_poll(bContext *C) void UI_OT_eyedropper_gpencil_color(wmOperatorType *ot) { static const EnumPropertyItem items_mode[] = { - {0, "MATERIAL", 0, "Material", ""}, - {1, "PALETTE", 0, "Palette", ""}, + {GP_EYE_MATERIAL, "MATERIAL", 0, "Material", ""}, + {GP_EYE_PALETTE, "PALETTE", 0, "Palette", ""}, {0, nullptr, 0, nullptr, nullptr}, }; @@ -369,5 +374,5 @@ void UI_OT_eyedropper_gpencil_color(wmOperatorType *ot) ot->flag = OPTYPE_UNDO | OPTYPE_BLOCKING; /* properties */ - ot->prop = RNA_def_enum(ot->srna, "mode", items_mode, 0, "Mode", ""); + ot->prop = RNA_def_enum(ot->srna, "mode", items_mode, GP_EYE_MATERIAL, "Mode", ""); } -- 2.30.2 From 5d3ed646f875503b35a97eac6577b61b6fafcdd2 Mon Sep 17 00:00:00 2001 From: Weizhen Huang Date: Mon, 13 Feb 2023 17:23:57 +0100 Subject: [PATCH 050/182] Cleanup: add comment explaining #interpf is performing lerp --- source/blender/blenlib/BLI_math_base.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/blender/blenlib/BLI_math_base.h b/source/blender/blenlib/BLI_math_base.h index 70eb7a3cf06d..eed379d02ad4 100644 --- a/source/blender/blenlib/BLI_math_base.h +++ b/source/blender/blenlib/BLI_math_base.h @@ -97,8 +97,9 @@ MINLINE float saacos(float fac); MINLINE float saasin(float fac); MINLINE float sasqrt(float fac); -MINLINE float interpf(float a, float b, float t); -MINLINE double interpd(double a, double b, double t); +/* Compute linear interpolation (lerp) between origin and target. */ +MINLINE float interpf(float target, float origin, float t); +MINLINE double interpd(double target, double origin, double t); MINLINE float ratiof(float min, float max, float pos); MINLINE double ratiod(double min, double max, double pos); -- 2.30.2 From 22f8f944febe90a17cbfe9dce3f151ab8ab5b78f Mon Sep 17 00:00:00 2001 From: Nate Rupsis Date: Mon, 13 Feb 2023 18:10:13 +0100 Subject: [PATCH 051/182] Cleanup: Add in NLAStrip / NLATrack remove / clean methods ## Cleanup: Refactor NLATrack / NLAStrip Remove This PR adds 3 new methods: * BKE_nlatrack_remove_strip * BKE_nlastrip_remove * BKE_nlastrip_remove_and_free These named BKE methods are really just replacements for BLI_remlink, but with some added checks, and enhanced readability. Co-authored-by: Nate Rupsis Pull Request #104437 --- source/blender/blenkernel/BKE_nla.h | 37 +++++++++++++------ source/blender/blenkernel/intern/nla.c | 37 ++++++++++++------- source/blender/blenkernel/intern/nla_test.cc | 35 ++++++++++++++++-- .../editors/space_action/action_data.c | 2 +- source/blender/editors/space_nla/nla_edit.c | 10 ++--- .../editors/transform/transform_convert_nla.c | 4 +- source/blender/makesrna/intern/rna_nla.c | 4 +- 7 files changed, 90 insertions(+), 39 deletions(-) diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index 086f21aa897f..0fa3d16d328b 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -36,10 +36,10 @@ struct PropertyRNA; /* Data Management */ /** - * Remove the given NLA strip from the NLA track it occupies, free the strip's data, - * and the strip itself. + * Frees the given NLA strip, and calls #BKE_nlastrip_remove_and_free to + * remove and free all children strips. */ -void BKE_nlastrip_free(ListBase *strips, struct NlaStrip *strip, bool do_id_user); +void BKE_nlastrip_free(struct NlaStrip *strip, bool do_id_user); /** * Remove the given NLA track from the set of NLA tracks, free the track's data, * and the track itself. @@ -94,10 +94,22 @@ void BKE_nla_tracks_copy_from_adt(struct Main *bmain, struct NlaTrack *BKE_nlatrack_add(struct AnimData *adt, struct NlaTrack *prev, bool is_liboverride); + /** * Create a NLA Strip referencing the given Action. */ struct NlaStrip *BKE_nlastrip_new(struct bAction *act); + +/* + * Removes the given NLA strip from the list of strips provided. + */ +void BKE_nlastrip_remove(ListBase *strips, struct NlaStrip *strip); + +/* + * Removes the given NLA strip from the list of strips provided, and frees it's memory. + */ +void BKE_nlastrip_remove_and_free(ListBase *strips, struct NlaStrip *strip, const bool do_id_user); + /** * Add new NLA-strip to the top of the NLA stack - i.e. * into the last track if space, or a new one otherwise. @@ -139,13 +151,9 @@ void BKE_nlastrips_sort_strips(ListBase *strips); void BKE_nlastrips_add_strip_unsafe(ListBase *strips, struct NlaStrip *strip); /** - * \brief NULL checks incoming strip and verifies no overlap / invalid - * configuration against other strips in NLA Track. - * - * \param strips: - * \param strip: - * \return true - * \return false + * NULL checks incoming strip and verifies no overlap / invalid + * configuration against other strips in NLA Track before calling + * #BKE_nlastrips_add_strip_unsafe. */ bool BKE_nlastrips_add_strip(ListBase *strips, struct NlaStrip *strip); @@ -215,11 +223,16 @@ bool BKE_nlatrack_has_space(struct NlaTrack *nlt, float start, float end); void BKE_nlatrack_sort_strips(struct NlaTrack *nlt); /** - * Add the given NLA-Strip to the given NLA-Track, assuming that it - * isn't currently attached to another one. + * Add the given NLA-Strip to the given NLA-Track. + * Calls #BKE_nlastrips_add_strip to check if strip can be added. */ bool BKE_nlatrack_add_strip(struct NlaTrack *nlt, struct NlaStrip *strip, bool is_liboverride); +/** + * Remove the NLA-Strip from the given NLA-Track. + */ +void BKE_nlatrack_remove_strip(struct NlaTrack *track, struct NlaStrip *strip); + /** * Get the extents of the given NLA-Track including gaps between strips, * returning whether this succeeded or not diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 96d25f3b71fd..29d4cc802fec 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -61,7 +61,7 @@ static void nla_tweakmode_find_active(const ListBase /* NlaTrack */ *nla_tracks, /* Freeing ------------------------------------------- */ -void BKE_nlastrip_free(ListBase *strips, NlaStrip *strip, bool do_id_user) +void BKE_nlastrip_free(NlaStrip *strip, const bool do_id_user) { NlaStrip *cs, *csn; @@ -73,7 +73,7 @@ void BKE_nlastrip_free(ListBase *strips, NlaStrip *strip, bool do_id_user) /* free child-strips */ for (cs = strip->strips.first; cs; cs = csn) { csn = cs->next; - BKE_nlastrip_free(&strip->strips, cs, do_id_user); + BKE_nlastrip_remove_and_free(&strip->strips, cs, do_id_user); } /* remove reference to action */ @@ -81,10 +81,6 @@ void BKE_nlastrip_free(ListBase *strips, NlaStrip *strip, bool do_id_user) id_us_min(&strip->act->id); } - /* free remapping info */ - // if (strip->remap) - // BKE_animremap_free(); - /* free own F-Curves */ BKE_fcurves_free(&strip->fcurves); @@ -92,12 +88,7 @@ void BKE_nlastrip_free(ListBase *strips, NlaStrip *strip, bool do_id_user) free_fmodifiers(&strip->modifiers); /* free the strip itself */ - if (strips) { - BLI_freelinkN(strips, strip); - } - else { - MEM_freeN(strip); - } + MEM_freeN(strip); } void BKE_nlatrack_free(ListBase *tracks, NlaTrack *nlt, bool do_id_user) @@ -112,7 +103,7 @@ void BKE_nlatrack_free(ListBase *tracks, NlaTrack *nlt, bool do_id_user) /* free strips */ for (strip = nlt->strips.first; strip; strip = stripn) { stripn = strip->next; - BKE_nlastrip_free(&nlt->strips, strip, do_id_user); + BKE_nlastrip_remove_and_free(&nlt->strips, strip, do_id_user); } /* free NLA track itself now */ @@ -875,7 +866,7 @@ void BKE_nlastrips_clear_metastrip(ListBase *strips, NlaStrip *strip) } /* free the meta-strip now */ - BKE_nlastrip_free(strips, strip, true); + BKE_nlastrip_remove_and_free(strips, strip, true); } void BKE_nlastrips_clear_metas(ListBase *strips, bool only_sel, bool only_temp) @@ -1190,6 +1181,12 @@ bool BKE_nlatrack_add_strip(NlaTrack *nlt, NlaStrip *strip, const bool is_libove return BKE_nlastrips_add_strip(&nlt->strips, strip); } +void BKE_nlatrack_remove_strip(NlaTrack *track, NlaStrip *strip) +{ + BLI_assert(track); + BKE_nlastrip_remove(&track->strips, strip); +} + bool BKE_nlatrack_get_bounds(NlaTrack *nlt, float bounds[2]) { NlaStrip *strip; @@ -1318,6 +1315,18 @@ NlaStrip *BKE_nlastrip_find_active(NlaTrack *nlt) return nlastrip_find_active(&nlt->strips); } +void BKE_nlastrip_remove(ListBase *strips, NlaStrip *strip) +{ + BLI_assert(strips); + BLI_remlink(strips, strip); +} + +void BKE_nlastrip_remove_and_free(ListBase *strips, NlaStrip *strip, const bool do_id_user) +{ + BKE_nlastrip_remove(strips, strip); + BKE_nlastrip_free(strip, do_id_user); +} + void BKE_nlastrip_set_active(AnimData *adt, NlaStrip *strip) { NlaTrack *nlt; diff --git a/source/blender/blenkernel/intern/nla_test.cc b/source/blender/blenkernel/intern/nla_test.cc index ef9ca83e25f2..3311ca82098d 100644 --- a/source/blender/blenkernel/intern/nla_test.cc +++ b/source/blender/blenkernel/intern/nla_test.cc @@ -1,6 +1,8 @@ /* SPDX-License-Identifier: GPL-2.0-or-later * Copyright 2023 Blender Foundation. All rights reserved. */ +#include "BLI_listbase.h" + #include "BKE_nla.h" #include "DNA_anim_types.h" @@ -20,19 +22,19 @@ TEST(nla_strip, BKE_nlastrip_recalculate_blend) strip.start = 1; strip.end = 10; - /* Scaling a strip up doesn't affect the blend in/out value */ + /* Scaling a strip up doesn't affect the blend in/out value. */ strip.end = 20; BKE_nlastrip_recalculate_blend(&strip); EXPECT_FLOAT_EQ(strip.blendin, 4.0); EXPECT_FLOAT_EQ(strip.blendout, 5.0); - /* Scaling a strip down affects the blend-in value before the blend-out value */ + /* Scaling a strip down affects the blend-in value before the blend-out value. */ strip.end = 7; BKE_nlastrip_recalculate_blend(&strip); EXPECT_FLOAT_EQ(strip.blendin, 1.0); EXPECT_FLOAT_EQ(strip.blendout, 5.0); - /* Scaling a strip down to nothing updates the blend in/out values accordingly */ + /* Scaling a strip down to nothing updates the blend in/out values accordingly. */ strip.end = 1.1; BKE_nlastrip_recalculate_blend(&strip); EXPECT_FLOAT_EQ(strip.blendin, 0.0); @@ -63,4 +65,31 @@ TEST(nla_strip, BKE_nlastrips_add_strip) EXPECT_TRUE(BKE_nlastrips_add_strip(&strips, &strip2)); } +TEST(nla_track, BKE_nlatrack_remove_strip) +{ + NlaTrack track{}; + ListBase strips{}; + NlaStrip strip1{}; + strip1.start = 0; + strip1.end = 10; + + NlaStrip strip2{}; + strip2.start = 11; + strip2.end = 20; + + // Add NLA strips to the NLATrack. + BKE_nlastrips_add_strip(&strips, &strip1); + BKE_nlastrips_add_strip(&strips, &strip2); + track.strips = strips; + + // ensure we have 2 strips in the track. + EXPECT_EQ(2, BLI_listbase_count(&track.strips)); + + BKE_nlatrack_remove_strip(&track, &strip2); + EXPECT_EQ(1, BLI_listbase_count(&track.strips)); + // ensure the correct strip was removed. + EXPECT_EQ(-1, BLI_findindex(&track.strips, &strip2)); +} + } // namespace blender::bke::tests + diff --git a/source/blender/editors/space_action/action_data.c b/source/blender/editors/space_action/action_data.c index 79047b171ef9..bb8456f6486a 100644 --- a/source/blender/editors/space_action/action_data.c +++ b/source/blender/editors/space_action/action_data.c @@ -586,7 +586,7 @@ void ED_animedit_unlink_action( if (strip->act == act) { /* Remove this strip, and the track too if it doesn't have anything else */ - BKE_nlastrip_free(&nlt->strips, strip, true); + BKE_nlastrip_remove_and_free(&nlt->strips, strip, true); if (nlt->strips.first == NULL) { BLI_assert(nstrip == NULL); diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index 8a3c67452597..b61b5d8e63b0 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -1305,15 +1305,15 @@ static int nlaedit_delete_exec(bContext *C, wmOperator *UNUSED(op)) if (strip->flag & NLASTRIP_FLAG_SELECT) { /* if a strip either side of this was a transition, delete those too */ if ((strip->prev) && (strip->prev->type == NLASTRIP_TYPE_TRANSITION)) { - BKE_nlastrip_free(&nlt->strips, strip->prev, true); + BKE_nlastrip_remove_and_free(&nlt->strips, strip->prev, true); } if ((nstrip) && (nstrip->type == NLASTRIP_TYPE_TRANSITION)) { nstrip = nstrip->next; - BKE_nlastrip_free(&nlt->strips, strip->next, true); + BKE_nlastrip_remove_and_free(&nlt->strips, strip->next, true); } /* finally, delete this strip */ - BKE_nlastrip_free(&nlt->strips, strip, true); + BKE_nlastrip_remove_and_free(&nlt->strips, strip, true); } } } @@ -1824,7 +1824,7 @@ static int nlaedit_move_up_exec(bContext *C, wmOperator *UNUSED(op)) if (BKE_nlatrack_has_space(nltn, strip->start, strip->end)) { /* remove from its current track, and add to the one above * (it 'should' work, so no need to worry) */ - BLI_remlink(&nlt->strips, strip); + BKE_nlatrack_remove_strip(nlt, strip); BKE_nlatrack_add_strip(nltn, strip, is_liboverride); } } @@ -1916,7 +1916,7 @@ static int nlaedit_move_down_exec(bContext *C, wmOperator *UNUSED(op)) if (BKE_nlatrack_has_space(nltp, strip->start, strip->end)) { /* remove from its current track, and add to the one above * (it 'should' work, so no need to worry) */ - BLI_remlink(&nlt->strips, strip); + BKE_nlatrack_remove_strip(nlt, strip); BKE_nlatrack_add_strip(nltp, strip, is_liboverride); } } diff --git a/source/blender/editors/transform/transform_convert_nla.c b/source/blender/editors/transform/transform_convert_nla.c index 5e460e0c11db..a9b1d07e7b46 100644 --- a/source/blender/editors/transform/transform_convert_nla.c +++ b/source/blender/editors/transform/transform_convert_nla.c @@ -457,7 +457,7 @@ static void recalcData_nla(TransInfo *t) if (BKE_nlatrack_has_space(track, strip->start, strip->end) && !BKE_nlatrack_is_nonlocal_in_liboverride(tdn->id, track)) { /* move strip to this track */ - BLI_remlink(&tdn->nlt->strips, strip); + BKE_nlatrack_remove_strip(tdn->nlt, strip); BKE_nlatrack_add_strip(track, strip, is_liboverride); tdn->nlt = track; @@ -477,7 +477,7 @@ static void recalcData_nla(TransInfo *t) if (BKE_nlatrack_has_space(track, strip->start, strip->end) && !BKE_nlatrack_is_nonlocal_in_liboverride(tdn->id, track)) { /* move strip to this track */ - BLI_remlink(&tdn->nlt->strips, strip); + BKE_nlatrack_remove_strip(tdn->nlt, strip); BKE_nlatrack_add_strip(track, strip, is_liboverride); tdn->nlt = track; diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c index 2027f6b2249a..4d284695ade0 100644 --- a/source/blender/makesrna/intern/rna_nla.c +++ b/source/blender/makesrna/intern/rna_nla.c @@ -544,7 +544,7 @@ static NlaStrip *rna_NlaStrip_new(ID *id, reports, RPT_ERROR, "Unable to add strip (the track does not have any space to accommodate this new strip)"); - BKE_nlastrip_free(NULL, strip, true); + BKE_nlastrip_free(strip, true); return NULL; } @@ -595,7 +595,7 @@ static void rna_NlaStrip_remove( return; } - BKE_nlastrip_free(&track->strips, strip, true); + BKE_nlastrip_remove_and_free(&track->strips, strip, true); RNA_POINTER_INVALIDATE(strip_ptr); WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_REMOVED, NULL); -- 2.30.2 From 5c3179ea840ebc662d6fdeb63210f6047591476f Mon Sep 17 00:00:00 2001 From: Jason Fielder Date: Mon, 13 Feb 2023 18:16:38 +0100 Subject: [PATCH 052/182] Fix #103397: Vector UI control shader UBO alignment fix. Replace float3 with packed_float3 when using additional type padding. Authored by Apple: Michael Parkin-White Ref #96261 Pull Request #104699 --- .../draw/engines/workbench/workbench_shader_shared.h | 2 +- source/blender/gpu/GPU_shader_shared.h | 7 ++++++- source/blender/gpu/GPU_shader_shared_utils.h | 3 +++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/source/blender/draw/engines/workbench/workbench_shader_shared.h b/source/blender/draw/engines/workbench/workbench_shader_shared.h index d78e3408ccbc..d7983e5eb80a 100644 --- a/source/blender/draw/engines/workbench/workbench_shader_shared.h +++ b/source/blender/draw/engines/workbench/workbench_shader_shared.h @@ -59,6 +59,6 @@ struct ExtrudedFrustum { struct ShadowPassData { float4 far_plane; - float3 light_direction_ws; + packed_float3 light_direction_ws; int _padding; }; diff --git a/source/blender/gpu/GPU_shader_shared.h b/source/blender/gpu/GPU_shader_shared.h index 630a503690e1..66face85b07d 100644 --- a/source/blender/gpu/GPU_shader_shared.h +++ b/source/blender/gpu/GPU_shader_shared.h @@ -11,6 +11,11 @@ typedef struct TestOutputRawData TestOutputRawData; #endif +/* NOTE: float3 has differing stride and alignment rules across different GPU backends. If 12 byte + * stride and alignment is essential, use `packed_float3` to avoid data read issues. This is + * required in the common use-case where a float3 and an int/float are paired together for optimal + * data transfer. */ + enum eGPUKeyframeShapes { GPU_KEYFRAME_SHAPE_DIAMOND = (1u << 0u), GPU_KEYFRAME_SHAPE_CIRCLE = (1u << 1u), @@ -70,7 +75,7 @@ BLI_STATIC_ASSERT_ALIGN(struct GPUClipPlanes, 16) struct SimpleLightingData { float4 l_color; - float3 light; + packed_float3 light; float _pad; }; BLI_STATIC_ASSERT_ALIGN(struct SimpleLightingData, 16) diff --git a/source/blender/gpu/GPU_shader_shared_utils.h b/source/blender/gpu/GPU_shader_shared_utils.h index 08fa8be22ef4..e1ad3b765f82 100644 --- a/source/blender/gpu/GPU_shader_shared_utils.h +++ b/source/blender/gpu/GPU_shader_shared_utils.h @@ -59,6 +59,7 @@ # define bool2 bvec2 # define bool3 bvec3 # define bool4 bvec4 +# define packed_float3 vec3 # endif #else /* C / C++ */ @@ -83,6 +84,7 @@ using bool1 = int; using bool2 = blender::int2; using bool3 = blender::int3; using bool4 = blender::int4; +using packed_float3 = blender::float3; # else /* C */ typedef float float2[2]; @@ -99,6 +101,7 @@ typedef int bool1; typedef int bool2[2]; typedef int bool3[2]; typedef int bool4[4]; +typedef float3 packed_float3; # endif #endif -- 2.30.2 From 906a0bd4db6b18fd32dab09c6f6926c9f160037a Mon Sep 17 00:00:00 2001 From: Damien Picard Date: Mon, 13 Feb 2023 18:24:53 +0100 Subject: [PATCH 053/182] Cleanup: fix a few typos in UI messages Issues reported by @Joan-Pujolar in #43295. Pull Request #104672 --- source/blender/editors/gpencil/gpencil_edit.c | 6 +++--- source/blender/editors/gpencil/gpencil_edit_curve.c | 2 +- source/blender/editors/io/io_usd.c | 4 ++-- source/blender/makesrna/intern/rna_curves.c | 2 +- source/blender/makesrna/intern/rna_modifier.c | 10 +++++----- source/blender/makesrna/intern/rna_pointcloud.c | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c index c6108f761a82..81576cc3e845 100644 --- a/source/blender/editors/gpencil/gpencil_edit.c +++ b/source/blender/editors/gpencil/gpencil_edit.c @@ -4064,7 +4064,7 @@ void GPENCIL_OT_reproject(wmOperatorType *ot) "keep_original", 0, "Keep Original", - "Keep original strokes and create a copy before reprojecting instead of reproject them"); + "Keep original strokes and create a copy before reprojecting"); RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_MOVIECLIP); RNA_def_float(ot->srna, "offset", 0.0f, 0.0f, 10.0f, "Surface Offset", "", 0.0f, 10.0f); @@ -4771,7 +4771,7 @@ void GPENCIL_OT_stroke_simplify(wmOperatorType *ot) /* identifiers */ ot->name = "Simplify Stroke"; ot->idname = "GPENCIL_OT_stroke_simplify"; - ot->description = "Simplify selected stroked reducing number of points"; + ot->description = "Simplify selected strokes, reducing number of points"; /* api callbacks */ ot->exec = gpencil_stroke_simplify_exec; @@ -4832,7 +4832,7 @@ void GPENCIL_OT_stroke_simplify_fixed(wmOperatorType *ot) /* identifiers */ ot->name = "Simplify Fixed Stroke"; ot->idname = "GPENCIL_OT_stroke_simplify_fixed"; - ot->description = "Simplify selected stroked reducing number of points using fixed algorithm"; + ot->description = "Simplify selected strokes, reducing number of points using fixed algorithm"; /* api callbacks */ ot->exec = gpencil_stroke_simplify_fixed_exec; diff --git a/source/blender/editors/gpencil/gpencil_edit_curve.c b/source/blender/editors/gpencil/gpencil_edit_curve.c index b669168aea76..cf29ce0755b9 100644 --- a/source/blender/editors/gpencil/gpencil_edit_curve.c +++ b/source/blender/editors/gpencil/gpencil_edit_curve.c @@ -188,7 +188,7 @@ void GPENCIL_OT_stroke_editcurve_set_handle_type(wmOperatorType *ot) /* identifiers */ ot->name = "Set handle type"; ot->idname = "GPENCIL_OT_stroke_editcurve_set_handle_type"; - ot->description = "Set the type of a edit curve handle"; + ot->description = "Set the type of an edit curve handle"; /* api callbacks */ ot->invoke = WM_menu_invoke; diff --git a/source/blender/editors/io/io_usd.c b/source/blender/editors/io/io_usd.c index 580fd23a4271..6a3d8cf788bc 100644 --- a/source/blender/editors/io/io_usd.c +++ b/source/blender/editors/io/io_usd.c @@ -75,7 +75,7 @@ const EnumPropertyItem rna_enum_usd_mtl_name_collision_mode_items[] = { const EnumPropertyItem rna_enum_usd_tex_import_mode_items[] = { {USD_TEX_IMPORT_NONE, "IMPORT_NONE", 0, "None", "Don't import textures"}, {USD_TEX_IMPORT_PACK, "IMPORT_PACK", 0, "Packed", "Import textures as packed data"}, - {USD_TEX_IMPORT_COPY, "IMPORT_COPY", 0, "Copy", "Copy files to Textures Directory"}, + {USD_TEX_IMPORT_COPY, "IMPORT_COPY", 0, "Copy", "Copy files to textures directory"}, {0, NULL, 0, NULL, NULL}, }; @@ -675,7 +675,7 @@ void WM_OT_usd_import(struct wmOperatorType *ot) "//textures/", FILE_MAXDIR, "Textures Directory", - "Path to the directory where imported textures will be copied "); + "Path to the directory where imported textures will be copied"); RNA_def_enum( ot->srna, diff --git a/source/blender/makesrna/intern/rna_curves.c b/source/blender/makesrna/intern/rna_curves.c index 5a49aca119c3..24b3de95123f 100644 --- a/source/blender/makesrna/intern/rna_curves.c +++ b/source/blender/makesrna/intern/rna_curves.c @@ -275,7 +275,7 @@ static void rna_def_curves_point(BlenderRNA *brna) prop = RNA_def_property(srna, "index", PROP_INT, PROP_UNSIGNED); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_int_funcs(prop, "rna_CurvePoint_index_get", NULL, NULL); - RNA_def_property_ui_text(prop, "Index", "Index of this points"); + RNA_def_property_ui_text(prop, "Index", "Index of this point"); } /* Defines a read-only vector type since normals can not be modified manually. */ diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index b86e202a791d..c8c1801876b0 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -3313,12 +3313,12 @@ static void rna_def_modifier_correctivesmooth(BlenderRNA *brna) "ORCO", 0, "Original Coords", - "Use base mesh vertex coords as the rest position"}, + "Use base mesh vertex coordinates as the rest position"}, {MOD_CORRECTIVESMOOTH_RESTSOURCE_BIND, "BIND", 0, "Bind Coords", - "Use bind vertex coords for rest position"}, + "Use bind vertex coordinates for rest position"}, {0, NULL, 0, NULL, NULL}, }; @@ -5967,13 +5967,13 @@ static void rna_def_modifier_meshcache(BlenderRNA *brna) "OVERWRITE", 0, "Overwrite", - "Replace vertex coords with cached values"}, + "Replace vertex coordinates with cached values"}, {MOD_MESHCACHE_DEFORM_INTEGRATE, "INTEGRATE", 0, "Integrate", - "Integrate deformation from this modifiers input with the mesh-cache coords (useful for " - "shape keys)"}, + "Integrate deformation from this modifier's input with the mesh-cache coordinates " + "(useful for shape keys)"}, {0, NULL, 0, NULL, NULL}, }; diff --git a/source/blender/makesrna/intern/rna_pointcloud.c b/source/blender/makesrna/intern/rna_pointcloud.c index 493178574411..99ce90deaf4f 100644 --- a/source/blender/makesrna/intern/rna_pointcloud.c +++ b/source/blender/makesrna/intern/rna_pointcloud.c @@ -162,7 +162,7 @@ static void rna_def_point(BlenderRNA *brna) prop = RNA_def_property(srna, "index", PROP_INT, PROP_UNSIGNED); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_int_funcs(prop, "rna_Point_index_get", NULL, NULL); - RNA_def_property_ui_text(prop, "Index", "Index of this points"); + RNA_def_property_ui_text(prop, "Index", "Index of this point"); } static void rna_def_pointcloud(BlenderRNA *brna) -- 2.30.2 From b18bf4ef2775a74cca26b69a5b42811fab89eb8d Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 13 Feb 2023 17:05:32 +0100 Subject: [PATCH 054/182] Fix bug report including rB commit hash prefix not needed for Gitea --- release/scripts/modules/bl_ui_utils/bug_report_url.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release/scripts/modules/bl_ui_utils/bug_report_url.py b/release/scripts/modules/bl_ui_utils/bug_report_url.py index 37a52a5141c4..16bd6692d789 100644 --- a/release/scripts/modules/bl_ui_utils/bug_report_url.py +++ b/release/scripts/modules/bl_ui_utils/bug_report_url.py @@ -30,7 +30,7 @@ def url_prefill_from_blender(*, addon_info=None): "**Blender Version**\n" ) fh.write( - "Broken: version: %s, branch: %s, commit date: %s %s, hash: `rB%s`\n" % ( + "Broken: version: %s, branch: %s, commit date: %s %s, hash: `%s`\n" % ( bpy.app.version_string, bpy.app.build_branch.decode('utf-8', 'replace'), bpy.app.build_commit_date.decode('utf-8', 'replace'), -- 2.30.2 From d84cccef61d2e2f701ee8a5fcc59c0e24f01a525 Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Mon, 13 Feb 2023 18:41:38 +0100 Subject: [PATCH 055/182] Cleanup: Remove redundant translation markers in context poll message `CTX_wm_operator_poll_msg_set()` is covered by the translation script and always translates these strings. Checked with Bastien, he prefers not having the redundancy here. --- source/blender/editors/util/ed_util_ops.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/util/ed_util_ops.cc b/source/blender/editors/util/ed_util_ops.cc index 18d47af78543..0b3a8fe463bf 100644 --- a/source/blender/editors/util/ed_util_ops.cc +++ b/source/blender/editors/util/ed_util_ops.cc @@ -50,15 +50,15 @@ static bool lib_id_preview_editing_poll(bContext *C) return false; } if (ID_IS_LINKED(id)) { - CTX_wm_operator_poll_msg_set(C, TIP_("Can't edit external library data")); + CTX_wm_operator_poll_msg_set(C, "Can't edit external library data"); return false; } if (ID_IS_OVERRIDE_LIBRARY(id)) { - CTX_wm_operator_poll_msg_set(C, TIP_("Can't edit previews of overridden library data")); + CTX_wm_operator_poll_msg_set(C, "Can't edit previews of overridden library data"); return false; } if (!BKE_previewimg_id_get_p(id)) { - CTX_wm_operator_poll_msg_set(C, TIP_("Data-block does not support previews")); + CTX_wm_operator_poll_msg_set(C, "Data-block does not support previews"); return false; } @@ -118,7 +118,7 @@ static bool lib_id_generate_preview_poll(bContext *C) const PointerRNA idptr = CTX_data_pointer_get(C, "id"); const ID *id = (ID *)idptr.data; if (GS(id->name) == ID_NT) { - CTX_wm_operator_poll_msg_set(C, TIP_("Can't generate automatic preview for node group")); + CTX_wm_operator_poll_msg_set(C, "Can't generate automatic preview for node group"); return false; } -- 2.30.2 From 75be65fd00183ed817b24696b38ccf3b6fc4ad56 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 13 Feb 2023 18:41:44 +0100 Subject: [PATCH 056/182] Fix #104373: Motion Tracker solve with anamorphic footage not working The issue was caused by rather recent refactor in 7dea18b3aa1. The root of the issue lies within the fact that the optical center was updated on the Blender side after the solution was run. There was a mistake in the code which double-corrected for the pixel aspect ratio. Added a comment in the code about this, so that it does not look suspicious. Pull Request #104711 --- source/blender/blenkernel/intern/tracking_util.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/blender/blenkernel/intern/tracking_util.c b/source/blender/blenkernel/intern/tracking_util.c index dd4bc3fd0212..375177f4cb5e 100644 --- a/source/blender/blenkernel/intern/tracking_util.c +++ b/source/blender/blenkernel/intern/tracking_util.c @@ -538,13 +538,14 @@ void tracking_cameraIntrinscisOptionsFromTracking( void tracking_trackingCameraFromIntrinscisOptions( MovieTracking *tracking, const libmv_CameraIntrinsicsOptions *camera_intrinsics_options) { - float aspy = 1.0f / tracking->camera.pixel_aspect; MovieTrackingCamera *camera = &tracking->camera; camera->focal = camera_intrinsics_options->focal_length; + /* NOTE: The image size stored in the `camera_intrinsics_options` is aspect-ratio corrected, + * so there is no need to "un-apply" it from the principal point. */ const float principal_px[2] = {camera_intrinsics_options->principal_point_x, - camera_intrinsics_options->principal_point_y / (double)aspy}; + camera_intrinsics_options->principal_point_y}; tracking_principal_point_pixel_to_normalized(principal_px, camera_intrinsics_options->image_width, -- 2.30.2 From e8c827c6a7be8a8f688cc1ff94aef0ea44e9ba3d Mon Sep 17 00:00:00 2001 From: Falk David Date: Mon, 13 Feb 2023 19:05:28 +0100 Subject: [PATCH 057/182] Curves: Fix curve segment selection Make sure that in curve selection mode, the segments are checked for intersection instead of only the points. Pull Request #104703 --- .../editors/curves/intern/curves_selection.cc | 229 ++++++++++++++---- 1 file changed, 188 insertions(+), 41 deletions(-) diff --git a/source/blender/editors/curves/intern/curves_selection.cc b/source/blender/editors/curves/intern/curves_selection.cc index 818e275b210c..585498dd0faa 100644 --- a/source/blender/editors/curves/intern/curves_selection.cc +++ b/source/blender/editors/curves/intern/curves_selection.cc @@ -357,9 +357,9 @@ static void apply_selection_operation_at_index(GMutableSpan selection, } /** - * Helper struct for `find_closest_point_to_screen_co`. + * Helper struct for `select_pick`. */ -struct FindClosestPointData { +struct FindClosestData { int index = -1; float distance = FLT_MAX; }; @@ -371,7 +371,7 @@ static bool find_closest_point_to_screen_co(const Depsgraph &depsgraph, const bke::CurvesGeometry &curves, float2 mouse_pos, float radius, - FindClosestPointData &closest_data) + FindClosestData &closest_data) { float4x4 projection; ED_view3d_ob_project_mat_get(rv3d, &object, projection.ptr()); @@ -380,12 +380,12 @@ static bool find_closest_point_to_screen_co(const Depsgraph &depsgraph, bke::crazyspace::get_evaluated_curves_deformation(depsgraph, object); const float radius_sq = pow2f(radius); - auto [min_point_index, min_distance] = threading::parallel_reduce( + closest_data = threading::parallel_reduce( curves.points_range(), 1024, - FindClosestPointData(), - [&](const IndexRange point_range, const FindClosestPointData &init) { - FindClosestPointData best_match = init; + FindClosestData(), + [&](const IndexRange point_range, const FindClosestData &init) { + FindClosestData best_match = init; for (const int point_i : point_range) { const float3 pos = deformation.positions[point_i]; @@ -400,7 +400,7 @@ static bool find_closest_point_to_screen_co(const Depsgraph &depsgraph, continue; } - FindClosestPointData better_candidate; + FindClosestData better_candidate; better_candidate.index = point_i; better_candidate.distance = std::sqrt(distance_proj_sq); @@ -408,18 +408,104 @@ static bool find_closest_point_to_screen_co(const Depsgraph &depsgraph, } return best_match; }, - [](const FindClosestPointData &a, const FindClosestPointData &b) { + [](const FindClosestData &a, const FindClosestData &b) { + if (a.distance < b.distance) { + return a; + } + return b; + }); + if (closest_data.index > 0) { + return true; + } + + return false; +} + +static bool find_closest_curve_to_screen_co(const Depsgraph &depsgraph, + const ARegion *region, + const RegionView3D *rv3d, + const Object &object, + const bke::CurvesGeometry &curves, + float2 mouse_pos, + float radius, + FindClosestData &closest_data) +{ + float4x4 projection; + ED_view3d_ob_project_mat_get(rv3d, &object, projection.ptr()); + + const bke::crazyspace::GeometryDeformation deformation = + bke::crazyspace::get_evaluated_curves_deformation(depsgraph, object); + + const float radius_sq = pow2f(radius); + + const OffsetIndices points_by_curve = curves.points_by_curve(); + closest_data = threading::parallel_reduce( + curves.curves_range(), + 256, + FindClosestData(), + [&](const IndexRange curves_range, const FindClosestData &init) { + FindClosestData best_match = init; + for (const int curve_i : curves_range) { + if (points_by_curve.size(curve_i) == 1) { + const float3 pos = deformation.positions[points_by_curve[curve_i].first()]; + + /* Find the position of the point in screen space. */ + float2 pos_proj; + ED_view3d_project_float_v2_m4(region, pos, pos_proj, projection.ptr()); + + const float distance_proj_sq = math::distance_squared(pos_proj, mouse_pos); + if (distance_proj_sq > radius_sq || + distance_proj_sq > best_match.distance * best_match.distance) { + /* Ignore the point because it's too far away or there is already a better point. + */ + continue; + } + + FindClosestData better_candidate; + better_candidate.index = curve_i; + better_candidate.distance = std::sqrt(distance_proj_sq); + + best_match = better_candidate; + continue; + } + + for (const int segment_i : points_by_curve[curve_i].drop_back(1)) { + const float3 pos1 = deformation.positions[segment_i]; + const float3 pos2 = deformation.positions[segment_i + 1]; + + float2 pos1_proj, pos2_proj; + ED_view3d_project_float_v2_m4(region, pos1, pos1_proj, projection.ptr()); + ED_view3d_project_float_v2_m4(region, pos2, pos2_proj, projection.ptr()); + + const float distance_proj_sq = dist_squared_to_line_segment_v2( + mouse_pos, pos1_proj, pos2_proj); + if (distance_proj_sq > radius_sq || + distance_proj_sq > best_match.distance * best_match.distance) { + /* Ignore the segment because it's too far away or there is already a better point. + */ + continue; + } + + FindClosestData better_candidate; + better_candidate.index = curve_i; + better_candidate.distance = std::sqrt(distance_proj_sq); + + best_match = better_candidate; + } + } + return best_match; + }, + [](const FindClosestData &a, const FindClosestData &b) { if (a.distance < b.distance) { return a; } return b; }); - if (min_point_index > 0) { - closest_data.index = min_point_index; - closest_data.distance = min_distance; + if (closest_data.index > 0) { return true; } + return false; } @@ -429,15 +515,28 @@ bool select_pick(const ViewContext &vc, const SelectPick_Params ¶ms, const int2 coord) { - FindClosestPointData closest_point; - bool found = find_closest_point_to_screen_co(*vc.depsgraph, - vc.region, - vc.rv3d, - *vc.obact, - curves, - float2(coord), - ED_view3d_select_dist_px(), - closest_point); + FindClosestData closest; + bool found = false; + if (selection_domain == ATTR_DOMAIN_POINT) { + found = find_closest_point_to_screen_co(*vc.depsgraph, + vc.region, + vc.rv3d, + *vc.obact, + curves, + float2(coord), + ED_view3d_select_dist_px(), + closest); + } + else if (selection_domain == ATTR_DOMAIN_CURVE) { + found = find_closest_curve_to_screen_co(*vc.depsgraph, + vc.region, + vc.rv3d, + *vc.obact, + curves, + float2(coord), + ED_view3d_select_dist_px(), + closest); + } bool changed = false; if (params.sel_op == SEL_OP_SET) { @@ -453,17 +552,7 @@ bool select_pick(const ViewContext &vc, if (found) { bke::GSpanAttributeWriter selection = ensure_selection_attribute( curves, selection_domain, CD_PROP_BOOL); - - int elem_index = closest_point.index; - if (selection_domain == ATTR_DOMAIN_CURVE) { - /* Find the curve index for the found point. */ - auto it = std::upper_bound( - curves.offsets().begin(), curves.offsets().end(), closest_point.index); - BLI_assert(it != curves.offsets().end()); - elem_index = std::distance(curves.offsets().begin(), it) - 1; - } - - apply_selection_operation_at_index(selection.span, elem_index, params.sel_op); + apply_selection_operation_at_index(selection.span, closest.index, params.sel_op); selection.finish(); } @@ -507,13 +596,29 @@ bool select_box(const ViewContext &vc, else if (selection_domain == ATTR_DOMAIN_CURVE) { threading::parallel_for(curves.curves_range(), 512, [&](const IndexRange curves_range) { for (const int curve_i : curves_range) { - for (const int point_i : points_by_curve[curve_i]) { + if (points_by_curve.size(curve_i) == 1) { float2 pos_proj; - ED_view3d_project_float_v2_m4( - vc.region, deformation.positions[point_i], pos_proj, projection.ptr()); + ED_view3d_project_float_v2_m4(vc.region, + deformation.positions[points_by_curve[curve_i].first()], + pos_proj, + projection.ptr()); if (BLI_rcti_isect_pt_v(&rect, int2(pos_proj))) { apply_selection_operation_at_index(selection.span, curve_i, sel_op); changed = true; + } + continue; + } + for (const int segment_i : points_by_curve[curve_i].drop_back(1)) { + const float3 pos1 = deformation.positions[segment_i]; + const float3 pos2 = deformation.positions[segment_i + 1]; + + float2 pos1_proj, pos2_proj; + ED_view3d_project_float_v2_m4(vc.region, pos1, pos1_proj, projection.ptr()); + ED_view3d_project_float_v2_m4(vc.region, pos2, pos2_proj, projection.ptr()); + + if (BLI_rcti_isect_segment(&rect, int2(pos1_proj), int2(pos2_proj))) { + apply_selection_operation_at_index(selection.span, curve_i, sel_op); + changed = true; break; } } @@ -569,16 +674,40 @@ bool select_lasso(const ViewContext &vc, else if (selection_domain == ATTR_DOMAIN_CURVE) { threading::parallel_for(curves.curves_range(), 512, [&](const IndexRange curves_range) { for (const int curve_i : curves_range) { - for (const int point_i : points_by_curve[curve_i]) { + if (points_by_curve.size(curve_i) == 1) { float2 pos_proj; - ED_view3d_project_float_v2_m4( - vc.region, deformation.positions[point_i], pos_proj, projection.ptr()); + ED_view3d_project_float_v2_m4(vc.region, + deformation.positions[points_by_curve[curve_i].first()], + pos_proj, + projection.ptr()); /* Check the lasso bounding box first as an optimization. */ if (BLI_rcti_isect_pt_v(&bbox, int2(pos_proj)) && BLI_lasso_is_point_inside( coord_array, coords.size(), int(pos_proj.x), int(pos_proj.y), IS_CLIPPED)) { apply_selection_operation_at_index(selection.span, curve_i, sel_op); changed = true; + } + continue; + } + for (const int segment_i : points_by_curve[curve_i].drop_back(1)) { + const float3 pos1 = deformation.positions[segment_i]; + const float3 pos2 = deformation.positions[segment_i + 1]; + + float2 pos1_proj, pos2_proj; + ED_view3d_project_float_v2_m4(vc.region, pos1, pos1_proj, projection.ptr()); + ED_view3d_project_float_v2_m4(vc.region, pos2, pos2_proj, projection.ptr()); + + /* Check the lasso bounding box first as an optimization. */ + if (BLI_rcti_isect_segment(&bbox, int2(pos1_proj), int2(pos2_proj)) && + BLI_lasso_is_edge_inside(coord_array, + coords.size(), + int(pos1_proj.x), + int(pos1_proj.y), + int(pos2_proj.x), + int(pos2_proj.y), + IS_CLIPPED)) { + apply_selection_operation_at_index(selection.span, curve_i, sel_op); + changed = true; break; } } @@ -629,13 +758,31 @@ bool select_circle(const ViewContext &vc, else if (selection_domain == ATTR_DOMAIN_CURVE) { threading::parallel_for(curves.curves_range(), 512, [&](const IndexRange curves_range) { for (const int curve_i : curves_range) { - for (const int point_i : points_by_curve[curve_i]) { + if (points_by_curve.size(curve_i) == 1) { float2 pos_proj; - ED_view3d_project_float_v2_m4( - vc.region, deformation.positions[point_i], pos_proj, projection.ptr()); + ED_view3d_project_float_v2_m4(vc.region, + deformation.positions[points_by_curve[curve_i].first()], + pos_proj, + projection.ptr()); if (math::distance_squared(pos_proj, float2(coord)) <= radius_sq) { apply_selection_operation_at_index(selection.span, curve_i, sel_op); changed = true; + } + continue; + } + for (const int segment_i : points_by_curve[curve_i].drop_back(1)) { + const float3 pos1 = deformation.positions[segment_i]; + const float3 pos2 = deformation.positions[segment_i + 1]; + + float2 pos1_proj, pos2_proj; + ED_view3d_project_float_v2_m4(vc.region, pos1, pos1_proj, projection.ptr()); + ED_view3d_project_float_v2_m4(vc.region, pos2, pos2_proj, projection.ptr()); + + const float distance_proj_sq = dist_squared_to_line_segment_v2( + float2(coord), pos1_proj, pos2_proj); + if (distance_proj_sq <= radius_sq) { + apply_selection_operation_at_index(selection.span, curve_i, sel_op); + changed = true; break; } } -- 2.30.2 From 060efd3b1237283e0496fb75e17b243fa4e71ed2 Mon Sep 17 00:00:00 2001 From: Charles Wardlaw Date: Mon, 13 Feb 2023 19:49:24 +0100 Subject: [PATCH 058/182] USD Import: USD Shapes support This commit adds the ability to import USD Shape primitives (Gprims). They are imported as Blender Meshes using the USD API to convert, so that they appear the same as they would in other applications. USD Shapes are important in many workflows, particularly in gaming, where they are used for stand-in geometry or for collision primitives. Pull Request #104707 --- source/blender/editors/io/io_usd.c | 4 + source/blender/io/usd/CMakeLists.txt | 2 + .../blender/io/usd/intern/usd_reader_shape.cc | 245 ++++++++++++++++++ .../blender/io/usd/intern/usd_reader_shape.h | 62 +++++ .../blender/io/usd/intern/usd_reader_stage.cc | 19 ++ .../blender/io/usd/intern/usd_reader_stage.h | 6 + source/blender/io/usd/usd.h | 1 + 7 files changed, 339 insertions(+) create mode 100644 source/blender/io/usd/intern/usd_reader_shape.cc create mode 100644 source/blender/io/usd/intern/usd_reader_shape.h diff --git a/source/blender/editors/io/io_usd.c b/source/blender/editors/io/io_usd.c index 6a3d8cf788bc..b3cce1eabcf2 100644 --- a/source/blender/editors/io/io_usd.c +++ b/source/blender/editors/io/io_usd.c @@ -382,6 +382,7 @@ static int wm_usd_import_exec(bContext *C, wmOperator *op) const bool import_materials = RNA_boolean_get(op->ptr, "import_materials"); const bool import_meshes = RNA_boolean_get(op->ptr, "import_meshes"); const bool import_volumes = RNA_boolean_get(op->ptr, "import_volumes"); + const bool import_shapes = RNA_boolean_get(op->ptr, "import_shapes"); const bool import_subdiv = RNA_boolean_get(op->ptr, "import_subdiv"); @@ -443,6 +444,7 @@ static int wm_usd_import_exec(bContext *C, wmOperator *op) .import_materials = import_materials, .import_meshes = import_meshes, .import_volumes = import_volumes, + .import_shapes = import_shapes, .import_subdiv = import_subdiv, .import_instance_proxies = import_instance_proxies, .create_collection = create_collection, @@ -488,6 +490,7 @@ static void wm_usd_import_draw(bContext *UNUSED(C), wmOperator *op) uiItemR(col, ptr, "import_materials", 0, NULL, ICON_NONE); uiItemR(col, ptr, "import_meshes", 0, NULL, ICON_NONE); uiItemR(col, ptr, "import_volumes", 0, NULL, ICON_NONE); + uiItemR(col, ptr, "import_shapes", 0, NULL, ICON_NONE); uiItemR(box, ptr, "prim_path_mask", 0, NULL, ICON_NONE); uiItemR(box, ptr, "scale", 0, NULL, ICON_NONE); @@ -577,6 +580,7 @@ void WM_OT_usd_import(struct wmOperatorType *ot) RNA_def_boolean(ot->srna, "import_materials", true, "Materials", ""); RNA_def_boolean(ot->srna, "import_meshes", true, "Meshes", ""); RNA_def_boolean(ot->srna, "import_volumes", true, "Volumes", ""); + RNA_def_boolean(ot->srna, "import_shapes", true, "Shapes", ""); RNA_def_boolean(ot->srna, "import_subdiv", diff --git a/source/blender/io/usd/CMakeLists.txt b/source/blender/io/usd/CMakeLists.txt index ac9e22ee6310..37da01aa777c 100644 --- a/source/blender/io/usd/CMakeLists.txt +++ b/source/blender/io/usd/CMakeLists.txt @@ -83,6 +83,7 @@ set(SRC intern/usd_reader_mesh.cc intern/usd_reader_nurbs.cc intern/usd_reader_prim.cc + intern/usd_reader_shape.cc intern/usd_reader_stage.cc intern/usd_reader_volume.cc intern/usd_reader_xform.cc @@ -111,6 +112,7 @@ set(SRC intern/usd_reader_mesh.h intern/usd_reader_nurbs.h intern/usd_reader_prim.h + intern/usd_reader_shape.h intern/usd_reader_stage.h intern/usd_reader_volume.h intern/usd_reader_xform.h diff --git a/source/blender/io/usd/intern/usd_reader_shape.cc b/source/blender/io/usd/intern/usd_reader_shape.cc new file mode 100644 index 000000000000..a1082e8d734e --- /dev/null +++ b/source/blender/io/usd/intern/usd_reader_shape.cc @@ -0,0 +1,245 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later + * Copyright 2023 Nvidia. All rights reserved. */ + +#include "BKE_lib_id.h" +#include "BKE_mesh.h" +#include "BKE_modifier.h" +#include "BKE_object.h" + +#include "DNA_cachefile_types.h" +#include "DNA_mesh_types.h" +#include "DNA_meshdata_types.h" +#include "DNA_object_types.h" +#include "DNA_windowmanager_types.h" + +#include "WM_api.h" + +#include "usd_reader_shape.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace blender::io::usd { + +USDShapeReader::USDShapeReader(const pxr::UsdPrim &prim, + const USDImportParams &import_params, + const ImportSettings &settings) + : USDGeomReader(prim, import_params, settings) +{ +} + +void USDShapeReader::create_object(Main *bmain, double /*motionSampleTime*/) +{ + Mesh *mesh = BKE_mesh_add(bmain, name_.c_str()); + object_ = BKE_object_add_only_object(bmain, OB_MESH, name_.c_str()); + object_->data = mesh; +} + +void USDShapeReader::read_object_data(Main *bmain, double motionSampleTime) +{ + Mesh *mesh = (Mesh *)object_->data; + Mesh *read_mesh = this->read_mesh( + mesh, motionSampleTime, import_params_.mesh_read_flag, nullptr); + + if (read_mesh != mesh) { + BKE_mesh_nomain_to_mesh(read_mesh, mesh, object_); + if (is_time_varying()) { + USDGeomReader::add_cache_modifier(); + } + } + + USDXformReader::read_object_data(bmain, motionSampleTime); +} + +template +void USDShapeReader::read_values(const double motionSampleTime, + pxr::VtVec3fArray &positions, + pxr::VtIntArray &face_indices, + pxr::VtIntArray &face_counts) const +{ + Adapter adapter; + pxr::VtValue points_val = adapter.GetPoints(prim_, motionSampleTime); + + if (points_val.IsHolding()) { + positions = points_val.Get(); + } + + pxr::VtValue topology_val = adapter.GetTopology(prim_, pxr::SdfPath(), motionSampleTime); + + if (topology_val.IsHolding()) { + const pxr::HdMeshTopology &topology = topology_val.Get(); + face_counts = topology.GetFaceVertexCounts(); + face_indices = topology.GetFaceVertexIndices(); + } +} + +bool USDShapeReader::read_mesh_values(double motionSampleTime, + pxr::VtVec3fArray &positions, + pxr::VtIntArray &face_indices, + pxr::VtIntArray &face_counts) const +{ + if (prim_.IsA()) { + read_values( + motionSampleTime, positions, face_indices, face_counts); + return true; + } + + if (prim_.IsA()) { + read_values( + motionSampleTime, positions, face_indices, face_counts); + return true; + } + + if (prim_.IsA()) { + read_values( + motionSampleTime, positions, face_indices, face_counts); + return true; + } + + if (prim_.IsA()) { + read_values( + motionSampleTime, positions, face_indices, face_counts); + return true; + } + + if (prim_.IsA()) { + read_values( + motionSampleTime, positions, face_indices, face_counts); + return true; + } + + WM_reportf(RPT_ERROR, + "Unhandled Gprim type: %s (%s)", + prim_.GetTypeName().GetText(), + prim_.GetPath().GetText()); + return false; +} + +Mesh *USDShapeReader::read_mesh(struct Mesh *existing_mesh, + double motionSampleTime, + int /*read_flag*/, + const char ** /*err_str*/) +{ + pxr::VtIntArray face_indices; + pxr::VtIntArray face_counts; + + if (!prim_) { + return existing_mesh; + } + + /* Should have a good set of data by this point-- copy over. */ + Mesh *active_mesh = mesh_from_prim(existing_mesh, motionSampleTime, face_indices, face_counts); + if (active_mesh == existing_mesh) { + return existing_mesh; + } + + MutableSpan polys = active_mesh->polys_for_write(); + MutableSpan loops = active_mesh->loops_for_write(); + + const char should_smooth = prim_.IsA() ? 0 : ME_SMOOTH; + + int loop_index = 0; + for (int i = 0; i < face_counts.size(); i++) { + const int face_size = face_counts[i]; + + MPoly &poly = polys[i]; + poly.loopstart = loop_index; + poly.totloop = face_size; + + /* Don't smooth-shade cubes; we're not worrying about sharpness for Gprims. */ + poly.flag |= should_smooth; + + for (int f = 0; f < face_size; ++f, ++loop_index) { + loops[loop_index].v = face_indices[loop_index]; + } + } + + BKE_mesh_calc_edges(active_mesh, false, false); + return active_mesh; +} + +Mesh *USDShapeReader::mesh_from_prim(Mesh *existing_mesh, + double motionSampleTime, + pxr::VtIntArray &face_indices, + pxr::VtIntArray &face_counts) const +{ + pxr::VtVec3fArray positions; + + if (!read_mesh_values(motionSampleTime, positions, face_indices, face_counts)) { + return existing_mesh; + } + + const bool poly_counts_match = existing_mesh ? face_counts.size() == existing_mesh->totpoly : + false; + const bool position_counts_match = existing_mesh ? positions.size() == existing_mesh->totvert : + false; + + Mesh *active_mesh = nullptr; + if (!position_counts_match || !poly_counts_match) { + active_mesh = BKE_mesh_new_nomain_from_template( + existing_mesh, positions.size(), 0, 0, face_indices.size(), face_counts.size()); + } + else { + active_mesh = existing_mesh; + } + + MutableSpan vert_positions = active_mesh->vert_positions_for_write(); + + for (int i = 0; i < positions.size(); i++) { + vert_positions[i][0] = positions[i][0]; + vert_positions[i][1] = positions[i][1]; + vert_positions[i][2] = positions[i][2]; + } + + return active_mesh; +} + +bool USDShapeReader::is_time_varying() +{ + if (prim_.IsA()) { + pxr::UsdGeomCapsule geom(prim_); + return (geom.GetAxisAttr().ValueMightBeTimeVarying() || + geom.GetHeightAttr().ValueMightBeTimeVarying() || + geom.GetRadiusAttr().ValueMightBeTimeVarying()); + } + + if (prim_.IsA()) { + pxr::UsdGeomCylinder geom(prim_); + return (geom.GetAxisAttr().ValueMightBeTimeVarying() || + geom.GetHeightAttr().ValueMightBeTimeVarying() || + geom.GetRadiusAttr().ValueMightBeTimeVarying()); + } + + if (prim_.IsA()) { + pxr::UsdGeomCone geom(prim_); + return (geom.GetAxisAttr().ValueMightBeTimeVarying() || + geom.GetHeightAttr().ValueMightBeTimeVarying() || + geom.GetRadiusAttr().ValueMightBeTimeVarying()); + } + + if (prim_.IsA()) { + pxr::UsdGeomCube geom(prim_); + return geom.GetSizeAttr().ValueMightBeTimeVarying(); + } + + if (prim_.IsA()) { + pxr::UsdGeomSphere geom(prim_); + return geom.GetRadiusAttr().ValueMightBeTimeVarying(); + } + + WM_reportf(RPT_ERROR, + "Unhandled Gprim type: %s (%s)", + prim_.GetTypeName().GetText(), + prim_.GetPath().GetText()); + return false; +} + +} // namespace blender::io::usd diff --git a/source/blender/io/usd/intern/usd_reader_shape.h b/source/blender/io/usd/intern/usd_reader_shape.h new file mode 100644 index 000000000000..b6135f31b2f4 --- /dev/null +++ b/source/blender/io/usd/intern/usd_reader_shape.h @@ -0,0 +1,62 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later + * Copyright 2023 Nvidia. All rights reserved. */ + +#pragma once + +#include "usd.h" +#include "usd_reader_geom.h" +#include "usd_reader_xform.h" +#include + +struct Mesh; + +namespace blender::io::usd { + +/* + * Read USDGeom primitive shapes as Blender Meshes. This class uses the same adapter functions + * as the GL viewport to generate geometry for each of the supported types. + */ +class USDShapeReader : public USDGeomReader { + private: + /* Template required to read mesh information out of Shape prims, + * as each prim type has a separate subclass. */ + template + void read_values(double motionSampleTime, + pxr::VtVec3fArray &positions, + pxr::VtIntArray &face_indices, + pxr::VtIntArray &face_counts) const; + + /* Wrapper for the templated method read_values, calling the correct template + * instantiation based on the introspected prim type. */ + bool read_mesh_values(double motionSampleTime, + pxr::VtVec3fArray &positions, + pxr::VtIntArray &face_indices, + pxr::VtIntArray &face_counts) const; + + /* Read the pxr:UsdGeomMesh values and convert them to a Blender Mesh, + * also returning face_indices and counts for further loop processing. */ + Mesh *mesh_from_prim(Mesh *existing_mesh, + double motionSampleTime, + pxr::VtIntArray &face_indices, + pxr::VtIntArray &face_counts) const; + + public: + USDShapeReader(const pxr::UsdPrim &prim, + const USDImportParams &import_params, + const ImportSettings &settings); + + void create_object(Main *bmain, double /*motionSampleTime*/) override; + void read_object_data(Main *bmain, double motionSampleTime) override; + Mesh *read_mesh(Mesh *existing_mesh, + double motionSampleTime, + int /*read_flag*/, + const char ** /*err_str*/) override; + bool is_time_varying(); + + virtual bool topology_changed(const Mesh * /*existing_mesh*/, double /*motionSampleTime*/) + { + return false; + }; +}; + +} // namespace blender::io::usd diff --git a/source/blender/io/usd/intern/usd_reader_stage.cc b/source/blender/io/usd/intern/usd_reader_stage.cc index 393d8acba4a3..b376821b2e4a 100644 --- a/source/blender/io/usd/intern/usd_reader_stage.cc +++ b/source/blender/io/usd/intern/usd_reader_stage.cc @@ -9,6 +9,7 @@ #include "usd_reader_mesh.h" #include "usd_reader_nurbs.h" #include "usd_reader_prim.h" +#include "usd_reader_shape.h" #include "usd_reader_volume.h" #include "usd_reader_xform.h" @@ -16,9 +17,14 @@ #include #include #include +#include +#include +#include +#include #include #include #include +#include #include #include @@ -57,8 +63,18 @@ bool USDStageReader::valid() const return stage_; } +bool USDStageReader::is_primitive_prim(const pxr::UsdPrim &prim) const +{ + return (prim.IsA() || prim.IsA() || + prim.IsA() || prim.IsA() || + prim.IsA()); +} + USDPrimReader *USDStageReader::create_reader_if_allowed(const pxr::UsdPrim &prim) { + if (params_.import_shapes && is_primitive_prim(prim)) { + return new USDShapeReader(prim, params_, settings_); + } if (params_.import_cameras && prim.IsA()) { return new USDCameraReader(prim, params_, settings_); } @@ -91,6 +107,9 @@ USDPrimReader *USDStageReader::create_reader_if_allowed(const pxr::UsdPrim &prim USDPrimReader *USDStageReader::create_reader(const pxr::UsdPrim &prim) { + if (is_primitive_prim(prim)) { + return new USDShapeReader(prim, params_, settings_); + } if (prim.IsA()) { return new USDCameraReader(prim, params_, settings_); } diff --git a/source/blender/io/usd/intern/usd_reader_stage.h b/source/blender/io/usd/intern/usd_reader_stage.h index 9b2c37132bcc..028c9987060a 100644 --- a/source/blender/io/usd/intern/usd_reader_stage.h +++ b/source/blender/io/usd/intern/usd_reader_stage.h @@ -100,6 +100,12 @@ class USDStageReader { * toggled off. */ bool include_by_purpose(const pxr::UsdGeomImageable &imageable) const; + + /* + * Returns true if the specified UsdPrim is a UsdGeom primitive, + * procedural shape, such as UsdGeomCube. + */ + bool is_primitive_prim(const pxr::UsdPrim &prim) const; }; }; // namespace blender::io::usd diff --git a/source/blender/io/usd/usd.h b/source/blender/io/usd/usd.h index 36ad857c57eb..dc172fd72db5 100644 --- a/source/blender/io/usd/usd.h +++ b/source/blender/io/usd/usd.h @@ -66,6 +66,7 @@ struct USDImportParams { bool import_materials; bool import_meshes; bool import_volumes; + bool import_shapes; char prim_path_mask[1024]; bool import_subdiv; bool import_instance_proxies; -- 2.30.2 From 301220dab0e7769b191a622f1edb669649b012f1 Mon Sep 17 00:00:00 2001 From: Martijn Versteegh Date: Sat, 11 Feb 2023 00:10:42 +0100 Subject: [PATCH 059/182] Fix #104501: Clear CD_FLAG_NOCOPY after use When generating a Mesh from a BMesh the uv map bool layers are not copied if all elements are false. To suppress the copying the flag CD_FLAG_NOCOPY is set in the layer flags. However these layers *do* need to be copied to other BMeshes (for example undo steps). So we need to clear them afterwards. --- source/blender/bmesh/intern/bmesh_mesh_convert.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/blender/bmesh/intern/bmesh_mesh_convert.cc b/source/blender/bmesh/intern/bmesh_mesh_convert.cc index 4ec30e12ba2a..ccc347810d5c 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc +++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc @@ -1011,6 +1011,8 @@ void BM_mesh_bm_to_me(Main *bmain, BMesh *bm, Mesh *me, const struct BMeshToMesh const int ototvert = me->totvert; + blender::Vector ldata_layers_marked_nocopy; + /* Free custom data. */ CustomData_free(&me->vdata, me->totvert); CustomData_free(&me->edata, me->totedge); @@ -1063,18 +1065,21 @@ void BM_mesh_bm_to_me(Main *bmain, BMesh *bm, Mesh *me, const struct BMeshToMesh } else { bm->ldata.layers[vertsel_layer_index].flag |= CD_FLAG_NOCOPY; + ldata_layers_marked_nocopy.append(vertsel_layer_index); } if (need_edgesel) { bm->ldata.layers[edgesel_layer_index].flag &= ~CD_FLAG_NOCOPY; } else { bm->ldata.layers[edgesel_layer_index].flag |= CD_FLAG_NOCOPY; + ldata_layers_marked_nocopy.append(edgesel_layer_index); } if (need_pin) { bm->ldata.layers[pin_layer_index].flag &= ~CD_FLAG_NOCOPY; } else { bm->ldata.layers[pin_layer_index].flag |= CD_FLAG_NOCOPY; + ldata_layers_marked_nocopy.append(pin_layer_index); } } @@ -1087,6 +1092,12 @@ void BM_mesh_bm_to_me(Main *bmain, BMesh *bm, Mesh *me, const struct BMeshToMesh CustomData_copy(&bm->pdata, &me->pdata, mask.pmask, CD_SET_DEFAULT, me->totpoly); } + + /* Clear the CD_FLAG_NOCOPY flags for the layers they were temporarily set on */ + for (const int i : ldata_layers_marked_nocopy) { + bm->ldata.layers[i].flag &= ~CD_FLAG_NOCOPY; + } + CustomData_add_layer_named( &me->vdata, CD_PROP_FLOAT3, CD_CONSTRUCT, nullptr, me->totvert, "position"); CustomData_add_layer(&me->edata, CD_MEDGE, CD_SET_DEFAULT, nullptr, me->totedge); -- 2.30.2 From bce40f8f5f7745aec35d3f8caccbb468aaa521da Mon Sep 17 00:00:00 2001 From: Martijn Versteegh Date: Sat, 11 Feb 2023 00:22:44 +0100 Subject: [PATCH 060/182] BMesh: Add flexibility for future lazily created UV selection Don't crash on nonexisting uv selection layers. Add an assert because for now it is a bug if they don't exist. But when converting back to Mesh it is preferable to accept in release mode, as opposed to crashing. Pull Request #104600 --- .../bmesh/intern/bmesh_mesh_convert.cc | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_mesh_convert.cc b/source/blender/bmesh/intern/bmesh_mesh_convert.cc index ccc347810d5c..c07d1b340f68 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc +++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc @@ -1043,9 +1043,17 @@ void BM_mesh_bm_to_me(Main *bmain, BMesh *bm, Mesh *me, const struct BMeshToMesh &bm->ldata, CD_PROP_BOOL, BKE_uv_map_edge_select_name_get(layer_name, sub_layer_name)); int pin_layer_index = CustomData_get_named_layer_index( &bm->ldata, CD_PROP_BOOL, BKE_uv_map_pin_name_get(layer_name, sub_layer_name)); - int vertsel_offset = bm->ldata.layers[vertsel_layer_index].offset; - int edgesel_offset = bm->ldata.layers[edgesel_layer_index].offset; - int pin_offset = bm->ldata.layers[pin_layer_index].offset; + + /* If ever the uv map associated bool layers become optional in BMesh as well (like in Mesh) + * this assert needs to be removed. For now it is a bug if they doin't exist. */ + BLI_assert(vertsel_layer_index >= 0 && edgesel_layer_index >= 0 && pin_layer_index >= 0); + + int vertsel_offset = vertsel_layer_index >= 0 ? bm->ldata.layers[vertsel_layer_index].offset : + -1; + int edgesel_offset = edgesel_layer_index >= 0 ? bm->ldata.layers[edgesel_layer_index].offset : + -1; + int pin_offset = pin_layer_index >= 0 ? bm->ldata.layers[pin_layer_index].offset : -1; + bool need_vertsel = false; bool need_edgesel = false; bool need_pin = false; @@ -1053,10 +1061,20 @@ void BM_mesh_bm_to_me(Main *bmain, BMesh *bm, Mesh *me, const struct BMeshToMesh BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { BMIter liter; BMLoop *l; - BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { - need_vertsel |= BM_ELEM_CD_GET_BOOL(l, vertsel_offset); - need_edgesel |= BM_ELEM_CD_GET_BOOL(l, edgesel_offset); - need_pin |= BM_ELEM_CD_GET_BOOL(l, pin_offset); + if (vertsel_layer_index >= 0) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { + need_vertsel |= BM_ELEM_CD_GET_BOOL(l, vertsel_offset); + } + } + if (edgesel_layer_index >= 0) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { + need_edgesel |= BM_ELEM_CD_GET_BOOL(l, edgesel_offset); + } + } + if (pin_layer_index) { + BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { + need_pin |= BM_ELEM_CD_GET_BOOL(l, pin_offset); + } } } @@ -1092,7 +1110,6 @@ void BM_mesh_bm_to_me(Main *bmain, BMesh *bm, Mesh *me, const struct BMeshToMesh CustomData_copy(&bm->pdata, &me->pdata, mask.pmask, CD_SET_DEFAULT, me->totpoly); } - /* Clear the CD_FLAG_NOCOPY flags for the layers they were temporarily set on */ for (const int i : ldata_layers_marked_nocopy) { bm->ldata.layers[i].flag &= ~CD_FLAG_NOCOPY; -- 2.30.2 From 460d17a443646c56fea080d466e60e245f5bb998 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Mon, 13 Feb 2023 14:16:00 -0500 Subject: [PATCH 061/182] Fix #104588: Initialize Face Sets from edit mode selection broken Mistake in da4bd24c3e6122c74fbc --- source/blender/editors/sculpt_paint/sculpt_face_set.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/sculpt_paint/sculpt_face_set.cc b/source/blender/editors/sculpt_paint/sculpt_face_set.cc index 51ecaa168f32..de06fa3541ae 100644 --- a/source/blender/editors/sculpt_paint/sculpt_face_set.cc +++ b/source/blender/editors/sculpt_paint/sculpt_face_set.cc @@ -410,7 +410,7 @@ static int sculpt_face_set_create_exec(bContext *C, wmOperator *op) const bke::AttributeAccessor attributes = mesh->attributes(); const VArraySpan select_poly = attributes.lookup_or_default( ".select_poly", ATTR_DOMAIN_FACE, false); - threading::parallel_for(IndexRange(mesh->totvert), 4096, [&](const IndexRange range) { + threading::parallel_for(select_poly.index_range(), 4096, [&](const IndexRange range) { for (const int i : range) { if (select_poly[i]) { ss->face_sets[i] = next_face_set; -- 2.30.2 From 5297f851e9b4f6970a93285be49b399a073fb5d0 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Mon, 13 Feb 2023 20:52:02 +0100 Subject: [PATCH 062/182] Fix: Incorrect BMesh to Mesh attribute copying The existing logic to copy `BMesh` custom data layers to `Mesh` attribute arrays was quite complicated, and incorrect in some cases when the source and destinations didn't have the same layers. The functions leave a lot to be desired in general, since they have a lot of redundant complexity that ends up doing the same thing for every element. The problem in #104154 was that the "rest_position" attribute overwrote the mesh positions since it has the same type and the positions weren't copied. This same problem has shown up in boolean attribute conversion in the past. Other changes fixed some specific cases but I think a larger change is the only proper solution. This patch adds preprocessing before looping over all elements to find the basic information for copying the relevant layers, taking layer names into account. The preprocessing makes the hot loops simpler. In a simple file with a 1 million vertex grid, I observed a 6% improvement animation playback framerate in edit mode with a simple geometry nodes modifier, from 5 to 5.3 FPS. Fixes #104154, #104348 Pull Request #104421 --- source/blender/blenkernel/BKE_customdata.h | 20 +-- .../blender/blenkernel/intern/customdata.cc | 131 ++------------ .../bmesh/intern/bmesh_mesh_convert.cc | 166 +++++++++++++++--- 3 files changed, 162 insertions(+), 155 deletions(-) diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h index 905eb43179a5..9ddc2f3447ea 100644 --- a/source/blender/blenkernel/BKE_customdata.h +++ b/source/blender/blenkernel/BKE_customdata.h @@ -137,6 +137,7 @@ bool CustomData_has_referenced(const struct CustomData *data); * implemented for mloopuv/mloopcol, for now. */ void CustomData_data_copy_value(int type, const void *source, void *dest); +void CustomData_data_set_default_value(int type, void *elem); /** * Mixes the "value" (e.g. mloopuv uv or mloopcol colors) from one block into @@ -506,6 +507,8 @@ void CustomData_clear_layer_flag(struct CustomData *data, int type, int flag); void CustomData_bmesh_set_default(struct CustomData *data, void **block); void CustomData_bmesh_free_block(struct CustomData *data, void **block); +void CustomData_bmesh_alloc_block(struct CustomData *data, void **block); + /** * Same as #CustomData_bmesh_free_block but zero the memory rather than freeing. */ @@ -517,23 +520,6 @@ void CustomData_bmesh_free_block_data_exclude_by_type(struct CustomData *data, void *block, eCustomDataMask mask_exclude); -/** - * Copy custom data to/from layers as in mesh/derived-mesh, to edit-mesh - * blocks of data. the CustomData's must not be compatible. - * - * \param use_default_init: initializes data which can't be copied, - * typically you'll want to use this if the BM_xxx create function - * is called with BM_CREATE_SKIP_CD flag - */ -void CustomData_to_bmesh_block(const struct CustomData *source, - struct CustomData *dest, - int src_index, - void **dest_block, - bool use_default_init); -void CustomData_from_bmesh_block(const struct CustomData *source, - struct CustomData *dest, - void *src_block, - int dest_index); /** * Query info over types. diff --git a/source/blender/blenkernel/intern/customdata.cc b/source/blender/blenkernel/intern/customdata.cc index 50b3a1668d26..3eb86324a77b 100644 --- a/source/blender/blenkernel/intern/customdata.cc +++ b/source/blender/blenkernel/intern/customdata.cc @@ -3654,7 +3654,7 @@ void CustomData_bmesh_free_block_data(CustomData *data, void *block) } } -static void CustomData_bmesh_alloc_block(CustomData *data, void **block) +void CustomData_bmesh_alloc_block(CustomData *data, void **block) { if (*block) { CustomData_bmesh_free_block(data, block); @@ -3689,19 +3689,23 @@ void CustomData_bmesh_free_block_data_exclude_by_type(CustomData *data, } } -static void CustomData_bmesh_set_default_n(CustomData *data, void **block, const int n) +void CustomData_data_set_default_value(const int type, void *elem) { - int offset = data->layers[n].offset; - const LayerTypeInfo *typeInfo = layerType_getInfo(data->layers[n].type); - + const LayerTypeInfo *typeInfo = layerType_getInfo(type); if (typeInfo->set_default_value) { - typeInfo->set_default_value(POINTER_OFFSET(*block, offset), 1); + typeInfo->set_default_value(elem, 1); } else { - memset(POINTER_OFFSET(*block, offset), 0, typeInfo->size); + memset(elem, 0, typeInfo->size); } } +static void CustomData_bmesh_set_default_n(CustomData *data, void **block, const int n) +{ + const int offset = data->layers[n].offset; + CustomData_data_set_default_value(data->layers[n].type, POINTER_OFFSET(*block, offset)); +} + void CustomData_bmesh_set_default(CustomData *data, void **block) { if (*block == nullptr) { @@ -3891,8 +3895,8 @@ void CustomData_data_copy_value(int type, const void *source, void *dest) return; } - if (typeInfo->copyvalue) { - typeInfo->copyvalue(source, dest, CDT_MIX_NOMIX, 0.0f); + if (typeInfo->copy) { + typeInfo->copy(source, dest, 1); } else { memcpy(dest, source, typeInfo->size); @@ -4067,115 +4071,6 @@ void CustomData_bmesh_interp(CustomData *data, } } -void CustomData_to_bmesh_block(const CustomData *source, - CustomData *dest, - int src_index, - void **dest_block, - bool use_default_init) -{ - if (*dest_block == nullptr) { - CustomData_bmesh_alloc_block(dest, dest_block); - } - - /* copies a layer at a time */ - int dest_i = 0; - for (int src_i = 0; src_i < source->totlayer; src_i++) { - - /* find the first dest layer with type >= the source type - * (this should work because layers are ordered by type) - */ - while (dest_i < dest->totlayer && dest->layers[dest_i].type < source->layers[src_i].type) { - if (use_default_init) { - CustomData_bmesh_set_default_n(dest, dest_block, dest_i); - } - dest_i++; - } - - /* if there are no more dest layers, we're done */ - if (dest_i >= dest->totlayer) { - break; - } - - /* if we found a matching layer, copy the data */ - if (dest->layers[dest_i].type == source->layers[src_i].type) { - int offset = dest->layers[dest_i].offset; - const void *src_data = source->layers[src_i].data; - void *dest_data = POINTER_OFFSET(*dest_block, offset); - - const LayerTypeInfo *typeInfo = layerType_getInfo(dest->layers[dest_i].type); - const size_t src_offset = size_t(src_index) * typeInfo->size; - - if (typeInfo->copy) { - typeInfo->copy(POINTER_OFFSET(src_data, src_offset), dest_data, 1); - } - else { - memcpy(dest_data, POINTER_OFFSET(src_data, src_offset), typeInfo->size); - } - - /* if there are multiple source & dest layers of the same type, - * we don't want to copy all source layers to the same dest, so - * increment dest_i - */ - dest_i++; - } - } - - if (use_default_init) { - while (dest_i < dest->totlayer) { - CustomData_bmesh_set_default_n(dest, dest_block, dest_i); - dest_i++; - } - } -} - -void CustomData_from_bmesh_block(const CustomData *source, - CustomData *dest, - void *src_block, - int dest_index) -{ - /* copies a layer at a time */ - int dest_i = 0; - for (int src_i = 0; src_i < source->totlayer; src_i++) { - if (source->layers[src_i].flag & CD_FLAG_NOCOPY) { - continue; - } - - /* find the first dest layer with type >= the source type - * (this should work because layers are ordered by type) - */ - while (dest_i < dest->totlayer && dest->layers[dest_i].type < source->layers[src_i].type) { - dest_i++; - } - - /* if there are no more dest layers, we're done */ - if (dest_i >= dest->totlayer) { - return; - } - - /* if we found a matching layer, copy the data */ - if (dest->layers[dest_i].type == source->layers[src_i].type) { - const LayerTypeInfo *typeInfo = layerType_getInfo(dest->layers[dest_i].type); - int offset = source->layers[src_i].offset; - const void *src_data = POINTER_OFFSET(src_block, offset); - void *dst_data = POINTER_OFFSET(dest->layers[dest_i].data, - size_t(dest_index) * typeInfo->size); - - if (typeInfo->copy) { - typeInfo->copy(src_data, dst_data, 1); - } - else { - memcpy(dst_data, src_data, typeInfo->size); - } - - /* if there are multiple source & dest layers of the same type, - * we don't want to copy all source layers to the same dest, so - * increment dest_i - */ - dest_i++; - } - } -} - void CustomData_file_write_info(int type, const char **r_struct_name, int *r_struct_num) { const LayerTypeInfo *typeInfo = layerType_getInfo(type); diff --git a/source/blender/bmesh/intern/bmesh_mesh_convert.cc b/source/blender/bmesh/intern/bmesh_mesh_convert.cc index c07d1b340f68..d5241cee3258 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc +++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc @@ -85,6 +85,7 @@ #include "BLI_span.hh" #include "BLI_string_ref.hh" #include "BLI_task.hh" +#include "BLI_vector.hh" #include "BKE_attribute.hh" #include "BKE_customdata.h" @@ -110,6 +111,7 @@ using blender::IndexRange; using blender::MutableSpan; using blender::Span; using blender::StringRef; +using blender::Vector; static char bm_edge_flag_from_mflag(const short mflag) { @@ -164,6 +166,63 @@ static BMFace *bm_face_create_from_mpoly(BMesh &bm, return BM_face_create(&bm, verts.data(), edges.data(), loops.size(), nullptr, BM_CREATE_SKIP_CD); } +struct MeshToBMeshLayerInfo { + eCustomDataType type; + /** The layer's position in the BMesh element's data block. */ + int bmesh_offset; + /** The mesh's #CustomDataLayer::data. When null, the BMesh block is set to its default value. */ + const void *mesh_data; + /** The size of every custom data element. */ + size_t elem_size; +}; + +/** + * Calculate the necessary information to copy every data layer from the Mesh to the BMesh. + */ +static Vector mesh_to_bm_copy_info_calc(const CustomData &mesh_data, + CustomData &bm_data) +{ + Vector infos; + std::array per_type_index; + per_type_index.fill(0); + for (const int i : IndexRange(bm_data.totlayer)) { + CustomDataLayer &bm_layer = bm_data.layers[i]; + const eCustomDataType type = eCustomDataType(bm_layer.type); + const int mesh_layer_index = + bm_layer.name[0] == '\0' ? + CustomData_get_layer_index_n(&mesh_data, type, per_type_index[type]) : + CustomData_get_named_layer_index(&mesh_data, type, bm_layer.name); + + MeshToBMeshLayerInfo info{}; + info.type = type; + info.bmesh_offset = bm_layer.offset; + info.mesh_data = (mesh_layer_index == -1) ? nullptr : mesh_data.layers[mesh_layer_index].data; + info.elem_size = CustomData_get_elem_size(&bm_layer); + infos.append(info); + + per_type_index[type]++; + } + return infos; +} + +static void mesh_attributes_copy_to_bmesh_block(CustomData &data, + const Span copy_info, + const int mesh_index, + BMHeader &header) +{ + CustomData_bmesh_alloc_block(&data, &header.data); + for (const MeshToBMeshLayerInfo &info : copy_info) { + if (info.mesh_data) { + CustomData_data_copy_value(info.type, + POINTER_OFFSET(info.mesh_data, info.elem_size * mesh_index), + POINTER_OFFSET(header.data, info.bmesh_offset)); + } + else { + CustomData_data_set_default_value(info.type, POINTER_OFFSET(header.data, info.bmesh_offset)); + } + } +} + void BM_mesh_bm_from_me(BMesh *bm, const Mesh *me, const struct BMeshFromMeshParams *params) { if (!me) { @@ -259,6 +318,11 @@ void BM_mesh_bm_from_me(BMesh *bm, const Mesh *me, const struct BMeshFromMeshPar CustomData_bmesh_merge(&mesh_ldata, &bm->ldata, mask.lmask, CD_SET_DEFAULT, bm, BM_LOOP); } + const Vector vert_info = mesh_to_bm_copy_info_calc(mesh_vdata, bm->vdata); + const Vector edge_info = mesh_to_bm_copy_info_calc(mesh_edata, bm->edata); + const Vector poly_info = mesh_to_bm_copy_info_calc(mesh_pdata, bm->pdata); + const Vector loop_info = mesh_to_bm_copy_info_calc(mesh_ldata, bm->ldata); + /* -------------------------------------------------------------------- */ /* Shape Key */ int tot_shape_keys = 0; @@ -393,8 +457,7 @@ void BM_mesh_bm_from_me(BMesh *bm, const Mesh *me, const struct BMeshFromMeshPar copy_v3_v3(v->no, vert_normals[i]); } - /* Copy Custom Data */ - CustomData_to_bmesh_block(&mesh_vdata, &bm->vdata, i, &v->head.data, true); + mesh_attributes_copy_to_bmesh_block(bm->vdata, vert_info, i, v->head); /* Set shape key original index. */ if (cd_shape_keyindex_offset != -1) { @@ -432,8 +495,7 @@ void BM_mesh_bm_from_me(BMesh *bm, const Mesh *me, const struct BMeshFromMeshPar BM_elem_flag_enable(e, BM_ELEM_SMOOTH); } - /* Copy Custom Data */ - CustomData_to_bmesh_block(&mesh_edata, &bm->edata, i, &e->head.data, true); + mesh_attributes_copy_to_bmesh_block(bm->edata, edge_info, i, e->head); } if (is_new) { bm->elem_index_dirty &= ~BM_EDGE; /* Added in order, clear dirty flag. */ @@ -491,12 +553,11 @@ void BM_mesh_bm_from_me(BMesh *bm, const Mesh *me, const struct BMeshFromMeshPar /* Don't use 'j' since we may have skipped some faces, hence some loops. */ BM_elem_index_set(l_iter, totloops++); /* set_ok */ - /* Save index of corresponding #MLoop. */ - CustomData_to_bmesh_block(&mesh_ldata, &bm->ldata, j++, &l_iter->head.data, true); + mesh_attributes_copy_to_bmesh_block(bm->ldata, loop_info, j, l_iter->head); + j++; } while ((l_iter = l_iter->next) != l_first); - /* Copy Custom Data */ - CustomData_to_bmesh_block(&mesh_pdata, &bm->pdata, i, &f->head.data, true); + mesh_attributes_copy_to_bmesh_block(bm->pdata, poly_info, i, f->head); if (params->calc_face_normal) { BM_face_normal_update(f); @@ -998,6 +1059,66 @@ static void convert_bmesh_selection_flags_to_mesh_attributes(BMesh &bm, } } +struct BMeshToMeshLayerInfo { + eCustomDataType type; + /** The layer's position in the BMesh element's data block. */ + int bmesh_offset; + /** The mesh's #CustomDataLayer::data. When null, the BMesh block is set to its default value. */ + void *mesh_data; + /** The size of every custom data element. */ + size_t elem_size; +}; + +/** + * Calculate the necessary information to copy every data layer from the BMesh to the Mesh. + */ +static Vector bm_to_mesh_copy_info_calc(const CustomData &bm_data, + CustomData &mesh_data) +{ + Vector infos; + std::array per_type_index; + per_type_index.fill(0); + for (const int i : IndexRange(mesh_data.totlayer)) { + CustomDataLayer &mesh_layer = mesh_data.layers[i]; + const eCustomDataType type = eCustomDataType(mesh_layer.type); + const int bm_layer_index = + mesh_layer.name[0] == '\0' ? + CustomData_get_layer_index_n(&bm_data, type, per_type_index[type]) : + CustomData_get_named_layer_index(&bm_data, type, mesh_layer.name); + + /* Skip layers that don't exist in `bm_data` or are explicitly set to not be + * copied. The layers are either set separately or shouldn't exist on the mesh. */ + if (bm_layer_index == -1) { + continue; + } + const CustomDataLayer &bm_layer = bm_data.layers[bm_layer_index]; + if (bm_layer.flag & CD_FLAG_NOCOPY) { + continue; + } + + BMeshToMeshLayerInfo info{}; + info.type = type; + info.bmesh_offset = bm_layer.offset; + info.mesh_data = mesh_layer.data; + info.elem_size = CustomData_get_elem_size(&mesh_layer); + infos.append(info); + + per_type_index[type]++; + } + return infos; +} + +static void bmesh_block_copy_to_mesh_attributes(const Span copy_info, + const int mesh_index, + const void *block) +{ + for (const BMeshToMeshLayerInfo &info : copy_info) { + CustomData_data_copy_value(info.type, + POINTER_OFFSET(block, info.bmesh_offset), + POINTER_OFFSET(info.mesh_data, info.elem_size * mesh_index)); + } +} + void BM_mesh_bm_to_me(Main *bmain, BMesh *bm, Mesh *me, const struct BMeshToMeshParams *params) { using namespace blender; @@ -1110,6 +1231,11 @@ void BM_mesh_bm_to_me(Main *bmain, BMesh *bm, Mesh *me, const struct BMeshToMesh CustomData_copy(&bm->pdata, &me->pdata, mask.pmask, CD_SET_DEFAULT, me->totpoly); } + const Vector vert_info = bm_to_mesh_copy_info_calc(bm->vdata, me->vdata); + const Vector edge_info = bm_to_mesh_copy_info_calc(bm->edata, me->edata); + const Vector poly_info = bm_to_mesh_copy_info_calc(bm->pdata, me->pdata); + const Vector loop_info = bm_to_mesh_copy_info_calc(bm->ldata, me->ldata); + /* Clear the CD_FLAG_NOCOPY flags for the layers they were temporarily set on */ for (const int i : ldata_layers_marked_nocopy) { bm->ldata.layers[i].flag &= ~CD_FLAG_NOCOPY; @@ -1147,8 +1273,7 @@ void BM_mesh_bm_to_me(Main *bmain, BMesh *bm, Mesh *me, const struct BMeshToMesh BM_elem_index_set(v, i); /* set_inline */ - /* Copy over custom-data. */ - CustomData_from_bmesh_block(&bm->vdata, &me->vdata, v->head.data, i); + bmesh_block_copy_to_mesh_attributes(vert_info, i, v->head.data); i++; @@ -1174,8 +1299,7 @@ void BM_mesh_bm_to_me(Main *bmain, BMesh *bm, Mesh *me, const struct BMeshToMesh BM_elem_index_set(e, i); /* set_inline */ - /* Copy over custom-data. */ - CustomData_from_bmesh_block(&bm->edata, &me->edata, e->head.data, i); + bmesh_block_copy_to_mesh_attributes(edge_info, i, e->head.data); i++; BM_CHECK_ELEMENT(e); @@ -1204,8 +1328,7 @@ void BM_mesh_bm_to_me(Main *bmain, BMesh *bm, Mesh *me, const struct BMeshToMesh mloop[j].e = BM_elem_index_get(l_iter->e); mloop[j].v = BM_elem_index_get(l_iter->v); - /* Copy over custom-data. */ - CustomData_from_bmesh_block(&bm->ldata, &me->ldata, l_iter->head.data, j); + bmesh_block_copy_to_mesh_attributes(loop_info, j, l_iter->head.data); j++; BM_CHECK_ELEMENT(l_iter); @@ -1217,8 +1340,7 @@ void BM_mesh_bm_to_me(Main *bmain, BMesh *bm, Mesh *me, const struct BMeshToMesh me->act_face = i; } - /* Copy over custom-data. */ - CustomData_from_bmesh_block(&bm->pdata, &me->pdata, f->head.data, i); + bmesh_block_copy_to_mesh_attributes(poly_info, i, f->head.data); i++; BM_CHECK_ELEMENT(f); @@ -1427,12 +1549,13 @@ static void bm_to_mesh_verts(const BMesh &bm, MutableSpan select_vert, MutableSpan hide_vert) { + const Vector info = bm_to_mesh_copy_info_calc(bm.vdata, mesh.vdata); MutableSpan dst_vert_positions = mesh.vert_positions_for_write(); threading::parallel_for(dst_vert_positions.index_range(), 1024, [&](const IndexRange range) { for (const int vert_i : range) { const BMVert &src_vert = *bm_verts[vert_i]; copy_v3_v3(dst_vert_positions[vert_i], src_vert.co); - CustomData_from_bmesh_block(&bm.vdata, &mesh.vdata, src_vert.head.data, vert_i); + bmesh_block_copy_to_mesh_attributes(info, vert_i, src_vert.head.data); } if (!select_vert.is_empty()) { for (const int vert_i : range) { @@ -1454,6 +1577,7 @@ static void bm_to_mesh_edges(const BMesh &bm, MutableSpan hide_edge, MutableSpan sharp_edge) { + const Vector info = bm_to_mesh_copy_info_calc(bm.edata, mesh.edata); MutableSpan dst_edges = mesh.edges_for_write(); threading::parallel_for(dst_edges.index_range(), 512, [&](const IndexRange range) { for (const int edge_i : range) { @@ -1462,7 +1586,7 @@ static void bm_to_mesh_edges(const BMesh &bm, dst_edge.v1 = BM_elem_index_get(src_edge.v1); dst_edge.v2 = BM_elem_index_get(src_edge.v2); dst_edge.flag = bm_edge_flag_to_mflag(&src_edge); - CustomData_from_bmesh_block(&bm.edata, &mesh.edata, src_edge.head.data, edge_i); + bmesh_block_copy_to_mesh_attributes(info, edge_i, src_edge.head.data); } if (!select_edge.is_empty()) { for (const int edge_i : range) { @@ -1489,6 +1613,7 @@ static void bm_to_mesh_faces(const BMesh &bm, MutableSpan hide_poly, MutableSpan material_indices) { + const Vector info = bm_to_mesh_copy_info_calc(bm.pdata, mesh.pdata); MutableSpan dst_polys = mesh.polys_for_write(); threading::parallel_for(dst_polys.index_range(), 1024, [&](const IndexRange range) { for (const int face_i : range) { @@ -1497,7 +1622,7 @@ static void bm_to_mesh_faces(const BMesh &bm, dst_poly.totloop = src_face.len; dst_poly.loopstart = BM_elem_index_get(BM_FACE_FIRST_LOOP(&src_face)); dst_poly.flag = bm_face_flag_to_mflag(&src_face); - CustomData_from_bmesh_block(&bm.pdata, &mesh.pdata, src_face.head.data, face_i); + bmesh_block_copy_to_mesh_attributes(info, face_i, src_face.head.data); } if (!select_poly.is_empty()) { for (const int face_i : range) { @@ -1519,6 +1644,7 @@ static void bm_to_mesh_faces(const BMesh &bm, static void bm_to_mesh_loops(const BMesh &bm, const Span bm_loops, Mesh &mesh) { + const Vector info = bm_to_mesh_copy_info_calc(bm.ldata, mesh.ldata); MutableSpan dst_loops = mesh.loops_for_write(); threading::parallel_for(dst_loops.index_range(), 1024, [&](const IndexRange range) { for (const int loop_i : range) { @@ -1526,7 +1652,7 @@ static void bm_to_mesh_loops(const BMesh &bm, const Span bm_loop MLoop &dst_loop = dst_loops[loop_i]; dst_loop.v = BM_elem_index_get(src_loop.v); dst_loop.e = BM_elem_index_get(src_loop.e); - CustomData_from_bmesh_block(&bm.ldata, &mesh.ldata, src_loop.head.data, loop_i); + bmesh_block_copy_to_mesh_attributes(info, loop_i, src_loop.head.data); } }); } -- 2.30.2 From da4908248b1d0f842d12c2ba9d75396cc0a17578 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Mon, 13 Feb 2023 20:56:24 +0100 Subject: [PATCH 063/182] Cleanup: Move draw_attributes.hh to C++ In order to experiment with different storage types for `DRW_Attributes` and for general cleanup (see #103343). Also move a curves header to C++. Pull Request #104716 --- source/blender/draw/CMakeLists.txt | 4 +- source/blender/draw/intern/draw_attributes.cc | 2 +- .../{draw_attributes.h => draw_attributes.hh} | 26 +++------- .../blender/draw/intern/draw_cache_extract.hh | 2 +- .../draw/intern/draw_cache_impl_curves.cc | 4 +- .../draw/intern/draw_cache_impl_pointcloud.cc | 2 +- source/blender/draw/intern/draw_curves.cc | 2 +- ...urves_private.h => draw_curves_private.hh} | 29 ++++------- .../blender/draw/intern/draw_manager_data.cc | 2 +- source/blender/draw/intern/draw_pointcloud.cc | 2 +- source/blender/draw/intern/draw_shader.h | 52 ++++++++++--------- .../extract_mesh_vbo_attributes.cc | 2 +- 12 files changed, 56 insertions(+), 73 deletions(-) rename source/blender/draw/intern/{draw_attributes.h => draw_attributes.hh} (86%) rename source/blender/draw/intern/{draw_curves_private.h => draw_curves_private.hh} (84%) diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt index ce3d09e46d93..063050660c66 100644 --- a/source/blender/draw/CMakeLists.txt +++ b/source/blender/draw/CMakeLists.txt @@ -225,7 +225,7 @@ set(SRC DRW_select_buffer.h intern/DRW_gpu_wrapper.hh intern/DRW_render.h - intern/draw_attributes.h + intern/draw_attributes.hh intern/draw_cache.h intern/draw_cache_extract.hh intern/draw_cache_impl.h @@ -234,7 +234,7 @@ set(SRC intern/draw_command.hh intern/draw_common.h intern/draw_common_shader_shared.h - intern/draw_curves_private.h + intern/draw_curves_private.hh intern/draw_debug.h intern/draw_debug.hh intern/draw_hair_private.h diff --git a/source/blender/draw/intern/draw_attributes.cc b/source/blender/draw/intern/draw_attributes.cc index cc7c9959850d..553832b0bf62 100644 --- a/source/blender/draw/intern/draw_attributes.cc +++ b/source/blender/draw/intern/draw_attributes.cc @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0-or-later * Copyright 2022 Blender Foundation. All rights reserved. */ -#include "draw_attributes.h" +#include "draw_attributes.hh" /* Return true if the given DRW_AttributeRequest is already in the requests. */ static bool drw_attributes_has_request(const DRW_Attributes *requests, DRW_AttributeRequest req) diff --git a/source/blender/draw/intern/draw_attributes.h b/source/blender/draw/intern/draw_attributes.hh similarity index 86% rename from source/blender/draw/intern/draw_attributes.h rename to source/blender/draw/intern/draw_attributes.hh index 66320f1b5000..1449f7b3b8a0 100644 --- a/source/blender/draw/intern/draw_attributes.h +++ b/source/blender/draw/intern/draw_attributes.hh @@ -9,9 +9,7 @@ #pragma once -#ifdef __cplusplus -# include -#endif +#include #include "DNA_customdata_types.h" @@ -24,23 +22,19 @@ #include "GPU_shader.h" #include "GPU_vertex_format.h" -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct DRW_AttributeRequest { +struct DRW_AttributeRequest { eCustomDataType cd_type; int layer_index; eAttrDomain domain; char attribute_name[64]; -} DRW_AttributeRequest; +}; -typedef struct DRW_Attributes { +struct DRW_Attributes { DRW_AttributeRequest requests[GPU_MAX_ATTR]; int num_requests; -} DRW_Attributes; +}; -typedef struct DRW_MeshCDMask { +struct DRW_MeshCDMask { uint32_t uv : 8; uint32_t tan : 8; uint32_t orco : 1; @@ -50,7 +44,7 @@ typedef struct DRW_MeshCDMask { * Edit uv layer is from the base edit mesh as modifiers could remove it. (see #68857) */ uint32_t edit_uv : 1; -} DRW_MeshCDMask; +}; /* Keep `DRW_MeshCDMask` struct within a `uint32_t`. * bit-wise and atomic operations are used to compare and update the struct. @@ -59,11 +53,9 @@ BLI_STATIC_ASSERT(sizeof(DRW_MeshCDMask) <= sizeof(uint32_t), "DRW_MeshCDMask ex void drw_attributes_clear(DRW_Attributes *attributes); -#ifdef __cplusplus void drw_attributes_merge(DRW_Attributes *dst, const DRW_Attributes *src, std::mutex &render_mutex); -#endif /* Return true if all requests in b are in a. */ bool drw_attributes_overlap(const DRW_Attributes *a, const DRW_Attributes *b); @@ -78,7 +70,3 @@ bool drw_custom_data_match_attribute(const CustomData *custom_data, const char *name, int *r_layer_index, eCustomDataType *r_type); - -#ifdef __cplusplus -} -#endif diff --git a/source/blender/draw/intern/draw_cache_extract.hh b/source/blender/draw/intern/draw_cache_extract.hh index 4fe360eecd7c..bc64be7656c4 100644 --- a/source/blender/draw/intern/draw_cache_extract.hh +++ b/source/blender/draw/intern/draw_cache_extract.hh @@ -22,7 +22,7 @@ #include "GPU_index_buffer.h" #include "GPU_vertex_buffer.h" -#include "draw_attributes.h" +#include "draw_attributes.hh" struct DRWSubdivCache; struct MeshRenderData; diff --git a/source/blender/draw/intern/draw_cache_impl_curves.cc b/source/blender/draw/intern/draw_cache_impl_curves.cc index 22e1eb3ece51..beea2f20eb96 100644 --- a/source/blender/draw/intern/draw_cache_impl_curves.cc +++ b/source/blender/draw/intern/draw_cache_impl_curves.cc @@ -34,10 +34,10 @@ #include "DRW_render.h" -#include "draw_attributes.h" +#include "draw_attributes.hh" #include "draw_cache_impl.h" /* own include */ #include "draw_cache_inline.h" -#include "draw_curves_private.h" /* own include */ +#include "draw_curves_private.hh" /* own include */ #include "draw_shader.h" using blender::ColorGeometry4f; diff --git a/source/blender/draw/intern/draw_cache_impl_pointcloud.cc b/source/blender/draw/intern/draw_cache_impl_pointcloud.cc index 4997aef6089c..3b9202bcb04b 100644 --- a/source/blender/draw/intern/draw_cache_impl_pointcloud.cc +++ b/source/blender/draw/intern/draw_cache_impl_pointcloud.cc @@ -25,7 +25,7 @@ #include "GPU_batch.h" #include "GPU_material.h" -#include "draw_attributes.h" +#include "draw_attributes.hh" #include "draw_cache_impl.h" #include "draw_cache_inline.h" #include "draw_pointcloud_private.hh" /* own include */ diff --git a/source/blender/draw/intern/draw_curves.cc b/source/blender/draw/intern/draw_curves.cc index 2be32cc704c4..48e9cca98e0a 100644 --- a/source/blender/draw/intern/draw_curves.cc +++ b/source/blender/draw/intern/draw_curves.cc @@ -26,7 +26,7 @@ #include "DRW_render.h" #include "draw_cache_impl.h" -#include "draw_curves_private.h" +#include "draw_curves_private.hh" #include "draw_hair_private.h" #include "draw_manager.h" #include "draw_shader.h" diff --git a/source/blender/draw/intern/draw_curves_private.h b/source/blender/draw/intern/draw_curves_private.hh similarity index 84% rename from source/blender/draw/intern/draw_curves_private.h rename to source/blender/draw/intern/draw_curves_private.hh index 9d02eedbbc30..be24872b1be3 100644 --- a/source/blender/draw/intern/draw_curves_private.h +++ b/source/blender/draw/intern/draw_curves_private.hh @@ -10,26 +10,23 @@ #include "BKE_attribute.h" #include "GPU_shader.h" -#include "draw_attributes.h" - -#ifdef __cplusplus -extern "C" { -#endif +#include "draw_attributes.hh" struct Curves; struct GPUVertBuf; struct GPUBatch; +struct GPUMaterial; #define MAX_THICKRES 2 /* see eHairType */ #define MAX_HAIR_SUBDIV 4 /* see hair_subdiv rna */ -typedef enum CurvesEvalShader { +enum CurvesEvalShader { CURVES_EVAL_CATMULL_ROM = 0, CURVES_EVAL_BEZIER = 1, -} CurvesEvalShader; +}; #define CURVES_EVAL_SHADER_NUM 3 -typedef struct CurvesEvalFinalCache { +struct CurvesEvalFinalCache { /* Output of the subdivision stage: vertex buffer sized to subdiv level. */ GPUVertBuf *proc_buf; @@ -58,10 +55,10 @@ typedef struct CurvesEvalFinalCache { /* Output of the subdivision stage: vertex buffers sized to subdiv level. This is only attributes * on point domain. */ GPUVertBuf *attributes_buf[GPU_MAX_ATTR]; -} CurvesEvalFinalCache; +}; /* Curves procedural display: Evaluation is done on the GPU. */ -typedef struct CurvesEvalCache { +struct CurvesEvalCache { /* Control point positions on evaluated data-block combined with parameter data. */ GPUVertBuf *proc_point_buf; @@ -82,19 +79,15 @@ typedef struct CurvesEvalCache { int strands_len; int elems_len; int point_len; -} CurvesEvalCache; +}; /** * Ensure all necessary textures and buffers exist for GPU accelerated drawing. */ -bool curves_ensure_procedural_data(struct Curves *curves, - struct CurvesEvalCache **r_hair_cache, - struct GPUMaterial *gpu_material, +bool curves_ensure_procedural_data(Curves *curves, + CurvesEvalCache **r_hair_cache, + GPUMaterial *gpu_material, int subdiv, int thickness_res); void drw_curves_get_attribute_sampler_name(const char *layer_name, char r_sampler_name[32]); - -#ifdef __cplusplus -} -#endif diff --git a/source/blender/draw/intern/draw_manager_data.cc b/source/blender/draw/intern/draw_manager_data.cc index 546ccbf7ef81..5887f3c79b70 100644 --- a/source/blender/draw/intern/draw_manager_data.cc +++ b/source/blender/draw/intern/draw_manager_data.cc @@ -7,7 +7,7 @@ #include "DRW_pbvh.hh" -#include "draw_attributes.h" +#include "draw_attributes.hh" #include "draw_manager.h" #include "draw_pbvh.h" diff --git a/source/blender/draw/intern/draw_pointcloud.cc b/source/blender/draw/intern/draw_pointcloud.cc index 4f228addffbc..0522c8500684 100644 --- a/source/blender/draw/intern/draw_pointcloud.cc +++ b/source/blender/draw/intern/draw_pointcloud.cc @@ -21,7 +21,7 @@ #include "DRW_gpu_wrapper.hh" #include "DRW_render.h" -#include "draw_attributes.h" +#include "draw_attributes.hh" #include "draw_cache_impl.h" #include "draw_common.h" #include "draw_manager.h" diff --git a/source/blender/draw/intern/draw_shader.h b/source/blender/draw/intern/draw_shader.h index e4c71812471f..d519775ceefe 100644 --- a/source/blender/draw/intern/draw_shader.h +++ b/source/blender/draw/intern/draw_shader.h @@ -7,36 +7,38 @@ #pragma once -#include "draw_curves_private.h" -#include "draw_hair_private.h" +#ifdef __cplusplus +# include "draw_curves_private.hh" +# include "draw_hair_private.h" + +struct GPUShader; + +enum eParticleRefineShaderType { + PART_REFINE_SHADER_TRANSFORM_FEEDBACK, + PART_REFINE_SHADER_TRANSFORM_FEEDBACK_WORKAROUND, + PART_REFINE_SHADER_COMPUTE, +}; + +/* draw_shader.cc */ + +GPUShader *DRW_shader_hair_refine_get(ParticleRefineShader refinement, + eParticleRefineShaderType sh_type); + +GPUShader *DRW_shader_curves_refine_get(CurvesEvalShader type, eParticleRefineShaderType sh_type); + +GPUShader *DRW_shader_debug_print_display_get(); +GPUShader *DRW_shader_debug_draw_display_get(); +GPUShader *DRW_shader_draw_visibility_compute_get(); +GPUShader *DRW_shader_draw_view_finalize_get(); +GPUShader *DRW_shader_draw_resource_finalize_get(); +GPUShader *DRW_shader_draw_command_generate_get(); + +#endif #ifdef __cplusplus extern "C" { #endif -struct GPUShader; - -typedef enum eParticleRefineShaderType { - PART_REFINE_SHADER_TRANSFORM_FEEDBACK, - PART_REFINE_SHADER_TRANSFORM_FEEDBACK_WORKAROUND, - PART_REFINE_SHADER_COMPUTE, -} eParticleRefineShaderType; - -/* draw_shader.cc */ - -struct GPUShader *DRW_shader_hair_refine_get(ParticleRefineShader refinement, - eParticleRefineShaderType sh_type); - -struct GPUShader *DRW_shader_curves_refine_get(CurvesEvalShader type, - eParticleRefineShaderType sh_type); - -struct GPUShader *DRW_shader_debug_print_display_get(void); -struct GPUShader *DRW_shader_debug_draw_display_get(void); -struct GPUShader *DRW_shader_draw_visibility_compute_get(void); -struct GPUShader *DRW_shader_draw_view_finalize_get(void); -struct GPUShader *DRW_shader_draw_resource_finalize_get(void); -struct GPUShader *DRW_shader_draw_command_generate_get(void); - void DRW_shaders_free(void); #ifdef __cplusplus 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 21201593d0c0..df52444a25b5 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 @@ -17,7 +17,7 @@ #include "BKE_attribute.hh" #include "BKE_mesh.h" -#include "draw_attributes.h" +#include "draw_attributes.hh" #include "draw_subdivision.h" #include "extract_mesh.hh" -- 2.30.2 From 9019b2f025cd6a6c42ad2a9f8f144f432c9e94f2 Mon Sep 17 00:00:00 2001 From: Falk David Date: Mon, 13 Feb 2023 22:25:06 +0100 Subject: [PATCH 064/182] Curves: Draw point overlay only in point selection mode In case the selection domain is `ATTR_DOMAIN_CURVE` then do not draw the points. Pull Request #104715 --- .../engines/overlay/overlay_edit_curves.cc | 33 ++++++++++++++----- .../draw/engines/overlay/overlay_private.hh | 1 + 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/source/blender/draw/engines/overlay/overlay_edit_curves.cc b/source/blender/draw/engines/overlay/overlay_edit_curves.cc index c2b7e3ee92f2..4570d82781c8 100644 --- a/source/blender/draw/engines/overlay/overlay_edit_curves.cc +++ b/source/blender/draw/engines/overlay/overlay_edit_curves.cc @@ -5,10 +5,14 @@ * \ingroup draw_engine */ +#include "BKE_curves.h" + #include "DRW_render.h" #include "ED_view3d.h" +#include "DEG_depsgraph_query.h" + #include "draw_cache_impl.h" #include "overlay_private.hh" @@ -17,7 +21,10 @@ void OVERLAY_edit_curves_init(OVERLAY_Data *vedata) { OVERLAY_PrivateData *pd = vedata->stl->pd; const DRWContextState *draw_ctx = DRW_context_state_get(); + const Object *obact_orig = DEG_get_original_object(draw_ctx->obact); + const Curves &curves_id = *static_cast(obact_orig->data); + pd->edit_curves.do_points = curves_id.selection_domain == ATTR_DOMAIN_POINT; pd->edit_curves.do_zbufclip = XRAY_FLAG_ENABLED(draw_ctx->v3d); /* Create view with depth offset. */ @@ -39,10 +46,12 @@ void OVERLAY_edit_curves_cache_init(OVERLAY_Data *vedata) /* Run Twice for in-front passes. */ for (int i = 0; i < 2; i++) { - DRW_PASS_CREATE(psl->edit_curves_points_ps[i], (state | pd->clipping_state)); - sh = OVERLAY_shader_edit_particle_point(); - grp = pd->edit_curves_points_grp[i] = DRW_shgroup_create(sh, psl->edit_curves_points_ps[i]); - DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo); + if (pd->edit_curves.do_points) { + DRW_PASS_CREATE(psl->edit_curves_points_ps[i], (state | pd->clipping_state)); + sh = OVERLAY_shader_edit_particle_point(); + grp = pd->edit_curves_points_grp[i] = DRW_shgroup_create(sh, psl->edit_curves_points_ps[i]); + DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo); + } DRW_PASS_CREATE(psl->edit_curves_lines_ps[i], (state | pd->clipping_state)); sh = OVERLAY_shader_edit_particle_strand(); @@ -56,9 +65,11 @@ static void overlay_edit_curves_add_ob_to_pass(OVERLAY_PrivateData *pd, Object * { Curves *curves = static_cast(ob->data); - DRWShadingGroup *point_shgrp = pd->edit_curves_points_grp[in_front]; - struct GPUBatch *geom_points = DRW_curves_batch_cache_get_edit_points(curves); - DRW_shgroup_call_no_cull(point_shgrp, geom_points, ob); + if (pd->edit_curves.do_points) { + DRWShadingGroup *point_shgrp = pd->edit_curves_points_grp[in_front]; + struct GPUBatch *geom_points = DRW_curves_batch_cache_get_edit_points(curves); + DRW_shgroup_call_no_cull(point_shgrp, geom_points, ob); + } DRWShadingGroup *lines_shgrp = pd->edit_curves_lines_grp[in_front]; struct GPUBatch *geom_lines = DRW_curves_batch_cache_get_edit_lines(curves); @@ -89,12 +100,16 @@ void OVERLAY_edit_curves_draw(OVERLAY_Data *vedata) if (pd->edit_curves.do_zbufclip) { DRW_view_set_active(pd->view_edit_curves); - DRW_draw_pass(psl->edit_curves_points_ps[NOT_IN_FRONT]); + if (pd->edit_curves.do_points) { + DRW_draw_pass(psl->edit_curves_points_ps[NOT_IN_FRONT]); + } DRW_draw_pass(psl->edit_curves_lines_ps[NOT_IN_FRONT]); } else { DRW_view_set_active(pd->view_edit_curves); - DRW_draw_pass(psl->edit_curves_points_ps[IN_FRONT]); + if (pd->edit_curves.do_points) { + DRW_draw_pass(psl->edit_curves_points_ps[IN_FRONT]); + } DRW_draw_pass(psl->edit_curves_lines_ps[IN_FRONT]); } } diff --git a/source/blender/draw/engines/overlay/overlay_private.hh b/source/blender/draw/engines/overlay/overlay_private.hh index 5636286a8acf..8eb6ebecb7b1 100644 --- a/source/blender/draw/engines/overlay/overlay_private.hh +++ b/source/blender/draw/engines/overlay/overlay_private.hh @@ -362,6 +362,7 @@ typedef struct OVERLAY_PrivateData { int flag; /** Copy of #v3d->overlay.edit_flag. */ } edit_mesh; struct { + bool do_points; bool do_zbufclip; } edit_curves; struct { -- 2.30.2 From f8cd9d7875136b8beb6fdb85aff18766685df950 Mon Sep 17 00:00:00 2001 From: Lukas Stockner Date: Sun, 12 Feb 2023 19:14:22 +0100 Subject: [PATCH 065/182] Cycles: Clean up the Principled Hair BSDF implementation - Rename roughness variables for more clarity - before, the SVM/OSL code would set s and v to the linear roughness values, and the setup function would over- write them with the distribution parameters. This actually caused a bug in the albedo code, since it intended to use the linear roughness value, but ended up getting the remapped value. - Deduplicate the evaluation and sample functions. Most of their code is the same, only the middle part is different. - Changed albedo computation to return the sum of the intensities of the four BSDF lobes. Previously, the code applied the inverse of the color->sigma mapping from the paper - this returns the color specified in the node, but for very dark hair (e.g. when using the Melanin controls) the result is extremely low (e.g. 0.000001) despite the hair still reflecting a significant amount of light (since the R lobe is independent of sigma). This causes issues with the light component passes, so this change fixes #104586. - There's quite a few computations at the start of the evaluation function that are needed for sampling, evaluation and albedo computation, but only depend on the view direction. Therefore, just precompute them - we still have space in PrincipledHairExtra after all. - Fix a tiny bug - the direction sampling code did not account for the R lobe roughness modifier. Pull Request #104669 --- intern/cycles/kernel/closure/bsdf.h | 23 +- .../kernel/closure/bsdf_hair_principled.h | 407 ++++++++---------- intern/cycles/kernel/osl/closures_setup.h | 6 +- intern/cycles/kernel/osl/closures_template.h | 6 +- .../osl/shaders/node_principled_hair_bsdf.osl | 4 +- intern/cycles/kernel/svm/closure.h | 8 +- 6 files changed, 207 insertions(+), 247 deletions(-) diff --git a/intern/cycles/kernel/closure/bsdf.h b/intern/cycles/kernel/closure/bsdf.h index e7754bde7c5a..a1227431ca2c 100644 --- a/intern/cycles/kernel/closure/bsdf.h +++ b/intern/cycles/kernel/closure/bsdf.h @@ -276,10 +276,6 @@ ccl_device_inline void bsdf_roughness_eta(const KernelGlobals kg, ccl_private float2 *roughness, ccl_private float *eta) { -#ifdef __SVM__ - bool refractive = false; - float alpha = 1.0f; -#endif switch (sc->type) { case CLOSURE_BSDF_DIFFUSE_ID: *roughness = one_float2(); @@ -291,11 +287,13 @@ ccl_device_inline void bsdf_roughness_eta(const KernelGlobals kg, *eta = 1.0f; break; # ifdef __OSL__ - case CLOSURE_BSDF_PHONG_RAMP_ID: - alpha = phong_ramp_exponent_to_roughness(((ccl_private const PhongRampBsdf *)sc)->exponent); + case CLOSURE_BSDF_PHONG_RAMP_ID: { + ccl_private const PhongRampBsdf *bsdf = (ccl_private const PhongRampBsdf *)sc; + float alpha = phong_ramp_exponent_to_roughness(bsdf->exponent); *roughness = make_float2(alpha, alpha); *eta = 1.0f; break; + } case CLOSURE_BSDF_DIFFUSE_RAMP_ID: *roughness = one_float2(); *eta = 1.0f; @@ -328,7 +326,7 @@ ccl_device_inline void bsdf_roughness_eta(const KernelGlobals kg, case CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID: { ccl_private const MicrofacetBsdf *bsdf = (ccl_private const MicrofacetBsdf *)sc; *roughness = make_float2(bsdf->alpha_x, bsdf->alpha_y); - refractive = bsdf->type == CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID; + const bool refractive = bsdf->type == CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID; *eta = refractive ? 1.0f / bsdf->ior : bsdf->ior; break; } @@ -350,7 +348,7 @@ ccl_device_inline void bsdf_roughness_eta(const KernelGlobals kg, case CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID: { ccl_private const MicrofacetBsdf *bsdf = (ccl_private const MicrofacetBsdf *)sc; *roughness = make_float2(bsdf->alpha_x, bsdf->alpha_y); - refractive = bsdf->type == CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID; + const bool refractive = bsdf->type == CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID; *eta = refractive ? 1.0f / bsdf->ior : bsdf->ior; } break; case CLOSURE_BSDF_ASHIKHMIN_SHIRLEY_ID: { @@ -382,11 +380,12 @@ ccl_device_inline void bsdf_roughness_eta(const KernelGlobals kg, ((ccl_private HairBsdf *)sc)->roughness2); *eta = 1.0f; break; - case CLOSURE_BSDF_HAIR_PRINCIPLED_ID: - alpha = ((ccl_private PrincipledHairBSDF *)sc)->m0_roughness; - *roughness = make_float2(alpha, alpha); - *eta = ((ccl_private PrincipledHairBSDF *)sc)->eta; + case CLOSURE_BSDF_HAIR_PRINCIPLED_ID: { + ccl_private const PrincipledHairBSDF *bsdf = (ccl_private const PrincipledHairBSDF *)sc; + *roughness = make_float2(bsdf->v_R, bsdf->v_R); + *eta = bsdf->eta; break; + } case CLOSURE_BSDF_PRINCIPLED_DIFFUSE_ID: *roughness = one_float2(); *eta = 1.0f; diff --git a/intern/cycles/kernel/closure/bsdf_hair_principled.h b/intern/cycles/kernel/closure/bsdf_hair_principled.h index f7cf3b716f64..0aa2c2c76f3c 100644 --- a/intern/cycles/kernel/closure/bsdf_hair_principled.h +++ b/intern/cycles/kernel/closure/bsdf_hair_principled.h @@ -13,7 +13,11 @@ CCL_NAMESPACE_BEGIN typedef struct PrincipledHairExtra { /* Geometry data. */ - float4 geom; + float3 Y, Z; + float gamma_o, gamma_t; + /* Precomputed Transmission and Fresnel term */ + Spectrum T; + float f; } PrincipledHairExtra; typedef struct PrincipledHairBSDF { @@ -21,16 +25,16 @@ typedef struct PrincipledHairBSDF { /* Absorption coefficient. */ Spectrum sigma; - /* Variance of the underlying logistic distribution. */ + /* Variance of the underlying logistic distribution, based on longitudinal roughness. */ float v; - /* Scale factor of the underlying logistic distribution. */ + /* Scale factor of the underlying logistic distribution, based on azimuthal roughness. */ float s; + /* Alternative value for v, used for the R lobe. */ + float v_R; /* Cuticle tilt angle. */ float alpha; /* IOR. */ float eta; - /* Effective variance for the diffuse bounce only. */ - float m0_roughness; /* Extra closure. */ ccl_private PrincipledHairExtra *extra; @@ -131,6 +135,9 @@ ccl_device_inline float sample_trimmed_logistic(float u, float s) ccl_device_inline float azimuthal_scattering( float phi, int p, float s, float gamma_o, float gamma_t) { + if (p == 3) { + return M_1_2PI_F; + } float phi_o = wrap_angle(phi - delta_phi(p, gamma_o, gamma_t)); float val = trimmed_logistic(phi_o, s); return val; @@ -155,27 +162,45 @@ ccl_device_inline float longitudinal_scattering( } } +ccl_device_forceinline float hair_get_lobe_v(const ccl_private PrincipledHairBSDF *bsdf, + const int lobe) +{ + if (lobe == 0) { + return bsdf->v_R; + } + else if (lobe == 1) { + return 0.25f * bsdf->v; + } + else { + return 4.0f * bsdf->v; + } +} + #ifdef __HAIR__ /* Set up the hair closure. */ ccl_device int bsdf_principled_hair_setup(ccl_private ShaderData *sd, - ccl_private PrincipledHairBSDF *bsdf) + ccl_private PrincipledHairBSDF *bsdf, + float u_rough, + float u_coat_rough, + float v_rough) { - bsdf->type = CLOSURE_BSDF_HAIR_PRINCIPLED_ID; - bsdf->v = clamp(bsdf->v, 0.001f, 1.0f); - bsdf->s = clamp(bsdf->s, 0.001f, 1.0f); - /* Apply Primary Reflection Roughness modifier. */ - bsdf->m0_roughness = clamp(bsdf->m0_roughness * bsdf->v, 0.001f, 1.0f); + u_rough = clamp(u_rough, 0.001f, 1.0f); + v_rough = clamp(v_rough, 0.001f, 1.0f); + /* u_coat_rough is a multiplier that modifies u_rough for the R lobe. */ + float u_R_roughness = clamp(u_coat_rough * u_rough, 0.001f, 1.0f); - /* Map from roughness_u and roughness_v to variance and scale factor. */ - bsdf->v = sqr(0.726f * bsdf->v + 0.812f * sqr(bsdf->v) + 3.700f * pow20(bsdf->v)); - bsdf->s = (0.265f * bsdf->s + 1.194f * sqr(bsdf->s) + 5.372f * pow22(bsdf->s)) * M_SQRT_PI_8_F; - bsdf->m0_roughness = sqr(0.726f * bsdf->m0_roughness + 0.812f * sqr(bsdf->m0_roughness) + - 3.700f * pow20(bsdf->m0_roughness)); + bsdf->type = CLOSURE_BSDF_HAIR_PRINCIPLED_ID; + + /* Map from the azimuthal and the two longitudinal roughnesses to variance and scale factor. */ + bsdf->v = sqr(0.726f * u_rough + 0.812f * sqr(u_rough) + 3.700f * pow20(u_rough)); + bsdf->v_R = sqr(0.726f * u_R_roughness + 0.812f * sqr(u_R_roughness) + + 3.700f * pow20(u_R_roughness)); + bsdf->s = (0.265f * v_rough + 1.194f * sqr(v_rough) + 5.372f * pow22(v_rough)) * M_SQRT_PI_8_F; /* Compute local frame, aligned to curve tangent and ray direction. */ float3 X = safe_normalize(sd->dPdu); - float3 Y = safe_normalize(cross(X, sd->wi)); - float3 Z = safe_normalize(cross(X, Y)); + bsdf->extra->Y = safe_normalize(cross(X, sd->wi)); + bsdf->extra->Z = safe_normalize(cross(X, bsdf->extra->Y)); /* h -1..0..1 means the rays goes from grazing the hair, to hitting it at * the center, to grazing the other edge. This is the sine of the angle @@ -183,13 +208,28 @@ ccl_device int bsdf_principled_hair_setup(ccl_private ShaderData *sd, /* TODO: we convert this value to a cosine later and discard the sign, so * we could probably save some operations. */ - float h = (sd->type & PRIMITIVE_CURVE_RIBBON) ? -sd->v : dot(cross(sd->Ng, X), Z); + float h = (sd->type & PRIMITIVE_CURVE_RIBBON) ? -sd->v : dot(cross(sd->Ng, X), bsdf->extra->Z); kernel_assert(fabsf(h) < 1.0f + 1e-4f); kernel_assert(isfinite_safe(Y)); kernel_assert(isfinite_safe(h)); - bsdf->extra->geom = make_float4(Y.x, Y.y, Y.z, h); + const float sin_theta_o = dot(sd->wi, X); + const float cos_theta_o = cos_from_sin(sin_theta_o); + + const float sin_theta_t = sin_theta_o / bsdf->eta; + const float cos_theta_t = cos_from_sin(sin_theta_t); + + const float sin_gamma_o = h; + const float cos_gamma_o = cos_from_sin(sin_gamma_o); + bsdf->extra->gamma_o = safe_asinf(sin_gamma_o); + + const float sin_gamma_t = sin_gamma_o * cos_theta_o / sqrtf(sqr(bsdf->eta) - sqr(sin_theta_o)); + const float cos_gamma_t = cos_from_sin(sin_gamma_t); + bsdf->extra->gamma_t = safe_asinf(sin_gamma_t); + + bsdf->extra->T = exp(-bsdf->sigma * (2.0f * cos_gamma_t / cos_theta_t)); + bsdf->extra->f = fresnel_dielectric_cos(cos_theta_o * cos_gamma_o, bsdf->eta); return SD_BSDF | SD_BSDF_HAS_EVAL | SD_BSDF_NEEDS_LCG | SD_BSDF_HAS_TRANSMISSION; } @@ -198,35 +238,35 @@ ccl_device int bsdf_principled_hair_setup(ccl_private ShaderData *sd, /* Given the Fresnel term and transmittance, generate the attenuation terms for each bounce. */ ccl_device_inline void hair_attenuation( - KernelGlobals kg, float f, Spectrum T, ccl_private Spectrum *Ap, ccl_private float *Ap_energy) + KernelGlobals kg, float f, Spectrum T, ccl_private Spectrum *Ap, ccl_private float *lobe_pdf) { /* Primary specular (R). */ Ap[0] = make_spectrum(f); - Ap_energy[0] = f; + lobe_pdf[0] = f; /* Transmission (TT). */ Spectrum col = sqr(1.0f - f) * T; Ap[1] = col; - Ap_energy[1] = spectrum_to_gray(kg, col); + lobe_pdf[1] = spectrum_to_gray(kg, col); /* Secondary specular (TRT). */ col *= T * f; Ap[2] = col; - Ap_energy[2] = spectrum_to_gray(kg, col); + lobe_pdf[2] = spectrum_to_gray(kg, col); /* Residual component (TRRT+). */ col *= safe_divide(T * f, one_spectrum() - T * f); Ap[3] = col; - Ap_energy[3] = spectrum_to_gray(kg, col); + lobe_pdf[3] = spectrum_to_gray(kg, col); /* Normalize sampling weights. */ - float totweight = Ap_energy[0] + Ap_energy[1] + Ap_energy[2] + Ap_energy[3]; + float totweight = lobe_pdf[0] + lobe_pdf[1] + lobe_pdf[2] + lobe_pdf[3]; float fac = safe_divide(1.0f, totweight); - Ap_energy[0] *= fac; - Ap_energy[1] *= fac; - Ap_energy[2] *= fac; - Ap_energy[3] *= fac; + lobe_pdf[0] *= fac; + lobe_pdf[1] *= fac; + lobe_pdf[2] *= fac; + lobe_pdf[3] *= fac; } /* Given the tilt angle, generate the rotated theta_i for the different bounces. */ @@ -248,91 +288,120 @@ ccl_device_inline void hair_alpha_angles(float sin_theta_i, angles[3] = fabsf(cos_theta_i * cos_1alpha + sin_theta_i * sin_1alpha); angles[4] = sin_theta_i * cos_4alpha - cos_theta_i * sin_4alpha; angles[5] = fabsf(cos_theta_i * cos_4alpha + sin_theta_i * sin_4alpha); + angles[6] = sin_theta_i; + angles[7] = cos_theta_i; +} + +/* Since most of the implementation is the same between sampling and evaluation, + * this shared function implements both. + * For evaluation, wo is an input, and randu/randv are ignored. + * For sampling, wo is an output, and randu/randv are used to pick it. + */ +template +ccl_device int bsdf_principled_hair_impl(KernelGlobals kg, + ccl_private const PrincipledHairBSDF *bsdf, + ccl_private ShaderData *sd, + ccl_private float3 *wo, + ccl_private Spectrum *F, + ccl_private float *pdf, + float randu, + float randv) +{ + const float3 X = safe_normalize(sd->dPdu); + const float3 Y = bsdf->extra->Y; + const float3 Z = bsdf->extra->Z; + kernel_assert(fabsf(dot(X, Y)) < 1e-3f); + + const float gamma_o = bsdf->extra->gamma_o; + const float gamma_t = bsdf->extra->gamma_t; + + const float3 local_O = make_float3(dot(sd->wi, X), dot(sd->wi, Y), dot(sd->wi, Z)); + const float sin_theta_o = local_O.x; + const float cos_theta_o = cos_from_sin(sin_theta_o); + const float phi_o = atan2f(local_O.z, local_O.y); + + Spectrum Ap[4]; + float lobe_pdf[4]; + hair_attenuation(kg, bsdf->extra->f, bsdf->extra->T, Ap, lobe_pdf); + + float sin_theta_i, cos_theta_i, phi; + int sampled_p = 0; + if (do_sample) { + /* Pick lobe for sampline */ + for (; sampled_p < 3; sampled_p++) { + if (randu < lobe_pdf[sampled_p]) { + break; + } + randu -= lobe_pdf[sampled_p]; + } + + /* Sample incoming direction */ + float v = hair_get_lobe_v(bsdf, sampled_p); + float randw = lcg_step_float(&sd->lcg_state), randx = lcg_step_float(&sd->lcg_state); + randw = max(randw, 1e-5f); + const float fac = 1.0f + v * logf(randw + (1.0f - randw) * expf(-2.0f / v)); + sin_theta_i = -fac * sin_theta_o + cos_from_sin(fac) * cosf(M_2PI_F * randx) * cos_theta_o; + cos_theta_i = cos_from_sin(sin_theta_i); + + if (sampled_p < 3) { + float angles[8]; + hair_alpha_angles(sin_theta_i, cos_theta_i, -bsdf->alpha, angles); + sin_theta_i = angles[2 * sampled_p]; + cos_theta_i = angles[2 * sampled_p + 1]; + + phi = delta_phi(sampled_p, gamma_o, gamma_t) + sample_trimmed_logistic(randv, bsdf->s); + } + else { + phi = M_2PI_F * randv; + } + + const float phi_i = phi_o + phi; + *wo = X * sin_theta_i + Y * cos_theta_i * cosf(phi_i) + Z * cos_theta_i * sinf(phi_i); + } + else { + const float3 local_I = make_float3(dot(*wo, X), dot(*wo, Y), dot(*wo, Z)); + + sin_theta_i = local_I.x; + cos_theta_i = cos_from_sin(sin_theta_i); + + const float phi_i = atan2f(local_I.z, local_I.y); + phi = phi_i - phi_o; + } + + /* Evaluate throughput. */ + float angles[8]; + hair_alpha_angles(sin_theta_i, cos_theta_i, bsdf->alpha, angles); + + *F = zero_spectrum(); + *pdf = 0.0f; + + for (int p = 0; p < 4; p++) { + const float Mp = longitudinal_scattering( + angles[2 * p], angles[2 * p + 1], sin_theta_o, cos_theta_o, hair_get_lobe_v(bsdf, p)); + const float Np = azimuthal_scattering(phi, p, bsdf->s, gamma_o, gamma_t); + *F += Ap[p] * Mp * Np; + *pdf += lobe_pdf[p] * Mp * Np; + kernel_assert(isfinite_safe(*F) && isfinite_safe(*pdf)); + } + + return sampled_p; } -/* Evaluation function for our shader. */ ccl_device Spectrum bsdf_principled_hair_eval(KernelGlobals kg, - ccl_private const ShaderData *sd, + ccl_private ShaderData *sd, ccl_private const ShaderClosure *sc, - const float3 wo, + float3 wo, ccl_private float *pdf) { kernel_assert(isfinite_safe(sd->P) && isfinite_safe(sd->ray_length)); ccl_private const PrincipledHairBSDF *bsdf = (ccl_private const PrincipledHairBSDF *)sc; - const float3 Y = float4_to_float3(bsdf->extra->geom); - const float3 X = safe_normalize(sd->dPdu); - kernel_assert(fabsf(dot(X, Y)) < 1e-3f); - const float3 Z = safe_normalize(cross(X, Y)); - - /* local_I is the illumination direction. */ - const float3 local_O = make_float3(dot(sd->wi, X), dot(sd->wi, Y), dot(sd->wi, Z)); - const float3 local_I = make_float3(dot(wo, X), dot(wo, Y), dot(wo, Z)); - - const float sin_theta_o = local_O.x; - const float cos_theta_o = cos_from_sin(sin_theta_o); - const float phi_o = atan2f(local_O.z, local_O.y); - - const float sin_theta_t = sin_theta_o / bsdf->eta; - const float cos_theta_t = cos_from_sin(sin_theta_t); - - const float sin_gamma_o = bsdf->extra->geom.w; - const float cos_gamma_o = cos_from_sin(sin_gamma_o); - const float gamma_o = safe_asinf(sin_gamma_o); - - const float sin_gamma_t = sin_gamma_o * cos_theta_o / sqrtf(sqr(bsdf->eta) - sqr(sin_theta_o)); - const float cos_gamma_t = cos_from_sin(sin_gamma_t); - const float gamma_t = safe_asinf(sin_gamma_t); - - const Spectrum T = exp(-bsdf->sigma * (2.0f * cos_gamma_t / cos_theta_t)); - Spectrum Ap[4]; - float Ap_energy[4]; - hair_attenuation( - kg, fresnel_dielectric_cos(cos_theta_o * cos_gamma_o, bsdf->eta), T, Ap, Ap_energy); - - const float sin_theta_i = local_I.x; - const float cos_theta_i = cos_from_sin(sin_theta_i); - const float phi_i = atan2f(local_I.z, local_I.y); - - const float phi = phi_i - phi_o; - - float angles[6]; - hair_alpha_angles(sin_theta_i, cos_theta_i, bsdf->alpha, angles); - - Spectrum F = zero_spectrum(); - float F_energy = 0.0f; - - /* Primary specular (R), Transmission (TT) and Secondary Specular (TRT). */ - for (int i = 0; i < 3; i++) { - const float Mp = longitudinal_scattering(angles[2 * i], - angles[2 * i + 1], - sin_theta_o, - cos_theta_o, - (i == 0) ? bsdf->m0_roughness : - (i == 1) ? 0.25f * bsdf->v : - 4.0f * bsdf->v); - const float Np = azimuthal_scattering(phi, i, bsdf->s, gamma_o, gamma_t); - F += Ap[i] * Mp * Np; - F_energy += Ap_energy[i] * Mp * Np; - kernel_assert(isfinite_safe(F) && isfinite_safe(F_energy)); - } - - /* Residual component (TRRT+). */ - { - const float Mp = longitudinal_scattering( - sin_theta_i, cos_theta_i, sin_theta_o, cos_theta_o, 4.0f * bsdf->v); - const float Np = M_1_2PI_F; - F += Ap[3] * Mp * Np; - F_energy += Ap_energy[3] * Mp * Np; - kernel_assert(isfinite_safe(F) && isfinite_safe(F_energy)); - } - - *pdf = F_energy; - return F; + Spectrum eval; + bsdf_principled_hair_impl(kg, bsdf, sd, &wo, &eval, pdf, 0.0f, 0.0f); + return eval; } -/* Sampling function for the hair shader. */ ccl_device int bsdf_principled_hair_sample(KernelGlobals kg, ccl_private const ShaderClosure *sc, ccl_private ShaderData *sd, @@ -344,118 +413,13 @@ ccl_device int bsdf_principled_hair_sample(KernelGlobals kg, ccl_private float2 *sampled_roughness, ccl_private float *eta) { - ccl_private PrincipledHairBSDF *bsdf = (ccl_private PrincipledHairBSDF *)sc; + ccl_private const PrincipledHairBSDF *bsdf = (ccl_private const PrincipledHairBSDF *)sc; - *sampled_roughness = make_float2(bsdf->m0_roughness, bsdf->m0_roughness); + int p = bsdf_principled_hair_impl(kg, bsdf, sd, wo, eval, pdf, randu, randv); + + *sampled_roughness = make_float2(bsdf->v_R, bsdf->v_R); *eta = bsdf->eta; - const float3 Y = float4_to_float3(bsdf->extra->geom); - - const float3 X = safe_normalize(sd->dPdu); - kernel_assert(fabsf(dot(X, Y)) < 1e-3f); - const float3 Z = safe_normalize(cross(X, Y)); - - const float3 local_O = make_float3(dot(sd->wi, X), dot(sd->wi, Y), dot(sd->wi, Z)); - - float2 u[2]; - u[0] = make_float2(randu, randv); - u[1].x = lcg_step_float(&sd->lcg_state); - u[1].y = lcg_step_float(&sd->lcg_state); - - const float sin_theta_o = local_O.x; - const float cos_theta_o = cos_from_sin(sin_theta_o); - const float phi_o = atan2f(local_O.z, local_O.y); - - const float sin_theta_t = sin_theta_o / bsdf->eta; - const float cos_theta_t = cos_from_sin(sin_theta_t); - - const float sin_gamma_o = bsdf->extra->geom.w; - const float cos_gamma_o = cos_from_sin(sin_gamma_o); - const float gamma_o = safe_asinf(sin_gamma_o); - - const float sin_gamma_t = sin_gamma_o * cos_theta_o / sqrtf(sqr(bsdf->eta) - sqr(sin_theta_o)); - const float cos_gamma_t = cos_from_sin(sin_gamma_t); - const float gamma_t = safe_asinf(sin_gamma_t); - - const Spectrum T = exp(-bsdf->sigma * (2.0f * cos_gamma_t / cos_theta_t)); - Spectrum Ap[4]; - float Ap_energy[4]; - hair_attenuation( - kg, fresnel_dielectric_cos(cos_theta_o * cos_gamma_o, bsdf->eta), T, Ap, Ap_energy); - - int p = 0; - for (; p < 3; p++) { - if (u[0].x < Ap_energy[p]) { - break; - } - u[0].x -= Ap_energy[p]; - } - - float v = bsdf->v; - if (p == 1) { - v *= 0.25f; - } - if (p >= 2) { - v *= 4.0f; - } - - u[1].x = max(u[1].x, 1e-5f); - const float fac = 1.0f + v * logf(u[1].x + (1.0f - u[1].x) * expf(-2.0f / v)); - float sin_theta_i = -fac * sin_theta_o + - cos_from_sin(fac) * cosf(M_2PI_F * u[1].y) * cos_theta_o; - float cos_theta_i = cos_from_sin(sin_theta_i); - - float angles[6]; - if (p < 3) { - hair_alpha_angles(sin_theta_i, cos_theta_i, -bsdf->alpha, angles); - sin_theta_i = angles[2 * p]; - cos_theta_i = angles[2 * p + 1]; - } - - float phi; - if (p < 3) { - phi = delta_phi(p, gamma_o, gamma_t) + sample_trimmed_logistic(u[0].y, bsdf->s); - } - else { - phi = M_2PI_F * u[0].y; - } - const float phi_i = phi_o + phi; - - hair_alpha_angles(sin_theta_i, cos_theta_i, bsdf->alpha, angles); - - Spectrum F = zero_spectrum(); - float F_energy = 0.0f; - - /* Primary specular (R), Transmission (TT) and Secondary Specular (TRT). */ - for (int i = 0; i < 3; i++) { - const float Mp = longitudinal_scattering(angles[2 * i], - angles[2 * i + 1], - sin_theta_o, - cos_theta_o, - (i == 0) ? bsdf->m0_roughness : - (i == 1) ? 0.25f * bsdf->v : - 4.0f * bsdf->v); - const float Np = azimuthal_scattering(phi, i, bsdf->s, gamma_o, gamma_t); - F += Ap[i] * Mp * Np; - F_energy += Ap_energy[i] * Mp * Np; - kernel_assert(isfinite_safe(F) && isfinite_safe(F_energy)); - } - - /* Residual component (TRRT+). */ - { - const float Mp = longitudinal_scattering( - sin_theta_i, cos_theta_i, sin_theta_o, cos_theta_o, 4.0f * bsdf->v); - const float Np = M_1_2PI_F; - F += Ap[3] * Mp * Np; - F_energy += Ap_energy[3] * Mp * Np; - kernel_assert(isfinite_safe(F) && isfinite_safe(F_energy)); - } - - *eval = F; - *pdf = F_energy; - - *wo = X * sin_theta_i + Y * cos_theta_i * cosf(phi_i) + Z * cos_theta_i * sinf(phi_i); - return LABEL_GLOSSY | ((p == 0) ? LABEL_REFLECT : LABEL_TRANSMIT); } @@ -466,29 +430,30 @@ ccl_device void bsdf_principled_hair_blur(ccl_private ShaderClosure *sc, float r bsdf->v = fmaxf(roughness, bsdf->v); bsdf->s = fmaxf(roughness, bsdf->s); - bsdf->m0_roughness = fmaxf(roughness, bsdf->m0_roughness); + bsdf->v_R = fmaxf(roughness, bsdf->v_R); } /* Hair Albedo */ -ccl_device_inline float bsdf_principled_hair_albedo_roughness_scale( - const float azimuthal_roughness) +ccl_device_inline float bsdf_principled_hair_albedo_roughness_scale(const float u_rough) { - const float x = azimuthal_roughness; + const float x = u_rough; return (((((0.245f * x) + 5.574f) * x - 10.73f) * x + 2.532f) * x - 0.215f) * x + 5.969f; } ccl_device Spectrum bsdf_principled_hair_albedo(ccl_private const ShaderClosure *sc) { ccl_private PrincipledHairBSDF *bsdf = (ccl_private PrincipledHairBSDF *)sc; - return exp(-sqrt(bsdf->sigma) * bsdf_principled_hair_albedo_roughness_scale(bsdf->v)); + /* This is simply the sum of the four Ap terms in hair_attenuation. */ + const float3 T = bsdf->extra->T; + const float f = bsdf->extra->f; + return safe_divide(T * (1.0f - 2.0f * f) + make_spectrum(f), one_spectrum() - f * T); } -ccl_device_inline Spectrum -bsdf_principled_hair_sigma_from_reflectance(const Spectrum color, const float azimuthal_roughness) +ccl_device_inline Spectrum bsdf_principled_hair_sigma_from_reflectance(const Spectrum color, + const float u_rough) { - const Spectrum sigma = log(color) / - bsdf_principled_hair_albedo_roughness_scale(azimuthal_roughness); + const Spectrum sigma = log(color) / bsdf_principled_hair_albedo_roughness_scale(u_rough); return sigma * sigma; } diff --git a/intern/cycles/kernel/osl/closures_setup.h b/intern/cycles/kernel/osl/closures_setup.h index 5ea8f0804100..8057adf68df6 100644 --- a/intern/cycles/kernel/osl/closures_setup.h +++ b/intern/cycles/kernel/osl/closures_setup.h @@ -1078,15 +1078,13 @@ ccl_device void osl_closure_principled_hair_setup(KernelGlobals kg, bsdf->N = ensure_valid_reflection(sd->Ng, sd->wi, closure->N); bsdf->sigma = closure->sigma; - bsdf->v = closure->v; - bsdf->s = closure->s; bsdf->alpha = closure->alpha; bsdf->eta = closure->eta; - bsdf->m0_roughness = closure->m0_roughness; bsdf->extra = extra; - sd->flag |= bsdf_principled_hair_setup(sd, bsdf); + sd->flag |= bsdf_principled_hair_setup( + sd, bsdf, closure->u_roughness, closure->coat_roughness, closure->v_roughness); #endif } diff --git a/intern/cycles/kernel/osl/closures_template.h b/intern/cycles/kernel/osl/closures_template.h index b9e9b52dcf82..164988754617 100644 --- a/intern/cycles/kernel/osl/closures_template.h +++ b/intern/cycles/kernel/osl/closures_template.h @@ -238,9 +238,9 @@ OSL_CLOSURE_STRUCT_END(HairTransmission, hair_transmission) OSL_CLOSURE_STRUCT_BEGIN(PrincipledHair, principled_hair) OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, VECTOR, packed_float3, N, NULL) OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, VECTOR, packed_float3, sigma, NULL) - OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, FLOAT, float, v, NULL) - OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, FLOAT, float, s, NULL) - OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, FLOAT, float, m0_roughness, NULL) + OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, FLOAT, float, u_roughness, NULL) + OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, FLOAT, float, v_roughness, NULL) + OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, FLOAT, float, coat_roughness, NULL) OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, FLOAT, float, alpha, NULL) OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, FLOAT, float, eta, NULL) OSL_CLOSURE_STRUCT_END(PrincipledHair, principled_hair) diff --git a/intern/cycles/kernel/osl/shaders/node_principled_hair_bsdf.osl b/intern/cycles/kernel/osl/shaders/node_principled_hair_bsdf.osl index cf8c06080fe9..66f35436a291 100644 --- a/intern/cycles/kernel/osl/shaders/node_principled_hair_bsdf.osl +++ b/intern/cycles/kernel/osl/shaders/node_principled_hair_bsdf.osl @@ -53,7 +53,7 @@ shader node_principled_hair_bsdf(color Color = color(0.017513, 0.005763, 0.00205 /* Compute roughness. */ float factor_random_roughness = 1.0 + 2.0 * (random_value - 0.5) * RandomRoughness; - float m0_roughness = 1.0 - clamp(Coat, 0.0, 1.0); + float coat_roughness = 1.0 - clamp(Coat, 0.0, 1.0); float roughness = Roughness * factor_random_roughness; float radial_roughness = RadialRoughness * factor_random_roughness; @@ -88,5 +88,5 @@ shader node_principled_hair_bsdf(color Color = color(0.017513, 0.005763, 0.00205 sigma = sigma_from_concentration(0.0, 0.8054375); } - BSDF = principled_hair(Normal, sigma, roughness, radial_roughness, m0_roughness, Offset, IOR); + BSDF = principled_hair(Normal, sigma, roughness, radial_roughness, coat_roughness, Offset, IOR); } diff --git a/intern/cycles/kernel/svm/closure.h b/intern/cycles/kernel/svm/closure.h index f52e13e37d8f..b11e1f7d9333 100644 --- a/intern/cycles/kernel/svm/closure.h +++ b/intern/cycles/kernel/svm/closure.h @@ -802,12 +802,9 @@ ccl_device_noinline int svm_node_closure_bsdf(KernelGlobals kg, /* Remap Coat value to [0, 100]% of Roughness. */ float coat = stack_load_float_default(stack, coat_ofs, data_node2.y); - float m0_roughness = 1.0f - clamp(coat, 0.0f, 1.0f); + float coat_roughness = 1.0f - clamp(coat, 0.0f, 1.0f); bsdf->N = N; - bsdf->v = roughness; - bsdf->s = radial_roughness; - bsdf->m0_roughness = m0_roughness; bsdf->alpha = alpha; bsdf->eta = ior; bsdf->extra = extra; @@ -860,7 +857,8 @@ ccl_device_noinline int svm_node_closure_bsdf(KernelGlobals kg, } } - sd->flag |= bsdf_principled_hair_setup(sd, bsdf); + sd->flag |= bsdf_principled_hair_setup( + sd, bsdf, roughness, coat_roughness, radial_roughness); } break; } -- 2.30.2 From ab0fcf259024a0aed877ad05ae23abc7185562b9 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 13 Feb 2023 22:53:08 +0100 Subject: [PATCH 066/182] Fix #104097: re-enable Cycles AMD Vega support The internal compiler error appears to be gone. Unclear why it appeared in the first place and why it's gone now. Just random kernel code changes causing it. Pull Request #104719 --- CMakeLists.txt | 2 +- intern/cycles/blender/addon/properties.py | 4 ++-- intern/cycles/device/hip/util.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c6de0fb001d2..7b61275522a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -524,7 +524,7 @@ endif() if(NOT APPLE) option(WITH_CYCLES_DEVICE_HIP "Enable Cycles AMD HIP support" ON) option(WITH_CYCLES_HIP_BINARIES "Build Cycles AMD HIP binaries" OFF) - set(CYCLES_HIP_BINARIES_ARCH gfx1010 gfx1011 gfx1012 gfx1030 gfx1031 gfx1032 gfx1034 gfx1035 gfx1100 gfx1101 gfx1102 CACHE STRING "AMD HIP architectures to build binaries for") + set(CYCLES_HIP_BINARIES_ARCH gfx900 gfx906 gfx90c gfx902 gfx1010 gfx1011 gfx1012 gfx1030 gfx1031 gfx1032 gfx1034 gfx1035 gfx1100 gfx1101 gfx1102 CACHE STRING "AMD HIP architectures to build binaries for") mark_as_advanced(WITH_CYCLES_DEVICE_HIP) mark_as_advanced(CYCLES_HIP_BINARIES_ARCH) endif() diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py index f3d8426a23b2..41eacb7417f0 100644 --- a/intern/cycles/blender/addon/properties.py +++ b/intern/cycles/blender/addon/properties.py @@ -1679,12 +1679,12 @@ class CyclesPreferences(bpy.types.AddonPreferences): import sys if sys.platform[:3] == "win": driver_version = "21.Q4" - col.label(text="Requires AMD GPU with RDNA architecture", icon='BLANK1') + col.label(text="Requires AMD GPU with Vega or RDNA architecture", icon='BLANK1') col.label(text=iface_("and AMD Radeon Pro %s driver or newer") % driver_version, icon='BLANK1', translate=False) elif sys.platform.startswith("linux"): driver_version = "22.10" - col.label(text="Requires AMD GPU with RDNA architecture", icon='BLANK1') + col.label(text="Requires AMD GPU with Vega or RDNA architecture", icon='BLANK1') col.label(text=iface_("and AMD driver version %s or newer") % driver_version, icon='BLANK1', translate=False) elif device_type == 'ONEAPI': diff --git a/intern/cycles/device/hip/util.h b/intern/cycles/device/hip/util.h index c8b4b67ded8b..4e4906171d1b 100644 --- a/intern/cycles/device/hip/util.h +++ b/intern/cycles/device/hip/util.h @@ -51,7 +51,7 @@ static inline bool hipSupportsDevice(const int hipDevId) hipDeviceGetAttribute(&major, hipDeviceAttributeComputeCapabilityMajor, hipDevId); hipDeviceGetAttribute(&minor, hipDeviceAttributeComputeCapabilityMinor, hipDevId); - return (major >= 10); + return (major >= 9); } CCL_NAMESPACE_END -- 2.30.2 From da0eef4eabb5772b8596a06ff8140a41ca11432a Mon Sep 17 00:00:00 2001 From: Sebastian Parborg Date: Mon, 13 Feb 2023 23:04:02 +0100 Subject: [PATCH 067/182] Cycles: Add support for CUDA 12 CUDA 12 no longer supports sm_3*, in particular 35 and sm_37, so skip building those if only CUDA 12+ is available. Pull Request #104713 --- intern/cycles/kernel/CMakeLists.txt | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/intern/cycles/kernel/CMakeLists.txt b/intern/cycles/kernel/CMakeLists.txt index 78bd71988c04..431b520b2823 100644 --- a/intern/cycles/kernel/CMakeLists.txt +++ b/intern/cycles/kernel/CMakeLists.txt @@ -412,11 +412,12 @@ if(WITH_CYCLES_CUDA_BINARIES) # warn for other versions if((CUDA_VERSION STREQUAL "101") OR (CUDA_VERSION STREQUAL "102") OR - (CUDA_VERSION_MAJOR STREQUAL "11")) + (CUDA_VERSION_MAJOR STREQUAL "11") OR + (CUDA_VERSION_MAJOR STREQUAL "12")) else() message(WARNING "CUDA version ${CUDA_VERSION_MAJOR}.${CUDA_VERSION_MINOR} detected, " - "build may succeed but only CUDA 11, 10.2 and 10.1 have been tested") + "build may succeed but only CUDA 12, 11, 10.2 and 10.1 have been tested") endif() # build for each arch @@ -514,6 +515,16 @@ if(WITH_CYCLES_CUDA_BINARIES) else() message(STATUS "CUDA binaries for ${arch} require CUDA 10 or earlier, skipped.") endif() + elseif(${arch} MATCHES ".*_3.") + if(DEFINED CUDA11_NVCC_EXECUTABLE) + set(cuda_nvcc_executable ${CUDA11_NVCC_EXECUTABLE}) + set(cuda_toolkit_root_dir ${CUDA11_TOOLKIT_ROOT_DIR}) + elseif("${CUDA_VERSION}" LESS 120) # Support for sm_35, sm_37 was removed in CUDA 12 + set(cuda_nvcc_executable ${CUDA_NVCC_EXECUTABLE}) + set(cuda_toolkit_root_dir ${CUDA_TOOLKIT_ROOT_DIR}) + else() + message(STATUS "CUDA binaries for ${arch} require CUDA 11 or earlier, skipped.") + endif() elseif(${arch} MATCHES ".*_7." AND "${CUDA_VERSION}" LESS 100) message(STATUS "CUDA binaries for ${arch} require CUDA 10.0+, skipped.") elseif(${arch} MATCHES ".*_8.") -- 2.30.2 From a62534fd48b239c32c9d2c478d661441710fa66d Mon Sep 17 00:00:00 2001 From: Lukas Stockner Date: Mon, 13 Feb 2023 23:32:53 +0100 Subject: [PATCH 068/182] Revert "Cycles: Clean up the Principled Hair BSDF implementation" This reverts commit cb77865c21a0a91f25a26011559d1ddab87c2c73. Appears to break HIP compilation, so delay until 3.6. --- intern/cycles/kernel/closure/bsdf.h | 23 +- .../kernel/closure/bsdf_hair_principled.h | 405 ++++++++++-------- intern/cycles/kernel/osl/closures_setup.h | 6 +- intern/cycles/kernel/osl/closures_template.h | 6 +- .../osl/shaders/node_principled_hair_bsdf.osl | 4 +- intern/cycles/kernel/svm/closure.h | 8 +- 6 files changed, 246 insertions(+), 206 deletions(-) diff --git a/intern/cycles/kernel/closure/bsdf.h b/intern/cycles/kernel/closure/bsdf.h index a1227431ca2c..e7754bde7c5a 100644 --- a/intern/cycles/kernel/closure/bsdf.h +++ b/intern/cycles/kernel/closure/bsdf.h @@ -276,6 +276,10 @@ ccl_device_inline void bsdf_roughness_eta(const KernelGlobals kg, ccl_private float2 *roughness, ccl_private float *eta) { +#ifdef __SVM__ + bool refractive = false; + float alpha = 1.0f; +#endif switch (sc->type) { case CLOSURE_BSDF_DIFFUSE_ID: *roughness = one_float2(); @@ -287,13 +291,11 @@ ccl_device_inline void bsdf_roughness_eta(const KernelGlobals kg, *eta = 1.0f; break; # ifdef __OSL__ - case CLOSURE_BSDF_PHONG_RAMP_ID: { - ccl_private const PhongRampBsdf *bsdf = (ccl_private const PhongRampBsdf *)sc; - float alpha = phong_ramp_exponent_to_roughness(bsdf->exponent); + case CLOSURE_BSDF_PHONG_RAMP_ID: + alpha = phong_ramp_exponent_to_roughness(((ccl_private const PhongRampBsdf *)sc)->exponent); *roughness = make_float2(alpha, alpha); *eta = 1.0f; break; - } case CLOSURE_BSDF_DIFFUSE_RAMP_ID: *roughness = one_float2(); *eta = 1.0f; @@ -326,7 +328,7 @@ ccl_device_inline void bsdf_roughness_eta(const KernelGlobals kg, case CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID: { ccl_private const MicrofacetBsdf *bsdf = (ccl_private const MicrofacetBsdf *)sc; *roughness = make_float2(bsdf->alpha_x, bsdf->alpha_y); - const bool refractive = bsdf->type == CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID; + refractive = bsdf->type == CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID; *eta = refractive ? 1.0f / bsdf->ior : bsdf->ior; break; } @@ -348,7 +350,7 @@ ccl_device_inline void bsdf_roughness_eta(const KernelGlobals kg, case CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID: { ccl_private const MicrofacetBsdf *bsdf = (ccl_private const MicrofacetBsdf *)sc; *roughness = make_float2(bsdf->alpha_x, bsdf->alpha_y); - const bool refractive = bsdf->type == CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID; + refractive = bsdf->type == CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID; *eta = refractive ? 1.0f / bsdf->ior : bsdf->ior; } break; case CLOSURE_BSDF_ASHIKHMIN_SHIRLEY_ID: { @@ -380,12 +382,11 @@ ccl_device_inline void bsdf_roughness_eta(const KernelGlobals kg, ((ccl_private HairBsdf *)sc)->roughness2); *eta = 1.0f; break; - case CLOSURE_BSDF_HAIR_PRINCIPLED_ID: { - ccl_private const PrincipledHairBSDF *bsdf = (ccl_private const PrincipledHairBSDF *)sc; - *roughness = make_float2(bsdf->v_R, bsdf->v_R); - *eta = bsdf->eta; + case CLOSURE_BSDF_HAIR_PRINCIPLED_ID: + alpha = ((ccl_private PrincipledHairBSDF *)sc)->m0_roughness; + *roughness = make_float2(alpha, alpha); + *eta = ((ccl_private PrincipledHairBSDF *)sc)->eta; break; - } case CLOSURE_BSDF_PRINCIPLED_DIFFUSE_ID: *roughness = one_float2(); *eta = 1.0f; diff --git a/intern/cycles/kernel/closure/bsdf_hair_principled.h b/intern/cycles/kernel/closure/bsdf_hair_principled.h index 0aa2c2c76f3c..f7cf3b716f64 100644 --- a/intern/cycles/kernel/closure/bsdf_hair_principled.h +++ b/intern/cycles/kernel/closure/bsdf_hair_principled.h @@ -13,11 +13,7 @@ CCL_NAMESPACE_BEGIN typedef struct PrincipledHairExtra { /* Geometry data. */ - float3 Y, Z; - float gamma_o, gamma_t; - /* Precomputed Transmission and Fresnel term */ - Spectrum T; - float f; + float4 geom; } PrincipledHairExtra; typedef struct PrincipledHairBSDF { @@ -25,16 +21,16 @@ typedef struct PrincipledHairBSDF { /* Absorption coefficient. */ Spectrum sigma; - /* Variance of the underlying logistic distribution, based on longitudinal roughness. */ + /* Variance of the underlying logistic distribution. */ float v; - /* Scale factor of the underlying logistic distribution, based on azimuthal roughness. */ + /* Scale factor of the underlying logistic distribution. */ float s; - /* Alternative value for v, used for the R lobe. */ - float v_R; /* Cuticle tilt angle. */ float alpha; /* IOR. */ float eta; + /* Effective variance for the diffuse bounce only. */ + float m0_roughness; /* Extra closure. */ ccl_private PrincipledHairExtra *extra; @@ -135,9 +131,6 @@ ccl_device_inline float sample_trimmed_logistic(float u, float s) ccl_device_inline float azimuthal_scattering( float phi, int p, float s, float gamma_o, float gamma_t) { - if (p == 3) { - return M_1_2PI_F; - } float phi_o = wrap_angle(phi - delta_phi(p, gamma_o, gamma_t)); float val = trimmed_logistic(phi_o, s); return val; @@ -162,45 +155,27 @@ ccl_device_inline float longitudinal_scattering( } } -ccl_device_forceinline float hair_get_lobe_v(const ccl_private PrincipledHairBSDF *bsdf, - const int lobe) -{ - if (lobe == 0) { - return bsdf->v_R; - } - else if (lobe == 1) { - return 0.25f * bsdf->v; - } - else { - return 4.0f * bsdf->v; - } -} - #ifdef __HAIR__ /* Set up the hair closure. */ ccl_device int bsdf_principled_hair_setup(ccl_private ShaderData *sd, - ccl_private PrincipledHairBSDF *bsdf, - float u_rough, - float u_coat_rough, - float v_rough) + ccl_private PrincipledHairBSDF *bsdf) { - u_rough = clamp(u_rough, 0.001f, 1.0f); - v_rough = clamp(v_rough, 0.001f, 1.0f); - /* u_coat_rough is a multiplier that modifies u_rough for the R lobe. */ - float u_R_roughness = clamp(u_coat_rough * u_rough, 0.001f, 1.0f); - bsdf->type = CLOSURE_BSDF_HAIR_PRINCIPLED_ID; + bsdf->v = clamp(bsdf->v, 0.001f, 1.0f); + bsdf->s = clamp(bsdf->s, 0.001f, 1.0f); + /* Apply Primary Reflection Roughness modifier. */ + bsdf->m0_roughness = clamp(bsdf->m0_roughness * bsdf->v, 0.001f, 1.0f); - /* Map from the azimuthal and the two longitudinal roughnesses to variance and scale factor. */ - bsdf->v = sqr(0.726f * u_rough + 0.812f * sqr(u_rough) + 3.700f * pow20(u_rough)); - bsdf->v_R = sqr(0.726f * u_R_roughness + 0.812f * sqr(u_R_roughness) + - 3.700f * pow20(u_R_roughness)); - bsdf->s = (0.265f * v_rough + 1.194f * sqr(v_rough) + 5.372f * pow22(v_rough)) * M_SQRT_PI_8_F; + /* Map from roughness_u and roughness_v to variance and scale factor. */ + bsdf->v = sqr(0.726f * bsdf->v + 0.812f * sqr(bsdf->v) + 3.700f * pow20(bsdf->v)); + bsdf->s = (0.265f * bsdf->s + 1.194f * sqr(bsdf->s) + 5.372f * pow22(bsdf->s)) * M_SQRT_PI_8_F; + bsdf->m0_roughness = sqr(0.726f * bsdf->m0_roughness + 0.812f * sqr(bsdf->m0_roughness) + + 3.700f * pow20(bsdf->m0_roughness)); /* Compute local frame, aligned to curve tangent and ray direction. */ float3 X = safe_normalize(sd->dPdu); - bsdf->extra->Y = safe_normalize(cross(X, sd->wi)); - bsdf->extra->Z = safe_normalize(cross(X, bsdf->extra->Y)); + float3 Y = safe_normalize(cross(X, sd->wi)); + float3 Z = safe_normalize(cross(X, Y)); /* h -1..0..1 means the rays goes from grazing the hair, to hitting it at * the center, to grazing the other edge. This is the sine of the angle @@ -208,28 +183,13 @@ ccl_device int bsdf_principled_hair_setup(ccl_private ShaderData *sd, /* TODO: we convert this value to a cosine later and discard the sign, so * we could probably save some operations. */ - float h = (sd->type & PRIMITIVE_CURVE_RIBBON) ? -sd->v : dot(cross(sd->Ng, X), bsdf->extra->Z); + float h = (sd->type & PRIMITIVE_CURVE_RIBBON) ? -sd->v : dot(cross(sd->Ng, X), Z); kernel_assert(fabsf(h) < 1.0f + 1e-4f); kernel_assert(isfinite_safe(Y)); kernel_assert(isfinite_safe(h)); - const float sin_theta_o = dot(sd->wi, X); - const float cos_theta_o = cos_from_sin(sin_theta_o); - - const float sin_theta_t = sin_theta_o / bsdf->eta; - const float cos_theta_t = cos_from_sin(sin_theta_t); - - const float sin_gamma_o = h; - const float cos_gamma_o = cos_from_sin(sin_gamma_o); - bsdf->extra->gamma_o = safe_asinf(sin_gamma_o); - - const float sin_gamma_t = sin_gamma_o * cos_theta_o / sqrtf(sqr(bsdf->eta) - sqr(sin_theta_o)); - const float cos_gamma_t = cos_from_sin(sin_gamma_t); - bsdf->extra->gamma_t = safe_asinf(sin_gamma_t); - - bsdf->extra->T = exp(-bsdf->sigma * (2.0f * cos_gamma_t / cos_theta_t)); - bsdf->extra->f = fresnel_dielectric_cos(cos_theta_o * cos_gamma_o, bsdf->eta); + bsdf->extra->geom = make_float4(Y.x, Y.y, Y.z, h); return SD_BSDF | SD_BSDF_HAS_EVAL | SD_BSDF_NEEDS_LCG | SD_BSDF_HAS_TRANSMISSION; } @@ -238,35 +198,35 @@ ccl_device int bsdf_principled_hair_setup(ccl_private ShaderData *sd, /* Given the Fresnel term and transmittance, generate the attenuation terms for each bounce. */ ccl_device_inline void hair_attenuation( - KernelGlobals kg, float f, Spectrum T, ccl_private Spectrum *Ap, ccl_private float *lobe_pdf) + KernelGlobals kg, float f, Spectrum T, ccl_private Spectrum *Ap, ccl_private float *Ap_energy) { /* Primary specular (R). */ Ap[0] = make_spectrum(f); - lobe_pdf[0] = f; + Ap_energy[0] = f; /* Transmission (TT). */ Spectrum col = sqr(1.0f - f) * T; Ap[1] = col; - lobe_pdf[1] = spectrum_to_gray(kg, col); + Ap_energy[1] = spectrum_to_gray(kg, col); /* Secondary specular (TRT). */ col *= T * f; Ap[2] = col; - lobe_pdf[2] = spectrum_to_gray(kg, col); + Ap_energy[2] = spectrum_to_gray(kg, col); /* Residual component (TRRT+). */ col *= safe_divide(T * f, one_spectrum() - T * f); Ap[3] = col; - lobe_pdf[3] = spectrum_to_gray(kg, col); + Ap_energy[3] = spectrum_to_gray(kg, col); /* Normalize sampling weights. */ - float totweight = lobe_pdf[0] + lobe_pdf[1] + lobe_pdf[2] + lobe_pdf[3]; + float totweight = Ap_energy[0] + Ap_energy[1] + Ap_energy[2] + Ap_energy[3]; float fac = safe_divide(1.0f, totweight); - lobe_pdf[0] *= fac; - lobe_pdf[1] *= fac; - lobe_pdf[2] *= fac; - lobe_pdf[3] *= fac; + Ap_energy[0] *= fac; + Ap_energy[1] *= fac; + Ap_energy[2] *= fac; + Ap_energy[3] *= fac; } /* Given the tilt angle, generate the rotated theta_i for the different bounces. */ @@ -288,120 +248,91 @@ ccl_device_inline void hair_alpha_angles(float sin_theta_i, angles[3] = fabsf(cos_theta_i * cos_1alpha + sin_theta_i * sin_1alpha); angles[4] = sin_theta_i * cos_4alpha - cos_theta_i * sin_4alpha; angles[5] = fabsf(cos_theta_i * cos_4alpha + sin_theta_i * sin_4alpha); - angles[6] = sin_theta_i; - angles[7] = cos_theta_i; -} - -/* Since most of the implementation is the same between sampling and evaluation, - * this shared function implements both. - * For evaluation, wo is an input, and randu/randv are ignored. - * For sampling, wo is an output, and randu/randv are used to pick it. - */ -template -ccl_device int bsdf_principled_hair_impl(KernelGlobals kg, - ccl_private const PrincipledHairBSDF *bsdf, - ccl_private ShaderData *sd, - ccl_private float3 *wo, - ccl_private Spectrum *F, - ccl_private float *pdf, - float randu, - float randv) -{ - const float3 X = safe_normalize(sd->dPdu); - const float3 Y = bsdf->extra->Y; - const float3 Z = bsdf->extra->Z; - kernel_assert(fabsf(dot(X, Y)) < 1e-3f); - - const float gamma_o = bsdf->extra->gamma_o; - const float gamma_t = bsdf->extra->gamma_t; - - const float3 local_O = make_float3(dot(sd->wi, X), dot(sd->wi, Y), dot(sd->wi, Z)); - const float sin_theta_o = local_O.x; - const float cos_theta_o = cos_from_sin(sin_theta_o); - const float phi_o = atan2f(local_O.z, local_O.y); - - Spectrum Ap[4]; - float lobe_pdf[4]; - hair_attenuation(kg, bsdf->extra->f, bsdf->extra->T, Ap, lobe_pdf); - - float sin_theta_i, cos_theta_i, phi; - int sampled_p = 0; - if (do_sample) { - /* Pick lobe for sampline */ - for (; sampled_p < 3; sampled_p++) { - if (randu < lobe_pdf[sampled_p]) { - break; - } - randu -= lobe_pdf[sampled_p]; - } - - /* Sample incoming direction */ - float v = hair_get_lobe_v(bsdf, sampled_p); - float randw = lcg_step_float(&sd->lcg_state), randx = lcg_step_float(&sd->lcg_state); - randw = max(randw, 1e-5f); - const float fac = 1.0f + v * logf(randw + (1.0f - randw) * expf(-2.0f / v)); - sin_theta_i = -fac * sin_theta_o + cos_from_sin(fac) * cosf(M_2PI_F * randx) * cos_theta_o; - cos_theta_i = cos_from_sin(sin_theta_i); - - if (sampled_p < 3) { - float angles[8]; - hair_alpha_angles(sin_theta_i, cos_theta_i, -bsdf->alpha, angles); - sin_theta_i = angles[2 * sampled_p]; - cos_theta_i = angles[2 * sampled_p + 1]; - - phi = delta_phi(sampled_p, gamma_o, gamma_t) + sample_trimmed_logistic(randv, bsdf->s); - } - else { - phi = M_2PI_F * randv; - } - - const float phi_i = phi_o + phi; - *wo = X * sin_theta_i + Y * cos_theta_i * cosf(phi_i) + Z * cos_theta_i * sinf(phi_i); - } - else { - const float3 local_I = make_float3(dot(*wo, X), dot(*wo, Y), dot(*wo, Z)); - - sin_theta_i = local_I.x; - cos_theta_i = cos_from_sin(sin_theta_i); - - const float phi_i = atan2f(local_I.z, local_I.y); - phi = phi_i - phi_o; - } - - /* Evaluate throughput. */ - float angles[8]; - hair_alpha_angles(sin_theta_i, cos_theta_i, bsdf->alpha, angles); - - *F = zero_spectrum(); - *pdf = 0.0f; - - for (int p = 0; p < 4; p++) { - const float Mp = longitudinal_scattering( - angles[2 * p], angles[2 * p + 1], sin_theta_o, cos_theta_o, hair_get_lobe_v(bsdf, p)); - const float Np = azimuthal_scattering(phi, p, bsdf->s, gamma_o, gamma_t); - *F += Ap[p] * Mp * Np; - *pdf += lobe_pdf[p] * Mp * Np; - kernel_assert(isfinite_safe(*F) && isfinite_safe(*pdf)); - } - - return sampled_p; } +/* Evaluation function for our shader. */ ccl_device Spectrum bsdf_principled_hair_eval(KernelGlobals kg, - ccl_private ShaderData *sd, + ccl_private const ShaderData *sd, ccl_private const ShaderClosure *sc, - float3 wo, + const float3 wo, ccl_private float *pdf) { kernel_assert(isfinite_safe(sd->P) && isfinite_safe(sd->ray_length)); ccl_private const PrincipledHairBSDF *bsdf = (ccl_private const PrincipledHairBSDF *)sc; + const float3 Y = float4_to_float3(bsdf->extra->geom); - Spectrum eval; - bsdf_principled_hair_impl(kg, bsdf, sd, &wo, &eval, pdf, 0.0f, 0.0f); - return eval; + const float3 X = safe_normalize(sd->dPdu); + kernel_assert(fabsf(dot(X, Y)) < 1e-3f); + const float3 Z = safe_normalize(cross(X, Y)); + + /* local_I is the illumination direction. */ + const float3 local_O = make_float3(dot(sd->wi, X), dot(sd->wi, Y), dot(sd->wi, Z)); + const float3 local_I = make_float3(dot(wo, X), dot(wo, Y), dot(wo, Z)); + + const float sin_theta_o = local_O.x; + const float cos_theta_o = cos_from_sin(sin_theta_o); + const float phi_o = atan2f(local_O.z, local_O.y); + + const float sin_theta_t = sin_theta_o / bsdf->eta; + const float cos_theta_t = cos_from_sin(sin_theta_t); + + const float sin_gamma_o = bsdf->extra->geom.w; + const float cos_gamma_o = cos_from_sin(sin_gamma_o); + const float gamma_o = safe_asinf(sin_gamma_o); + + const float sin_gamma_t = sin_gamma_o * cos_theta_o / sqrtf(sqr(bsdf->eta) - sqr(sin_theta_o)); + const float cos_gamma_t = cos_from_sin(sin_gamma_t); + const float gamma_t = safe_asinf(sin_gamma_t); + + const Spectrum T = exp(-bsdf->sigma * (2.0f * cos_gamma_t / cos_theta_t)); + Spectrum Ap[4]; + float Ap_energy[4]; + hair_attenuation( + kg, fresnel_dielectric_cos(cos_theta_o * cos_gamma_o, bsdf->eta), T, Ap, Ap_energy); + + const float sin_theta_i = local_I.x; + const float cos_theta_i = cos_from_sin(sin_theta_i); + const float phi_i = atan2f(local_I.z, local_I.y); + + const float phi = phi_i - phi_o; + + float angles[6]; + hair_alpha_angles(sin_theta_i, cos_theta_i, bsdf->alpha, angles); + + Spectrum F = zero_spectrum(); + float F_energy = 0.0f; + + /* Primary specular (R), Transmission (TT) and Secondary Specular (TRT). */ + for (int i = 0; i < 3; i++) { + const float Mp = longitudinal_scattering(angles[2 * i], + angles[2 * i + 1], + sin_theta_o, + cos_theta_o, + (i == 0) ? bsdf->m0_roughness : + (i == 1) ? 0.25f * bsdf->v : + 4.0f * bsdf->v); + const float Np = azimuthal_scattering(phi, i, bsdf->s, gamma_o, gamma_t); + F += Ap[i] * Mp * Np; + F_energy += Ap_energy[i] * Mp * Np; + kernel_assert(isfinite_safe(F) && isfinite_safe(F_energy)); + } + + /* Residual component (TRRT+). */ + { + const float Mp = longitudinal_scattering( + sin_theta_i, cos_theta_i, sin_theta_o, cos_theta_o, 4.0f * bsdf->v); + const float Np = M_1_2PI_F; + F += Ap[3] * Mp * Np; + F_energy += Ap_energy[3] * Mp * Np; + kernel_assert(isfinite_safe(F) && isfinite_safe(F_energy)); + } + + *pdf = F_energy; + return F; } +/* Sampling function for the hair shader. */ ccl_device int bsdf_principled_hair_sample(KernelGlobals kg, ccl_private const ShaderClosure *sc, ccl_private ShaderData *sd, @@ -413,13 +344,118 @@ ccl_device int bsdf_principled_hair_sample(KernelGlobals kg, ccl_private float2 *sampled_roughness, ccl_private float *eta) { - ccl_private const PrincipledHairBSDF *bsdf = (ccl_private const PrincipledHairBSDF *)sc; + ccl_private PrincipledHairBSDF *bsdf = (ccl_private PrincipledHairBSDF *)sc; - int p = bsdf_principled_hair_impl(kg, bsdf, sd, wo, eval, pdf, randu, randv); - - *sampled_roughness = make_float2(bsdf->v_R, bsdf->v_R); + *sampled_roughness = make_float2(bsdf->m0_roughness, bsdf->m0_roughness); *eta = bsdf->eta; + const float3 Y = float4_to_float3(bsdf->extra->geom); + + const float3 X = safe_normalize(sd->dPdu); + kernel_assert(fabsf(dot(X, Y)) < 1e-3f); + const float3 Z = safe_normalize(cross(X, Y)); + + const float3 local_O = make_float3(dot(sd->wi, X), dot(sd->wi, Y), dot(sd->wi, Z)); + + float2 u[2]; + u[0] = make_float2(randu, randv); + u[1].x = lcg_step_float(&sd->lcg_state); + u[1].y = lcg_step_float(&sd->lcg_state); + + const float sin_theta_o = local_O.x; + const float cos_theta_o = cos_from_sin(sin_theta_o); + const float phi_o = atan2f(local_O.z, local_O.y); + + const float sin_theta_t = sin_theta_o / bsdf->eta; + const float cos_theta_t = cos_from_sin(sin_theta_t); + + const float sin_gamma_o = bsdf->extra->geom.w; + const float cos_gamma_o = cos_from_sin(sin_gamma_o); + const float gamma_o = safe_asinf(sin_gamma_o); + + const float sin_gamma_t = sin_gamma_o * cos_theta_o / sqrtf(sqr(bsdf->eta) - sqr(sin_theta_o)); + const float cos_gamma_t = cos_from_sin(sin_gamma_t); + const float gamma_t = safe_asinf(sin_gamma_t); + + const Spectrum T = exp(-bsdf->sigma * (2.0f * cos_gamma_t / cos_theta_t)); + Spectrum Ap[4]; + float Ap_energy[4]; + hair_attenuation( + kg, fresnel_dielectric_cos(cos_theta_o * cos_gamma_o, bsdf->eta), T, Ap, Ap_energy); + + int p = 0; + for (; p < 3; p++) { + if (u[0].x < Ap_energy[p]) { + break; + } + u[0].x -= Ap_energy[p]; + } + + float v = bsdf->v; + if (p == 1) { + v *= 0.25f; + } + if (p >= 2) { + v *= 4.0f; + } + + u[1].x = max(u[1].x, 1e-5f); + const float fac = 1.0f + v * logf(u[1].x + (1.0f - u[1].x) * expf(-2.0f / v)); + float sin_theta_i = -fac * sin_theta_o + + cos_from_sin(fac) * cosf(M_2PI_F * u[1].y) * cos_theta_o; + float cos_theta_i = cos_from_sin(sin_theta_i); + + float angles[6]; + if (p < 3) { + hair_alpha_angles(sin_theta_i, cos_theta_i, -bsdf->alpha, angles); + sin_theta_i = angles[2 * p]; + cos_theta_i = angles[2 * p + 1]; + } + + float phi; + if (p < 3) { + phi = delta_phi(p, gamma_o, gamma_t) + sample_trimmed_logistic(u[0].y, bsdf->s); + } + else { + phi = M_2PI_F * u[0].y; + } + const float phi_i = phi_o + phi; + + hair_alpha_angles(sin_theta_i, cos_theta_i, bsdf->alpha, angles); + + Spectrum F = zero_spectrum(); + float F_energy = 0.0f; + + /* Primary specular (R), Transmission (TT) and Secondary Specular (TRT). */ + for (int i = 0; i < 3; i++) { + const float Mp = longitudinal_scattering(angles[2 * i], + angles[2 * i + 1], + sin_theta_o, + cos_theta_o, + (i == 0) ? bsdf->m0_roughness : + (i == 1) ? 0.25f * bsdf->v : + 4.0f * bsdf->v); + const float Np = azimuthal_scattering(phi, i, bsdf->s, gamma_o, gamma_t); + F += Ap[i] * Mp * Np; + F_energy += Ap_energy[i] * Mp * Np; + kernel_assert(isfinite_safe(F) && isfinite_safe(F_energy)); + } + + /* Residual component (TRRT+). */ + { + const float Mp = longitudinal_scattering( + sin_theta_i, cos_theta_i, sin_theta_o, cos_theta_o, 4.0f * bsdf->v); + const float Np = M_1_2PI_F; + F += Ap[3] * Mp * Np; + F_energy += Ap_energy[3] * Mp * Np; + kernel_assert(isfinite_safe(F) && isfinite_safe(F_energy)); + } + + *eval = F; + *pdf = F_energy; + + *wo = X * sin_theta_i + Y * cos_theta_i * cosf(phi_i) + Z * cos_theta_i * sinf(phi_i); + return LABEL_GLOSSY | ((p == 0) ? LABEL_REFLECT : LABEL_TRANSMIT); } @@ -430,30 +466,29 @@ ccl_device void bsdf_principled_hair_blur(ccl_private ShaderClosure *sc, float r bsdf->v = fmaxf(roughness, bsdf->v); bsdf->s = fmaxf(roughness, bsdf->s); - bsdf->v_R = fmaxf(roughness, bsdf->v_R); + bsdf->m0_roughness = fmaxf(roughness, bsdf->m0_roughness); } /* Hair Albedo */ -ccl_device_inline float bsdf_principled_hair_albedo_roughness_scale(const float u_rough) +ccl_device_inline float bsdf_principled_hair_albedo_roughness_scale( + const float azimuthal_roughness) { - const float x = u_rough; + const float x = azimuthal_roughness; return (((((0.245f * x) + 5.574f) * x - 10.73f) * x + 2.532f) * x - 0.215f) * x + 5.969f; } ccl_device Spectrum bsdf_principled_hair_albedo(ccl_private const ShaderClosure *sc) { ccl_private PrincipledHairBSDF *bsdf = (ccl_private PrincipledHairBSDF *)sc; - /* This is simply the sum of the four Ap terms in hair_attenuation. */ - const float3 T = bsdf->extra->T; - const float f = bsdf->extra->f; - return safe_divide(T * (1.0f - 2.0f * f) + make_spectrum(f), one_spectrum() - f * T); + return exp(-sqrt(bsdf->sigma) * bsdf_principled_hair_albedo_roughness_scale(bsdf->v)); } -ccl_device_inline Spectrum bsdf_principled_hair_sigma_from_reflectance(const Spectrum color, - const float u_rough) +ccl_device_inline Spectrum +bsdf_principled_hair_sigma_from_reflectance(const Spectrum color, const float azimuthal_roughness) { - const Spectrum sigma = log(color) / bsdf_principled_hair_albedo_roughness_scale(u_rough); + const Spectrum sigma = log(color) / + bsdf_principled_hair_albedo_roughness_scale(azimuthal_roughness); return sigma * sigma; } diff --git a/intern/cycles/kernel/osl/closures_setup.h b/intern/cycles/kernel/osl/closures_setup.h index 8057adf68df6..5ea8f0804100 100644 --- a/intern/cycles/kernel/osl/closures_setup.h +++ b/intern/cycles/kernel/osl/closures_setup.h @@ -1078,13 +1078,15 @@ ccl_device void osl_closure_principled_hair_setup(KernelGlobals kg, bsdf->N = ensure_valid_reflection(sd->Ng, sd->wi, closure->N); bsdf->sigma = closure->sigma; + bsdf->v = closure->v; + bsdf->s = closure->s; bsdf->alpha = closure->alpha; bsdf->eta = closure->eta; + bsdf->m0_roughness = closure->m0_roughness; bsdf->extra = extra; - sd->flag |= bsdf_principled_hair_setup( - sd, bsdf, closure->u_roughness, closure->coat_roughness, closure->v_roughness); + sd->flag |= bsdf_principled_hair_setup(sd, bsdf); #endif } diff --git a/intern/cycles/kernel/osl/closures_template.h b/intern/cycles/kernel/osl/closures_template.h index 164988754617..b9e9b52dcf82 100644 --- a/intern/cycles/kernel/osl/closures_template.h +++ b/intern/cycles/kernel/osl/closures_template.h @@ -238,9 +238,9 @@ OSL_CLOSURE_STRUCT_END(HairTransmission, hair_transmission) OSL_CLOSURE_STRUCT_BEGIN(PrincipledHair, principled_hair) OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, VECTOR, packed_float3, N, NULL) OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, VECTOR, packed_float3, sigma, NULL) - OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, FLOAT, float, u_roughness, NULL) - OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, FLOAT, float, v_roughness, NULL) - OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, FLOAT, float, coat_roughness, NULL) + OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, FLOAT, float, v, NULL) + OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, FLOAT, float, s, NULL) + OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, FLOAT, float, m0_roughness, NULL) OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, FLOAT, float, alpha, NULL) OSL_CLOSURE_STRUCT_MEMBER(PrincipledHair, FLOAT, float, eta, NULL) OSL_CLOSURE_STRUCT_END(PrincipledHair, principled_hair) diff --git a/intern/cycles/kernel/osl/shaders/node_principled_hair_bsdf.osl b/intern/cycles/kernel/osl/shaders/node_principled_hair_bsdf.osl index 66f35436a291..cf8c06080fe9 100644 --- a/intern/cycles/kernel/osl/shaders/node_principled_hair_bsdf.osl +++ b/intern/cycles/kernel/osl/shaders/node_principled_hair_bsdf.osl @@ -53,7 +53,7 @@ shader node_principled_hair_bsdf(color Color = color(0.017513, 0.005763, 0.00205 /* Compute roughness. */ float factor_random_roughness = 1.0 + 2.0 * (random_value - 0.5) * RandomRoughness; - float coat_roughness = 1.0 - clamp(Coat, 0.0, 1.0); + float m0_roughness = 1.0 - clamp(Coat, 0.0, 1.0); float roughness = Roughness * factor_random_roughness; float radial_roughness = RadialRoughness * factor_random_roughness; @@ -88,5 +88,5 @@ shader node_principled_hair_bsdf(color Color = color(0.017513, 0.005763, 0.00205 sigma = sigma_from_concentration(0.0, 0.8054375); } - BSDF = principled_hair(Normal, sigma, roughness, radial_roughness, coat_roughness, Offset, IOR); + BSDF = principled_hair(Normal, sigma, roughness, radial_roughness, m0_roughness, Offset, IOR); } diff --git a/intern/cycles/kernel/svm/closure.h b/intern/cycles/kernel/svm/closure.h index b11e1f7d9333..f52e13e37d8f 100644 --- a/intern/cycles/kernel/svm/closure.h +++ b/intern/cycles/kernel/svm/closure.h @@ -802,9 +802,12 @@ ccl_device_noinline int svm_node_closure_bsdf(KernelGlobals kg, /* Remap Coat value to [0, 100]% of Roughness. */ float coat = stack_load_float_default(stack, coat_ofs, data_node2.y); - float coat_roughness = 1.0f - clamp(coat, 0.0f, 1.0f); + float m0_roughness = 1.0f - clamp(coat, 0.0f, 1.0f); bsdf->N = N; + bsdf->v = roughness; + bsdf->s = radial_roughness; + bsdf->m0_roughness = m0_roughness; bsdf->alpha = alpha; bsdf->eta = ior; bsdf->extra = extra; @@ -857,8 +860,7 @@ ccl_device_noinline int svm_node_closure_bsdf(KernelGlobals kg, } } - sd->flag |= bsdf_principled_hair_setup( - sd, bsdf, roughness, coat_roughness, radial_roughness); + sd->flag |= bsdf_principled_hair_setup(sd, bsdf); } break; } -- 2.30.2 From d6bd80e0c153e6c013fa1e605fee2ca80d158a3f Mon Sep 17 00:00:00 2001 From: Erik Abrahamsson Date: Tue, 14 Feb 2023 10:29:40 +1100 Subject: [PATCH 069/182] Docs: improve online manual lookup time time Matching the RNA id's to the search pattern is slow because of the function `fnmatchcase`. This patch first checks the string prefix without any special characters used by fnmatch, if the `startswith` check fails, there is no need to check `fnmatchcase`. Before the optimization, an online manual lookup took about 400ms which is quite noticeable, with this patch applied it's under 10ms. Ref !104581. --- release/scripts/startup/bl_operators/wm.py | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py index 67858e53b621..25b26bdbf408 100644 --- a/release/scripts/startup/bl_operators/wm.py +++ b/release/scripts/startup/bl_operators/wm.py @@ -1249,7 +1249,31 @@ class WM_OT_doc_view_manual(Operator): # XXX, for some reason all RNA ID's are stored lowercase # Adding case into all ID's isn't worth the hassle so force lowercase. rna_id = rna_id.lower() + + # NOTE: `fnmatch` in Python is slow as it translate the string to a regular-expression + # which needs to be compiled (as of Python 3.11), this is slow enough to cause a noticeable + # delay when opening manual links (approaching half a second). + # + # Resolve by matching characters that have a special meaning to `fnmatch`. + # The characters that can occur as the first special character are `*?[`. + # If any of these are used we must let `fnmatch` run its own matching logic. + # However, in most cases a literal prefix is used making it considerably faster + # to do a simple `startswith` check before performing a full match. + # An alternative solution could be to use `fnmatch` from C which is significantly + # faster than Python's, see !104581 for details. + import re + re_match_non_special = re.compile(r"^[^?\*\[]+").match + for pattern, url_suffix in url_mapping: + + # Simple optimization, makes a big difference (over 50x speedup). + # Even when `non_special.end()` is zero (resulting in an empty-string), + # the `startswith` check succeeds so there is no need to check for an empty match. + non_special = re_match_non_special(pattern) + if non_special is None or not rna_id.startswith(pattern[:non_special.end()]): + continue + # End simple optimization. + if fnmatchcase(rna_id, pattern): if verbose: print(" match found: '%s' --> '%s'" % (pattern, url_suffix)) -- 2.30.2 From b79345d97eeec5b26cdd27671257ba0764c34609 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 14 Feb 2023 10:29:42 +1100 Subject: [PATCH 070/182] BLI_utildefines: add `^=` operator to ENUM_OPERATORS macro --- source/blender/blenlib/BLI_utildefines.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/blender/blenlib/BLI_utildefines.h b/source/blender/blenlib/BLI_utildefines.h index 5cc91a229446..e03bc7ba78af 100644 --- a/source/blender/blenlib/BLI_utildefines.h +++ b/source/blender/blenlib/BLI_utildefines.h @@ -806,6 +806,10 @@ extern bool BLI_memory_is_zero(const void *arr, size_t arr_size); { \ return a = (_enum_type)(uint64_t(a) & uint64_t(b)); \ } \ + inline _enum_type &operator^=(_enum_type &a, _enum_type b) \ + { \ + return a = (_enum_type)(uint64_t(a) ^ uint64_t(b)); \ + } \ } /* extern "C++" */ #else -- 2.30.2 From 0d09e56cce01831d7c0af05698045af551b33461 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 14 Feb 2023 10:29:44 +1100 Subject: [PATCH 071/182] Cleanup: use typed enum (eDirEntry_SelectFlag) where appropriate --- source/blender/editors/space_file/file_draw.c | 2 +- .../blender/editors/space_file/file_intern.h | 2 +- source/blender/editors/space_file/filelist.cc | 48 ++++++++++++------- source/blender/editors/space_file/filelist.h | 20 ++++---- source/blender/editors/space_file/filesel.cc | 2 +- source/blender/makesdna/DNA_space_types.h | 3 +- 6 files changed, 46 insertions(+), 31 deletions(-) diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index e85a6cbc0d4a..0cc188b47c00 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -986,7 +986,7 @@ void file_draw_list(const bContext *C, ARegion *region) UI_GetThemeColor4ubv(TH_TEXT, text_col); for (i = offset; (i < numfiles) && (i < offset + numfiles_layout); i++) { - uint file_selflag; + eDirEntry_SelectFlag file_selflag; const int padx = 0.1f * UI_UNIT_X; int icon_ofs = 0; diff --git a/source/blender/editors/space_file/file_intern.h b/source/blender/editors/space_file/file_intern.h index ec9c8be42e33..1e0f86e995d8 100644 --- a/source/blender/editors/space_file/file_intern.h +++ b/source/blender/editors/space_file/file_intern.h @@ -137,7 +137,7 @@ FileAttributeColumnType file_attribute_column_type_find_isect(const View2D *v2d, float file_string_width(const char *str); float file_font_pointsize(void); -void file_select_deselect_all(SpaceFile *sfile, uint flag); +void file_select_deselect_all(SpaceFile *sfile, eDirEntry_SelectFlag flag); int file_select_match(struct SpaceFile *sfile, const char *pattern, char *matched_file); int autocomplete_directory(struct bContext *C, char *str, void *arg_v); int autocomplete_file(struct bContext *C, char *str, void *arg_v); diff --git a/source/blender/editors/space_file/filelist.cc b/source/blender/editors/space_file/filelist.cc index 3a944f923084..caea344bc979 100644 --- a/source/blender/editors/space_file/filelist.cc +++ b/source/blender/editors/space_file/filelist.cc @@ -233,11 +233,15 @@ struct FileList { FileListEntryCache filelist_cache; - /* We need to keep those info outside of actual filelist items, + /** + * We need to keep those info outside of actual file-list items, * because those are no more persistent * (only generated on demand, and freed as soon as possible). * Persistent part (mere list of paths + stat info) * is kept as small as possible, and file-browser agnostic. + * + * - The key is a #FileDirEntry::uid + * - The value is an #eDirEntry_SelectFlag. */ GHash *selection_state; @@ -2737,13 +2741,13 @@ int filelist_needs_reading(FileList *filelist) uint filelist_entry_select_set(const FileList *filelist, const FileDirEntry *entry, FileSelType select, - uint flag, + const eDirEntry_SelectFlag flag, FileCheckType check) { /* Default nullptr pointer if not found is fine here! */ void **es_p = BLI_ghash_lookup_p(filelist->selection_state, POINTER_FROM_UINT(entry->uid)); - uint entry_flag = es_p ? POINTER_AS_UINT(*es_p) : 0; - const uint org_entry_flag = entry_flag; + eDirEntry_SelectFlag entry_flag = eDirEntry_SelectFlag(es_p ? POINTER_AS_UINT(*es_p) : 0); + const eDirEntry_SelectFlag org_entry_flag = entry_flag; BLI_assert(entry); BLI_assert(ELEM(check, CHECK_DIRS, CHECK_FILES, CHECK_ALL)); @@ -2782,8 +2786,11 @@ uint filelist_entry_select_set(const FileList *filelist, return entry_flag; } -void filelist_entry_select_index_set( - FileList *filelist, const int index, FileSelType select, uint flag, FileCheckType check) +void filelist_entry_select_index_set(FileList *filelist, + const int index, + FileSelType select, + const eDirEntry_SelectFlag flag, + FileCheckType check) { FileDirEntry *entry = filelist_file(filelist, index); @@ -2792,8 +2799,11 @@ void filelist_entry_select_index_set( } } -void filelist_entries_select_index_range_set( - FileList *filelist, FileSelection *sel, FileSelType select, uint flag, FileCheckType check) +void filelist_entries_select_index_range_set(FileList *filelist, + FileSelection *sel, + FileSelType select, + const eDirEntry_SelectFlag flag, + FileCheckType check) { /* select all valid files between first and last indicated */ if ((sel->first >= 0) && (sel->first < filelist->filelist.entries_filtered_num) && @@ -2805,7 +2815,9 @@ void filelist_entries_select_index_range_set( } } -uint filelist_entry_select_get(FileList *filelist, FileDirEntry *entry, FileCheckType check) +eDirEntry_SelectFlag filelist_entry_select_get(FileList *filelist, + FileDirEntry *entry, + FileCheckType check) { BLI_assert(entry); BLI_assert(ELEM(check, CHECK_DIRS, CHECK_FILES, CHECK_ALL)); @@ -2813,14 +2825,16 @@ uint filelist_entry_select_get(FileList *filelist, FileDirEntry *entry, FileChec if ((check == CHECK_ALL) || ((check == CHECK_DIRS) && (entry->typeflag & FILE_TYPE_DIR)) || ((check == CHECK_FILES) && !(entry->typeflag & FILE_TYPE_DIR))) { /* Default nullptr pointer if not found is fine here! */ - return POINTER_AS_UINT( - BLI_ghash_lookup(filelist->selection_state, POINTER_FROM_UINT(entry->uid))); + return eDirEntry_SelectFlag(POINTER_AS_UINT( + BLI_ghash_lookup(filelist->selection_state, POINTER_FROM_UINT(entry->uid)))); } - return 0; + return eDirEntry_SelectFlag(0); } -uint filelist_entry_select_index_get(FileList *filelist, const int index, FileCheckType check) +eDirEntry_SelectFlag filelist_entry_select_index_get(FileList *filelist, + const int index, + FileCheckType check) { FileDirEntry *entry = filelist_file(filelist, index); @@ -2828,7 +2842,7 @@ uint filelist_entry_select_index_get(FileList *filelist, const int index, FileCh return filelist_entry_select_get(filelist, entry, check); } - return 0; + return eDirEntry_SelectFlag(0); } bool filelist_entry_is_selected(FileList *filelist, const int index) @@ -2838,15 +2852,15 @@ bool filelist_entry_is_selected(FileList *filelist, const int index) /* BLI_ghash_lookup returns nullptr if not found, which gets mapped to 0, which gets mapped to * "not selected". */ - const uint selection_state = POINTER_AS_UINT( - BLI_ghash_lookup(filelist->selection_state, POINTER_FROM_UINT(intern_entry->uid))); + const eDirEntry_SelectFlag selection_state = eDirEntry_SelectFlag(POINTER_AS_UINT( + BLI_ghash_lookup(filelist->selection_state, POINTER_FROM_UINT(intern_entry->uid)))); return selection_state != 0; } void filelist_entry_parent_select_set(FileList *filelist, FileSelType select, - uint flag, + const eDirEntry_SelectFlag flag, FileCheckType check) { if ((filelist->filter_data.flags & FLF_HIDE_PARENT) == 0) { diff --git a/source/blender/editors/space_file/filelist.h b/source/blender/editors/space_file/filelist.h index e96ced3fa631..df0f82cf707d 100644 --- a/source/blender/editors/space_file/filelist.h +++ b/source/blender/editors/space_file/filelist.h @@ -148,31 +148,31 @@ bool filelist_is_ready(struct FileList *filelist); unsigned int filelist_entry_select_set(const struct FileList *filelist, const struct FileDirEntry *entry, FileSelType select, - unsigned int flag, + const eDirEntry_SelectFlag flag, FileCheckType check); void filelist_entry_select_index_set(struct FileList *filelist, int index, FileSelType select, - unsigned int flag, + eDirEntry_SelectFlag flag, FileCheckType check); void filelist_entries_select_index_range_set(struct FileList *filelist, FileSelection *sel, FileSelType select, - unsigned int flag, - FileCheckType check); -unsigned int filelist_entry_select_get(struct FileList *filelist, - struct FileDirEntry *entry, - FileCheckType check); -unsigned int filelist_entry_select_index_get(struct FileList *filelist, - int index, + eDirEntry_SelectFlag flag, FileCheckType check); +eDirEntry_SelectFlag filelist_entry_select_get(struct FileList *filelist, + struct FileDirEntry *entry, + FileCheckType check); +eDirEntry_SelectFlag filelist_entry_select_index_get(struct FileList *filelist, + int index, + FileCheckType check); bool filelist_entry_is_selected(struct FileList *filelist, int index); /** * Set selection of the '..' parent entry, but only if it's actually visible. */ void filelist_entry_parent_select_set(struct FileList *filelist, FileSelType select, - unsigned int flag, + eDirEntry_SelectFlag flag, FileCheckType check); void filelist_setrecursion(struct FileList *filelist, int recursion_level); diff --git a/source/blender/editors/space_file/filesel.cc b/source/blender/editors/space_file/filesel.cc index e4f5b3e709c9..e6dfe6bdfb35 100644 --- a/source/blender/editors/space_file/filesel.cc +++ b/source/blender/editors/space_file/filesel.cc @@ -1124,7 +1124,7 @@ void ED_file_change_dir(bContext *C) ED_file_change_dir_ex(C, area); } -void file_select_deselect_all(SpaceFile *sfile, uint flag) +void file_select_deselect_all(SpaceFile *sfile, const eDirEntry_SelectFlag flag) { FileSelection sel; sel.first = 0; diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index a4cb6723a8d7..05c30720222c 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -1091,13 +1091,14 @@ typedef enum eFileSel_File_Types { } eFileSel_File_Types; ENUM_OPERATORS(eFileSel_File_Types, FILE_TYPE_BLENDERLIB); -/** Selection Flags in filesel: struct direntry, unsigned char selflag. */ +/** Selection Flags #FileList::selection_state. */ typedef enum eDirEntry_SelectFlag { /* FILE_SEL_ACTIVE = (1 << 1), */ /* UNUSED */ FILE_SEL_HIGHLIGHTED = (1 << 2), FILE_SEL_SELECTED = (1 << 3), FILE_SEL_EDITING = (1 << 4), } eDirEntry_SelectFlag; +ENUM_OPERATORS(eDirEntry_SelectFlag, FILE_SEL_EDITING); /* ***** Related to file browser, but never saved in DNA, only here to help with RNA. ***** */ -- 2.30.2 From 78f3157ae7c4bbb7681a62a4732bac945404e7ed Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 14 Feb 2023 10:29:46 +1100 Subject: [PATCH 072/182] Cleanup: format --- source/blender/blenkernel/BKE_customdata.h | 1 - source/blender/blenkernel/intern/nla_test.cc | 1 - .../shaders/eevee_light_culling_debug_frag.glsl | 3 +-- .../eevee_next/shaders/eevee_shadow_debug_frag.glsl | 2 +- .../shaders/eevee_shadow_page_allocate_comp.glsl | 2 +- .../shaders/eevee_shadow_page_defrag_comp.glsl | 2 +- .../shaders/eevee_shadow_page_free_comp.glsl | 2 +- .../shaders/eevee_shadow_page_mask_comp.glsl | 2 +- .../shaders/eevee_shadow_tag_update_comp.glsl | 2 +- .../shaders/eevee_shadow_tag_usage_comp.glsl | 2 +- .../shaders/eevee_shadow_tag_usage_frag.glsl | 2 +- .../shaders/eevee_shadow_tag_usage_lib.glsl | 2 +- .../shaders/eevee_shadow_tag_usage_vert.glsl | 2 +- .../engines/eevee_next/shaders/eevee_shadow_test.glsl | 2 +- .../shaders/eevee_shadow_tilemap_bounds_comp.glsl | 2 +- .../shaders/eevee_shadow_tilemap_finalize_comp.glsl | 2 +- .../shaders/eevee_shadow_tilemap_init_comp.glsl | 2 +- source/blender/draw/intern/draw_manager_data.cc | 2 +- source/blender/editors/gpencil/gpencil_edit.c | 11 +++++------ source/blender/gpu/vulkan/vk_memory.hh | 3 ++- source/blender/io/usd/intern/usd_reader_stage.cc | 4 ++-- 21 files changed, 25 insertions(+), 28 deletions(-) diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h index 9ddc2f3447ea..2932ce98ded8 100644 --- a/source/blender/blenkernel/BKE_customdata.h +++ b/source/blender/blenkernel/BKE_customdata.h @@ -520,7 +520,6 @@ void CustomData_bmesh_free_block_data_exclude_by_type(struct CustomData *data, void *block, eCustomDataMask mask_exclude); - /** * Query info over types. */ diff --git a/source/blender/blenkernel/intern/nla_test.cc b/source/blender/blenkernel/intern/nla_test.cc index 3311ca82098d..414391a208f5 100644 --- a/source/blender/blenkernel/intern/nla_test.cc +++ b/source/blender/blenkernel/intern/nla_test.cc @@ -92,4 +92,3 @@ TEST(nla_track, BKE_nlatrack_remove_strip) } } // namespace blender::bke::tests - diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_debug_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_debug_frag.glsl index 366a7dc9ba01..86567b43c862 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_debug_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_debug_frag.glsl @@ -21,8 +21,7 @@ void main() float light_count = 0.0; uint light_cull = 0u; vec2 px = gl_FragCoord.xy; - LIGHT_FOREACH_BEGIN_LOCAL(light_cull_buf, light_zbin_buf, light_tile_buf, px, vP_z, l_idx) - { + LIGHT_FOREACH_BEGIN_LOCAL (light_cull_buf, light_zbin_buf, light_tile_buf, px, vP_z, l_idx) { LightData light = light_buf[l_idx]; light_cull |= 1u << l_idx; light_count += 1.0; diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_debug_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_debug_frag.glsl index bbdcb7334ad0..65a9904a2098 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_debug_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_debug_frag.glsl @@ -192,4 +192,4 @@ void main() break; } } -} \ No newline at end of file +} diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_allocate_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_allocate_comp.glsl index 786b2376595c..907b4e294f43 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_allocate_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_allocate_comp.glsl @@ -38,4 +38,4 @@ void main() } tile_start += lod_len; } -} \ No newline at end of file +} diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_defrag_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_defrag_comp.glsl index 57de4ed4e2ef..cb95b847ea11 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_defrag_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_defrag_comp.glsl @@ -126,4 +126,4 @@ void main() clear_dispatch_buf.num_groups_x = pages_infos_buf.page_size / SHADOW_PAGE_CLEAR_GROUP_SIZE; clear_dispatch_buf.num_groups_y = pages_infos_buf.page_size / SHADOW_PAGE_CLEAR_GROUP_SIZE; clear_dispatch_buf.num_groups_z = 0; -} \ No newline at end of file +} diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_free_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_free_comp.glsl index 8332da2f2730..69a69361283d 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_free_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_free_comp.glsl @@ -51,4 +51,4 @@ void main() } tile_start += lod_len; } -} \ No newline at end of file +} diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_mask_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_mask_comp.glsl index 3ac32a8bb8b2..14d91f451b7d 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_mask_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_mask_comp.glsl @@ -52,4 +52,4 @@ void main() } } } -} \ No newline at end of file +} diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_update_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_update_comp.glsl index 9e31172fd054..475d456db7a0 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_update_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_update_comp.glsl @@ -91,4 +91,4 @@ void main() } } } -} \ No newline at end of file +} diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_comp.glsl index 5df9bc80ef54..d30b8b4ab930 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_comp.glsl @@ -29,4 +29,4 @@ void main() vec2 pixel = vec2(gl_GlobalInvocationID.xy); shadow_tag_usage(vP, P, pixel); -} \ No newline at end of file +} diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_frag.glsl index 378fb870253c..23f78106ac2b 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_frag.glsl @@ -12,4 +12,4 @@ void main() { shadow_tag_usage(interp.vP, interp.P, gl_FragCoord.xy); -} \ No newline at end of file +} diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_lib.glsl index ad305d867449..1372153f1770 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_lib.glsl @@ -101,4 +101,4 @@ void shadow_tag_usage(vec3 vP, vec3 P, vec2 pixel) shadow_tag_usage_tilemap(l_idx, P, dist_to_cam, false); } LIGHT_FOREACH_END -} \ No newline at end of file +} diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_vert.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_vert.glsl index 130ce6512b27..fcca152ef829 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_vert.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_vert.glsl @@ -19,4 +19,4 @@ void main() interp.vP = point_world_to_view(interp.P); gl_Position = point_world_to_ndc(interp.P); -} \ No newline at end of file +} diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_test.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_test.glsl index d7d712ae3cb6..4c4edb81006b 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_test.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_test.glsl @@ -395,4 +395,4 @@ void main() EXPECT_NEAR(shadow_slope_bias_get(atlas_size, light, lNg, lP0, vec2(0.0), 2), 0.0, 1e-4); } } -} \ No newline at end of file +} diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_bounds_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_bounds_comp.glsl index 67559eeb47c6..6d992203e2e6 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_bounds_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_bounds_comp.glsl @@ -74,4 +74,4 @@ void main() * thread 0. */ } LIGHT_FOREACH_END -} \ No newline at end of file +} diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_finalize_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_finalize_comp.glsl index ef689588337f..573fe6eec1bd 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_finalize_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_finalize_comp.glsl @@ -178,4 +178,4 @@ void main() /* Clamp it as it can underflow if there is too much tile present on screen. */ pages_infos_buf.page_free_count = max(pages_infos_buf.page_free_count, 0); } -} \ No newline at end of file +} diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_init_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_init_comp.glsl index 13ed490c77fc..318efcd20842 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_init_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_init_comp.glsl @@ -90,4 +90,4 @@ void main() tiles_buf[tile_store] = tile; } } -} \ No newline at end of file +} diff --git a/source/blender/draw/intern/draw_manager_data.cc b/source/blender/draw/intern/draw_manager_data.cc index 5887f3c79b70..7a665cbc38c7 100644 --- a/source/blender/draw/intern/draw_manager_data.cc +++ b/source/blender/draw/intern/draw_manager_data.cc @@ -698,7 +698,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/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c index 81576cc3e845..6ede47268219 100644 --- a/source/blender/editors/gpencil/gpencil_edit.c +++ b/source/blender/editors/gpencil/gpencil_edit.c @@ -4059,12 +4059,11 @@ void GPENCIL_OT_reproject(wmOperatorType *ot) ot->prop = RNA_def_enum( ot->srna, "type", reproject_type, GP_REPROJECT_VIEW, "Projection Type", ""); - prop = RNA_def_boolean( - ot->srna, - "keep_original", - 0, - "Keep Original", - "Keep original strokes and create a copy before reprojecting"); + prop = RNA_def_boolean(ot->srna, + "keep_original", + 0, + "Keep Original", + "Keep original strokes and create a copy before reprojecting"); RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_MOVIECLIP); RNA_def_float(ot->srna, "offset", 0.0f, 0.0f, 10.0f, "Surface Offset", "", 0.0f, 10.0f); diff --git a/source/blender/gpu/vulkan/vk_memory.hh b/source/blender/gpu/vulkan/vk_memory.hh index 91802cb81933..415df18f8e8c 100644 --- a/source/blender/gpu/vulkan/vk_memory.hh +++ b/source/blender/gpu/vulkan/vk_memory.hh @@ -55,7 +55,8 @@ constexpr VkAllocationCallbacks vk_allocation_callbacks_init(const char *name) # define VK_ALLOCATION_CALLBACKS \ static constexpr const VkAllocationCallbacks vk_allocation_callbacks_ = \ vk_allocation_callbacks_init(__func__); \ - static constexpr const VkAllocationCallbacks *vk_allocation_callbacks = &vk_allocation_callbacks_; + static constexpr const VkAllocationCallbacks *vk_allocation_callbacks = \ + &vk_allocation_callbacks_; #else # define VK_ALLOCATION_CALLBACKS \ static constexpr const VkAllocationCallbacks *vk_allocation_callbacks = nullptr; diff --git a/source/blender/io/usd/intern/usd_reader_stage.cc b/source/blender/io/usd/intern/usd_reader_stage.cc index b376821b2e4a..ef3608ea9364 100644 --- a/source/blender/io/usd/intern/usd_reader_stage.cc +++ b/source/blender/io/usd/intern/usd_reader_stage.cc @@ -16,10 +16,10 @@ #include #include #include -#include #include #include #include +#include #include #include #include @@ -66,7 +66,7 @@ bool USDStageReader::valid() const bool USDStageReader::is_primitive_prim(const pxr::UsdPrim &prim) const { return (prim.IsA() || prim.IsA() || - prim.IsA() || prim.IsA() || + prim.IsA() || prim.IsA() || prim.IsA()); } -- 2.30.2 From e3b9903252757637da54eab10537d227bd98963f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 14 Feb 2023 10:29:48 +1100 Subject: [PATCH 073/182] Cleanup: spelling in comments, reference enum types in doc-strings Also use doxy formatting for structs in sculpt_uv.c. --- intern/cycles/integrator/render_scheduler.cpp | 22 ++++---- source/blender/blenkernel/intern/rigidbody.c | 2 +- .../bmesh/intern/bmesh_mesh_convert.cc | 2 +- .../blender/bmesh/intern/bmesh_walkers_impl.c | 4 +- source/blender/bmesh/operators/bmo_inset.c | 2 +- .../editors/armature/armature_skinning.c | 4 +- .../blender/editors/gpencil/annotate_paint.c | 6 +-- .../blender/editors/gpencil/gpencil_paint.c | 6 +-- .../blender/editors/sculpt_paint/sculpt_uv.c | 53 ++++++++++--------- source/blender/gpu/GPU_shader.h | 6 ++- source/blender/gpu/vulkan/vk_memory.hh | 6 +-- source/blender/makesdna/DNA_space_types.h | 27 ++++++---- 12 files changed, 74 insertions(+), 66 deletions(-) diff --git a/intern/cycles/integrator/render_scheduler.cpp b/intern/cycles/integrator/render_scheduler.cpp index 3bfcf73eaf2a..066d6c3bf247 100644 --- a/intern/cycles/integrator/render_scheduler.cpp +++ b/intern/cycles/integrator/render_scheduler.cpp @@ -899,8 +899,8 @@ int RenderScheduler::get_num_samples_during_navigation(int resolution_divider) c /* Schedule samples equal to the resolution divider up to a maximum of 4. * The idea is to have enough information on the screen by increasing the sample count as the * resolution is decreased. */ - /* NOTE: Changeing this formula will change the formula in - * "RenderScheduler::calculate_resolution_divider_for_time()"*/ + /* NOTE: Changing this formula will change the formula in + * `RenderScheduler::calculate_resolution_divider_for_time()`. */ return min(max(1, resolution_divider / pixel_size_), 4); } @@ -1177,18 +1177,18 @@ int RenderScheduler::calculate_resolution_divider_for_time(double desired_time, { const double ratio_between_times = actual_time / desired_time; - /* We can pass "ratio_between_times" to "get_num_samples_during_navigation()" to get our + /* We can pass `ratio_between_times` to `get_num_samples_during_navigation()` to get our * navigation samples because the equation for calculating the resolution divider is as follows: - * "actual_time / desired_time = sqr(resolution_divider) / sample_count". - * While "resolution_divider" is less than or equal to 4, "resolution_divider = sample_count" - * (This relationship is determined in "get_num_samples_during_navigation()"). With some - * substitution we end up with "actual_time / desired_time = resolution_divider" while the + * `actual_time / desired_time = sqr(resolution_divider) / sample_count`. + * While `resolution_divider` is less than or equal to 4, `resolution_divider = sample_count` + * (This relationship is determined in `get_num_samples_during_navigation()`). With some + * substitution we end up with `actual_time / desired_time = resolution_divider` while the * resolution divider is less than or equal to 4. Once the resolution divider increases above 4, - * the relationsip of "actual_time / desired_time = resolution_divider" is no longer true, - * however the sample count retrieved from "get_num_samples_during_navigation()" is still + * the relationship of `actual_time / desired_time = resolution_divider` is no longer true, + * however the sample count retrieved from `get_num_samples_during_navigation()` is still * accurate if we continue using this assumption. It should be noted that the interaction between - * pixel_size, sample count, and resolution divider are automatically accounted for and that's - * why pixel_size isn't included in any of the equations. */ + * `pixel_size`, sample count, and resolution divider are automatically accounted for and that's + * why `pixel_size` isn't included in any of the equations. */ const int navigation_samples = get_num_samples_during_navigation( ceil_to_int(ratio_between_times)); diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c index 90169a94ebd2..f89a44ee0245 100644 --- a/source/blender/blenkernel/intern/rigidbody.c +++ b/source/blender/blenkernel/intern/rigidbody.c @@ -1704,7 +1704,7 @@ static void rigidbody_update_sim_ob(Depsgraph *depsgraph, Object *ob, RigidBodyO } } - /* Make transformed objects temporarily kinmatic + /* Make transformed objects temporarily kinematic * so that they can be moved by the user during simulation. */ if (is_selected && (G.moving & G_TRANSFORM_OBJ)) { RB_body_set_kinematic_state(rbo->shared->physics_object, true); diff --git a/source/blender/bmesh/intern/bmesh_mesh_convert.cc b/source/blender/bmesh/intern/bmesh_mesh_convert.cc index d5241cee3258..1ad87b1a0df4 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc +++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc @@ -1166,7 +1166,7 @@ void BM_mesh_bm_to_me(Main *bmain, BMesh *bm, Mesh *me, const struct BMeshToMesh &bm->ldata, CD_PROP_BOOL, BKE_uv_map_pin_name_get(layer_name, sub_layer_name)); /* If ever the uv map associated bool layers become optional in BMesh as well (like in Mesh) - * this assert needs to be removed. For now it is a bug if they doin't exist. */ + * this assert needs to be removed. For now it is a bug if they don't exist. */ BLI_assert(vertsel_layer_index >= 0 && edgesel_layer_index >= 0 && pin_layer_index >= 0); int vertsel_offset = vertsel_layer_index >= 0 ? bm->ldata.layers[vertsel_layer_index].offset : diff --git a/source/blender/bmesh/intern/bmesh_walkers_impl.c b/source/blender/bmesh/intern/bmesh_walkers_impl.c index 19a7c04a22ad..a112e69fbfa5 100644 --- a/source/blender/bmesh/intern/bmesh_walkers_impl.c +++ b/source/blender/bmesh/intern/bmesh_walkers_impl.c @@ -1197,8 +1197,8 @@ static void bmw_FaceLoopWalker_begin(BMWalker *walker, void *data) { BMwFaceLoopWalker *lwalk, owalk, *owalk_pt; BMEdge *e = data; - /* BMesh *bm = walker->bm; */ /* UNUSED */ - /* int fcount = BM_edge_face_count(e); */ /* UNUSED */ + // BMesh *bm = walker->bm; /* UNUSED */ + // int fcount = BM_edge_face_count(e); /* UNUSED */ if (!bmw_FaceLoopWalker_edge_begins_loop(walker, e)) { return; diff --git a/source/blender/bmesh/operators/bmo_inset.c b/source/blender/bmesh/operators/bmo_inset.c index 1b2ab25d8306..a9e8174f5568 100644 --- a/source/blender/bmesh/operators/bmo_inset.c +++ b/source/blender/bmesh/operators/bmo_inset.c @@ -1183,7 +1183,7 @@ void bmo_inset_region_exec(BMesh *bm, BMOperator *op) f = BM_face_create_verts(bm, varr, j, es->l->f, BM_CREATE_NOP, true); BMO_face_flag_enable(bm, f, ELE_NEW); - /* Copy for loop data, otherwise UVs and vcols are no good. + /* Copy for loop data, otherwise UVs and vertex-colors are no good. * tiny speedup here we could be more clever and copy from known adjacent data * also - we could attempt to interpolate the loop data, * this would be much slower but more useful too. */ diff --git a/source/blender/editors/armature/armature_skinning.c b/source/blender/editors/armature/armature_skinning.c index 3ed384ab820a..39d558638cef 100644 --- a/source/blender/editors/armature/armature_skinning.c +++ b/source/blender/editors/armature/armature_skinning.c @@ -401,9 +401,9 @@ static void add_verts_to_dgroups(ReportList *reports, vertsfilled = 1; } else if (BKE_modifiers_findby_type(ob, eModifierType_Subsurf)) { - /* is subsurf on? Lets use the verts on the limit surface then. + /* Is subdivision-surface on? Lets use the verts on the limit surface then. * = same amount of vertices as mesh, but vertices moved to the - * subsurfed position, like for 'optimal'. */ + * subdivision-surfaced position, like for 'optimal'. */ subsurf_calculate_limit_positions(mesh, verts); vertsfilled = 1; } diff --git a/source/blender/editors/gpencil/annotate_paint.c b/source/blender/editors/gpencil/annotate_paint.c index cea9e4c4c955..8526a98f0be9 100644 --- a/source/blender/editors/gpencil/annotate_paint.c +++ b/source/blender/editors/gpencil/annotate_paint.c @@ -528,7 +528,7 @@ static short annotation_stroke_addpoint(tGPsdata *p, /* store settings */ copy_v2_v2(pt->m_xy, mval); - /* #44932 - Pressure vals are unreliable, so ignore for now */ + /* Pressure values are unreliable, so ignore for now, see #44932. */ pt->pressure = 1.0f; pt->strength = 1.0f; pt->time = (float)(curtime - p->inittime); @@ -544,7 +544,7 @@ static short annotation_stroke_addpoint(tGPsdata *p, /* store settings */ copy_v2_v2(pt->m_xy, mval); - /* #44932 - Pressure vals are unreliable, so ignore for now */ + /* Pressure values are unreliable, so ignore for now, see #44932. */ pt->pressure = 1.0f; pt->strength = 1.0f; pt->time = (float)(curtime - p->inittime); @@ -620,7 +620,7 @@ static short annotation_stroke_addpoint(tGPsdata *p, /* store settings */ copy_v2_v2(pt->m_xy, mval); - /* #44932 - Pressure vals are unreliable, so ignore for now */ + /* Pressure values are unreliable, so ignore for now, see #44932. */ pt->pressure = 1.0f; pt->strength = 1.0f; pt->time = (float)(curtime - p->inittime); diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c index f5a50e768fc6..669b09ed279d 100644 --- a/source/blender/editors/gpencil/gpencil_paint.c +++ b/source/blender/editors/gpencil/gpencil_paint.c @@ -764,7 +764,7 @@ static short gpencil_stroke_addpoint(tGPsdata *p, /* store settings */ copy_v2_v2(pt->m_xy, mval); - /* #44932 - Pressure vals are unreliable, so ignore for now */ + /* Pressure values are unreliable, so ignore for now, see #44932. */ pt->pressure = 1.0f; pt->strength = 1.0f; pt->time = (float)(curtime - p->inittime); @@ -780,7 +780,7 @@ static short gpencil_stroke_addpoint(tGPsdata *p, /* store settings */ copy_v2_v2(pt->m_xy, mval); - /* #44932 - Pressure vals are unreliable, so ignore for now */ + /* Pressure values are unreliable, so ignore for now, see #44932. */ pt->pressure = 1.0f; pt->strength = 1.0f; pt->time = (float)(curtime - p->inittime); @@ -3685,7 +3685,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event) } /* We don't pass on key events, GP is used with key-modifiers - - * prevents Dkey to insert drivers. */ + * prevents D-key to insert drivers. */ if (ISKEYBOARD(event->type)) { if (ELEM(event->type, EVT_LEFTARROWKEY, EVT_DOWNARROWKEY, EVT_RIGHTARROWKEY, EVT_UPARROWKEY)) { /* allow some keys: diff --git a/source/blender/editors/sculpt_paint/sculpt_uv.c b/source/blender/editors/sculpt_paint/sculpt_uv.c index cd1c7e31d434..f881eda74065 100644 --- a/source/blender/editors/sculpt_paint/sculpt_uv.c +++ b/source/blender/editors/sculpt_paint/sculpt_uv.c @@ -50,83 +50,84 @@ #define MARK_BOUNDARY 1 typedef struct UvAdjacencyElement { - /* pointer to original uvelement */ + /** pointer to original UV-element. */ UvElement *element; - /* uv pointer for convenience. Caution, this points to the original UVs! */ + /** UV pointer for convenience. Caution, this points to the original UVs! */ float *uv; - /* Are we on locked in place? */ + /** Are we on locked in place? */ bool is_locked; - /* Are we on the boundary? */ + /** Are we on the boundary? */ bool is_boundary; } UvAdjacencyElement; typedef struct UvEdge { uint uv1; uint uv2; - /* Are we in the interior? */ + /** Are we in the interior? */ bool is_interior; } UvEdge; typedef struct UVInitialStrokeElement { - /* index to unique uv */ + /** index to unique UV. */ int uv; - /* strength of brush on initial position */ + /** Strength of brush on initial position. */ float strength; - /* initial uv position */ + /** initial UV position. */ float initial_uv[2]; } UVInitialStrokeElement; typedef struct UVInitialStroke { - /* Initial Selection,for grab brushes for instance */ + /** Initial Selection,for grab brushes for instance. */ UVInitialStrokeElement *initialSelection; - /* Total initially selected UVs. */ + /** Total initially selected UVs. */ int totalInitialSelected; - /* initial mouse coordinates */ + /** Initial mouse coordinates. */ float init_coord[2]; } UVInitialStroke; -/* custom data for uv smoothing brush */ +/** Custom data for UV smoothing brush. */ typedef struct UvSculptData { - /* Contains the first of each set of coincident UVs. - * These will be used to perform smoothing on and propagate the changes - * to their coincident UVs */ + /** + * Contains the first of each set of coincident UVs. + * These will be used to perform smoothing on and propagate the changes to their coincident UVs. + */ UvAdjacencyElement *uv; - /* Total number of unique UVs. */ + /** Total number of unique UVs. */ int totalUniqueUvs; - /* Edges used for adjacency info, used with laplacian smoothing */ + /** Edges used for adjacency info, used with laplacian smoothing */ UvEdge *uvedges; - /* Total number of #UvEdge. */ + /** Total number of #UvEdge. */ int totalUvEdges; - /* data for initial stroke, used by tools like grab */ + /** data for initial stroke, used by tools like grab */ UVInitialStroke *initial_stroke; - /* timer to be used for airbrush-type brush */ + /** Timer to be used for airbrush-type brush. */ wmTimer *timer; - /* to determine quickly adjacent UVs */ + /** To determine quickly adjacent UVs. */ UvElementMap *elementMap; - /* uvsmooth Paint for fast reference */ + /** UV-smooth Paint for fast reference. */ Paint *uvsculpt; - /* tool to use. duplicating here to change if modifier keys are pressed */ + /** Tool to use. duplicating here to change if modifier keys are pressed. */ char tool; - /* store invert flag here */ + /** Store invert flag here. */ char invert; - /* Is constrain to image bounds active? */ + /** Is constrain to image bounds active? */ bool constrain_to_bounds; - /* Base for constrain_to_bounds. */ + /** Base for constrain_to_bounds. */ float uv_base_offset[2]; } UvSculptData; diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h index b9be4a5ec554..ecc66f92c23a 100644 --- a/source/blender/gpu/GPU_shader.h +++ b/source/blender/gpu/GPU_shader.h @@ -249,8 +249,10 @@ typedef enum { } GPUUniformBuiltin; #define GPU_NUM_UNIFORMS (GPU_UNIFORM_SRGB_TRANSFORM + 1) -/** TODO: To be moved as private API. Not really used outside of gpu_matrix.cc and doesn't really - * offer a noticeable perf boost. */ +/** + * TODO: To be moved as private API. Not really used outside of gpu_matrix.cc and doesn't really + * offer a noticeable performance boost. + */ int GPU_shader_get_builtin_uniform(GPUShader *shader, int builtin); /** DEPRECATED: Use hardcoded buffer location instead. */ diff --git a/source/blender/gpu/vulkan/vk_memory.hh b/source/blender/gpu/vulkan/vk_memory.hh index 415df18f8e8c..991801de7b4b 100644 --- a/source/blender/gpu/vulkan/vk_memory.hh +++ b/source/blender/gpu/vulkan/vk_memory.hh @@ -18,17 +18,17 @@ namespace blender::gpu { /** * `VK_ALLOCATION_CALLBACKS` initializes allocation callbacks for host allocations. * The macro creates a local static variable with the name `vk_allocation_callbacks` - * that can be passed to vulkan API functions that expect + * that can be passed to VULKAN API functions that expect * `const VkAllocationCallbacks *pAllocator`. * * When Blender is compiled with `WITH_VULKAN_GUARDEDALLOC` this will use * `MEM_guardedalloc` for host allocations that the driver does on behalf * of blender. More internal allocations are still being allocated via the - * implemention inside the vulkan device driver. + * implementation inside the VULKAN device driver. * * When `WITH_VULKAN_GUARDEDALLOC=Off` the memory allocation implemented * in the vulkan device driver is used for both internal and application - * focussed memory operations. + * focused memory operations. */ #ifdef WITH_VULKAN_GUARDEDALLOC diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 05c30720222c..2742f62357d0 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -95,7 +95,8 @@ enum { /** * The space is not a regular one opened through the editor menu (for example) but spawned by an * operator to fulfill some task and then disappear again. - * Can typically be cancelled using Escape, but that is handled on the editor level. */ + * Can typically be canceled using Escape, but that is handled on the editor level. + */ SPACE_FLAG_TYPE_TEMPORARY = (1 << 0), /** * Used to mark a space as active but "overlapped" by temporary full-screen spaces. Without this @@ -605,10 +606,13 @@ typedef struct SequencerTimelineOverlay { typedef enum eSpaceSeq_SequencerTimelineOverlay_Flag { SEQ_TIMELINE_SHOW_STRIP_OFFSETS = (1 << 1), SEQ_TIMELINE_SHOW_THUMBNAILS = (1 << 2), - SEQ_TIMELINE_SHOW_STRIP_COLOR_TAG = (1 << 3), /* use Sequence->color_tag */ + /** Use #Sequence::color_tag */ + SEQ_TIMELINE_SHOW_STRIP_COLOR_TAG = (1 << 3), SEQ_TIMELINE_SHOW_FCURVES = (1 << 5), - SEQ_TIMELINE_ALL_WAVEFORMS = (1 << 7), /* draw all waveforms */ - SEQ_TIMELINE_NO_WAVEFORMS = (1 << 8), /* draw no waveforms */ + /** Draw all wave-forms. */ + SEQ_TIMELINE_ALL_WAVEFORMS = (1 << 7), + /** Draw no wave-forms. */ + SEQ_TIMELINE_NO_WAVEFORMS = (1 << 8), SEQ_TIMELINE_SHOW_STRIP_NAME = (1 << 14), SEQ_TIMELINE_SHOW_STRIP_SOURCE = (1 << 15), SEQ_TIMELINE_SHOW_STRIP_DURATION = (1 << 16), @@ -978,7 +982,7 @@ enum eFileDetails { FILE_DETAILS_DATETIME = (1 << 1), }; -/* these values need to be hardcoded in structs, dna does not recognize defines */ +/* These values need to be hard-coded in structs, DNA does not recognize defines. */ /* also defined in BKE */ #define FILE_MAXDIR 768 #define FILE_MAXFILE 256 @@ -1210,7 +1214,7 @@ typedef struct SpaceImage { struct Image *image; struct ImageUser iuser; - /** Histogram waveform and vectorscope. */ + /** Histogram waveform and vector-scope. */ struct Scopes scopes; /** Sample line histogram. */ struct Histogram sample_line_hist; @@ -1589,12 +1593,12 @@ typedef struct SpaceNode { /* tree type for the current node tree */ char tree_idname[64]; - /** Treetype: as same nodetree->type. */ + /** Same as #bNodeTree::type (deprecated). */ int treetype DNA_DEPRECATED; - /** Texfrom object, world or brush. */ + /** Texture-from object, world or brush (#eSpaceNode_TexFrom). */ short texfrom; - /** Shader from object or world. */ + /** Shader from object or world (#eSpaceNode_ShaderFrom). */ short shaderfrom; /** Grease-pencil data. */ @@ -1658,7 +1662,7 @@ typedef struct ConsoleLine { /* Keep these 3 vars so as to share free, realloc functions. */ /** Allocated length. */ int len_alloc; - /** Real len - strlen(). */ + /** Real length: `strlen()`. */ int len; char *line; @@ -1671,7 +1675,8 @@ typedef struct ConsoleLine { typedef enum eConsoleLine_Type { CONSOLE_LINE_OUTPUT = 0, CONSOLE_LINE_INPUT = 1, - CONSOLE_LINE_INFO = 2, /* autocomp feedback */ + /** Auto-completion feedback. */ + CONSOLE_LINE_INFO = 2, CONSOLE_LINE_ERROR = 3, } eConsoleLine_Type; -- 2.30.2 From df60d2d0a5ca872bff815c4dfd5f7c8db5e270f7 Mon Sep 17 00:00:00 2001 From: Germano Cavalcante Date: Mon, 13 Feb 2023 21:13:58 -0300 Subject: [PATCH 074/182] Fix #66863: Bisect plane rotation behavior bugged for side/cut view The matrix of the rotation gizmo is somewhat confusing. Attaching to the Z axis has more predictable results. --- source/blender/editors/mesh/editmesh_bisect.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_bisect.c b/source/blender/editors/mesh/editmesh_bisect.c index aab33678beca..4fc225f54336 100644 --- a/source/blender/editors/mesh/editmesh_bisect.c +++ b/source/blender/editors/mesh/editmesh_bisect.c @@ -54,7 +54,7 @@ typedef struct { BMBackup mesh_backup; bool is_valid; bool is_dirty; - } * backup; + } *backup; int backup_len; } BisectData; @@ -528,15 +528,7 @@ static void gizmo_mesh_bisect_update_from_op(GizmoGroup *ggd) normalize_v3(ggd->data.rotate_up); WM_gizmo_set_matrix_rotation_from_z_axis(ggd->translate_c, plane_no); - - float plane_no_cross[3]; - cross_v3_v3v3(plane_no_cross, plane_no, ggd->data.rotate_axis); - - WM_gizmo_set_matrix_offset_rotation_from_yz_axis( - ggd->rotate_c, plane_no_cross, ggd->data.rotate_axis); - RNA_enum_set(ggd->rotate_c->ptr, - "draw_options", - ED_GIZMO_DIAL_DRAW_FLAG_ANGLE_MIRROR | ED_GIZMO_DIAL_DRAW_FLAG_ANGLE_START_Y); + WM_gizmo_set_matrix_rotation_from_z_axis(ggd->rotate_c, ggd->data.rotate_axis); } } -- 2.30.2 From f85420ede50c786f748e685abd75c4e31679796c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 14 Feb 2023 11:46:42 +1100 Subject: [PATCH 075/182] License headers: add missing license identifier --- .../draw/engines/eevee_next/shaders/infos/eevee_shadow_info.hh | 1 + 1 file changed, 1 insertion(+) diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_shadow_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_shadow_info.hh index bb6b6d1e105f..378ec8d10a57 100644 --- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_shadow_info.hh +++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_shadow_info.hh @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ #include "eevee_defines.hh" -- 2.30.2 From d1b5705f59a537b0ff0e8591938f7d085661bf82 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 14 Feb 2023 11:50:00 +1100 Subject: [PATCH 076/182] Cleanup: quiet unreachable-code warning, use ARRAY_SIZE macro --- source/blender/blenkernel/intern/object_dupli.cc | 4 ++-- source/blender/blenkernel/intern/subdiv_ccg.cc | 2 +- source/blender/gpu/intern/gpu_shader_dependency.cc | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/source/blender/blenkernel/intern/object_dupli.cc b/source/blender/blenkernel/intern/object_dupli.cc index ebbd4bc61dae..fbd3e31140d6 100644 --- a/source/blender/blenkernel/intern/object_dupli.cc +++ b/source/blender/blenkernel/intern/object_dupli.cc @@ -265,7 +265,7 @@ static DupliObject *make_dupli(const DupliContext *ctx, /* Store geometry set data for attribute lookup in innermost to outermost * order, copying only non-null entries to save space. */ - const int max_instance = sizeof(dob->instance_data) / sizeof(void *); + const int max_instance = ARRAY_SIZE(dob->instance_data); int next_instance = 0; if (geometry != nullptr) { dob->instance_idx[next_instance] = int(instance_index); @@ -1821,7 +1821,7 @@ static bool find_geonode_attribute_rgba(const DupliObject *dupli, using namespace blender; /* Loop over layers from innermost to outermost. */ - for (const int i : IndexRange(sizeof(dupli->instance_data) / sizeof(void *))) { + for (const int i : IndexRange(ARRAY_SIZE(dupli->instance_data))) { /* Skip non-geonode layers. */ if (dupli->instance_data[i] == nullptr) { continue; diff --git a/source/blender/blenkernel/intern/subdiv_ccg.cc b/source/blender/blenkernel/intern/subdiv_ccg.cc index bf09be444b1d..ba1627935823 100644 --- a/source/blender/blenkernel/intern/subdiv_ccg.cc +++ b/source/blender/blenkernel/intern/subdiv_ccg.cc @@ -352,7 +352,7 @@ struct StaticOrHeapIntStorage { static void static_or_heap_storage_init(StaticOrHeapIntStorage *storage) { - storage->static_storage_len = sizeof(storage->static_storage) / sizeof(*storage->static_storage); + storage->static_storage_len = ARRAY_SIZE(storage->static_storage); storage->heap_storage = nullptr; storage->heap_storage_len = 0; } diff --git a/source/blender/gpu/intern/gpu_shader_dependency.cc b/source/blender/gpu/intern/gpu_shader_dependency.cc index 8b3643e9cc81..bfb8a22104e5 100644 --- a/source/blender/gpu/intern/gpu_shader_dependency.cc +++ b/source/blender/gpu/intern/gpu_shader_dependency.cc @@ -810,6 +810,8 @@ struct GPUSource { } dependencies.append_non_duplicates(dependency_source); } + /* Precedes an eternal loop (quiet CLANG's `unreachable-code` warning). */ + BLI_assert_unreachable(); return 0; } -- 2.30.2 From ba710f9d4932be3baa44126a535382d20a76c13c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 14 Feb 2023 11:52:14 +1100 Subject: [PATCH 077/182] Cleanup: include missing header, sort CMake file lists --- source/blender/blenkernel/CMakeLists.txt | 2 +- source/blender/blenlib/CMakeLists.txt | 8 ++++---- source/blender/gpu/CMakeLists.txt | 1 + source/blender/io/usd/CMakeLists.txt | 2 +- source/blender/nodes/geometry/CMakeLists.txt | 10 +++++----- source/blender/python/generic/CMakeLists.txt | 2 +- 6 files changed, 13 insertions(+), 12 deletions(-) diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt index 850c55de7e92..2291827e3744 100644 --- a/source/blender/blenkernel/CMakeLists.txt +++ b/source/blender/blenkernel/CMakeLists.txt @@ -249,8 +249,8 @@ set(SRC intern/particle_distribute.c intern/particle_system.c intern/pbvh.cc - intern/pbvh_colors.cc intern/pbvh_bmesh.cc + intern/pbvh_colors.cc intern/pbvh_pixels.cc intern/pbvh_uv_islands.cc intern/pointcache.c diff --git a/source/blender/blenlib/CMakeLists.txt b/source/blender/blenlib/CMakeLists.txt index 7c24fb8b5e71..16635df908b0 100644 --- a/source/blender/blenlib/CMakeLists.txt +++ b/source/blender/blenlib/CMakeLists.txt @@ -281,10 +281,10 @@ set(SRC BLI_math_solvers.h BLI_math_statistics.h BLI_math_time.h - BLI_math_vector_mpq_types.hh - BLI_math_vector_types.hh BLI_math_vector.h BLI_math_vector.hh + BLI_math_vector_mpq_types.hh + BLI_math_vector_types.hh BLI_memarena.h BLI_memblock.h BLI_memiter.h @@ -490,13 +490,13 @@ if(WITH_GTESTS) tests/BLI_math_bits_test.cc tests/BLI_math_color_test.cc tests/BLI_math_geom_test.cc - tests/BLI_math_matrix_types_test.cc tests/BLI_math_matrix_test.cc + tests/BLI_math_matrix_types_test.cc tests/BLI_math_rotation_test.cc tests/BLI_math_solvers_test.cc tests/BLI_math_time_test.cc - tests/BLI_math_vector_types_test.cc tests/BLI_math_vector_test.cc + tests/BLI_math_vector_types_test.cc tests/BLI_memiter_test.cc tests/BLI_memory_utils_test.cc tests/BLI_mesh_boolean_test.cc diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index 2f345ec6a90c..4b378384a9dd 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -104,6 +104,7 @@ set(SRC GPU_primitive.h GPU_select.h GPU_shader.h + GPU_shader_builtin.h GPU_shader_shared.h GPU_state.h GPU_storage_buffer.h diff --git a/source/blender/io/usd/CMakeLists.txt b/source/blender/io/usd/CMakeLists.txt index 37da01aa777c..e7a884087b10 100644 --- a/source/blender/io/usd/CMakeLists.txt +++ b/source/blender/io/usd/CMakeLists.txt @@ -147,8 +147,8 @@ blender_add_lib(bf_usd "${SRC}" "${INC}" "${INC_SYS}" "${LIB}") if(WITH_GTESTS) set(TEST_SRC - tests/usd_stage_creation_test.cc tests/usd_export_test.cc + tests/usd_stage_creation_test.cc tests/usd_tests_common.cc tests/usd_tests_common.h diff --git a/source/blender/nodes/geometry/CMakeLists.txt b/source/blender/nodes/geometry/CMakeLists.txt index 448a5e69de44..f1cccf756e62 100644 --- a/source/blender/nodes/geometry/CMakeLists.txt +++ b/source/blender/nodes/geometry/CMakeLists.txt @@ -75,17 +75,17 @@ set(SRC nodes/node_geo_extrude_mesh.cc nodes/node_geo_flip_faces.cc nodes/node_geo_geometry_to_instance.cc + nodes/node_geo_image.cc nodes/node_geo_image_info.cc nodes/node_geo_image_texture.cc - nodes/node_geo_image.cc nodes/node_geo_input_curve_handles.cc nodes/node_geo_input_curve_tilt.cc nodes/node_geo_input_id.cc nodes/node_geo_input_index.cc nodes/node_geo_input_instance_rotation.cc nodes/node_geo_input_instance_scale.cc - nodes/node_geo_input_material_index.cc nodes/node_geo_input_material.cc + nodes/node_geo_input_material_index.cc nodes/node_geo_input_mesh_edge_angle.cc nodes/node_geo_input_mesh_edge_neighbors.cc nodes/node_geo_input_mesh_edge_vertices.cc @@ -135,17 +135,17 @@ set(SRC nodes/node_geo_mesh_topology_vertex_of_corner.cc nodes/node_geo_object_info.cc nodes/node_geo_offset_point_in_curve.cc + nodes/node_geo_points.cc nodes/node_geo_points_to_vertices.cc nodes/node_geo_points_to_volume.cc - nodes/node_geo_points.cc nodes/node_geo_proximity.cc nodes/node_geo_raycast.cc nodes/node_geo_realize_instances.cc nodes/node_geo_remove_attribute.cc nodes/node_geo_rotate_instances.cc nodes/node_geo_sample_index.cc - nodes/node_geo_sample_nearest_surface.cc nodes/node_geo_sample_nearest.cc + nodes/node_geo_sample_nearest_surface.cc nodes/node_geo_sample_uv_surface.cc nodes/node_geo_scale_elements.cc nodes/node_geo_scale_instances.cc @@ -157,8 +157,8 @@ set(SRC nodes/node_geo_set_curve_radius.cc nodes/node_geo_set_curve_tilt.cc nodes/node_geo_set_id.cc - nodes/node_geo_set_material_index.cc nodes/node_geo_set_material.cc + nodes/node_geo_set_material_index.cc nodes/node_geo_set_point_radius.cc nodes/node_geo_set_position.cc nodes/node_geo_set_shade_smooth.cc diff --git a/source/blender/python/generic/CMakeLists.txt b/source/blender/python/generic/CMakeLists.txt index 96345a2fa348..29964b67b340 100644 --- a/source/blender/python/generic/CMakeLists.txt +++ b/source/blender/python/generic/CMakeLists.txt @@ -7,8 +7,8 @@ set(INC ../../gpu ../../makesdna ../../makesrna - ../../../../intern/guardedalloc ../../../../intern/clog + ../../../../intern/guardedalloc ) set(INC_SYS -- 2.30.2 From 74ae8b3c62748a1094a5bca10bdb93b070d4dfde Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 14 Feb 2023 12:11:32 +1100 Subject: [PATCH 078/182] Cleanup: line wrapping in USERPREF_PT_experimental_new_features Changing from Phabricator links caused poor formatting. Also remove blank lines between comment and it's function. --- .../keyconfig/keymap_data/blender_default.py | 3 +-- .../scripts/startup/bl_ui/space_userpref.py | 24 +++++++------------ 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py index e18461eb4dfb..393c73cc2302 100644 --- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -6345,9 +6345,8 @@ def km_node_link_modal_map(_params): return keymap + # Fallback for gizmos that don't have custom a custom key-map. - - def km_generic_gizmo(_params): keymap = ( "Generic Gizmo", diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index 96b83be6ad81..fa5f451f9eee 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -2319,21 +2319,15 @@ class USERPREF_PT_experimental_new_features(ExperimentalPanel, Panel): bl_label = "New Features" def draw(self, context): - self._draw_items(context, - (({"property": "use_sculpt_tools_tilt"}, - ("blender/blender/issues/82877", - "#82877")), - ({"property": "use_extended_asset_browser"}, - ("blender/blender/projects/10", - "Pipeline, Assets & IO Project Page")), - ({"property": "use_override_templates"}, - ("blender/blender/issues/73318", - "Milestone 4")), - ({"property": "use_new_volume_nodes"}, - ("blender/blender/issues/103248", - "#103248")), - ), - ) + self._draw_items( + context, ( + ({"property": "use_sculpt_tools_tilt"}, ("blender/blender/issues/82877", "#82877")), + ({"property": "use_extended_asset_browser"}, + ("blender/blender/projects/10", "Pipeline, Assets & IO Project Page")), + ({"property": "use_override_templates"}, ("blender/blender/issues/73318", "Milestone 4")), + ({"property": "use_new_volume_nodes"}, ("blender/blender/issues/103248", "#103248")), + ), + ) class USERPREF_PT_experimental_prototypes(ExperimentalPanel, Panel): -- 2.30.2 From 1ba32c8911cb1af289e080012f9b57901264da93 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 14 Feb 2023 12:24:39 +1100 Subject: [PATCH 079/182] Cleanup: pass a const argument to CustomData_get_elem_size --- source/blender/blenkernel/BKE_customdata.h | 8 ++++---- source/blender/blenkernel/intern/customdata.cc | 2 +- source/blender/bmesh/intern/bmesh_mesh_convert.cc | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h index 2932ce98ded8..9cddc39f43c4 100644 --- a/source/blender/blenkernel/BKE_customdata.h +++ b/source/blender/blenkernel/BKE_customdata.h @@ -305,8 +305,8 @@ void CustomData_copy_data(const struct CustomData *source, int source_index, int dest_index, int count); -void CustomData_copy_data_layer(const CustomData *source, - CustomData *dest, +void CustomData_copy_data_layer(const struct CustomData *source, + struct CustomData *dest, int src_layer_index, int dst_layer_index, int src_index, @@ -445,7 +445,7 @@ void *CustomData_get_layer_named_for_write(CustomData *data, int totelem); int CustomData_get_offset(const struct CustomData *data, int type); -int CustomData_get_offset_named(const CustomData *data, int type, const char *name); +int CustomData_get_offset_named(const struct CustomData *data, int type, const char *name); int CustomData_get_n_offset(const struct CustomData *data, int type, int n); int CustomData_get_layer_index(const struct CustomData *data, int type); @@ -728,7 +728,7 @@ void CustomData_blend_write(BlendWriter *writer, void CustomData_blend_read(struct BlendDataReader *reader, struct CustomData *data, int count); -size_t CustomData_get_elem_size(struct CustomDataLayer *layer); +size_t CustomData_get_elem_size(const struct CustomDataLayer *layer); #ifndef NDEBUG struct DynStr; diff --git a/source/blender/blenkernel/intern/customdata.cc b/source/blender/blenkernel/intern/customdata.cc index 3eb86324a77b..75a8c8651708 100644 --- a/source/blender/blenkernel/intern/customdata.cc +++ b/source/blender/blenkernel/intern/customdata.cc @@ -5203,7 +5203,7 @@ eCustomDataType cpp_type_to_custom_data_type(const blender::CPPType &type) } // namespace blender::bke -size_t CustomData_get_elem_size(CustomDataLayer *layer) +size_t CustomData_get_elem_size(const CustomDataLayer *layer) { return LAYERTYPEINFO[layer->type].size; } diff --git a/source/blender/bmesh/intern/bmesh_mesh_convert.cc b/source/blender/bmesh/intern/bmesh_mesh_convert.cc index 1ad87b1a0df4..ebc176fede18 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc +++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc @@ -186,7 +186,7 @@ static Vector mesh_to_bm_copy_info_calc(const CustomData & std::array per_type_index; per_type_index.fill(0); for (const int i : IndexRange(bm_data.totlayer)) { - CustomDataLayer &bm_layer = bm_data.layers[i]; + const CustomDataLayer &bm_layer = bm_data.layers[i]; const eCustomDataType type = eCustomDataType(bm_layer.type); const int mesh_layer_index = bm_layer.name[0] == '\0' ? @@ -1079,7 +1079,7 @@ static Vector bm_to_mesh_copy_info_calc(const CustomData & std::array per_type_index; per_type_index.fill(0); for (const int i : IndexRange(mesh_data.totlayer)) { - CustomDataLayer &mesh_layer = mesh_data.layers[i]; + const CustomDataLayer &mesh_layer = mesh_data.layers[i]; const eCustomDataType type = eCustomDataType(mesh_layer.type); const int bm_layer_index = mesh_layer.name[0] == '\0' ? -- 2.30.2 From dfc9d29a51e4802c1c571b835d21d7bd7e88da3b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 14 Feb 2023 12:26:29 +1100 Subject: [PATCH 080/182] Cleanup: avoid redundant sqrt when picking reroute nodes --- source/blender/editors/space_node/node_select.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/space_node/node_select.cc b/source/blender/editors/space_node/node_select.cc index 0fd6c6b72cb6..663a235b8340 100644 --- a/source/blender/editors/space_node/node_select.cc +++ b/source/blender/editors/space_node/node_select.cc @@ -148,7 +148,7 @@ static bool node_under_mouse_tweak(const bNodeTree &ntree, const float2 &mouse) switch (node->type) { case NODE_REROUTE: { const float2 location = node_to_view(*node, {node->locx, node->locy}); - if (math::distance(mouse, location) < 24.0f) { + if (math::distance_squared(mouse, location) < square_f(24.0f)) { return true; } break; -- 2.30.2 From 8ff35ff95d74beab3261897c8db833cac6256e41 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 14 Feb 2023 12:37:02 +1100 Subject: [PATCH 081/182] PyDocs: update links in generated API docs for GITEA migration - Correct broken link for undocumented modules. Point to the contributing page, it seems #51062 was lost with the GITEA task migration. - Correct Blender Version link to the SHA1. --- doc/python_api/sphinx_doc_gen.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/python_api/sphinx_doc_gen.py b/doc/python_api/sphinx_doc_gen.py index 480dddb9c206..7b604e855a34 100644 --- a/doc/python_api/sphinx_doc_gen.py +++ b/doc/python_api/sphinx_doc_gen.py @@ -487,7 +487,7 @@ BLENDER_VERSION_DOTS = "%d.%d" % (bpy.app.version[0], bpy.app.version[1]) if BLENDER_REVISION != "Unknown": # SHA1 Git hash BLENDER_VERSION_HASH = BLENDER_REVISION - BLENDER_VERSION_HASH_HTML_LINK = "%s" % ( + BLENDER_VERSION_HASH_HTML_LINK = "%s" % ( BLENDER_VERSION_HASH, BLENDER_VERSION_HASH, ) BLENDER_VERSION_DATE = time.strftime("%d/%m/%Y", time.localtime(BLENDER_REVISION_TIMESTAMP)) @@ -647,7 +647,7 @@ def undocumented_message(module_name, type_name, identifier): module_name, type_name, identifier, ) - return "Undocumented, consider `contributing `__." + return "Undocumented, consider `contributing `__." def range_str(val): -- 2.30.2 From f5dd3da9c9ccde1e812bb2bcef67bf8c385913e4 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 14 Feb 2023 13:19:18 +1100 Subject: [PATCH 082/182] Update RNA to User manual mappings --- release/scripts/modules/rna_manual_reference.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/release/scripts/modules/rna_manual_reference.py b/release/scripts/modules/rna_manual_reference.py index a3654b12c207..bb5943b2adf7 100644 --- a/release/scripts/modules/rna_manual_reference.py +++ b/release/scripts/modules/rna_manual_reference.py @@ -991,6 +991,7 @@ url_manual_mapping = ( ("bpy.types.geometrynodeinputmeshfacearea*", "modeling/geometry_nodes/mesh/read/face_area.html#bpy-types-geometrynodeinputmeshfacearea"), ("bpy.types.geometrynodeinputsplinecyclic*", "modeling/geometry_nodes/curve/read/is_spline_cyclic.html#bpy-types-geometrynodeinputsplinecyclic"), ("bpy.types.geometrynodeinstancestopoints*", "modeling/geometry_nodes/instances/instances_to_points.html#bpy-types-geometrynodeinstancestopoints"), + ("bpy.types.geometrynodematerialselection*", "modeling/geometry_nodes/material/material_selection.html#bpy-types-geometrynodematerialselection"), ("bpy.types.gpencillayer.viewlayer_render*", "grease_pencil/properties/layers.html#bpy-types-gpencillayer-viewlayer-render"), ("bpy.types.imagepaint.use_normal_falloff*", "sculpt_paint/brush/falloff.html#bpy-types-imagepaint-use-normal-falloff"), ("bpy.types.layercollection.hide_viewport*", "editors/outliner/interface.html#bpy-types-layercollection-hide-viewport"), @@ -2027,6 +2028,7 @@ url_manual_mapping = ( ("bpy.ops.graph.equalize_handles*", "editors/graph_editor/fcurves/editing.html#bpy-ops-graph-equalize-handles"), ("bpy.ops.mball.delete_metaelems*", "modeling/metas/editing.html#bpy-ops-mball-delete-metaelems"), ("bpy.ops.mball.reveal_metaelems*", "modeling/metas/properties.html#bpy-ops-mball-reveal-metaelems"), + ("bpy.ops.mesh.bridge_edge_loops*", "modeling/meshes/editing/edge/bridge_edge_loops.html#bpy-ops-mesh-bridge-edge-loops"), ("bpy.ops.mesh.intersect_boolean*", "modeling/meshes/editing/face/intersect_boolean.html#bpy-ops-mesh-intersect-boolean"), ("bpy.ops.mesh.loop_multi_select*", "modeling/meshes/selecting/loops.html#bpy-ops-mesh-loop-multi-select"), ("bpy.ops.mesh.vert_connect_path*", "modeling/meshes/editing/vertex/connect_vertex_path.html#bpy-ops-mesh-vert-connect-path"), @@ -3021,6 +3023,7 @@ url_manual_mapping = ( ("bpy.types.bakesettings*", "render/cycles/baking.html#bpy-types-bakesettings"), ("bpy.types.blendtexture*", "render/materials/legacy_textures/types/blend.html#bpy-types-blendtexture"), ("bpy.types.brush.height*", "sculpt_paint/sculpting/tools/layer.html#bpy-types-brush-height"), + ("bpy.types.brush.jitter*", "sculpt_paint/brush/stroke.html#bpy-types-brush-jitter"), ("bpy.types.castmodifier*", "modeling/modifiers/deform/cast.html#bpy-types-castmodifier"), ("bpy.types.curve.offset*", "modeling/curves/properties/geometry.html#bpy-types-curve-offset"), ("bpy.types.geometrynode*", "modeling/geometry_nodes/index.html#bpy-types-geometrynode"), -- 2.30.2 From 9592cbd972ce5d2ad8499c2810c2c8ab2153b032 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 14 Feb 2023 13:24:17 +1100 Subject: [PATCH 083/182] GNUmakefile: include install directory in 'make deps' message Avoids uncertainly, ensure deps are copied from the right place. --- GNUmakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GNUmakefile b/GNUmakefile index a6b041597c39..f1d48e1e7744 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -398,7 +398,7 @@ endif deps: .FORCE @echo - @echo Configuring dependencies in \"$(DEPS_BUILD_DIR)\" + @echo Configuring dependencies in \"$(DEPS_BUILD_DIR)\", install to \"$(DEPS_INSTALL_DIR)\" @cmake -H"$(DEPS_SOURCE_DIR)" \ -B"$(DEPS_BUILD_DIR)" \ -- 2.30.2 From f0a0f78aa305c6e8ec9f16832672fa6b8eb19627 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 14 Feb 2023 15:53:53 +1100 Subject: [PATCH 084/182] Deps: build one at a time, each using all available cores on Linux Use a MAKE wrapper for 'make deps' on Linux that ensures dependencies are built one at a time. This is preferable because building many dependencies at once made troubleshooting impractical and had the downside that large deps such as LLVM would bottleneck on a single core. This may be used for macOS, so far it's only tested on Linux. --- GNUmakefile | 6 +- .../linux/make_deps_wrapper.sh | 73 +++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100755 build_files/build_environment/linux/make_deps_wrapper.sh diff --git a/GNUmakefile b/GNUmakefile index f1d48e1e7744..f87e5fee972b 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -299,7 +299,11 @@ else ifneq ("$(wildcard $(DEPS_BUILD_DIR)/build.ninja)","") DEPS_BUILD_COMMAND:=ninja else - DEPS_BUILD_COMMAND:=make -s + ifeq ($(OS), Darwin) + DEPS_BUILD_COMMAND:=make -s + else + DEPS_BUILD_COMMAND:="$(BLENDER_DIR)/build_files/build_environment/linux/make_deps_wrapper.sh" -s + endif endif endif diff --git a/build_files/build_environment/linux/make_deps_wrapper.sh b/build_files/build_environment/linux/make_deps_wrapper.sh new file mode 100755 index 000000000000..c1ec4cfc9b18 --- /dev/null +++ b/build_files/build_environment/linux/make_deps_wrapper.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: GPL-2.0-or-later + +# This script ensures: +# - One dependency is built at a time. +# - That dependency uses all available cores. +# +# Without this, simply calling `make -j$(nproc)` from the `${CMAKE_BUILD_DIR}/deps/` +# directory will build all projects at once. +# +# This is undesirable for the following reasons: +# +# - The output from many projects is mixed together, +# making it difficult to track down the cause of a build failure. +# +# - Larger dependencies such as LLVM can bottleneck the build process, +# making it necessary to cancel the build and manually run build commands in each directory. +# +# - Building many projects at once means canceling (Control-C) can lead to the build being in an undefined state. +# It's possible canceling happens as a patch is being applied or files are being copied. +# (steps that aren't part of the compilation process where it's typically safe to cancel). + +if [[ -z "${MY_MAKE_CALL_LEVEL}" ]]; then + export MY_MAKE_CALL_LEVEL=0 + export MY_MAKEFLAGS=$MAKEFLAGS + + # Extract the jobs argument (`-jN`, `-j N`, `--jobs=N`). + add_next=0 + for i in "$@"; do + case $i in + -j*) + MY_JOBS_ARG=$i + if [ "$MY_JOBS_ARG" = "-j" ]; then + add_next=1 + fi + ;; + --jobs=*) + shift # past argument=value + MY_JOBS_ARG=$i + ;; + *) + if (( $add_next == 1 )); then + MY_JOBS_ARG="$MY_JOBS_ARG $i" + add_next=0 + fi + ;; + esac + done + unset i add_next + + if [[ -z "${MY_JOBS_ARG}" ]]; then + export MY_JOBS_ARG="-j$(nproc)" + fi + # Support user defined `MAKEFLAGS`. + export MAKEFLAGS="$MY_MAKEFLAGS -j1" +else + export MY_MAKE_CALL_LEVEL=$(( $MY_MAKE_CALL_LEVEL + 1 )) + if (( $MY_MAKE_CALL_LEVEL == 1 )); then + # Important to set jobs to 1, otherwise user defined jobs argument is used. + export MAKEFLAGS="$MY_MAKEFLAGS -j1" + elif (( $MY_MAKE_CALL_LEVEL == 2 )); then + # This is the level used by each sub-project. + export MAKEFLAGS="$MY_MAKEFLAGS $MY_JOBS_ARG" + fi + # Else leave `MY_MAKEFLAGS` flags as-is, avoids setting a high number of jobs on recursive + # calls (which may easily run out of memory). Let the job-server handle the rest. +fi + +# Useful for troubleshooting the wrapper. +# echo "Call level: $MY_MAKE_CALL_LEVEL, args=$@". + +# Call actual make but ensure recursive calls run via this script. +exec make MAKE="$0" "$@" -- 2.30.2 From 1acfb158b5c27532a96b9cbf1978f99d041d966f Mon Sep 17 00:00:00 2001 From: Falk David Date: Tue, 14 Feb 2023 10:30:49 +0100 Subject: [PATCH 085/182] Revert: Formatting changes space_toolsystem_toolbar --- .../startup/bl_ui/space_toolsystem_toolbar.py | 510 ++++++++---------- 1 file changed, 228 insertions(+), 282 deletions(-) diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py index 533d0976af0f..7e0fe54ab8dd 100644 --- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py +++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py @@ -25,15 +25,14 @@ def kmi_to_string_or_none(kmi): def generate_from_enum_ex( - _context, - *, - idname_prefix, - icon_prefix, - type, - attr, - cursor="DEFAULT", - tooldef_keywords={}, - exclude_filter={}, + _context, *, + idname_prefix, + icon_prefix, + type, + attr, + cursor='DEFAULT', + tooldef_keywords={}, + exclude_filter={}, ): tool_defs = [] for enum in type.bl_rna.properties[attr].enum_items_static: @@ -79,11 +78,12 @@ class _defs_view3d_generic: props = tool.operator_properties("view3d.cursor3d") layout.prop(props, "use_depth") layout.prop(props, "orientation") - return dict( idname="builtin.cursor", label="Cursor", - description=("Set the cursor location, drag to transform"), + description=( + "Set the cursor location, drag to transform" + ), icon="ops.generic.cursor", keymap="3D View Tool: Cursor", draw_settings=draw_settings, @@ -118,7 +118,6 @@ class _defs_view3d_generic: kmi_to_string_or_none(kmi_add), kmi_to_string_or_none(kmi_remove), ) - return dict( idname="builtin.measure", label="Measure", @@ -130,6 +129,7 @@ class _defs_view3d_generic: class _defs_annotate: + def draw_settings_common(context, layout, tool): gpd = context.annotation_data region_type = context.region.type @@ -139,15 +139,15 @@ class _defs_annotate: text = gpd.layers.active_note maxw = 25 if len(text) > maxw: - text = text[: maxw - 5] + ".." + text[-3:] + text = text[:maxw - 5] + '..' + text[-3:] else: text = "" gpl = context.active_annotation_layer if gpl is not None: layout.label(text="Annotation:") - if context.space_data.type in {"VIEW_3D", "SEQUENCE_EDITOR"}: - if region_type == "TOOL_HEADER": + if context.space_data.type in {'VIEW_3D', 'SEQUENCE_EDITOR'}: + if region_type == 'TOOL_HEADER': sub = layout.split(align=True, factor=0.5) sub.ui_units_x = 6.5 sub.prop(gpl, "color", text="") @@ -164,30 +164,21 @@ class _defs_annotate: space_type = tool.space_type tool_settings = context.tool_settings - if space_type == "VIEW_3D": + if space_type == 'VIEW_3D': row = layout.row(align=True) - row.prop( - tool_settings, "annotation_stroke_placement_view3d", text="Placement" - ) - if tool_settings.gpencil_stroke_placement_view3d == "CURSOR": + row.prop(tool_settings, "annotation_stroke_placement_view3d", text="Placement") + if tool_settings.gpencil_stroke_placement_view3d == 'CURSOR': row.prop(tool_settings.gpencil_sculpt, "lockaxis") - elif tool_settings.gpencil_stroke_placement_view3d in {"SURFACE", "STROKE"}: + elif tool_settings.gpencil_stroke_placement_view3d in {'SURFACE', 'STROKE'}: row.prop(tool_settings, "use_gpencil_stroke_endpoints") - elif space_type in { - "IMAGE_EDITOR", - "NODE_EDITOR", - "SEQUENCE_EDITOR", - "CLIP_EDITOR", - }: + elif space_type in {'IMAGE_EDITOR', 'NODE_EDITOR', 'SEQUENCE_EDITOR', 'CLIP_EDITOR'}: row = layout.row(align=True) - row.prop( - tool_settings, "annotation_stroke_placement_view2d", text="Placement" - ) + row.prop(tool_settings, "annotation_stroke_placement_view2d", text="Placement") if tool.idname == "builtin.annotate_line": props = tool.operator_properties("gpencil.annotate") - if region_type == "TOOL_HEADER": + if region_type == 'TOOL_HEADER': row = layout.row() row.ui_units_x = 15 row.prop(props, "arrowstyle_start", text="Start") @@ -199,7 +190,7 @@ class _defs_annotate: col.prop(props, "arrowstyle_end", text="End") elif tool.idname == "builtin.annotate": props = tool.operator_properties("gpencil.annotate") - if region_type == "TOOL_HEADER": + if region_type == 'TOOL_HEADER': row = layout.row() row.prop(props, "use_stabilizer", text="Stabilize Stroke") subrow = layout.row(align=False) @@ -219,10 +210,10 @@ class _defs_annotate: idname="builtin.annotate", label="Annotate", icon="ops.gpencil.draw", - cursor="PAINT_BRUSH", + cursor='PAINT_BRUSH', keymap="Generic Tool: Annotate", draw_settings=draw_settings, - options={"KEYMAP_FALLBACK"}, + options={'KEYMAP_FALLBACK'}, ) @ToolDef.from_fn.with_args(draw_settings=draw_settings_common) @@ -231,10 +222,10 @@ class _defs_annotate: idname="builtin.annotate_line", label="Annotate Line", icon="ops.gpencil.draw.line", - cursor="PAINT_BRUSH", + cursor='PAINT_BRUSH', keymap="Generic Tool: Annotate Line", draw_settings=draw_settings, - options={"KEYMAP_FALLBACK"}, + options={'KEYMAP_FALLBACK'}, ) @ToolDef.from_fn.with_args(draw_settings=draw_settings_common) @@ -243,10 +234,10 @@ class _defs_annotate: idname="builtin.annotate_polygon", label="Annotate Polygon", icon="ops.gpencil.draw.poly", - cursor="PAINT_BRUSH", + cursor='PAINT_BRUSH', keymap="Generic Tool: Annotate Polygon", draw_settings=draw_settings, - options={"KEYMAP_FALLBACK"}, + options={'KEYMAP_FALLBACK'}, ) @ToolDef.from_fn @@ -255,21 +246,21 @@ class _defs_annotate: # TODO: Move this setting to tool_settings prefs = context.preferences layout.prop(prefs.edit, "grease_pencil_eraser_radius", text="Radius") - return dict( idname="builtin.annotate_eraser", label="Annotate Eraser", icon="ops.gpencil.draw.eraser", - cursor="ERASER", + cursor='ERASER', keymap="Generic Tool: Annotate Eraser", draw_settings=draw_settings, - options={"KEYMAP_FALLBACK"}, + options={'KEYMAP_FALLBACK'}, ) class _defs_transform: + def draw_transform_sculpt_tool_settings(context, layout): - if context.mode != "SCULPT": + if context.mode != 'SCULPT': return layout.prop(context.tool_settings.sculpt, "transform_mode") @@ -277,10 +268,7 @@ class _defs_transform: def translate(): def draw_settings(context, layout, _tool): _defs_transform.draw_transform_sculpt_tool_settings(context, layout) - _template_widget.VIEW3D_GGT_xform_gizmo.draw_settings_with_index( - context, layout, 1 - ) - + _template_widget.VIEW3D_GGT_xform_gizmo.draw_settings_with_index(context, layout, 1) return dict( idname="builtin.move", label="Move", @@ -296,10 +284,7 @@ class _defs_transform: def rotate(): def draw_settings(context, layout, _tool): _defs_transform.draw_transform_sculpt_tool_settings(context, layout) - _template_widget.VIEW3D_GGT_xform_gizmo.draw_settings_with_index( - context, layout, 2 - ) - + _template_widget.VIEW3D_GGT_xform_gizmo.draw_settings_with_index(context, layout, 2) return dict( idname="builtin.rotate", label="Rotate", @@ -315,10 +300,7 @@ class _defs_transform: def scale(): def draw_settings(context, layout, _tool): _defs_transform.draw_transform_sculpt_tool_settings(context, layout) - _template_widget.VIEW3D_GGT_xform_gizmo.draw_settings_with_index( - context, layout, 3 - ) - + _template_widget.VIEW3D_GGT_xform_gizmo.draw_settings_with_index(context, layout, 3) return dict( idname="builtin.scale", label="Scale", @@ -333,10 +315,7 @@ class _defs_transform: @ToolDef.from_fn def scale_cage(): def draw_settings(context, layout, _tool): - _template_widget.VIEW3D_GGT_xform_gizmo.draw_settings_with_index( - context, layout, 3 - ) - + _template_widget.VIEW3D_GGT_xform_gizmo.draw_settings_with_index(context, layout, 3) return dict( idname="builtin.scale_cage", label="Scale Cage", @@ -351,10 +330,7 @@ class _defs_transform: def shear(): def draw_settings(context, layout, _tool): # props = tool.operator_properties("transform.shear") - _template_widget.VIEW3D_GGT_xform_gizmo.draw_settings_with_index( - context, layout, 2 - ) - + _template_widget.VIEW3D_GGT_xform_gizmo.draw_settings_with_index(context, layout, 2) return dict( idname="builtin.shear", label="Shear", @@ -372,7 +348,7 @@ class _defs_transform: show_drag = True tool_settings = context.tool_settings - if tool_settings.workspace_tool_type == "FALLBACK": + if tool_settings.workspace_tool_type == 'FALLBACK': show_drag = False if show_drag: @@ -380,14 +356,14 @@ class _defs_transform: layout.prop(props, "drag_action") _defs_transform.draw_transform_sculpt_tool_settings(context, layout) - _template_widget.VIEW3D_GGT_xform_gizmo.draw_settings_with_index( - context, layout, 1 - ) + _template_widget.VIEW3D_GGT_xform_gizmo.draw_settings_with_index(context, layout, 1) return dict( idname="builtin.transform", label="Transform", - description=("Supports any combination of grab, rotate, and scale at once"), + description=( + "Supports any combination of grab, rotate, and scale at once" + ), icon="ops.transform.transform", widget="VIEW3D_GGT_xform_gizmo", keymap="3D View Tool: Transform", @@ -396,6 +372,7 @@ class _defs_transform: class _defs_view3d_select: + @ToolDef.from_fn def select(): return dict( @@ -413,7 +390,6 @@ class _defs_view3d_select: row = layout.row() row.use_property_split = False row.prop(props, "mode", text="", expand=True, icon_only=True) - return dict( idname="builtin.select_box", label="Select Box", @@ -430,7 +406,6 @@ class _defs_view3d_select: row = layout.row() row.use_property_split = False row.prop(props, "mode", text="", expand=True, icon_only=True) - return dict( idname="builtin.select_lasso", label="Select Lasso", @@ -451,7 +426,6 @@ class _defs_view3d_select: def draw_cursor(_context, tool, xy): from gpu_extras.presets import draw_circle_2d - props = tool.operator_properties("view3d.select_circle") radius = props.radius draw_circle_2d(xy, (1.0,) * 4, radius, segments=32) @@ -468,6 +442,7 @@ class _defs_view3d_select: class _defs_view3d_add: + @staticmethod def description_interactive_add(context, _item, _km, *, prefix): km = context.window_manager.keyconfigs.user.keymaps["View3D Placement Modal"] @@ -478,9 +453,9 @@ class _defs_view3d_add: return item if km is not None: - kmi_snap = keymap_item_from_propvalue("SNAP_ON") - kmi_center = keymap_item_from_propvalue("PIVOT_CENTER_ON") - kmi_fixed_aspect = keymap_item_from_propvalue("FIXED_ASPECT_ON") + kmi_snap = keymap_item_from_propvalue('SNAP_ON') + kmi_center = keymap_item_from_propvalue('PIVOT_CENTER_ON') + kmi_fixed_aspect = keymap_item_from_propvalue('FIXED_ASPECT_ON') else: kmi_snap = None kmi_center = None @@ -515,7 +490,7 @@ class _defs_view3d_add: row = layout.row() row.prop(props, "snap_target") - region_is_header = bpy.context.region.type == "TOOL_HEADER" + region_is_header = bpy.context.region.type == 'TOOL_HEADER' if region_is_header: # Don't draw the "extra" popover here as we might have other settings & this should be last. @@ -539,9 +514,7 @@ class _defs_view3d_add: @ToolDef.from_fn def cube_add(): def draw_settings(_context, layout, tool, *, extra=False): - show_extra = _defs_view3d_add.draw_settings_interactive_add( - layout, tool, extra - ) + show_extra = _defs_view3d_add.draw_settings_interactive_add(layout, tool, extra) if show_extra: layout.popover("TOPBAR_PT_tool_settings_extra", text="...") @@ -550,8 +523,7 @@ class _defs_view3d_add: label="Add Cube", icon="ops.mesh.primitive_cube_add_gizmo", description=lambda *args: _defs_view3d_add.description_interactive_add( - *args, - prefix=tip_("Add cube to mesh interactively"), + *args, prefix=tip_("Add cube to mesh interactively"), ), widget="VIEW3D_GGT_placement", keymap="3D View Tool: Object, Add Primitive", @@ -561,9 +533,7 @@ class _defs_view3d_add: @ToolDef.from_fn def cone_add(): def draw_settings(_context, layout, tool, *, extra=False): - show_extra = _defs_view3d_add.draw_settings_interactive_add( - layout, tool, extra - ) + show_extra = _defs_view3d_add.draw_settings_interactive_add(layout, tool, extra) if extra: return @@ -579,8 +549,7 @@ class _defs_view3d_add: label="Add Cone", icon="ops.mesh.primitive_cone_add_gizmo", description=lambda *args: _defs_view3d_add.description_interactive_add( - *args, - prefix=tip_("Add cone to mesh interactively"), + *args, prefix=tip_("Add cone to mesh interactively"), ), widget="VIEW3D_GGT_placement", keymap="3D View Tool: Object, Add Primitive", @@ -590,9 +559,7 @@ class _defs_view3d_add: @ToolDef.from_fn def cylinder_add(): def draw_settings(_context, layout, tool, *, extra=False): - show_extra = _defs_view3d_add.draw_settings_interactive_add( - layout, tool, extra - ) + show_extra = _defs_view3d_add.draw_settings_interactive_add(layout, tool, extra) if extra: return @@ -602,14 +569,12 @@ class _defs_view3d_add: if show_extra: layout.popover("TOPBAR_PT_tool_settings_extra", text="...") - return dict( idname="builtin.primitive_cylinder_add", label="Add Cylinder", icon="ops.mesh.primitive_cylinder_add_gizmo", description=lambda *args: _defs_view3d_add.description_interactive_add( - *args, - prefix=tip_("Add cylinder to mesh interactively"), + *args, prefix=tip_("Add cylinder to mesh interactively"), ), widget="VIEW3D_GGT_placement", keymap="3D View Tool: Object, Add Primitive", @@ -619,9 +584,7 @@ class _defs_view3d_add: @ToolDef.from_fn def uv_sphere_add(): def draw_settings(_context, layout, tool, *, extra=False): - show_extra = _defs_view3d_add.draw_settings_interactive_add( - layout, tool, extra - ) + show_extra = _defs_view3d_add.draw_settings_interactive_add(layout, tool, extra) if extra: return @@ -631,14 +594,12 @@ class _defs_view3d_add: if show_extra: layout.popover("TOPBAR_PT_tool_settings_extra", text="...") - return dict( idname="builtin.primitive_uv_sphere_add", label="Add UV Sphere", icon="ops.mesh.primitive_sphere_add_gizmo", description=lambda *args: _defs_view3d_add.description_interactive_add( - *args, - prefix=tip_("Add sphere to mesh interactively"), + *args, prefix=tip_("Add sphere to mesh interactively"), ), widget="VIEW3D_GGT_placement", keymap="3D View Tool: Object, Add Primitive", @@ -648,9 +609,7 @@ class _defs_view3d_add: @ToolDef.from_fn def ico_sphere_add(): def draw_settings(_context, layout, tool, *, extra=False): - show_extra = _defs_view3d_add.draw_settings_interactive_add( - layout, tool, extra - ) + show_extra = _defs_view3d_add.draw_settings_interactive_add(layout, tool, extra) if extra: return @@ -659,14 +618,12 @@ class _defs_view3d_add: if show_extra: layout.popover("TOPBAR_PT_tool_settings_extra", text="...") - return dict( idname="builtin.primitive_ico_sphere_add", label="Add Ico Sphere", icon="ops.mesh.primitive_sphere_add_gizmo", description=lambda *args: _defs_view3d_add.description_interactive_add( - *args, - prefix=tip_("Add sphere to mesh interactively"), + *args, prefix=tip_("Add sphere to mesh interactively"), ), widget="VIEW3D_GGT_placement", keymap="3D View Tool: Object, Add Primitive", @@ -677,8 +634,8 @@ class _defs_view3d_add: # ----------------------------------------------------------------------------- # Object Modes (named based on context.mode) - class _defs_edit_armature: + @ToolDef.from_fn def roll(): return dict( @@ -725,7 +682,7 @@ class _defs_edit_armature: return dict( idname="builtin.extrude_to_cursor", label="Extrude to Cursor", - cursor="CROSSHAIR", + cursor='CROSSHAIR', icon="ops.armature.extrude_cursor", widget=None, keymap=(), @@ -733,6 +690,7 @@ class _defs_edit_armature: class _defs_edit_mesh: + @ToolDef.from_fn def rip_region(): def draw_settings(_context, layout, tool): @@ -765,7 +723,6 @@ class _defs_edit_mesh: props = tool.operator_properties("mesh.polybuild_face_at_cursor_move") props_macro = props.MESH_OT_polybuild_face_at_cursor layout.prop(props_macro, "create_quads") - return dict( idname="builtin.poly_build", label="Poly Build", @@ -866,9 +823,9 @@ class _defs_edit_mesh: def draw_settings(context, layout, tool, *, extra=False): props = tool.operator_properties("mesh.bevel") - region_is_header = context.region.type == "TOOL_HEADER" + region_is_header = context.region.type == 'TOOL_HEADER' - edge_bevel = props.affect == "EDGES" + edge_bevel = props.affect == 'EDGES' if not extra: if region_is_header: @@ -910,7 +867,7 @@ class _defs_edit_mesh: col.active = edge_bevel col.prop(props, "miter_outer", text="Miter Outer") col.prop(props, "miter_inner", text="Inner") - if props.miter_inner == "ARC": + if props.miter_inner == 'ARC': col.prop(props, "spread") layout.separator() @@ -923,11 +880,9 @@ class _defs_edit_mesh: layout.prop(props, "profile_type") - if props.profile_type == "CUSTOM": + if props.profile_type == 'CUSTOM': tool_settings = context.tool_settings - layout.template_curveprofile( - tool_settings, "custom_bevel_profile_preset" - ) + layout.template_curveprofile(tool_settings, "custom_bevel_profile_preset") return dict( idname="builtin.bevel", @@ -944,7 +899,9 @@ class _defs_edit_mesh: idname="builtin.extrude_region", label="Extrude Region", # The operator description isn't useful in this case, give our own. - description=("Extrude freely or along an axis"), + description=( + "Extrude freely or along an axis" + ), icon="ops.mesh.extrude_region_move", widget="VIEW3D_GGT_xform_extrude", # Important to use same operator as 'E' key. @@ -972,7 +929,6 @@ class _defs_edit_mesh: props = tool.operator_properties("mesh.extrude_region_shrink_fatten") props_macro = props.TRANSFORM_OT_shrink_fatten layout.prop(props_macro, "use_even_offset") - return dict( idname="builtin.extrude_along_normals", label="Extrude Along Normals", @@ -1002,7 +958,7 @@ class _defs_edit_mesh: return dict( idname="builtin.extrude_to_cursor", label="Extrude to Cursor", - cursor="CROSSHAIR", + cursor='CROSSHAIR', icon="ops.mesh.dupli_extrude_cursor", widget=None, keymap=(), @@ -1011,6 +967,7 @@ class _defs_edit_mesh: @ToolDef.from_fn def loopcut_slide(): + def draw_settings(_context, layout, tool): props = tool.operator_properties("mesh.loopcut_slide") props_macro = props.MESH_OT_loopcut @@ -1042,7 +999,6 @@ class _defs_edit_mesh: def draw_settings(_context, layout, tool): props = tool.operator_properties("mesh.vertices_smooth") layout.prop(props, "repeat") - return dict( idname="builtin.smooth", label="Smooth", @@ -1059,7 +1015,6 @@ class _defs_edit_mesh: layout.prop(props, "uniform") layout.prop(props, "normal") layout.prop(props, "seed") - return dict( idname="builtin.randomize", label="Randomize", @@ -1113,7 +1068,7 @@ class _defs_edit_mesh: layout.prop(props, "use_occlude_geometry") layout.prop(props, "only_selected") layout.prop(props, "xray") - region_is_header = bpy.context.region.type == "TOOL_HEADER" + region_is_header = bpy.context.region.type == 'TOOL_HEADER' if region_is_header: show_extra = True else: @@ -1128,16 +1083,15 @@ class _defs_edit_mesh: layout.prop(props, "angle_snapping_increment", text="") if show_extra: layout.popover("TOPBAR_PT_tool_settings_extra", text="...") - return dict( idname="builtin.knife", label="Knife", - cursor="KNIFE", + cursor='KNIFE', icon="ops.mesh.knife_tool", widget=None, keymap=(), draw_settings=draw_settings, - options={"KEYMAP_FALLBACK"}, + options={'KEYMAP_FALLBACK'}, ) @ToolDef.from_fn @@ -1148,7 +1102,6 @@ class _defs_edit_mesh: layout.prop(props, "clear_inner") layout.prop(props, "clear_outer") layout.prop(props, "threshold") - return dict( idname="builtin.bisect", label="Bisect", @@ -1160,6 +1113,7 @@ class _defs_edit_mesh: class _defs_edit_curve: + @ToolDef.from_fn def draw(): def draw_settings(context, layout, _tool, *, extra=False): @@ -1168,7 +1122,7 @@ class _defs_edit_curve: cps = tool_settings.curve_paint_settings region_type = context.region.type - if region_type == "TOOL_HEADER": + if region_type == 'TOOL_HEADER': if not extra: layout.prop(cps, "curve_type", text="") layout.prop(cps, "depth_mode", expand=True) @@ -1178,13 +1132,13 @@ class _defs_edit_curve: layout.use_property_split = True layout.use_property_decorate = False - if region_type != "TOOL_HEADER": + if region_type != 'TOOL_HEADER': layout.prop(cps, "curve_type") layout.separator() - if cps.curve_type == "BEZIER": + if cps.curve_type == 'BEZIER': layout.prop(cps, "fit_method") layout.prop(cps, "error_threshold") - if region_type != "TOOL_HEADER": + if region_type != 'TOOL_HEADER': row = layout.row(heading="Detect Corners", align=True) else: row = layout.row(heading="Corners", align=True) @@ -1202,13 +1156,13 @@ class _defs_edit_curve: col.prop(cps, "radius_max", text="Max") col.prop(cps, "use_pressure_radius") - if region_type != "TOOL_HEADER" or cps.depth_mode == "SURFACE": + if region_type != 'TOOL_HEADER' or cps.depth_mode == 'SURFACE': layout.separator() - if region_type != "TOOL_HEADER": + if region_type != 'TOOL_HEADER': row = layout.row() row.prop(cps, "depth_mode", expand=True) - if cps.depth_mode == "SURFACE": + if cps.depth_mode == 'SURFACE': col = layout.column() col.prop(cps, "surface_offset") col.prop(cps, "use_offset_absolute") @@ -1220,7 +1174,7 @@ class _defs_edit_curve: return dict( idname="builtin.draw", label="Draw", - cursor="PAINT_BRUSH", + cursor='PAINT_BRUSH', icon="ops.curve.draw", widget=None, keymap=(), @@ -1243,7 +1197,7 @@ class _defs_edit_curve: return dict( idname="builtin.extrude_cursor", label="Extrude to Cursor", - cursor="CROSSHAIR", + cursor='CROSSHAIR', icon="ops.curve.extrude_cursor", widget=None, keymap=(), @@ -1255,11 +1209,10 @@ class _defs_edit_curve: props = tool.operator_properties("curve.pen") layout.prop(props, "close_spline") layout.prop(props, "extrude_handle") - return dict( idname="builtin.pen", label="Curve Pen", - cursor="CROSSHAIR", + cursor='CROSSHAIR', icon="ops.curve.pen", widget=None, keymap=(), @@ -1281,7 +1234,9 @@ class _defs_edit_curve: return dict( idname="builtin.radius", label="Radius", - description=("Expand or contract the radius of the selected curve points"), + description=( + "Expand or contract the radius of the selected curve points" + ), icon="ops.curve.radius", widget="VIEW3D_GGT_tool_generic_handle_free", keymap=(), @@ -1294,7 +1249,6 @@ class _defs_edit_curve: layout.prop(props, "uniform") layout.prop(props, "normal") layout.prop(props, "seed") - return dict( idname="builtin.randomize", label="Randomize", @@ -1306,6 +1260,7 @@ class _defs_edit_curve: class _defs_pose: + @ToolDef.from_fn def breakdown(): return dict( @@ -1338,6 +1293,7 @@ class _defs_pose: class _defs_particle: + @staticmethod def generate_from_brushes(context): return generate_from_enum_ex( @@ -1350,6 +1306,7 @@ class _defs_particle: class _defs_sculpt: + @staticmethod def generate_from_brushes(context): return generate_from_enum_ex( @@ -1453,7 +1410,6 @@ class _defs_sculpt: layout.prop(props, "trim_mode", expand=False) layout.prop(props, "trim_extrude_mode", expand=False) layout.prop(props, "use_cursor_depth", expand=False) - return dict( idname="builtin.box_trim", label="Box Trim", @@ -1471,7 +1427,6 @@ class _defs_sculpt: layout.prop(props, "trim_orientation", expand=False) layout.prop(props, "trim_extrude_mode", expand=False) layout.prop(props, "use_cursor_depth", expand=False) - return dict( idname="builtin.lasso_trim", label="Lasso Trim", @@ -1505,10 +1460,10 @@ class _defs_sculpt: row = layout.row(align=True) row.prop(props, "deform_axis") layout.prop(props, "orientation", expand=False) - if props.type == "SURFACE_SMOOTH": + if props.type == 'SURFACE_SMOOTH': layout.prop(props, "surface_smooth_shape_preservation", expand=False) layout.prop(props, "surface_smooth_current_vertex", expand=False) - elif props.type == "SHARPEN": + elif props.type == 'SHARPEN': layout.prop(props, "sharpen_smooth_ratio", expand=False) layout.prop(props, "sharpen_intensify_detail_strength", expand=False) layout.prop(props, "sharpen_curvature_smooth_iterations", expand=False) @@ -1550,7 +1505,7 @@ class _defs_sculpt: def draw_settings(_context, layout, tool): props = tool.operator_properties("sculpt.color_filter") layout.prop(props, "type", expand=False) - if props.type == "FILL": + if props.type == 'FILL': layout.prop(props, "fill_color", expand=False) layout.prop(props, "strength") @@ -1599,16 +1554,15 @@ class _defs_sculpt: class _defs_vertex_paint: + @staticmethod def poll_select_mask(context): if context is None: return True ob = context.active_object - return ( - ob - and ob.type == "MESH" - and (ob.data.use_paint_mask or ob.data.use_paint_mask_vertex) - ) + return (ob and ob.type == 'MESH' and + (ob.data.use_paint_mask or + ob.data.use_paint_mask_vertex)) @staticmethod def generate_from_brushes(context): @@ -1622,12 +1576,14 @@ class _defs_vertex_paint: class _defs_texture_paint: + @staticmethod def poll_select_mask(context): if context is None: return True ob = context.active_object - return ob and ob.type == "MESH" and (ob.data.use_paint_mask) + return (ob and ob.type == 'MESH' and + (ob.data.use_paint_mask)) @staticmethod def generate_from_brushes(context): @@ -1637,21 +1593,20 @@ class _defs_texture_paint: icon_prefix="brush.paint_texture.", type=bpy.types.Brush, attr="image_tool", - cursor="PAINT_CROSS", + cursor='PAINT_CROSS', ) class _defs_weight_paint: + @staticmethod def poll_select_mask(context): if context is None: return True ob = context.active_object - return ( - ob - and ob.type == "MESH" - and (ob.data.use_paint_mask or ob.data.use_paint_mask_vertex) - ) + return (ob and ob.type == 'MESH' and + (ob.data.use_paint_mask or + ob.data.use_paint_mask_vertex)) @staticmethod def generate_from_brushes(context): @@ -1673,12 +1628,11 @@ class _defs_weight_paint: else: return layout.label(text="Weight: %.3f" % weight) - return dict( idname="builtin.sample_weight", label="Sample Weight", icon="ops.paint.weight_sample", - cursor="EYEDROPPER", + cursor='EYEDROPPER', widget=None, keymap=(), draw_settings=draw_settings, @@ -1690,7 +1644,7 @@ class _defs_weight_paint: idname="builtin.sample_vertex_group", label="Sample Vertex Group", icon="ops.paint.weight_sample_group", - cursor="EYEDROPPER", + cursor='EYEDROPPER', widget=None, keymap=(), ) @@ -1701,7 +1655,6 @@ class _defs_weight_paint: brush = context.tool_settings.weight_paint.brush if brush is not None: from bl_ui.properties_paint_common import UnifiedPaintPanel - UnifiedPaintPanel.prop_unified( layout, context, @@ -1735,6 +1688,7 @@ class _defs_weight_paint: class _defs_image_generic: + @staticmethod def poll_uvedit(context): if context is None: @@ -1751,7 +1705,9 @@ class _defs_image_generic: return dict( idname="builtin.cursor", label="Cursor", - description=("Set the cursor location, drag to transform"), + description=( + "Set the cursor location, drag to transform" + ), icon="ops.generic.cursor", keymap=(), ) @@ -1763,11 +1719,12 @@ class _defs_image_generic: def draw_settings(_context, layout, tool): props = tool.operator_properties("image.sample") layout.prop(props, "size") - return dict( idname="builtin.sample", label="Sample", - description=("Sample pixel values under the cursor"), + description=( + "Sample pixel values under the cursor" + ), icon="ops.paint.weight_sample", # XXX, needs own icon. keymap="Image Editor Tool: Sample", draw_settings=draw_settings, @@ -1775,6 +1732,7 @@ class _defs_image_generic: class _defs_image_uv_transform: + @ToolDef.from_fn def translate(): return dict( @@ -1813,7 +1771,9 @@ class _defs_image_uv_transform: return dict( idname="builtin.transform", label="Transform", - description=("Supports any combination of grab, rotate, and scale at once"), + description=( + "Supports any combination of grab, rotate, and scale at once" + ), icon="ops.transform.transform", widget="IMAGE_GGT_gizmo2d", # No keymap default action, only for gizmo! @@ -1821,6 +1781,7 @@ class _defs_image_uv_transform: class _defs_image_uv_select: + @ToolDef.from_fn def select(): return dict( @@ -1838,7 +1799,6 @@ class _defs_image_uv_select: row = layout.row() row.use_property_split = False row.prop(props, "mode", text="", expand=True, icon_only=True) - return dict( idname="builtin.select_box", label="Select Box", @@ -1855,7 +1815,6 @@ class _defs_image_uv_select: row = layout.row() row.use_property_split = False row.prop(props, "mode", text="", expand=True, icon_only=True) - return dict( idname="builtin.select_lasso", label="Select Lasso", @@ -1876,7 +1835,6 @@ class _defs_image_uv_select: def draw_cursor(_context, tool, xy): from gpu_extras.presets import draw_circle_2d - props = tool.operator_properties("uv.select_circle") radius = props.radius draw_circle_2d(xy, (1.0,) * 4, radius, segments=32) @@ -1893,6 +1851,7 @@ class _defs_image_uv_select: class _defs_image_uv_edit: + @ToolDef.from_fn def rip_region(): return dict( @@ -1902,16 +1861,16 @@ class _defs_image_uv_edit: # TODO: generic operator (UV version of `VIEW3D_GGT_tool_generic_handle_free`). widget=None, keymap=(), - options={"KEYMAP_FALLBACK"}, + options={'KEYMAP_FALLBACK'}, ) class _defs_image_uv_sculpt: + @staticmethod def generate_from_brushes(context): def draw_cursor(context, _tool, xy): from gpu_extras.presets import draw_circle_2d - tool_settings = context.tool_settings uv_sculpt = tool_settings.uv_sculpt if not uv_sculpt.show_brush: @@ -1936,12 +1895,13 @@ class _defs_image_uv_sculpt: operator="sculpt.uv_sculpt_stroke", keymap="Image Editor Tool: Uv, Sculpt Stroke", draw_cursor=draw_cursor, - options={"KEYMAP_FALLBACK"}, + options={'KEYMAP_FALLBACK'}, ), ) class _defs_gpencil_paint: + @staticmethod def gpencil_primitive_toolbar(context, layout, _tool, props): paint = context.tool_settings.gpencil_paint @@ -1974,7 +1934,7 @@ class _defs_gpencil_paint: icon_prefix="brush.gpencil_draw.", type=bpy.types.Brush, attr="gpencil_tool", - cursor="DOT", + cursor='DOT', tooldef_keywords=dict( operator="gpencil.draw", ), @@ -1987,12 +1947,11 @@ class _defs_gpencil_paint: row = layout.row() row.use_property_split = False row.prop(props, "flat_caps") - return dict( idname="builtin.cutter", label="Cutter", icon="ops.gpencil.stroke_cutter", - cursor="KNIFE", + cursor='KNIFE', widget=None, keymap=(), draw_settings=draw_settings, @@ -2008,7 +1967,7 @@ class _defs_gpencil_paint: idname="builtin.line", label="Line", icon="ops.gpencil.primitive_line", - cursor="CROSSHAIR", + cursor='CROSSHAIR', widget=None, keymap=(), draw_settings=draw_settings, @@ -2024,7 +1983,7 @@ class _defs_gpencil_paint: idname="builtin.polyline", label="Polyline", icon="ops.gpencil.primitive_polyline", - cursor="CROSSHAIR", + cursor='CROSSHAIR', widget=None, keymap=(), draw_settings=draw_settings, @@ -2040,7 +1999,7 @@ class _defs_gpencil_paint: idname="builtin.box", label="Box", icon="ops.gpencil.primitive_box", - cursor="CROSSHAIR", + cursor='CROSSHAIR', widget=None, keymap=(), draw_settings=draw_settings, @@ -2056,7 +2015,7 @@ class _defs_gpencil_paint: idname="builtin.circle", label="Circle", icon="ops.gpencil.primitive_circle", - cursor="CROSSHAIR", + cursor='CROSSHAIR', widget=None, keymap=(), draw_settings=draw_settings, @@ -2072,7 +2031,7 @@ class _defs_gpencil_paint: idname="builtin.arc", label="Arc", icon="ops.gpencil.primitive_arc", - cursor="CROSSHAIR", + cursor='CROSSHAIR', widget=None, keymap=(), draw_settings=draw_settings, @@ -2088,7 +2047,7 @@ class _defs_gpencil_paint: idname="builtin.curve", label="Curve", icon="ops.gpencil.primitive_curve", - cursor="CROSSHAIR", + cursor='CROSSHAIR', widget=None, keymap=(), draw_settings=draw_settings, @@ -2101,12 +2060,11 @@ class _defs_gpencil_paint: row = layout.row() row.use_property_split = False row.prop(props, "mode", expand=True) - return dict( idname="builtin.eyedropper", label="Eyedropper", icon="ops.paint.eyedropper_add", - cursor="EYEDROPPER", + cursor='EYEDROPPER', widget=None, keymap=(), draw_settings=draw_settings, @@ -2126,7 +2084,7 @@ class _defs_gpencil_paint: idname="builtin.interpolate", label="Interpolate", icon="ops.pose.breakdowner", - cursor="DEFAULT", + cursor='DEFAULT', widget=None, keymap=(), draw_settings=draw_settings, @@ -2136,11 +2094,11 @@ class _defs_gpencil_paint: class _defs_gpencil_edit: def is_segment(context): ts = context.scene.tool_settings - if context.mode == "EDIT_GPENCIL": - return ts.gpencil_selectmode_edit == "SEGMENT" - elif context.mode == "SCULPT_GPENCIL": + if context.mode == 'EDIT_GPENCIL': + return ts.gpencil_selectmode_edit == 'SEGMENT' + elif context.mode == 'SCULPT_GPENCIL': return ts.use_gpencil_select_mask_segment - elif context.mode == "VERTEX_GPENCIL": + elif context.mode == 'VERTEX_GPENCIL': return ts.use_gpencil_vertex_select_mask_segment else: return False @@ -2159,10 +2117,7 @@ class _defs_gpencil_edit: def select(): def draw_settings(context, layout, _tool): if _defs_gpencil_edit.is_segment(context): - layout.prop( - context.tool_settings.gpencil_sculpt, "intersection_threshold" - ) - + layout.prop(context.tool_settings.gpencil_sculpt, "intersection_threshold") return dict( idname="builtin.select", label="Tweak", @@ -2180,10 +2135,7 @@ class _defs_gpencil_edit: row.use_property_split = False row.prop(props, "mode", text="", expand=True, icon_only=True) if _defs_gpencil_edit.is_segment(context): - layout.prop( - context.tool_settings.gpencil_sculpt, "intersection_threshold" - ) - + layout.prop(context.tool_settings.gpencil_sculpt, "intersection_threshold") return dict( idname="builtin.select_box", label="Select Box", @@ -2201,10 +2153,7 @@ class _defs_gpencil_edit: row.use_property_split = False row.prop(props, "mode", text="", expand=True, icon_only=True) if _defs_gpencil_edit.is_segment(context): - layout.prop( - context.tool_settings.gpencil_sculpt, "intersection_threshold" - ) - + layout.prop(context.tool_settings.gpencil_sculpt, "intersection_threshold") return dict( idname="builtin.select_lasso", label="Select Lasso", @@ -2223,13 +2172,10 @@ class _defs_gpencil_edit: row.prop(props, "mode", text="", expand=True, icon_only=True) layout.prop(props, "radius") if _defs_gpencil_edit.is_segment(context): - layout.prop( - context.tool_settings.gpencil_sculpt, "intersection_threshold" - ) + layout.prop(context.tool_settings.gpencil_sculpt, "intersection_threshold") def draw_cursor(_context, tool, xy): from gpu_extras.presets import draw_circle_2d - props = tool.operator_properties("gpencil.select_circle") radius = props.radius draw_circle_2d(xy, (1.0,) * 4, radius, segments=32) @@ -2249,8 +2195,11 @@ class _defs_gpencil_edit: return dict( idname="builtin.radius", label="Radius", - description=("Expand or contract the radius of the selected points"), + description=( + "Expand or contract the radius of the selected points" + ), icon="ops.gpencil.radius", + widget=None, keymap=(), ) @@ -2298,7 +2247,7 @@ class _defs_gpencil_edit: idname="builtin.transform_fill", label="Transform Fill", icon="ops.gpencil.transform_fill", - cursor="DEFAULT", + cursor='DEFAULT', widget=None, keymap=(), draw_settings=draw_settings, @@ -2319,7 +2268,7 @@ class _defs_gpencil_edit: idname="builtin.interpolate", label="Interpolate", icon="ops.pose.breakdowner", - cursor="DEFAULT", + cursor='DEFAULT', widget=None, keymap=(), draw_settings=draw_settings, @@ -2327,21 +2276,16 @@ class _defs_gpencil_edit: class _defs_gpencil_sculpt: + @staticmethod def poll_select_mask(context): if context is None: return True ob = context.active_object ts = context.scene.tool_settings - return ( - ob - and ob.type == "GPENCIL" - and ( - ts.use_gpencil_select_mask_point - or ts.use_gpencil_select_mask_stroke - or ts.use_gpencil_select_mask_segment - ) - ) + return ob and ob.type == 'GPENCIL' and (ts.use_gpencil_select_mask_point or + ts.use_gpencil_select_mask_stroke or + ts.use_gpencil_select_mask_segment) @staticmethod def generate_from_brushes(context): @@ -2358,6 +2302,7 @@ class _defs_gpencil_sculpt: class _defs_gpencil_weight: + @staticmethod def generate_from_brushes(context): return generate_from_enum_ex( @@ -2373,6 +2318,7 @@ class _defs_gpencil_weight: class _defs_curves_sculpt: + @ToolDef.from_fn def selection_paint(): return dict( @@ -2388,7 +2334,7 @@ class _defs_curves_sculpt: idname="builtin_brush.comb", label="Comb", icon="ops.curves.sculpt_comb", - data_block="COMB", + data_block='COMB', ) @ToolDef.from_fn @@ -2397,7 +2343,7 @@ class _defs_curves_sculpt: idname="builtin_brush.add", label="Add", icon="ops.curves.sculpt_add", - data_block="ADD", + data_block='ADD', ) @ToolDef.from_fn @@ -2406,7 +2352,7 @@ class _defs_curves_sculpt: idname="builtin_brush.delete", label="Delete", icon="ops.curves.sculpt_delete", - data_block="DELETE", + data_block='DELETE', ) @ToolDef.from_fn @@ -2415,7 +2361,7 @@ class _defs_curves_sculpt: idname="builtin_brush.snake_hook", label="Snake Hook", icon="ops.curves.sculpt_snake_hook", - data_block="SNAKE_HOOK", + data_block='SNAKE_HOOK', ) @ToolDef.from_fn @@ -2424,7 +2370,7 @@ class _defs_curves_sculpt: idname="builtin_brush.grow_shrink", label="Grow/Shrink", icon="ops.curves.sculpt_grow_shrink", - data_block="GROW_SHRINK", + data_block='GROW_SHRINK', ) @ToolDef.from_fn @@ -2433,7 +2379,7 @@ class _defs_curves_sculpt: idname="builtin_brush.pinch", label="Pinch", icon="ops.curves.sculpt_pinch", - data_block="PINCH", + data_block='PINCH', ) @ToolDef.from_fn @@ -2442,7 +2388,7 @@ class _defs_curves_sculpt: idname="builtin_brush.smooth", label="Smooth", icon="ops.curves.sculpt_smooth", - data_block="SMOOTH", + data_block='SMOOTH', ) @ToolDef.from_fn @@ -2451,7 +2397,7 @@ class _defs_curves_sculpt: idname="builtin_brush.puff", label="Puff", icon="ops.curves.sculpt_puff", - data_block="PUFF", + data_block='PUFF', ) @ToolDef.from_fn @@ -2474,21 +2420,16 @@ class _defs_curves_sculpt: class _defs_gpencil_vertex: + @staticmethod def poll_select_mask(context): if context is None: return True ob = context.active_object ts = context.scene.tool_settings - return ( - ob - and ob.type == "GPENCIL" - and ( - ts.use_gpencil_vertex_select_mask_point - or ts.use_gpencil_vertex_select_mask_stroke - or ts.use_gpencil_vertex_select_mask_segment - ) - ) + return ob and ob.type == 'GPENCIL' and (ts.use_gpencil_vertex_select_mask_point or + ts.use_gpencil_vertex_select_mask_stroke or + ts.use_gpencil_vertex_select_mask_segment) @staticmethod def generate_from_brushes(context): @@ -2498,7 +2439,7 @@ class _defs_gpencil_vertex: icon_prefix="brush.paint_vertex.", type=bpy.types.Brush, attr="gpencil_vertex_tool", - cursor="DOT", + cursor='DOT', tooldef_keywords=dict( operator="gpencil.vertex_paint", ), @@ -2506,6 +2447,7 @@ class _defs_gpencil_vertex: class _defs_node_select: + @ToolDef.from_fn def select(): return dict( @@ -2523,7 +2465,6 @@ class _defs_node_select: row = layout.row() row.use_property_split = False row.prop(props, "mode", text="", expand=True, icon_only=True) - return dict( idname="builtin.select_box", label="Select Box", @@ -2540,7 +2481,6 @@ class _defs_node_select: row = layout.row() row.use_property_split = False row.prop(props, "mode", text="", expand=True, icon_only=True) - return dict( idname="builtin.select_lasso", label="Select Lasso", @@ -2561,7 +2501,6 @@ class _defs_node_select: def draw_cursor(_context, tool, xy): from gpu_extras.presets import draw_circle_2d - props = tool.operator_properties("node.select_circle") radius = props.radius draw_circle_2d(xy, (1.0,) * 4, radius, segments=32) @@ -2578,6 +2517,7 @@ class _defs_node_select: class _defs_node_edit: + @ToolDef.from_fn def links_cut(): return dict( @@ -2586,17 +2526,20 @@ class _defs_node_edit: icon="ops.node.links_cut", widget=None, keymap="Node Tool: Links Cut", - options={"KEYMAP_FALLBACK"}, + options={'KEYMAP_FALLBACK'}, ) class _defs_sequencer_generic: + @ToolDef.from_fn def cursor(): return dict( idname="builtin.cursor", label="Cursor", - description=("Set the cursor location, drag to transform"), + description=( + "Set the cursor location, drag to transform" + ), icon="ops.generic.cursor", keymap="Sequencer Tool: Cursor", ) @@ -2608,16 +2551,15 @@ class _defs_sequencer_generic: row = layout.row() row.use_property_split = False row.prop(props, "type", expand=True) - return dict( idname="builtin.blade", label="Blade", icon="ops.sequencer.blade", - cursor="CROSSHAIR", + cursor='CROSSHAIR', widget=None, keymap="Sequencer Tool: Blade", draw_settings=draw_settings, - options={"KEYMAP_FALLBACK"}, + options={'KEYMAP_FALLBACK'}, ) @ToolDef.from_fn @@ -2625,7 +2567,9 @@ class _defs_sequencer_generic: return dict( idname="builtin.sample", label="Sample", - description=("Sample pixel values under the cursor"), + description=( + "Sample pixel values under the cursor" + ), icon="ops.paint.weight_sample", # XXX, needs own icon. keymap="Sequencer Tool: Sample", ) @@ -2668,7 +2612,9 @@ class _defs_sequencer_generic: return dict( idname="builtin.transform", label="Transform", - description=("Supports any combination of grab, rotate, and scale at once"), + description=( + "Supports any combination of grab, rotate, and scale at once" + ), icon="ops.transform.transform", widget="SEQUENCER_GGT_gizmo2d", # No keymap default action, only for gizmo! @@ -2694,7 +2640,6 @@ class _defs_sequencer_select: row.use_property_split = False row.prop(props, "mode", text="", expand=True, icon_only=True) pass - return dict( idname="builtin.select_box", label="Select Box", @@ -2706,10 +2651,10 @@ class _defs_sequencer_select: class IMAGE_PT_tools_active(ToolSelectPanelHelper, Panel): - bl_space_type = "IMAGE_EDITOR" - bl_region_type = "TOOLS" + bl_space_type = 'IMAGE_EDITOR' + bl_region_type = 'TOOLS' bl_label = "Tools" # not visible - bl_options = {"HIDE_HEADER"} + bl_options = {'HIDE_HEADER'} # Satisfy the 'ToolSelectPanelHelper' API. keymap_prefix = "Image Editor Tool:" @@ -2721,7 +2666,7 @@ class IMAGE_PT_tools_active(ToolSelectPanelHelper, Panel): def tools_from_context(cls, context, mode=None): if mode is None: if context.space_data is None: - mode = "VIEW" + mode = 'VIEW' else: mode = context.space_data.mode for tools in (cls._tools[None], cls._tools.get(mode, ())): @@ -2769,11 +2714,11 @@ class IMAGE_PT_tools_active(ToolSelectPanelHelper, Panel): None: [ # for all modes ], - "VIEW": [ + 'VIEW': [ _defs_image_generic.sample, *_tools_annotate, ], - "UV": [ + 'UV': [ *_tools_select, _defs_image_generic.cursor, None, @@ -2789,10 +2734,10 @@ class IMAGE_PT_tools_active(ToolSelectPanelHelper, Panel): else () ), ], - "MASK": [ + 'MASK': [ None, ], - "PAINT": [ + 'PAINT': [ _defs_texture_paint.generate_from_brushes, None, *_tools_annotate, @@ -2801,10 +2746,10 @@ class IMAGE_PT_tools_active(ToolSelectPanelHelper, Panel): class NODE_PT_tools_active(ToolSelectPanelHelper, Panel): - bl_space_type = "NODE_EDITOR" - bl_region_type = "TOOLS" + bl_space_type = 'NODE_EDITOR' + bl_region_type = 'TOOLS' bl_label = "Tools" # not visible - bl_options = {"HIDE_HEADER"} + bl_options = {'HIDE_HEADER'} # Satisfy the 'ToolSelectPanelHelper' API. keymap_prefix = "Node Editor Tool:" @@ -2865,10 +2810,10 @@ class NODE_PT_tools_active(ToolSelectPanelHelper, Panel): class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): - bl_space_type = "VIEW_3D" - bl_region_type = "TOOLS" + bl_space_type = 'VIEW_3D' + bl_region_type = 'TOOLS' bl_label = "Tools" # not visible - bl_options = {"HIDE_HEADER"} + bl_options = {'HIDE_HEADER'} # Satisfy the 'ToolSelectPanelHelper' API. keymap_prefix = "3D View Tool:" @@ -2957,12 +2902,12 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): # _defs_view3d_generic.cursor, # End group. ], - "OBJECT": [ + 'OBJECT': [ *_tools_default, None, _tools_view3d_add, ], - "POSE": [ + 'POSE': [ *_tools_default, None, ( @@ -2971,7 +2916,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): _defs_pose.relax, ), ], - "EDIT_ARMATURE": [ + 'EDIT_ARMATURE': [ *_tools_default, None, _defs_edit_armature.roll, @@ -2986,8 +2931,9 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): ), _defs_transform.shear, ], - "EDIT_MESH": [ + 'EDIT_MESH': [ *_tools_default, + None, _tools_view3d_add, None, @@ -3034,7 +2980,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): _defs_edit_mesh.rip_edge, ), ], - "EDIT_CURVE": [ + 'EDIT_CURVE': [ *_tools_default, None, _defs_edit_curve.draw, @@ -3050,37 +2996,37 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): _defs_transform.shear, _defs_edit_curve.curve_vertex_randomize, ], - "EDIT_CURVES": [ + 'EDIT_CURVES': [ *_tools_select, ], - "EDIT_SURFACE": [ + 'EDIT_SURFACE': [ *_tools_default, None, _defs_transform.shear, ], - "EDIT_METABALL": [ + 'EDIT_METABALL': [ *_tools_default, None, _defs_transform.shear, ], - "EDIT_LATTICE": [ + 'EDIT_LATTICE': [ *_tools_default, None, _defs_transform.shear, ], - "EDIT_TEXT": [ + 'EDIT_TEXT': [ _defs_view3d_generic.cursor, None, *_tools_annotate, _defs_view3d_generic.ruler, ], - "PARTICLE": [ + 'PARTICLE': [ *_tools_select, _defs_view3d_generic.cursor, None, _defs_particle.generate_from_brushes, ], - "SCULPT": [ + 'SCULPT': [ _defs_sculpt.generate_from_brushes, None, ( @@ -3113,7 +3059,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): None, *_tools_annotate, ], - "PAINT_TEXTURE": [ + 'PAINT_TEXTURE': [ _defs_texture_paint.generate_from_brushes, None, lambda context: ( @@ -3123,7 +3069,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): ), *_tools_annotate, ], - "PAINT_VERTEX": [ + 'PAINT_VERTEX': [ _defs_vertex_paint.generate_from_brushes, None, lambda context: ( @@ -3133,7 +3079,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): ), *_tools_annotate, ], - "PAINT_WEIGHT": [ + 'PAINT_WEIGHT': [ _defs_weight_paint.generate_from_brushes, _defs_weight_paint.gradient, None, @@ -3159,7 +3105,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): ), *_tools_annotate, ], - "PAINT_GPENCIL": [ + 'PAINT_GPENCIL': [ _defs_view3d_generic.cursor, None, _defs_gpencil_paint.generate_from_brushes, @@ -3178,7 +3124,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): None, *_tools_annotate, ], - "EDIT_GPENCIL": [ + 'EDIT_GPENCIL': [ *_tools_gpencil_select, _defs_view3d_generic.cursor, None, @@ -3197,7 +3143,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): None, *_tools_annotate, ], - "SCULPT_GPENCIL": [ + 'SCULPT_GPENCIL': [ _defs_gpencil_sculpt.generate_from_brushes, None, *_tools_annotate, @@ -3207,12 +3153,12 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): else () ), ], - "WEIGHT_GPENCIL": [ + 'WEIGHT_GPENCIL': [ _defs_gpencil_weight.generate_from_brushes, None, *_tools_annotate, ], - "VERTEX_GPENCIL": [ + 'VERTEX_GPENCIL': [ _defs_gpencil_vertex.generate_from_brushes, None, *_tools_annotate, @@ -3223,7 +3169,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): else () ), ], - "SCULPT_CURVES": [ + 'SCULPT_CURVES': [ _defs_curves_sculpt.selection_paint, None, _defs_curves_sculpt.add, @@ -3244,10 +3190,10 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): class SEQUENCER_PT_tools_active(ToolSelectPanelHelper, Panel): - bl_space_type = "SEQUENCE_EDITOR" - bl_region_type = "TOOLS" + bl_space_type = 'SEQUENCE_EDITOR' + bl_region_type = 'TOOLS' bl_label = "Tools" # not visible - bl_options = {"HIDE_HEADER"} + bl_options = {'HIDE_HEADER'} # Satisfy the 'ToolSelectPanelHelper' API. keymap_prefix = "Sequence Editor Tool:" @@ -3292,8 +3238,9 @@ class SEQUENCER_PT_tools_active(ToolSelectPanelHelper, Panel): # The keys match sequence editors view type: `context.space_data.view_type`. # The values represent the tools, see `ToolSelectPanelHelper` for details. _tools = { - None: [], - "PREVIEW": [ + None: [ + ], + 'PREVIEW': [ *_tools_select, _defs_sequencer_generic.cursor, None, @@ -3305,11 +3252,11 @@ class SEQUENCER_PT_tools_active(ToolSelectPanelHelper, Panel): _defs_sequencer_generic.sample, *_tools_annotate, ], - "SEQUENCER": [ + 'SEQUENCER': [ *_tools_select, _defs_sequencer_generic.blade, ], - "SEQUENCER_PREVIEW": [ + 'SEQUENCER_PREVIEW': [ *_tools_select, None, *_tools_annotate, @@ -3328,6 +3275,5 @@ classes = ( if __name__ == "__main__": # only for live edit. from bpy.utils import register_class - for cls in classes: register_class(cls) -- 2.30.2 From e266e5464b233ae83059cba09fb210fa628461c5 Mon Sep 17 00:00:00 2001 From: Weizhen Huang Date: Tue, 14 Feb 2023 11:08:54 +0100 Subject: [PATCH 086/182] Gizmo: press shift key to scale cage2d gizmo uniformly Reviewed by: Campbell Barton Pull Request #104418 --- .../gizmo_library/gizmo_types/cage2d_gizmo.c | 42 ++++++++++++++++--- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c index 7d568424c886..436a2a676e32 100644 --- a/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c +++ b/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c @@ -44,6 +44,8 @@ /* The same as in `draw_cache.c` */ #define CIRCLE_RESOL 32 +static int gizmo_cage2d_transform_flag_get(const wmGizmo *gz); + static bool gizmo_calc_rect_view_scale(const wmGizmo *gz, const float dims[2], float scale[2]) { float matrix_final_no_offset[4][4]; @@ -616,7 +618,7 @@ static void gizmo_cage2d_draw_intern(wmGizmo *gz, RNA_float_get_array(gz->ptr, "dimensions", dims); float matrix_final[4][4]; - const int transform_flag = RNA_enum_get(gz->ptr, "transform"); + const int transform_flag = gizmo_cage2d_transform_flag_get(gz); const int draw_style = RNA_enum_get(gz->ptr, "draw_style"); const int draw_options = RNA_enum_get(gz->ptr, "draw_options"); @@ -831,7 +833,7 @@ static int gizmo_cage2d_test_select(bContext *C, wmGizmo *gz, const int mval[2]) /* Expand for hots-pot. */ const float size[2] = {size_real[0] + margin[0] / 2, size_real[1] + margin[1] / 2}; - const int transform_flag = RNA_enum_get(gz->ptr, "transform"); + const int transform_flag = gizmo_cage2d_transform_flag_get(gz); const int draw_options = RNA_enum_get(gz->ptr, "draw_options"); if (transform_flag & ED_GIZMO_CAGE_XFORM_FLAG_TRANSLATE) { @@ -934,8 +936,21 @@ typedef struct RectTransformInteraction { float orig_matrix_offset[4][4]; float orig_matrix_final_no_offset[4][4]; Dial *dial; + bool use_temp_uniform; } RectTransformInteraction; +static int gizmo_cage2d_transform_flag_get(const wmGizmo *gz) +{ + RectTransformInteraction *data = gz->interaction_data; + int transform_flag = RNA_enum_get(gz->ptr, "transform"); + if (data) { + if (data->use_temp_uniform) { + transform_flag |= ED_GIZMO_CAGE_XFORM_FLAG_SCALE_UNIFORM; + } + } + return transform_flag; +} + static void gizmo_cage2d_setup(wmGizmo *gz) { gz->flag |= WM_GIZMO_DRAW_MODAL | WM_GIZMO_DRAW_NO_SCALE; @@ -1020,9 +1035,6 @@ static int gizmo_cage2d_modal(bContext *C, const wmEvent *event, eWM_GizmoFlagTweak UNUSED(tweak_flag)) { - if (event->type != MOUSEMOVE) { - return OPERATOR_RUNNING_MODAL; - } /* For transform logic to be manageable we operate in -0.5..0.5 2D space, * no matter the size of the rectangle, mouse coords are scaled to unit space. * The mouse coords have been projected into the matrix @@ -1032,6 +1044,25 @@ static int gizmo_cage2d_modal(bContext *C, * - Matrix translation is also multiplied by 'dims'. */ RectTransformInteraction *data = gz->interaction_data; + int transform_flag = RNA_enum_get(gz->ptr, "transform"); + if ((transform_flag & ED_GIZMO_CAGE_XFORM_FLAG_SCALE_UNIFORM) == 0) { + /* WARNING: Checking the events modifier only makes sense as long as `tweak_flag` + * remains unused (this controls #WM_GIZMO_TWEAK_PRECISE by default). */ + const bool use_temp_uniform = (event->modifier & KM_SHIFT) != 0; + const bool changed = data->use_temp_uniform != use_temp_uniform; + data->use_temp_uniform = data->use_temp_uniform; + if (use_temp_uniform) { + transform_flag |= ED_GIZMO_CAGE_XFORM_FLAG_SCALE_UNIFORM; + } + + if (changed) { + /* Always refresh. */ + } + else if (event->type != MOUSEMOVE) { + return OPERATOR_RUNNING_MODAL; + } + } + float point_local[2]; float dims[2]; @@ -1050,7 +1081,6 @@ static int gizmo_cage2d_modal(bContext *C, } } - const int transform_flag = RNA_enum_get(gz->ptr, "transform"); wmGizmoProperty *gz_prop; gz_prop = WM_gizmo_target_property_find(gz, "matrix"); -- 2.30.2 From 24b2b3d9b095c6c1db4cdb02335157dafcb45882 Mon Sep 17 00:00:00 2001 From: Michael B Johnson Date: Tue, 14 Feb 2023 12:11:53 +0100 Subject: [PATCH 087/182] Fix T103354: Author extents on UsdGeomMesh A properly authored USD file will have the extent attribute authored on all prims conforming to UsdGeomBoundable. This cached extent information is useful because it allows the 3D range of prims to be quickly understood without reading potentially large arrays of data. Note that because the shape of prims may change over time, extent attributes are always evaluated for a given timecode. This patch introduces support for authoring extents on meshes and volumes during export to USD. Because extents are common to multiple kinds of geometries, the main support for authoring extents has been placed in USDAbstractWriter, whose new author_extent method can operate on any prim conforming to pxr::UsdGeomBoundable. The USD library already provides us the code necessary to compute the bounds for a given prim, in pxr::UsdGeomBBoxCache::ComputeLocalBound. Note that not all prims that are imageable are boundable, such as transforms and cameras. For more details on extents, see https://graphics.pixar.com/usd/release/api/class_usd_geom_boundable.html#details. Note that when new types of geometries are introduced, such as curves in https://developer.blender.org/D16545, we will need to update the USD writer for that geometry such that it calls this->author_extent. Update on Feb 2: This patch has been updated to include a unit test to ensure authored extents are valid. This test requires new test assets that will need to be submitted via svn. The test assets are attached in the d16837_usd_test_assets.zip file. To use, unzip and merge the contents of this zip into the lib/tests/usd folder. This unit test also addresses #104269 by validating compliance of exported USD via UsdUtils.ComplianceChecker. Pull Request #104676 --- .../io/usd/intern/usd_writer_abstract.cc | 24 +++ .../io/usd/intern/usd_writer_abstract.h | 19 +++ .../blender/io/usd/intern/usd_writer_hair.cc | 2 + .../blender/io/usd/intern/usd_writer_mesh.cc | 10 ++ tests/python/CMakeLists.txt | 6 + tests/python/bl_usd_export_test.py | 144 ++++++++++++++++++ 6 files changed, 205 insertions(+) create mode 100644 tests/python/bl_usd_export_test.py diff --git a/source/blender/io/usd/intern/usd_writer_abstract.cc b/source/blender/io/usd/intern/usd_writer_abstract.cc index f4ae9d20e527..79cb521aacd3 100644 --- a/source/blender/io/usd/intern/usd_writer_abstract.cc +++ b/source/blender/io/usd/intern/usd_writer_abstract.cc @@ -5,12 +5,15 @@ #include "usd_writer_material.h" #include +#include #include "BKE_customdata.h" #include "BLI_assert.h" #include "DNA_mesh_types.h" +#include "WM_api.h" + /* TfToken objects are not cheap to construct, so we do it once. */ namespace usdtokens { /* Materials */ @@ -149,4 +152,25 @@ bool USDAbstractWriter::mark_as_instance(const HierarchyContext &context, const return true; } +void USDAbstractWriter::author_extent(const pxr::UsdTimeCode timecode, pxr::UsdGeomBoundable &prim) +{ + /* Do not use any existing `extentsHint` that may be authored, instead recompute the extent when + * authoring it. */ + const bool useExtentsHint = false; + const pxr::TfTokenVector includedPurposes{pxr::UsdGeomTokens->default_}; + pxr::UsdGeomBBoxCache bboxCache(timecode, includedPurposes, useExtentsHint); + pxr::GfBBox3d bounds = bboxCache.ComputeLocalBound(prim.GetPrim()); + if (pxr::GfBBox3d() == bounds) { + /* This will occur, for example, if a mesh does not have any vertices. */ + WM_reportf(RPT_WARNING, + "USD Export: no bounds could be computed for %s", + prim.GetPrim().GetName().GetText()); + return; + } + + pxr::VtArray extent{(pxr::GfVec3f)bounds.GetRange().GetMin(), + (pxr::GfVec3f)bounds.GetRange().GetMax()}; + prim.CreateExtentAttr().Set(extent); +} + } // namespace blender::io::usd diff --git a/source/blender/io/usd/intern/usd_writer_abstract.h b/source/blender/io/usd/intern/usd_writer_abstract.h index 8adc054c2c2f..e6ac6a8ba215 100644 --- a/source/blender/io/usd/intern/usd_writer_abstract.h +++ b/source/blender/io/usd/intern/usd_writer_abstract.h @@ -7,6 +7,7 @@ #include #include +#include #include #include @@ -67,6 +68,24 @@ class USDAbstractWriter : public AbstractHierarchyWriter { * Reference the original data instead of writing a copy. */ virtual bool mark_as_instance(const HierarchyContext &context, const pxr::UsdPrim &prim); + + /** + * Compute the bounds for a boundable prim, and author the result as the `extent` attribute. + * + * Although this method works for any boundable prim, it is preferred to use Blender's own + * cached bounds when possible. + * + * This method does not author the `extentsHint` attribute, which is also important to provide. + * Whereas the `extent` attribute can only be authored on prims inheriting from + * `UsdGeomBoundable`, an `extentsHint` can be provided on any prim, including scopes. This + * `extentsHint` should be authored on every prim in a hierarchy being exported. + * + * Note that this hint is only useful when importing or inspecting layers, and should not be + * taken into account when computing extents during export. + * + * TODO: also provide method for authoring extentsHint on every prim in a hierarchy. + */ + virtual void author_extent(const pxr::UsdTimeCode timecode, pxr::UsdGeomBoundable &prim); }; } // namespace blender::io::usd diff --git a/source/blender/io/usd/intern/usd_writer_hair.cc b/source/blender/io/usd/intern/usd_writer_hair.cc index 8ec1447b5054..31c419094806 100644 --- a/source/blender/io/usd/intern/usd_writer_hair.cc +++ b/source/blender/io/usd/intern/usd_writer_hair.cc @@ -62,6 +62,8 @@ void USDHairWriter::do_write(HierarchyContext &context) colors.push_back(pxr::GfVec3f(cache[0]->col)); curves.CreateDisplayColorAttr(pxr::VtValue(colors)); } + + this->author_extent(timecode, curves); } bool USDHairWriter::check_is_animated(const HierarchyContext & /*context*/) const diff --git a/source/blender/io/usd/intern/usd_writer_mesh.cc b/source/blender/io/usd/intern/usd_writer_mesh.cc index 62656c902d0a..8363f9f8b353 100644 --- a/source/blender/io/usd/intern/usd_writer_mesh.cc +++ b/source/blender/io/usd/intern/usd_writer_mesh.cc @@ -3,6 +3,7 @@ #include "usd_writer_mesh.h" #include "usd_hierarchy_iterator.h" +#include #include #include #include @@ -247,6 +248,15 @@ void USDGenericMeshWriter::write_mesh(HierarchyContext &context, Mesh *mesh) if (usd_export_context_.export_params.export_materials) { assign_materials(context, usd_mesh, usd_mesh_data.face_groups); } + + /* Blender grows its bounds cache to cover animated meshes, so only author once. */ + float bound_min[3]; + float bound_max[3]; + INIT_MINMAX(bound_min, bound_max); + BKE_mesh_minmax(mesh, bound_min, bound_max); + pxr::VtArray extent{pxr::GfVec3f{bound_min[0], bound_min[1], bound_min[2]}, + pxr::GfVec3f{bound_max[0], bound_max[1], bound_max[2]}}; + usd_mesh.CreateExtentAttr().Set(extent); } static void get_vertices(const Mesh *mesh, USDMeshData &usd_mesh_data) diff --git a/tests/python/CMakeLists.txt b/tests/python/CMakeLists.txt index 2dc3e560e353..20a7e2e000ab 100644 --- a/tests/python/CMakeLists.txt +++ b/tests/python/CMakeLists.txt @@ -910,6 +910,12 @@ if(WITH_ALEMBIC) endif() if(WITH_USD) + add_blender_test( + usd_export_test + --python ${CMAKE_CURRENT_LIST_DIR}/bl_usd_export_test.py + -- + --testdir "${TEST_SRC_DIR}/usd" + ) add_blender_test( usd_import_test --python ${CMAKE_CURRENT_LIST_DIR}/bl_usd_import_test.py diff --git a/tests/python/bl_usd_export_test.py b/tests/python/bl_usd_export_test.py new file mode 100644 index 000000000000..80edb89a9b3a --- /dev/null +++ b/tests/python/bl_usd_export_test.py @@ -0,0 +1,144 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +import enum +import pathlib +import pprint +import sys +import tempfile +import unittest +from pxr import Usd +from pxr import UsdUtils +from pxr import UsdGeom +from pxr import Gf + +import bpy + +args = None + +class AbstractUSDTest(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls._tempdir = tempfile.TemporaryDirectory() + cls.testdir = args.testdir + cls.tempdir = pathlib.Path(cls._tempdir.name) + + return cls + + def setUp(self): + self.assertTrue( + self.testdir.exists(), "Test dir {0} should exist".format(self.testdir) + ) + + def tearDown(self): + self._tempdir.cleanup() + + +class USDExportTest(AbstractUSDTest): + def test_export_usdchecker(self): + """Test exporting a scene and verifying it passes the usdchecker test suite""" + bpy.ops.wm.open_mainfile( + filepath=str(self.testdir / "usd_materials_export.blend") + ) + export_path = self.tempdir / "usdchecker.usda" + res = bpy.ops.wm.usd_export( + filepath=str(export_path), + export_materials=True, + evaluation_mode="RENDER", + ) + self.assertEqual({'FINISHED'}, res, f"Unable to export to {export_path}") + + checker = UsdUtils.ComplianceChecker( + arkit=False, + skipARKitRootLayerCheck=False, + rootPackageOnly=False, + skipVariants=False, + verbose=False, + ) + checker.CheckCompliance(str(export_path)) + + failed_checks = {} + + # The ComplianceChecker does not know how to resolve tags, so + # it will flag "textures/test_grid_.png" as a missing reference. + # That reference is in fact OK, so we skip the rule for this test. + to_skip = ("MissingReferenceChecker",) + for rule in checker._rules: + name = rule.__class__.__name__ + if name in to_skip: + continue + + issues = rule.GetFailedChecks() + rule.GetWarnings() + rule.GetErrors() + if not issues: + continue + + failed_checks[name] = issues + + self.assertFalse(failed_checks, pprint.pformat(failed_checks)) + + def compareVec3d(self, first, second): + places = 5 + self.assertAlmostEqual(first[0], second[0], places) + self.assertAlmostEqual(first[1], second[1], places) + self.assertAlmostEqual(first[2], second[2], places) + + def test_export_extents(self): + """Test that exported scenes contain have a properly authored extent attribute on each boundable prim""" + bpy.ops.wm.open_mainfile(filepath=str(self.testdir / "usd_extent_test.blend")) + export_path = self.tempdir / "usd_extent_test.usda" + res = bpy.ops.wm.usd_export( + filepath=str(export_path), + export_materials=True, + evaluation_mode="RENDER", + ) + self.assertEqual({'FINISHED'}, res, f"Unable to export to {export_path}") + + # if prims are missing, the exporter must have skipped some objects + stats = UsdUtils.ComputeUsdStageStats(str(export_path)) + self.assertEqual(stats["totalPrimCount"], 15, "Unexpected number of prims") + + # validate the overall world bounds of the scene + stage = Usd.Stage.Open(str(export_path)) + scenePrim = stage.GetPrimAtPath("/scene") + bboxcache = UsdGeom.BBoxCache(Usd.TimeCode.Default(), [UsdGeom.Tokens.default_]) + bounds = bboxcache.ComputeWorldBound(scenePrim) + bound_min = bounds.GetRange().GetMin() + bound_max = bounds.GetRange().GetMax() + self.compareVec3d(bound_min, Gf.Vec3d(-5.752975881, -1, -2.798513651)) + self.compareVec3d(bound_max, Gf.Vec3d(1, 2.9515805244, 2.7985136508)) + + # validate the locally authored extents + prim = stage.GetPrimAtPath("/scene/BigCube/BigCubeMesh") + extent = UsdGeom.Boundable(prim).GetExtentAttr().Get() + self.compareVec3d(Gf.Vec3d(extent[0]), Gf.Vec3d(-1, -1, -2.7985137)) + self.compareVec3d(Gf.Vec3d(extent[1]), Gf.Vec3d(1, 1, 2.7985137)) + prim = stage.GetPrimAtPath("/scene/LittleCube/LittleCubeMesh") + extent = UsdGeom.Boundable(prim).GetExtentAttr().Get() + self.compareVec3d(Gf.Vec3d(extent[0]), Gf.Vec3d(-1, -1, -1)) + self.compareVec3d(Gf.Vec3d(extent[1]), Gf.Vec3d(1, 1, 1)) + prim = stage.GetPrimAtPath("/scene/Volume/Volume") + extent = UsdGeom.Boundable(prim).GetExtentAttr().Get() + self.compareVec3d( + Gf.Vec3d(extent[0]), Gf.Vec3d(-0.7313742, -0.68043584, -0.5801515) + ) + self.compareVec3d( + Gf.Vec3d(extent[1]), Gf.Vec3d(0.7515701, 0.5500924, 0.9027928) + ) + + +def main(): + global args + import argparse + + if "--" in sys.argv: + argv = [sys.argv[0]] + sys.argv[sys.argv.index("--") + 1:] + else: + argv = sys.argv + + parser = argparse.ArgumentParser() + parser.add_argument("--testdir", required=True, type=pathlib.Path) + args, remaining = parser.parse_known_args(argv) + + unittest.main(argv=remaining) + + +if __name__ == "__main__": + main() -- 2.30.2 From 1a10effc1325cd7c4d134c1fc39240f8e7890cd5 Mon Sep 17 00:00:00 2001 From: Lukas Stockner Date: Mon, 13 Feb 2023 23:47:55 +0100 Subject: [PATCH 088/182] Cycles: Temporary fix for Principled Hair albedo The proper fix (bb9eb262d4d3) caused compilation problems with HIP, so we're delaying it until 3.6. To fix the original bug report (#104586), this is a quick workaround that'll hopefully not upset the compiler. Pull Request #104723 --- intern/cycles/kernel/closure/bsdf.h | 2 +- intern/cycles/kernel/closure/bsdf_hair_principled.h | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/intern/cycles/kernel/closure/bsdf.h b/intern/cycles/kernel/closure/bsdf.h index e7754bde7c5a..343c7c919c01 100644 --- a/intern/cycles/kernel/closure/bsdf.h +++ b/intern/cycles/kernel/closure/bsdf.h @@ -686,7 +686,7 @@ ccl_device_inline Spectrum bsdf_albedo(ccl_private const ShaderData *sd, albedo *= ((ccl_private const PrincipledSheenBsdf *)sc)->avg_value; break; case CLOSURE_BSDF_HAIR_PRINCIPLED_ID: - albedo *= bsdf_principled_hair_albedo(sc); + albedo *= bsdf_principled_hair_albedo(sd, sc); break; default: break; diff --git a/intern/cycles/kernel/closure/bsdf_hair_principled.h b/intern/cycles/kernel/closure/bsdf_hair_principled.h index f7cf3b716f64..ae3362c6cd10 100644 --- a/intern/cycles/kernel/closure/bsdf_hair_principled.h +++ b/intern/cycles/kernel/closure/bsdf_hair_principled.h @@ -478,10 +478,18 @@ ccl_device_inline float bsdf_principled_hair_albedo_roughness_scale( return (((((0.245f * x) + 5.574f) * x - 10.73f) * x + 2.532f) * x - 0.215f) * x + 5.969f; } -ccl_device Spectrum bsdf_principled_hair_albedo(ccl_private const ShaderClosure *sc) +ccl_device Spectrum bsdf_principled_hair_albedo(ccl_private const ShaderData *sd, + ccl_private const ShaderClosure *sc) { ccl_private PrincipledHairBSDF *bsdf = (ccl_private PrincipledHairBSDF *)sc; - return exp(-sqrt(bsdf->sigma) * bsdf_principled_hair_albedo_roughness_scale(bsdf->v)); + + const float cos_theta_o = cos_from_sin(dot(sd->wi, safe_normalize(sd->dPdu))); + const float cos_gamma_o = cos_from_sin(bsdf->extra->geom.w); + const float f = fresnel_dielectric_cos(cos_theta_o * cos_gamma_o, bsdf->eta); + + const float roughness_scale = bsdf_principled_hair_albedo_roughness_scale(bsdf->v); + /* TODO(lukas): Adding the Fresnel term here as a workaround until the proper refactor. */ + return exp(-sqrt(bsdf->sigma) * roughness_scale) + make_spectrum(f); } ccl_device_inline Spectrum -- 2.30.2 From 80ce22010b6c60628161d7debd1dafb789a74c81 Mon Sep 17 00:00:00 2001 From: Damien Picard Date: Tue, 14 Feb 2023 12:19:53 +0100 Subject: [PATCH 089/182] Constraints: use a dimensionless unit prop for Maintain Volume The Volume property of the Maintain Volume constraint was marked as a distance, which made it confusing--especially with non-metric units. The volume can actually be understood as a factor of the initial volume, so it should be dimensionless. Additionally, the volume had a range of 0.001 to 100.0. This is wide enough in most cases, but sometimes you may need to go orders of magnitude higher or lower to consider vast or thin objects, and there should be no drawback to extending the limits, provided they stay positive. Pull Request #104489 --- source/blender/makesrna/intern/rna_constraint.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c index 671286be0521..53e13c29852d 100644 --- a/source/blender/makesrna/intern/rna_constraint.c +++ b/source/blender/makesrna/intern/rna_constraint.c @@ -1621,8 +1621,9 @@ static void rna_def_constraint_same_volume(BlenderRNA *brna) prop, "Mode", "The way the constraint treats original non-free axis scaling"); RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); - prop = RNA_def_property(srna, "volume", PROP_FLOAT, PROP_DISTANCE); - RNA_def_property_range(prop, 0.001f, 100.0f); + prop = RNA_def_property(srna, "volume", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0f, FLT_MAX); + RNA_def_property_ui_range(prop, 0.001f, 100.0f, 1, 3); RNA_def_property_ui_text(prop, "Volume", "Volume of the bone at rest"); RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); -- 2.30.2 From 6858332d6db9f1a444c57c3a9a70741ae960d95d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 14 Feb 2023 22:20:16 +1100 Subject: [PATCH 090/182] Build: correct forwarding jobs argument to make_deps_wrapper.sh --- build_files/build_environment/linux/make_deps_wrapper.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build_files/build_environment/linux/make_deps_wrapper.sh b/build_files/build_environment/linux/make_deps_wrapper.sh index c1ec4cfc9b18..e81bac3c5acc 100755 --- a/build_files/build_environment/linux/make_deps_wrapper.sh +++ b/build_files/build_environment/linux/make_deps_wrapper.sh @@ -29,18 +29,18 @@ if [[ -z "${MY_MAKE_CALL_LEVEL}" ]]; then for i in "$@"; do case $i in -j*) - MY_JOBS_ARG=$i + export MY_JOBS_ARG=$i if [ "$MY_JOBS_ARG" = "-j" ]; then add_next=1 fi ;; --jobs=*) shift # past argument=value - MY_JOBS_ARG=$i + export MY_JOBS_ARG=$i ;; *) if (( $add_next == 1 )); then - MY_JOBS_ARG="$MY_JOBS_ARG $i" + export MY_JOBS_ARG="$MY_JOBS_ARG $i" add_next=0 fi ;; -- 2.30.2 From 5158ff01904626e996e7470dd6069cc7039c324e Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Tue, 14 Feb 2023 12:38:18 +0100 Subject: [PATCH 091/182] Allocator: Fail building when trying to MEM_delete a void pointer `MEM_delete()` is designed for type safe destruction and freeing, void pointers make that impossible. Was reviewing a patch that was trying to free a C-style custom data pointer this way. Apparently MSVC compiles this just fine, other compilers error out. Make sure this is a build error on all platforms with a useful message. --- intern/guardedalloc/MEM_guardedalloc.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/intern/guardedalloc/MEM_guardedalloc.h b/intern/guardedalloc/MEM_guardedalloc.h index 5ae333439492..69221877f153 100644 --- a/intern/guardedalloc/MEM_guardedalloc.h +++ b/intern/guardedalloc/MEM_guardedalloc.h @@ -281,6 +281,8 @@ inline T *MEM_new(const char *allocation_name, Args &&...args) */ template inline void MEM_delete(const T *ptr) { + static_assert(!std::is_void_v, + "MEM_delete on a void pointer not possible. Cast it to a non-void type?"); if (ptr == nullptr) { /* Support #ptr being null, because C++ `delete` supports that as well. */ return; -- 2.30.2 From 810e43e27d056f2bd9b27c0027d73afbde12c676 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Tue, 14 Feb 2023 13:32:00 +0100 Subject: [PATCH 092/182] Fix: duplicate elements node does not update curve type counts Curve type counts are updated eagerly but it was missing in this node leading to a crash further down the line where the counts were expected to be correct. --- .../blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc b/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc index da4d3c7e6415..5b260a818a1e 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc @@ -407,6 +407,7 @@ static void duplicate_curves(GeometrySet &geometry_set, curve_offsets); } + new_curves.update_curve_types(); geometry_set.replace_curves(new_curves_id); } -- 2.30.2 From 40321e254707aac3e6b28af35b609a080f1f8e1a Mon Sep 17 00:00:00 2001 From: Jun Mizutani Date: Tue, 14 Feb 2023 14:15:04 +0100 Subject: [PATCH 093/182] Curves: change collision radius for consistency with default radius Offset distance for curve collision will be matched with default curve radius for better visibility. Pull Request #104648 --- source/blender/geometry/intern/curve_constraints.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/geometry/intern/curve_constraints.cc b/source/blender/geometry/intern/curve_constraints.cc index e2f77ed54f0f..9775fd1443ed 100644 --- a/source/blender/geometry/intern/curve_constraints.cc +++ b/source/blender/geometry/intern/curve_constraints.cc @@ -71,7 +71,7 @@ void solve_length_and_collision_constraints(const OffsetIndices points_by_c BKE_bvhtree_from_mesh_get(&surface_bvh, &surface, BVHTREE_FROM_LOOPTRI, 2); BLI_SCOPED_DEFER([&]() { free_bvhtree_from_mesh(&surface_bvh); }); - const float radius = 0.001f; + const float radius = 0.005f; const int max_collisions = 5; threading::parallel_for(curve_selection.index_range(), 64, [&](const IndexRange range) { -- 2.30.2 From 0bd9a9ab59a6ccc3ab2016cb0745fab145ee0323 Mon Sep 17 00:00:00 2001 From: Falk David Date: Tue, 14 Feb 2023 14:58:42 +0100 Subject: [PATCH 094/182] Fix memory leak in view3d_select There was an unintentional early return in the click select execute function that caused the operator properties not to be freed. --- source/blender/editors/space_view3d/view3d_select.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/source/blender/editors/space_view3d/view3d_select.cc b/source/blender/editors/space_view3d/view3d_select.cc index 054137fd837d..0d76c1bc7f81 100644 --- a/source/blender/editors/space_view3d/view3d_select.cc +++ b/source/blender/editors/space_view3d/view3d_select.cc @@ -3077,7 +3077,6 @@ static int view3d_select_exec(bContext *C, wmOperator *op) * generic attribute for now. */ DEG_id_tag_update(&curves_id.id, ID_RECALC_GEOMETRY); WM_event_add_notifier(C, NC_GEOM | ND_DATA, &curves_id); - return true; } } } -- 2.30.2 From 153e4256d4e648ff11c5c14d85597e5dbf56354e Mon Sep 17 00:00:00 2001 From: Robin Hohnsbeen Date: Tue, 14 Feb 2023 15:29:27 +0100 Subject: [PATCH 095/182] Sculpting: Vector displacement for the sculpting draw brush Sculpt: Added vector displacement for the sculpting draw brush (area plane mapping only for now) Vector displacement maps (VDM) provide a way to create complex displacements that can have overhangs in one brush dab. This is unlike standard displacement with height maps that only displace in the normal direction. Forms like ears, curled horns, etc can be created in one click if VMDs are used. There is a checkbox on the draw brush in the texture settings "Vector Displacement" that enables/disables this feature. Technical description: The RGB channels of a texture in a brush stroke are read and interpreted as individual vectors, that are used to offset vertices. As of now, this is only working for the draw brush using the area plane mapping. Symmetry and radial symmetry are working. A few things to consider when making VD-Maps: * UVs need to stay intact for the bake mesh (e.g. voxel remeshing can't be used to create VD Meshes) * When exporting a VD Map it should be in the file format OpenEXR (for positive and negative floating point values). * Export resolution can be 512x512 or lower (EXR files can get very large, but VDM brushes don't need a high resolution) And when using them: * Inside Blender clamping needs to be unchecked on the texture * The brush falloff should be set to constant (or nearly constant) This patch was inspired by this [right-click-select proposal](https://blender.community/c/rightclickselect/WqWx/) Thanks for the post! (Moved [this patch](https://archive.blender.org/developer/D17080) to here.) Co-authored-by: Robin Hohnsbeen Pull Request #104481 --- .../startup/bl_ui/properties_paint_common.py | 5 + .../editors/sculpt_paint/paint_cursor.cc | 17 +- .../editors/sculpt_paint/paint_intern.h | 21 +- .../editors/sculpt_paint/paint_utils.c | 50 ++-- source/blender/editors/sculpt_paint/sculpt.cc | 244 ++++++++++++------ .../sculpt_paint/sculpt_brush_types.cc | 41 ++- .../editors/sculpt_paint/sculpt_intern.hh | 31 ++- source/blender/makesdna/DNA_brush_enums.h | 1 + source/blender/makesrna/intern/rna_brush.c | 8 + 9 files changed, 281 insertions(+), 137 deletions(-) diff --git a/release/scripts/startup/bl_ui/properties_paint_common.py b/release/scripts/startup/bl_ui/properties_paint_common.py index c912de8f3e41..63dd18cb7033 100644 --- a/release/scripts/startup/bl_ui/properties_paint_common.py +++ b/release/scripts/startup/bl_ui/properties_paint_common.py @@ -1141,6 +1141,11 @@ def brush_texture_settings(layout, brush, sculpt): # texture_sample_bias layout.prop(brush, "texture_sample_bias", slider=True, text="Sample Bias") + if brush.sculpt_tool == 'DRAW': + col = layout.column() + col.active = tex_slot.map_mode == 'AREA_PLANE' + col.prop(brush, "use_color_as_displacement", text="Vector Displacement") + def brush_mask_texture_settings(layout, brush): mask_tex_slot = brush.mask_texture_slot diff --git a/source/blender/editors/sculpt_paint/paint_cursor.cc b/source/blender/editors/sculpt_paint/paint_cursor.cc index a2fa4745f747..53b56397adbc 100644 --- a/source/blender/editors/sculpt_paint/paint_cursor.cc +++ b/source/blender/editors/sculpt_paint/paint_cursor.cc @@ -37,6 +37,7 @@ #include "WM_api.h" #include "wm_cursors.h" +#include "IMB_colormanagement.h" #include "IMB_imbuf_types.h" #include "ED_image.h" @@ -200,10 +201,18 @@ static void load_tex_task_cb_ex(void *__restrict userdata, y = len * sinf(angle); } - if (col) { - float rgba[4]; + float avg; + float rgba[4]; + paint_get_tex_pixel(mtex, x, y, pool, thread_id, &avg, rgba); - paint_get_tex_pixel_col(mtex, x, y, rgba, pool, thread_id, convert_to_linear, colorspace); + if (col) { + if (convert_to_linear) { + IMB_colormanagement_colorspace_to_scene_linear_v3(rgba, colorspace); + } + + linearrgb_to_srgb_v3_v3(rgba, rgba); + + clamp_v4(rgba, 0.0f, 1.0f); buffer[index * 4] = rgba[0] * 255; buffer[index * 4 + 1] = rgba[1] * 255; @@ -211,8 +220,6 @@ static void load_tex_task_cb_ex(void *__restrict userdata, buffer[index * 4 + 3] = rgba[3] * 255; } else { - float avg = paint_get_tex_pixel(mtex, x, y, pool, thread_id); - avg += br->texture_sample_bias; /* Clamp to avoid precision overflow. */ diff --git a/source/blender/editors/sculpt_paint/paint_intern.h b/source/blender/editors/sculpt_paint/paint_intern.h index ee07f7cc26d5..312d93051dc5 100644 --- a/source/blender/editors/sculpt_paint/paint_intern.h +++ b/source/blender/editors/sculpt_paint/paint_intern.h @@ -352,16 +352,17 @@ void paint_calc_redraw_planes(float planes[4][4], float paint_calc_object_space_radius(struct ViewContext *vc, const float center[3], float pixel_radius); -float paint_get_tex_pixel( - const struct MTex *mtex, float u, float v, struct ImagePool *pool, int thread); -void paint_get_tex_pixel_col(const struct MTex *mtex, - float u, - float v, - float rgba[4], - struct ImagePool *pool, - int thread, - bool convert, - struct ColorSpace *colorspace); + +/** + * Returns true when a color was sampled and false when a value was sampled. + */ +bool paint_get_tex_pixel(const struct MTex *mtex, + float u, + float v, + struct ImagePool *pool, + int thread, + float *r_intensity, + float r_rgba[4]); /** * Used for both 3D view and image window. diff --git a/source/blender/editors/sculpt_paint/paint_utils.c b/source/blender/editors/sculpt_paint/paint_utils.c index 98fefd86d959..ef794ea6a39e 100644 --- a/source/blender/editors/sculpt_paint/paint_utils.c +++ b/source/blender/editors/sculpt_paint/paint_utils.c @@ -146,45 +146,29 @@ float paint_calc_object_space_radius(ViewContext *vc, const float center[3], flo return len_v3(delta) / scale; } -float paint_get_tex_pixel(const MTex *mtex, float u, float v, struct ImagePool *pool, int thread) -{ - float intensity; - float rgba_dummy[4]; - const float co[3] = {u, v, 0.0f}; - - RE_texture_evaluate(mtex, co, thread, pool, false, false, &intensity, rgba_dummy); - - return intensity; -} - -void paint_get_tex_pixel_col(const MTex *mtex, - float u, - float v, - float rgba[4], - struct ImagePool *pool, - int thread, - bool convert_to_linear, - struct ColorSpace *colorspace) +bool paint_get_tex_pixel(const MTex *mtex, + float u, + float v, + struct ImagePool *pool, + int thread, + /* Return arguments. */ + float *r_intensity, + float r_rgba[4]) { const float co[3] = {u, v, 0.0f}; float intensity; + const bool has_rgb = RE_texture_evaluate( + mtex, co, thread, pool, false, false, &intensity, r_rgba); + *r_intensity = intensity; - const bool hasrgb = RE_texture_evaluate(mtex, co, thread, pool, false, false, &intensity, rgba); - - if (!hasrgb) { - rgba[0] = intensity; - rgba[1] = intensity; - rgba[2] = intensity; - rgba[3] = 1.0f; + if (!has_rgb) { + r_rgba[0] = intensity; + r_rgba[1] = intensity; + r_rgba[2] = intensity; + r_rgba[3] = 1.0f; } - if (convert_to_linear) { - IMB_colormanagement_colorspace_to_scene_linear_v3(rgba, colorspace); - } - - linearrgb_to_srgb_v3_v3(rgba, rgba); - - clamp_v4(rgba, 0.0f, 1.0f); + return has_rgb; } void paint_stroke_operator_properties(wmOperatorType *ot) diff --git a/source/blender/editors/sculpt_paint/sculpt.cc b/source/blender/editors/sculpt_paint/sculpt.cc index ebb8490276d9..59bf3f04dd68 100644 --- a/source/blender/editors/sculpt_paint/sculpt.cc +++ b/source/blender/editors/sculpt_paint/sculpt.cc @@ -54,6 +54,7 @@ #include "BKE_scene.h" #include "BKE_subdiv_ccg.h" #include "BKE_subsurf.h" +#include "BLI_math_vector.hh" #include "NOD_texture.h" @@ -2555,80 +2556,12 @@ static float brush_strength(const Sculpt *sd, } } -float SCULPT_brush_strength_factor(SculptSession *ss, - const Brush *br, - const float brush_point[3], - float len, - const float vno[3], - const float fno[3], - float mask, - const PBVHVertRef vertex, - const int thread_id, - AutomaskingNodeData *automask_data) +static float sculpt_apply_hardness(const SculptSession *ss, const float input_len) { - StrokeCache *cache = ss->cache; - const Scene *scene = cache->vc->scene; - const MTex *mtex = BKE_brush_mask_texture_get(br, OB_MODE_SCULPT); - float avg = 1.0f; - float rgba[4]; - float point[3]; - - sub_v3_v3v3(point, brush_point, cache->plane_offset); - - if (!mtex->tex) { - avg = 1.0f; - } - else if (mtex->brush_map_mode == MTEX_MAP_MODE_3D) { - /* Get strength by feeding the vertex location directly into a texture. */ - avg = BKE_brush_sample_tex_3d(scene, br, mtex, point, rgba, 0, ss->tex_pool); - } - else { - float symm_point[3], point_2d[2]; - /* Quite warnings. */ - float x = 0.0f, y = 0.0f; - - /* If the active area is being applied for symmetry, flip it - * across the symmetry axis and rotate it back to the original - * position in order to project it. This insures that the - * brush texture will be oriented correctly. */ - if (cache->radial_symmetry_pass) { - mul_m4_v3(cache->symm_rot_mat_inv, point); - } - flip_v3_v3(symm_point, point, cache->mirror_symmetry_pass); - - ED_view3d_project_float_v2_m4(cache->vc->region, symm_point, point_2d, cache->projection_mat); - - /* Still no symmetry supported for other paint modes. - * Sculpt does it DIY. */ - if (mtex->brush_map_mode == MTEX_MAP_MODE_AREA) { - /* Similar to fixed mode, but projects from brush angle - * rather than view direction. */ - - mul_m4_v3(cache->brush_local_mat, symm_point); - - x = symm_point[0]; - y = symm_point[1]; - - x *= mtex->size[0]; - y *= mtex->size[1]; - - x += mtex->ofs[0]; - y += mtex->ofs[1]; - - avg = paint_get_tex_pixel(mtex, x, y, ss->tex_pool, thread_id); - - avg += br->texture_sample_bias; - } - else { - const float point_3d[3] = {point_2d[0], point_2d[1], 0.0f}; - avg = BKE_brush_sample_tex_3d(scene, br, mtex, point_3d, rgba, 0, ss->tex_pool); - } - } - - /* Hardness. */ - float final_len = len; + const StrokeCache *cache = ss->cache; + float final_len = input_len; const float hardness = cache->paint_brush.hardness; - float p = len / cache->radius; + float p = input_len / cache->radius; if (p < hardness) { final_len = 0.0f; } @@ -2640,9 +2573,100 @@ float SCULPT_brush_strength_factor(SculptSession *ss, final_len = p * cache->radius; } + return final_len; +} + +static void sculpt_apply_texture(const SculptSession *ss, + const Brush *brush, + const float brush_point[3], + const int thread_id, + float *r_value, + float r_rgba[4]) +{ + StrokeCache *cache = ss->cache; + const Scene *scene = cache->vc->scene; + const MTex *mtex = BKE_brush_mask_texture_get(brush, OB_MODE_SCULPT); + + if (!mtex->tex) { + *r_value = 1.0f; + copy_v4_fl(r_rgba, 1.0f); + return; + } + + float point[3]; + sub_v3_v3v3(point, brush_point, cache->plane_offset); + + if (mtex->brush_map_mode == MTEX_MAP_MODE_3D) { + /* Get strength by feeding the vertex location directly into a texture. */ + *r_value = BKE_brush_sample_tex_3d(scene, brush, mtex, point, r_rgba, 0, ss->tex_pool); + } + else { + float symm_point[3]; + + /* If the active area is being applied for symmetry, flip it + * across the symmetry axis and rotate it back to the original + * position in order to project it. This insures that the + * brush texture will be oriented correctly. */ + if (cache->radial_symmetry_pass) { + mul_m4_v3(cache->symm_rot_mat_inv, point); + } + flip_v3_v3(symm_point, point, cache->mirror_symmetry_pass); + + /* Still no symmetry supported for other paint modes. + * Sculpt does it DIY. */ + if (mtex->brush_map_mode == MTEX_MAP_MODE_AREA) { + /* Similar to fixed mode, but projects from brush angle + * rather than view direction. */ + + mul_m4_v3(cache->brush_local_mat, symm_point); + + float x = symm_point[0]; + float y = symm_point[1]; + + x *= mtex->size[0]; + y *= mtex->size[1]; + + x += mtex->ofs[0]; + y += mtex->ofs[1]; + + paint_get_tex_pixel(mtex, x, y, ss->tex_pool, thread_id, r_value, r_rgba); + + add_v3_fl(r_rgba, brush->texture_sample_bias); // v3 -> Ignore alpha + *r_value -= brush->texture_sample_bias; + } + else { + float point_2d[2]; + ED_view3d_project_float_v2_m4( + cache->vc->region, symm_point, point_2d, cache->projection_mat); + const float point_3d[3] = {point_2d[0], point_2d[1], 0.0f}; + *r_value = BKE_brush_sample_tex_3d(scene, brush, mtex, point_3d, r_rgba, 0, ss->tex_pool); + } + } +} + +float SCULPT_brush_strength_factor(SculptSession *ss, + const Brush *brush, + const float brush_point[3], + float len, + const float vno[3], + const float fno[3], + float mask, + const PBVHVertRef vertex, + int thread_id, + AutomaskingNodeData *automask_data) +{ + StrokeCache *cache = ss->cache; + + float avg = 1.0f; + float rgba[4]; + sculpt_apply_texture(ss, brush, brush_point, thread_id, &avg, rgba); + + /* Hardness. */ + const float final_len = sculpt_apply_hardness(ss, len); + /* Falloff curve. */ - avg *= BKE_brush_curve_strength(br, final_len, cache->radius); - avg *= frontface(br, cache->view_normal, vno, fno); + avg *= BKE_brush_curve_strength(brush, final_len, cache->radius); + avg *= frontface(brush, cache->view_normal, vno, fno); /* Paint mask. */ avg *= 1.0f - mask; @@ -2653,6 +2677,69 @@ float SCULPT_brush_strength_factor(SculptSession *ss, return avg; } +void SCULPT_brush_strength_color(SculptSession *ss, + const Brush *brush, + const float brush_point[3], + float len, + const float vno[3], + const float fno[3], + float mask, + const PBVHVertRef vertex, + int thread_id, + AutomaskingNodeData *automask_data, + float r_rgba[4]) +{ + StrokeCache *cache = ss->cache; + + float avg = 1.0f; + sculpt_apply_texture(ss, brush, brush_point, thread_id, &avg, r_rgba); + + /* Hardness. */ + const float final_len = sculpt_apply_hardness(ss, len); + + /* Falloff curve. */ + const float falloff = BKE_brush_curve_strength(brush, final_len, cache->radius) * + frontface(brush, cache->view_normal, vno, fno); + + /* Paint mask. */ + const float paint_mask = 1.0f - mask; + + /* Auto-masking. */ + const float automasking_factor = SCULPT_automasking_factor_get( + cache->automasking, ss, vertex, automask_data); + + const float masks_combined = falloff * paint_mask * automasking_factor; + + mul_v4_fl(r_rgba, masks_combined); +} + +void SCULPT_calc_vertex_displacement(SculptSession *ss, + const Brush *brush, + float rgba[4], + float out_offset[3]) +{ + mul_v3_fl(rgba, ss->cache->bstrength); + /* Handle brush inversion */ + if (ss->cache->bstrength < 0) { + rgba[0] *= -1; + rgba[1] *= -1; + } + + /* Apply texture size */ + for (int i = 0; i < 3; ++i) { + rgba[i] *= blender::math::safe_divide(1.0f, pow2f(brush->mtex.size[i])); + } + + /* Transform vector to object space */ + mul_mat3_m4_v3(ss->cache->brush_local_mat_inv, rgba); + + /* Handle symmetry */ + if (ss->cache->radial_symmetry_pass) { + mul_m4_v3(ss->cache->symm_rot_mat, rgba); + } + flip_v3_v3(out_offset, rgba, ss->cache->mirror_symmetry_pass); +} + bool SCULPT_search_sphere_cb(PBVHNode *node, void *data_v) { SculptSearchSphereData *data = static_cast(data_v); @@ -2920,7 +3007,10 @@ static void calc_local_y(ViewContext *vc, const float center[3], float y[3]) mul_m4_v3(ob->world_to_object, y); } -static void calc_brush_local_mat(const MTex *mtex, Object *ob, float local_mat[4][4]) +static void calc_brush_local_mat(const MTex *mtex, + Object *ob, + float local_mat[4][4], + float local_mat_inv[4][4]) { const StrokeCache *cache = ob->sculpt->cache; float tmat[4][4]; @@ -2966,6 +3056,8 @@ static void calc_brush_local_mat(const MTex *mtex, Object *ob, float local_mat[4 scale_m4_fl(scale, radius); mul_m4_m4m4(tmat, mat, scale); + /* Return tmat as is (for converting from local area coords to model-space coords). */ + copy_m4_m4(local_mat_inv, tmat); /* Return inverse (for converting from model-space coords to local area coords). */ invert_m4_m4(local_mat, tmat); } @@ -3000,7 +3092,7 @@ static void update_brush_local_mat(Sculpt *sd, Object *ob) if (cache->mirror_symmetry_pass == 0 && cache->radial_symmetry_pass == 0) { const Brush *brush = BKE_paint_brush(&sd->paint); const MTex *mask_tex = BKE_brush_mask_texture_get(brush, OB_MODE_SCULPT); - calc_brush_local_mat(mask_tex, ob, cache->brush_local_mat); + calc_brush_local_mat(mask_tex, ob, cache->brush_local_mat, cache->brush_local_mat_inv); } } diff --git a/source/blender/editors/sculpt_paint/sculpt_brush_types.cc b/source/blender/editors/sculpt_paint/sculpt_brush_types.cc index 3ae892b6a9f2..9e6ce8131ef3 100644 --- a/source/blender/editors/sculpt_paint/sculpt_brush_types.cc +++ b/source/blender/editors/sculpt_paint/sculpt_brush_types.cc @@ -265,18 +265,35 @@ static void do_draw_brush_task_cb_ex(void *__restrict userdata, SCULPT_automasking_node_update(ss, &automask_data, &vd); /* Offset vertex. */ - const float fade = SCULPT_brush_strength_factor(ss, - brush, - vd.co, - sqrtf(test.dist), - vd.no, - vd.fno, - vd.mask ? *vd.mask : 0.0f, - vd.vertex, - thread_id, - &automask_data); - - mul_v3_v3fl(proxy[vd.i], offset, fade); + if (ss->cache->brush->flag2 & BRUSH_USE_COLOR_AS_DISPLACEMENT && + (brush->mtex.brush_map_mode == MTEX_MAP_MODE_AREA)) { + float r_rgba[4]; + SCULPT_brush_strength_color(ss, + brush, + vd.co, + sqrtf(test.dist), + vd.no, + vd.fno, + vd.mask ? *vd.mask : 0.0f, + vd.vertex, + thread_id, + &automask_data, + r_rgba); + SCULPT_calc_vertex_displacement(ss, brush, r_rgba, proxy[vd.i]); + } + else { + float fade = SCULPT_brush_strength_factor(ss, + brush, + vd.co, + sqrtf(test.dist), + vd.no, + vd.fno, + vd.mask ? *vd.mask : 0.0f, + vd.vertex, + thread_id, + &automask_data); + mul_v3_v3fl(proxy[vd.i], offset, fade); + } if (vd.is_mesh) { BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); diff --git a/source/blender/editors/sculpt_paint/sculpt_intern.hh b/source/blender/editors/sculpt_paint/sculpt_intern.hh index 37e7a522ccf5..5117b49407f2 100644 --- a/source/blender/editors/sculpt_paint/sculpt_intern.hh +++ b/source/blender/editors/sculpt_paint/sculpt_intern.hh @@ -586,8 +586,13 @@ struct StrokeCache { float sculpt_normal_symm[3]; /* Used for area texture mode, local_mat gets calculated by - * calc_brush_local_mat() and used in tex_strength(). */ + * calc_brush_local_mat() and used in sculpt_apply_texture(). + * Transforms from model-space coords to local area coords. + */ float brush_local_mat[4][4]; + /* The matrix from local area coords to model-space coords is used to calculate the vector + * displacement in area plane mode. */ + float brush_local_mat_inv[4][4]; float plane_offset[3]; /* used to shift the plane around when doing tiled strokes */ int tile_pass; @@ -1241,6 +1246,30 @@ float SCULPT_brush_strength_factor(SculptSession *ss, int thread_id, AutomaskingNodeData *automask_data); +/** + * Return a color of a brush texture on a particular vertex multiplied by active masks. + */ +void SCULPT_brush_strength_color(SculptSession *ss, + const Brush *brush, + const float brush_point[3], + float len, + const float vno[3], + const float fno[3], + float mask, + const PBVHVertRef vertex, + int thread_id, + AutomaskingNodeData *automask_data, + float r_rgba[4]); + +/** + * Calculates the vertex offset for a single vertex depending on the brush setting rgb as vector + * displacement. + */ +void SCULPT_calc_vertex_displacement(SculptSession *ss, + const Brush *brush, + float rgba[3], + float out_offset[3]); + /** * Tilts a normal by the x and y tilt values using the view axis. */ diff --git a/source/blender/makesdna/DNA_brush_enums.h b/source/blender/makesdna/DNA_brush_enums.h index 72357ea67343..3ea2c3d70b7e 100644 --- a/source/blender/makesdna/DNA_brush_enums.h +++ b/source/blender/makesdna/DNA_brush_enums.h @@ -412,6 +412,7 @@ typedef enum eBrushFlags2 { BRUSH_CLOTH_USE_COLLISION = (1 << 6), BRUSH_AREA_RADIUS_PRESSURE = (1 << 7), BRUSH_GRAB_SILHOUETTE = (1 << 8), + BRUSH_USE_COLOR_AS_DISPLACEMENT = (1 << 9), } eBrushFlags2; typedef enum { diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c index 8e6908841a6a..13832457c238 100644 --- a/source/blender/makesrna/intern/rna_brush.c +++ b/source/blender/makesrna/intern/rna_brush.c @@ -2899,6 +2899,14 @@ static void rna_def_brush(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Texture Sample Bias", "Value added to texture samples"); RNA_def_property_update(prop, 0, "rna_Brush_update"); + prop = RNA_def_property(srna, "use_color_as_displacement", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag2", BRUSH_USE_COLOR_AS_DISPLACEMENT); + RNA_def_property_ui_text(prop, + "Vector Displacement", + "Handles each pixel color as individual vector for displacement. Works " + "only with area plane mapping"); + RNA_def_property_update(prop, 0, "rna_Brush_update"); + prop = RNA_def_property(srna, "normal_weight", PROP_FLOAT, PROP_FACTOR); RNA_def_property_float_sdna(prop, NULL, "normal_weight"); RNA_def_property_float_default(prop, 0); -- 2.30.2 From 1e243b93b83fee9e4ce8e1e014dcac2e470d2191 Mon Sep 17 00:00:00 2001 From: Ray Molenkamp Date: Tue, 14 Feb 2023 07:56:14 -0700 Subject: [PATCH 096/182] MSVC: suppress additional warnings out of external headers In 161908157d67ee8bcfa0c26917cccdc40e0c67ea we moved all warnings coming out of the library folder to /W0 as many of them do not follow our code-style nor can we force them to. When i made this change, i took `/external:templates-` to mean "and that goes for you too, templates" and it decisively does the opposite leading to /W3 warnings coming out of openvdb This change removes the flag as it should have never have been added in the first place. --- build_files/cmake/platform/platform_win32.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake index 675429deb770..989d43f28fb0 100644 --- a/build_files/cmake/platform/platform_win32.cmake +++ b/build_files/cmake/platform/platform_win32.cmake @@ -295,7 +295,7 @@ unset(MATERIALX_LIB_FOLDER_EXISTS) if(NOT MSVC_CLANG AND # Available with MSVC 15.7+ but not for CLANG. NOT WITH_WINDOWS_SCCACHE AND # And not when sccache is enabled NOT VS_CLANG_TIDY) # Clang-tidy does not like these options - add_compile_options(/experimental:external /external:templates- /external:I "${LIBDIR}" /external:W0) + add_compile_options(/experimental:external /external:I "${LIBDIR}" /external:W0) endif() # Add each of our libraries to our cmake_prefix_path so find_package() could work -- 2.30.2 From 3120bfa0fc63cf665d5c81227d8381d5c6080e57 Mon Sep 17 00:00:00 2001 From: Martin Heistermann Date: Tue, 14 Feb 2023 16:30:50 +0100 Subject: [PATCH 097/182] OBJ: Support polylines with more than 2 vertices. The OBJ spec (page B1-17) allows "l" entries to specify polylines with more than 2 vertices, optionally with texture coordinates. Previously, only the first 2 vertices of each polyline were read and added as loose edges, failing when texture coordinates were present. This adds support for proper polylines, reading but ignoring texture coordinates. Pull Request #104503 --- .../importer/obj_import_file_reader.cc | 76 +++++++++++++++---- .../wavefront_obj/tests/obj_importer_tests.cc | 9 +++ 2 files changed, 70 insertions(+), 15 deletions(-) diff --git a/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc b/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc index f0ae807b0181..edd46ccd6907 100644 --- a/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc +++ b/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc @@ -152,21 +152,67 @@ static void geom_add_uv_vertex(const char *p, const char *end, GlobalVertices &r r_global_vertices.uv_vertices.append(uv); } -static void geom_add_edge(Geometry *geom, - const char *p, - const char *end, - GlobalVertices &r_global_vertices) +/** + * Parse vertex index and transform to non-negative, zero-based. + * Sets r_index to the index or INT32_MAX on error. + * Index is transformed and bounds-checked using n_vertices, + * which specifies the number of vertices that have been read before. + * Returns updated p. + */ +static const char *parse_vertex_index(const char *p, const char *end, size_t n_elems, int &r_index) { - int edge_v1, edge_v2; - p = parse_int(p, end, -1, edge_v1); - p = parse_int(p, end, -1, edge_v2); - /* Always keep stored indices non-negative and zero-based. */ - edge_v1 += edge_v1 < 0 ? r_global_vertices.vertices.size() : -1; - edge_v2 += edge_v2 < 0 ? r_global_vertices.vertices.size() : -1; - BLI_assert(edge_v1 >= 0 && edge_v2 >= 0); - geom->edges_.append({uint(edge_v1), uint(edge_v2)}); - geom->track_vertex_index(edge_v1); - geom->track_vertex_index(edge_v2); + p = parse_int(p, end, INT32_MAX, r_index, false); + if (r_index != INT32_MAX) { + r_index += r_index < 0 ? n_elems : -1; + if (r_index < 0 || r_index >= n_elems) { + fprintf(stderr, "Invalid vertex index %i (valid range [0, %zu))\n", r_index, n_elems); + r_index = INT32_MAX; + } + } + return p; +} + +/** + * Parse a polyline and add its line segments as loose edges. + * We support the following polyline specifications: + * - "l v1/vt1 v2/vt2 ..." + * - "l v1 v2 ..." + * If a line only has one vertex (technically not allowed by the spec), + * no line is created, but the vertex will be added to + * the mesh even if it is unconnected. + */ +static void geom_add_polyline(Geometry *geom, + const char *p, + const char *end, + GlobalVertices &r_global_vertices) +{ + int last_vertex_index; + p = drop_whitespace(p, end); + p = parse_vertex_index(p, end, r_global_vertices.vertices.size(), last_vertex_index); + + if (last_vertex_index == INT32_MAX) { + fprintf(stderr, "Skipping invalid OBJ polyline.\n"); + return; + } + geom->track_vertex_index(last_vertex_index); + + while (p < end) { + int vertex_index; + + /* Lines can contain texture coordinate indices, just ignore them. */ + p = drop_non_whitespace(p, end); + /* Skip whitespace to get to the next vertex. */ + p = drop_whitespace(p, end); + + p = parse_vertex_index(p, end, r_global_vertices.vertices.size(), vertex_index); + if (vertex_index == INT32_MAX) { + break; + } + + geom->edges_.append({uint(last_vertex_index), uint(vertex_index)}); + geom->track_vertex_index(vertex_index); + last_vertex_index = vertex_index; + } } static void geom_add_polygon(Geometry *geom, @@ -548,7 +594,7 @@ void OBJParser::parse(Vector> &r_all_geometries, } /* Faces. */ else if (parse_keyword(p, end, "l")) { - geom_add_edge(curr_geom, p, end, r_global_vertices); + geom_add_polyline(curr_geom, p, end, r_global_vertices); } /* Objects. */ else if (parse_keyword(p, end, "o")) { diff --git a/source/blender/io/wavefront_obj/tests/obj_importer_tests.cc b/source/blender/io/wavefront_obj/tests/obj_importer_tests.cc index f15687e7bef7..b2ba10a7abd0 100644 --- a/source/blender/io/wavefront_obj/tests/obj_importer_tests.cc +++ b/source/blender/io/wavefront_obj/tests/obj_importer_tests.cc @@ -869,4 +869,13 @@ TEST_F(obj_importer_test, import_split_options_none) import_and_check("split_options.obj", expect, std::size(expect), 0); } +TEST_F(obj_importer_test, import_polylines) +{ + Expectation expect[] = { + {"OBCube", OB_MESH, 8, 12, 6, 24, float3(1, 1, -1), float3(-1, 1, 1)}, + {"OBpolylines", OB_MESH, 13, 8, 0, 0, float3(1, 0, 0), float3(.7, .7, 2)}, + }; + import_and_check("polylines.obj", expect, std::size(expect), 0); +} + } // namespace blender::io::obj -- 2.30.2 From d1413a3eef9a14225096b641514eba06c6e6e767 Mon Sep 17 00:00:00 2001 From: Falk David Date: Tue, 14 Feb 2023 16:33:38 +0100 Subject: [PATCH 098/182] Curves: Use deformed points in edit mode overlay Uses the deformed crazyspace to populate the position buffer for Curves edit mode overlay. Pull Request #104705 --- source/blender/blenkernel/BKE_crazyspace.hh | 1 + .../blender/blenkernel/intern/crazyspace.cc | 10 +- .../draw/intern/draw_cache_impl_curves.cc | 338 +++++++++--------- 3 files changed, 181 insertions(+), 168 deletions(-) diff --git a/source/blender/blenkernel/BKE_crazyspace.hh b/source/blender/blenkernel/BKE_crazyspace.hh index 5f206bcefb23..36b15dcb5901 100644 --- a/source/blender/blenkernel/BKE_crazyspace.hh +++ b/source/blender/blenkernel/BKE_crazyspace.hh @@ -46,6 +46,7 @@ struct GeometryDeformation { * function either retrieves the deformation data from the evaluated object, or falls back to * returning the original data. */ +GeometryDeformation get_evaluated_curves_deformation(const Object *ob_eval, const Object &ob_orig); GeometryDeformation get_evaluated_curves_deformation(const Depsgraph &depsgraph, const Object &ob_orig); diff --git a/source/blender/blenkernel/intern/crazyspace.cc b/source/blender/blenkernel/intern/crazyspace.cc index d56aeeb79404..703454fef1ce 100644 --- a/source/blender/blenkernel/intern/crazyspace.cc +++ b/source/blender/blenkernel/intern/crazyspace.cc @@ -596,7 +596,7 @@ void BKE_crazyspace_api_eval_clear(Object *object) namespace blender::bke::crazyspace { -GeometryDeformation get_evaluated_curves_deformation(const Depsgraph &depsgraph, +GeometryDeformation get_evaluated_curves_deformation(const Object *ob_eval, const Object &ob_orig) { BLI_assert(ob_orig.type == OB_CURVES); @@ -608,7 +608,6 @@ GeometryDeformation get_evaluated_curves_deformation(const Depsgraph &depsgraph, /* Use the undeformed positions by default. */ deformation.positions = curves_orig.positions(); - const Object *ob_eval = DEG_get_evaluated_object(&depsgraph, const_cast(&ob_orig)); if (ob_eval == nullptr) { return deformation; } @@ -653,4 +652,11 @@ GeometryDeformation get_evaluated_curves_deformation(const Depsgraph &depsgraph, return deformation; } +GeometryDeformation get_evaluated_curves_deformation(const Depsgraph &depsgraph, + const Object &ob_orig) +{ + const Object *ob_eval = DEG_get_evaluated_object(&depsgraph, const_cast(&ob_orig)); + return get_evaluated_curves_deformation(ob_eval, ob_orig); +} + } // namespace blender::bke::crazyspace diff --git a/source/blender/draw/intern/draw_cache_impl_curves.cc b/source/blender/draw/intern/draw_cache_impl_curves.cc index beea2f20eb96..70267cdb7d89 100644 --- a/source/blender/draw/intern/draw_cache_impl_curves.cc +++ b/source/blender/draw/intern/draw_cache_impl_curves.cc @@ -25,6 +25,7 @@ #include "DEG_depsgraph_query.h" +#include "BKE_crazyspace.hh" #include "BKE_curves.hh" #include "BKE_geometry_set.hh" @@ -40,11 +41,9 @@ #include "draw_curves_private.hh" /* own include */ #include "draw_shader.h" -using blender::ColorGeometry4f; -using blender::float3; using blender::IndexRange; -using blender::MutableSpan; -using blender::Span; + +namespace blender::draw { /* ---------------------------------------------------------------------- */ /* Curves GPUBatch Cache */ @@ -150,70 +149,12 @@ static void curves_batch_cache_clear(Curves &curves) curves_batch_cache_clear_edit_data(cache); } -void DRW_curves_batch_cache_validate(Curves *curves) -{ - if (!curves_batch_cache_valid(*curves)) { - curves_batch_cache_clear(*curves); - curves_batch_cache_init(*curves); - } -} - static CurvesBatchCache &curves_batch_cache_get(Curves &curves) { DRW_curves_batch_cache_validate(&curves); return *static_cast(curves.batch_cache); } -void DRW_curves_batch_cache_dirty_tag(Curves *curves, int mode) -{ - CurvesBatchCache *cache = static_cast(curves->batch_cache); - if (cache == nullptr) { - return; - } - switch (mode) { - case BKE_CURVES_BATCH_DIRTY_ALL: - cache->is_dirty = true; - break; - default: - BLI_assert_unreachable(); - } -} - -void DRW_curves_batch_cache_free(Curves *curves) -{ - curves_batch_cache_clear(*curves); - MEM_delete(static_cast(curves->batch_cache)); - curves->batch_cache = nullptr; -} - -void DRW_curves_batch_cache_free_old(Curves *curves, int ctime) -{ - CurvesBatchCache *cache = static_cast(curves->batch_cache); - if (cache == nullptr) { - return; - } - - bool do_discard = false; - - for (const int i : IndexRange(MAX_HAIR_SUBDIV)) { - CurvesEvalFinalCache &final_cache = cache->curves_cache.final[i]; - - if (drw_attributes_overlap(&final_cache.attr_used_over_time, &final_cache.attr_used)) { - final_cache.last_attr_matching_time = ctime; - } - - if (ctime - final_cache.last_attr_matching_time > U.vbotimeout) { - do_discard = true; - } - - drw_attributes_clear(&final_cache.attr_used_over_time); - } - - if (do_discard) { - curves_discard_attributes(cache->curves_cache); - } -} - static void ensure_seg_pt_count(const Curves &curves, CurvesEvalCache &curves_cache) { if (curves_cache.proc_point_buf != nullptr) { @@ -231,13 +172,11 @@ struct PositionAndParameter { }; static void curves_batch_cache_fill_segments_proc_pos( - const Curves &curves_id, + const bke::CurvesGeometry &curves, MutableSpan posTime_data, MutableSpan hairLength_data) { - using namespace blender; /* TODO: use hair radius layer if available. */ - const bke::CurvesGeometry &curves = curves_id.geometry.wrap(); const OffsetIndices points_by_curve = curves.points_by_curve(); const Span positions = curves.positions(); @@ -270,7 +209,7 @@ static void curves_batch_cache_fill_segments_proc_pos( }); } -static void curves_batch_cache_ensure_procedural_pos(const Curves &curves, +static void curves_batch_cache_ensure_procedural_pos(const bke::CurvesGeometry &curves, CurvesEvalCache &cache, GPUMaterial * /*gpu_material*/) { @@ -301,12 +240,10 @@ static void curves_batch_cache_ensure_procedural_pos(const Curves &curves, } } -static void curves_batch_cache_ensure_edit_points_pos(const Curves &curves_id, +static void curves_batch_cache_ensure_edit_points_pos(const bke::CurvesGeometry &curves, + Span deformed_positions, CurvesBatchCache &cache) { - using namespace blender; - const bke::CurvesGeometry &curves = curves_id.geometry.wrap(); - static GPUVertFormat format_pos = {0}; static uint pos; if (format_pos.attr_len == 0) { @@ -315,17 +252,13 @@ static void curves_batch_cache_ensure_edit_points_pos(const Curves &curves_id, GPU_vertbuf_init_with_format(cache.edit_points_pos, &format_pos); GPU_vertbuf_data_alloc(cache.edit_points_pos, curves.points_num()); - - Span positions = curves.positions(); - GPU_vertbuf_attr_fill(cache.edit_points_pos, pos, positions.data()); + GPU_vertbuf_attr_fill(cache.edit_points_pos, pos, deformed_positions.data()); } -static void curves_batch_cache_ensure_edit_points_data(const Curves &curves_id, +static void curves_batch_cache_ensure_edit_points_data(const bke::CurvesGeometry &curves, + const eAttrDomain selection_domain, CurvesBatchCache &cache) { - using namespace blender; - const bke::CurvesGeometry &curves = curves_id.geometry.wrap(); - static GPUVertFormat format_data = {0}; static uint color; if (format_data.attr_len == 0) { @@ -338,8 +271,8 @@ static void curves_batch_cache_ensure_edit_points_data(const Curves &curves_id, const OffsetIndices points_by_curve = curves.points_by_curve(); const VArray selection = curves.attributes().lookup_or_default( - ".selection", eAttrDomain(curves_id.selection_domain), true); - switch (curves_id.selection_domain) { + ".selection", selection_domain, true); + switch (selection_domain) { case ATTR_DOMAIN_POINT: for (const int point_i : selection.index_range()) { const float point_selection = selection[point_i] ? 1.0f : 0.0f; @@ -355,14 +288,14 @@ static void curves_batch_cache_ensure_edit_points_data(const Curves &curves_id, } } break; + default: + break; } } -static void curves_batch_cache_ensure_edit_lines(const Curves &curves_id, CurvesBatchCache &cache) +static void curves_batch_cache_ensure_edit_lines(const bke::CurvesGeometry &curves, + CurvesBatchCache &cache) { - using namespace blender; - const bke::CurvesGeometry &curves = curves_id.geometry.wrap(); - const int vert_len = curves.points_num(); const int curve_len = curves.curves_num(); const int index_len = vert_len + curve_len; @@ -383,14 +316,6 @@ static void curves_batch_cache_ensure_edit_lines(const Curves &curves_id, Curves GPU_indexbuf_build_in_place(&elb, cache.edit_lines_ibo); } -void drw_curves_get_attribute_sampler_name(const char *layer_name, char r_sampler_name[32]) -{ - char attr_safe_name[GPU_MAX_SAFE_ATTR_NAME]; - GPU_vertformat_safe_attr_name(layer_name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME); - /* Attributes use auto-name. */ - BLI_snprintf(r_sampler_name, 32, "a%s", attr_safe_name); -} - static void curves_batch_cache_ensure_procedural_final_attr(CurvesEvalCache &cache, const GPUVertFormat *format, const int subdiv, @@ -413,7 +338,6 @@ static void curves_batch_ensure_attribute(const Curves &curves, const int subdiv, const int index) { - using namespace blender; GPU_VERTBUF_DISCARD_SAFE(cache.proc_attributes_buf[index]); char sampler_name[32]; @@ -458,11 +382,10 @@ static void curves_batch_ensure_attribute(const Curves &curves, } } -static void curves_batch_cache_fill_strands_data(const Curves &curves_id, +static void curves_batch_cache_fill_strands_data(const bke::CurvesGeometry &curves, GPUVertBufRaw &data_step, GPUVertBufRaw &seg_step) { - const blender::bke::CurvesGeometry &curves = curves_id.geometry.wrap(); const blender::OffsetIndices points_by_curve = curves.points_by_curve(); for (const int i : IndexRange(curves.curves_num())) { @@ -473,7 +396,7 @@ static void curves_batch_cache_fill_strands_data(const Curves &curves_id, } } -static void curves_batch_cache_ensure_procedural_strand_data(Curves &curves, +static void curves_batch_cache_ensure_procedural_strand_data(const bke::CurvesGeometry &curves, CurvesEvalCache &cache) { GPUVertBufRaw data_step, seg_step; @@ -513,15 +436,12 @@ static void curves_batch_cache_ensure_procedural_final_points(CurvesEvalCache &c cache.final[subdiv].strands_res * cache.strands_len); } -static void curves_batch_cache_fill_segments_indices(const Curves &curves, +static void curves_batch_cache_fill_segments_indices(const bke::CurvesGeometry &curves, const int res, GPUIndexBufBuilder &elb) { - const int curves_num = curves.geometry.curve_num; - uint curr_point = 0; - - for ([[maybe_unused]] const int i : IndexRange(curves_num)) { + for ([[maybe_unused]] const int i : IndexRange(curves.curves_num())) { for (int k = 0; k < res; k++) { GPU_indexbuf_add_generic_vert(&elb, curr_point++); } @@ -529,7 +449,7 @@ static void curves_batch_cache_fill_segments_indices(const Curves &curves, } } -static void curves_batch_cache_ensure_procedural_indices(Curves &curves, +static void curves_batch_cache_ensure_procedural_indices(const bke::CurvesGeometry &curves, CurvesEvalCache &cache, const int thickness_res, const int subdiv) @@ -624,64 +544,6 @@ static bool curves_ensure_attributes(const Curves &curves, return need_tf_update; } -bool curves_ensure_procedural_data(Curves *curves, - CurvesEvalCache **r_hair_cache, - GPUMaterial *gpu_material, - const int subdiv, - const int thickness_res) -{ - bool need_ft_update = false; - - CurvesBatchCache &cache = curves_batch_cache_get(*curves); - *r_hair_cache = &cache.curves_cache; - - const int steps = 3; /* TODO: don't hard-code? */ - (*r_hair_cache)->final[subdiv].strands_res = 1 << (steps + subdiv); - - /* Refreshed on combing and simulation. */ - if ((*r_hair_cache)->proc_point_buf == nullptr) { - ensure_seg_pt_count(*curves, cache.curves_cache); - curves_batch_cache_ensure_procedural_pos(*curves, cache.curves_cache, gpu_material); - need_ft_update = true; - } - - /* Refreshed if active layer or custom data changes. */ - if ((*r_hair_cache)->proc_strand_buf == nullptr) { - curves_batch_cache_ensure_procedural_strand_data(*curves, cache.curves_cache); - } - - /* Refreshed only on subdiv count change. */ - if ((*r_hair_cache)->final[subdiv].proc_buf == nullptr) { - curves_batch_cache_ensure_procedural_final_points(cache.curves_cache, subdiv); - need_ft_update = true; - } - if ((*r_hair_cache)->final[subdiv].proc_hairs[thickness_res - 1] == nullptr) { - curves_batch_cache_ensure_procedural_indices( - *curves, cache.curves_cache, thickness_res, subdiv); - } - - need_ft_update |= curves_ensure_attributes(*curves, cache, gpu_material, subdiv); - - return need_ft_update; -} - -int DRW_curves_material_count_get(Curves *curves) -{ - return max_ii(1, curves->totcol); -} - -GPUBatch *DRW_curves_batch_cache_get_edit_points(Curves *curves) -{ - CurvesBatchCache &cache = curves_batch_cache_get(*curves); - return DRW_batch_request(&cache.edit_points); -} - -GPUBatch *DRW_curves_batch_cache_get_edit_lines(Curves *curves) -{ - CurvesBatchCache &cache = curves_batch_cache_get(*curves); - return DRW_batch_request(&cache.edit_lines); -} - static void request_attribute(Curves &curves, const char *name) { CurvesBatchCache &cache = curves_batch_cache_get(curves); @@ -709,10 +571,145 @@ static void request_attribute(Curves &curves, const char *name) drw_attributes_merge(&final_cache.attr_used, &attributes, cache.render_mutex); } +} // namespace blender::draw + +void drw_curves_get_attribute_sampler_name(const char *layer_name, char r_sampler_name[32]) +{ + char attr_safe_name[GPU_MAX_SAFE_ATTR_NAME]; + GPU_vertformat_safe_attr_name(layer_name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME); + /* Attributes use auto-name. */ + BLI_snprintf(r_sampler_name, 32, "a%s", attr_safe_name); +} + +bool curves_ensure_procedural_data(Curves *curves_id, + CurvesEvalCache **r_hair_cache, + GPUMaterial *gpu_material, + const int subdiv, + const int thickness_res) +{ + using namespace blender; + bke::CurvesGeometry &curves = curves_id->geometry.wrap(); + bool need_ft_update = false; + + draw::CurvesBatchCache &cache = draw::curves_batch_cache_get(*curves_id); + *r_hair_cache = &cache.curves_cache; + + const int steps = 3; /* TODO: don't hard-code? */ + (*r_hair_cache)->final[subdiv].strands_res = 1 << (steps + subdiv); + + /* Refreshed on combing and simulation. */ + if ((*r_hair_cache)->proc_point_buf == nullptr) { + draw::ensure_seg_pt_count(*curves_id, cache.curves_cache); + draw::curves_batch_cache_ensure_procedural_pos(curves, cache.curves_cache, gpu_material); + need_ft_update = true; + } + + /* Refreshed if active layer or custom data changes. */ + if ((*r_hair_cache)->proc_strand_buf == nullptr) { + draw::curves_batch_cache_ensure_procedural_strand_data(curves, cache.curves_cache); + } + + /* Refreshed only on subdiv count change. */ + if ((*r_hair_cache)->final[subdiv].proc_buf == nullptr) { + draw::curves_batch_cache_ensure_procedural_final_points(cache.curves_cache, subdiv); + need_ft_update = true; + } + if ((*r_hair_cache)->final[subdiv].proc_hairs[thickness_res - 1] == nullptr) { + draw::curves_batch_cache_ensure_procedural_indices( + curves, cache.curves_cache, thickness_res, subdiv); + } + + need_ft_update |= draw::curves_ensure_attributes(*curves_id, cache, gpu_material, subdiv); + + return need_ft_update; +} + +void DRW_curves_batch_cache_dirty_tag(Curves *curves, int mode) +{ + using namespace blender::draw; + CurvesBatchCache *cache = static_cast(curves->batch_cache); + if (cache == nullptr) { + return; + } + switch (mode) { + case BKE_CURVES_BATCH_DIRTY_ALL: + cache->is_dirty = true; + break; + default: + BLI_assert_unreachable(); + } +} + +void DRW_curves_batch_cache_validate(Curves *curves) +{ + using namespace blender::draw; + if (!curves_batch_cache_valid(*curves)) { + curves_batch_cache_clear(*curves); + curves_batch_cache_init(*curves); + } +} + +void DRW_curves_batch_cache_free(Curves *curves) +{ + using namespace blender::draw; + curves_batch_cache_clear(*curves); + MEM_delete(static_cast(curves->batch_cache)); + curves->batch_cache = nullptr; +} + +void DRW_curves_batch_cache_free_old(Curves *curves, int ctime) +{ + using namespace blender::draw; + CurvesBatchCache *cache = static_cast(curves->batch_cache); + if (cache == nullptr) { + return; + } + + bool do_discard = false; + + for (const int i : IndexRange(MAX_HAIR_SUBDIV)) { + CurvesEvalFinalCache &final_cache = cache->curves_cache.final[i]; + + if (drw_attributes_overlap(&final_cache.attr_used_over_time, &final_cache.attr_used)) { + final_cache.last_attr_matching_time = ctime; + } + + if (ctime - final_cache.last_attr_matching_time > U.vbotimeout) { + do_discard = true; + } + + drw_attributes_clear(&final_cache.attr_used_over_time); + } + + if (do_discard) { + curves_discard_attributes(cache->curves_cache); + } +} + +int DRW_curves_material_count_get(Curves *curves) +{ + return max_ii(1, curves->totcol); +} + +GPUBatch *DRW_curves_batch_cache_get_edit_points(Curves *curves) +{ + using namespace blender::draw; + CurvesBatchCache &cache = curves_batch_cache_get(*curves); + return DRW_batch_request(&cache.edit_points); +} + +GPUBatch *DRW_curves_batch_cache_get_edit_lines(Curves *curves) +{ + using namespace blender::draw; + CurvesBatchCache &cache = curves_batch_cache_get(*curves); + return DRW_batch_request(&cache.edit_lines); +} + GPUVertBuf **DRW_curves_texture_for_evaluated_attribute(Curves *curves, const char *name, bool *r_is_point_domain) { + using namespace blender::draw; CurvesBatchCache &cache = curves_batch_cache_get(*curves); const DRWContextState *draw_ctx = DRW_context_state_get(); const Scene *scene = draw_ctx->scene; @@ -747,11 +744,19 @@ GPUVertBuf **DRW_curves_texture_for_evaluated_attribute(Curves *curves, void DRW_curves_batch_cache_create_requested(Object *ob) { - Curves *curves = static_cast(ob->data); - Object *orig = DEG_get_original_object(ob); - Curves *curves_orig = static_cast(orig->data); + using namespace blender; + Curves *curves_id = static_cast(ob->data); + Object *ob_orig = DEG_get_original_object(ob); + if (ob_orig == nullptr) { + return; + } + Curves *curves_orig_id = static_cast(ob_orig->data); - CurvesBatchCache &cache = curves_batch_cache_get(*curves); + draw::CurvesBatchCache &cache = draw::curves_batch_cache_get(*curves_id); + bke::CurvesGeometry &curves_orig = curves_orig_id->geometry.wrap(); + + const bke::crazyspace::GeometryDeformation deformation = + bke::crazyspace::get_evaluated_curves_deformation(ob, *ob_orig); if (DRW_batch_requested(cache.edit_points, GPU_PRIM_POINTS)) { DRW_vbo_request(cache.edit_points, &cache.edit_points_pos); @@ -763,12 +768,13 @@ void DRW_curves_batch_cache_create_requested(Object *ob) DRW_vbo_request(cache.edit_lines, &cache.edit_points_data); } if (DRW_vbo_requested(cache.edit_points_pos)) { - curves_batch_cache_ensure_edit_points_pos(*curves_orig, cache); + curves_batch_cache_ensure_edit_points_pos(curves_orig, deformation.positions, cache); } if (DRW_vbo_requested(cache.edit_points_data)) { - curves_batch_cache_ensure_edit_points_data(*curves_orig, cache); + curves_batch_cache_ensure_edit_points_data( + curves_orig, eAttrDomain(curves_id->selection_domain), cache); } if (DRW_ibo_requested(cache.edit_lines_ibo)) { - curves_batch_cache_ensure_edit_lines(*curves_orig, cache); + curves_batch_cache_ensure_edit_lines(curves_orig, cache); } } -- 2.30.2 From 1e38fe4f27b7b012e8dacf858fd042257879adfd Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Tue, 14 Feb 2023 11:27:34 -0500 Subject: [PATCH 099/182] Fix #104652: UV Face Dots randomized Match the check from before 75db4c082ba7bd3d311b, where we just checked that the face dots bitmap wasn't null. --- source/blender/draw/intern/draw_cache_extract_mesh.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/blender/draw/intern/draw_cache_extract_mesh.cc b/source/blender/draw/intern/draw_cache_extract_mesh.cc index 5626b7828028..a5cb6a812148 100644 --- a/source/blender/draw/intern/draw_cache_extract_mesh.cc +++ b/source/blender/draw/intern/draw_cache_extract_mesh.cc @@ -684,8 +684,7 @@ void mesh_buffer_cache_create_requested(struct TaskGraph *task_graph, MeshRenderData *mr = mesh_render_data_create( object, me, is_editmode, is_paint_mode, is_mode_active, obmat, do_final, do_uvedit, ts); mr->use_hide = use_hide; - mr->use_subsurf_fdots = mr->me && - mr->me->runtime->subsurf_face_dot_tags.size() == mr->me->totvert; + mr->use_subsurf_fdots = mr->me && !mr->me->runtime->subsurf_face_dot_tags.is_empty(); mr->use_final_mesh = do_final; #ifdef DEBUG_TIME -- 2.30.2 From 2a9cc75a371db92535f2e5008d7ddb139b7ec08a Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Tue, 14 Feb 2023 17:35:29 +0100 Subject: [PATCH 100/182] Assets: bundle Essentials with Blender This patch adds an "Essentials" asset library that is bundled with Blender. Also see #103620. At build time, the `lib/assets/publish` folder is copied to `datafiles/assets` in the build directory. In the UI, the "Essentials" library can be accessed like other custom asset libraries with the exception that assets from that library cannot be linked. The immediate impact of this is that Blender now comes with some geometry node groups for procedural hair grooming. Pull Request #104474 --- .../blender/asset_system/AS_asset_library.hh | 3 +++ .../asset_system/AS_asset_representation.h | 2 ++ .../asset_system/AS_essentials_library.hh | 15 +++++++++++ source/blender/asset_system/CMakeLists.txt | 2 ++ .../intern/asset_essentials_library.cc | 24 ++++++++++++++++++ .../asset_system/intern/asset_library.cc | 6 +++++ .../intern/asset_library_service.cc | 7 ++++++ .../intern/asset_representation.cc | 8 ++++++ .../intern/asset_library_reference_enum.cc | 7 +++++- .../editors/asset/intern/asset_list.cc | 1 + source/blender/editors/space_file/file_draw.c | 25 +++++++++++++------ source/blender/editors/space_file/filesel.cc | 10 +++++++- source/blender/makesdna/DNA_asset_types.h | 4 +-- source/creator/CMakeLists.txt | 14 +++++++++++ 14 files changed, 116 insertions(+), 12 deletions(-) create mode 100644 source/blender/asset_system/AS_essentials_library.hh create mode 100644 source/blender/asset_system/intern/asset_essentials_library.cc diff --git a/source/blender/asset_system/AS_asset_library.hh b/source/blender/asset_system/AS_asset_library.hh index b3b7d4217242..d487f9711fd7 100644 --- a/source/blender/asset_system/AS_asset_library.hh +++ b/source/blender/asset_system/AS_asset_library.hh @@ -67,6 +67,9 @@ class AssetLibrary { std::unique_ptr catalog_service; + /** Assets owned by this library should never be linked. */ + bool never_link = false; + friend class AssetLibraryService; public: diff --git a/source/blender/asset_system/AS_asset_representation.h b/source/blender/asset_system/AS_asset_representation.h index 6a5425979aa2..359567cbf0b1 100644 --- a/source/blender/asset_system/AS_asset_representation.h +++ b/source/blender/asset_system/AS_asset_representation.h @@ -22,6 +22,8 @@ const char *AS_asset_representation_name_get(const AssetRepresentation *asset) AssetMetaData *AS_asset_representation_metadata_get(const AssetRepresentation *asset) ATTR_WARN_UNUSED_RESULT; bool AS_asset_representation_is_local_id(const AssetRepresentation *asset) ATTR_WARN_UNUSED_RESULT; +bool AS_asset_representation_is_never_link(const AssetRepresentation *asset) + ATTR_WARN_UNUSED_RESULT; #ifdef __cplusplus } diff --git a/source/blender/asset_system/AS_essentials_library.hh b/source/blender/asset_system/AS_essentials_library.hh new file mode 100644 index 000000000000..fafaab6e6a09 --- /dev/null +++ b/source/blender/asset_system/AS_essentials_library.hh @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +/** \file + * \ingroup asset_system + */ + +#pragma once + +#include "BLI_string_ref.hh" + +namespace blender::asset_system { + +StringRefNull essentials_directory_path(); + +} diff --git a/source/blender/asset_system/CMakeLists.txt b/source/blender/asset_system/CMakeLists.txt index f8e1df40d808..25b00e54e71f 100644 --- a/source/blender/asset_system/CMakeLists.txt +++ b/source/blender/asset_system/CMakeLists.txt @@ -17,6 +17,7 @@ set(SRC intern/asset_catalog.cc intern/asset_catalog_path.cc intern/asset_catalog_tree.cc + intern/asset_essentials_library.cc intern/asset_identifier.cc intern/asset_library.cc intern/asset_library_service.cc @@ -30,6 +31,7 @@ set(SRC AS_asset_identifier.hh AS_asset_library.hh AS_asset_representation.hh + AS_essentials_library.hh intern/asset_library_service.hh intern/asset_storage.hh intern/utils.hh diff --git a/source/blender/asset_system/intern/asset_essentials_library.cc b/source/blender/asset_system/intern/asset_essentials_library.cc new file mode 100644 index 000000000000..8a4e51af27a1 --- /dev/null +++ b/source/blender/asset_system/intern/asset_essentials_library.cc @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +/** \file + * \ingroup asset_system + */ + +#include "BLI_path_util.h" + +#include "BKE_appdir.h" + +#include "AS_essentials_library.hh" + +namespace blender::asset_system { + +StringRefNull essentials_directory_path() +{ + static std::string path = []() { + const char *datafiles_path = BKE_appdir_folder_id(BLENDER_DATAFILES, "assets"); + return datafiles_path; + }(); + return path; +} + +} // namespace blender::asset_system diff --git a/source/blender/asset_system/intern/asset_library.cc b/source/blender/asset_system/intern/asset_library.cc index fdb54c16af62..15abc7c776e5 100644 --- a/source/blender/asset_system/intern/asset_library.cc +++ b/source/blender/asset_system/intern/asset_library.cc @@ -260,6 +260,12 @@ StringRefNull AssetLibrary::root_path() const Vector all_valid_asset_library_refs() { Vector result; + { + AssetLibraryReference library_ref{}; + library_ref.custom_library_index = -1; + library_ref.type = ASSET_LIBRARY_ESSENTIALS; + result.append(library_ref); + } int i; LISTBASE_FOREACH_INDEX (const bUserAssetLibrary *, asset_library, &U.asset_libraries, i) { if (!BLI_is_dir(asset_library->path)) { diff --git a/source/blender/asset_system/intern/asset_library_service.cc b/source/blender/asset_system/intern/asset_library_service.cc index af48a173bc05..b9ae8e7bd692 100644 --- a/source/blender/asset_system/intern/asset_library_service.cc +++ b/source/blender/asset_system/intern/asset_library_service.cc @@ -16,6 +16,7 @@ #include "AS_asset_catalog_tree.hh" #include "AS_asset_library.hh" +#include "AS_essentials_library.hh" #include "asset_library_service.hh" #include "utils.hh" @@ -60,6 +61,12 @@ AssetLibrary *AssetLibraryService::get_asset_library( const eAssetLibraryType type = eAssetLibraryType(library_reference.type); switch (type) { + case ASSET_LIBRARY_ESSENTIALS: { + const StringRefNull root_path = essentials_directory_path(); + AssetLibrary *asset_library = get_asset_library_on_disk(root_path); + asset_library->never_link = true; + return asset_library; + } case ASSET_LIBRARY_LOCAL: { /* For the "Current File" library we get the asset library root path based on main. */ std::string root_path = bmain ? AS_asset_library_find_suitable_root_path_from_main(bmain) : diff --git a/source/blender/asset_system/intern/asset_representation.cc b/source/blender/asset_system/intern/asset_representation.cc index 13c6236a6dd3..5d3660e4bb30 100644 --- a/source/blender/asset_system/intern/asset_representation.cc +++ b/source/blender/asset_system/intern/asset_representation.cc @@ -10,6 +10,7 @@ #include "DNA_asset_types.h" #include "AS_asset_identifier.hh" +#include "AS_asset_library.hh" #include "AS_asset_representation.h" #include "AS_asset_representation.hh" @@ -126,4 +127,11 @@ bool AS_asset_representation_is_local_id(const AssetRepresentation *asset_handle return asset->is_local_id(); } +bool AS_asset_representation_is_never_link(const AssetRepresentation *asset_handle) +{ + const asset_system::AssetRepresentation *asset = + reinterpret_cast(asset_handle); + return asset->owner_asset_library().never_link; +} + /** \} */ diff --git a/source/blender/editors/asset/intern/asset_library_reference_enum.cc b/source/blender/editors/asset/intern/asset_library_reference_enum.cc index d20f3205a77e..95cecfcc2493 100644 --- a/source/blender/editors/asset/intern/asset_library_reference_enum.cc +++ b/source/blender/editors/asset/intern/asset_library_reference_enum.cc @@ -47,7 +47,7 @@ AssetLibraryReference ED_asset_library_reference_from_enum_value(int value) if (value < ASSET_LIBRARY_CUSTOM) { library.type = value; library.custom_library_index = -1; - BLI_assert(ELEM(value, ASSET_LIBRARY_ALL, ASSET_LIBRARY_LOCAL)); + BLI_assert(ELEM(value, ASSET_LIBRARY_ALL, ASSET_LIBRARY_LOCAL, ASSET_LIBRARY_ESSENTIALS)); return library; } @@ -87,6 +87,11 @@ const EnumPropertyItem *ED_asset_library_reference_to_rna_enum_itemf(const bool ICON_CURRENT_FILE, "Current File", "Show the assets currently available in this Blender session"}, + {ASSET_LIBRARY_ESSENTIALS, + "ESSENTIALS", + ICON_NONE, + "Essentials", + "Show the basic building blocks and utilities coming with Blender"}, {0, nullptr, 0, nullptr, nullptr}, }; diff --git a/source/blender/editors/asset/intern/asset_list.cc b/source/blender/editors/asset/intern/asset_list.cc index 649343164135..78859a9206d1 100644 --- a/source/blender/editors/asset/intern/asset_list.cc +++ b/source/blender/editors/asset/intern/asset_list.cc @@ -372,6 +372,7 @@ std::optional AssetListStorage::asset_library_reference_to_file switch (eAssetLibraryType(library_reference.type)) { case ASSET_LIBRARY_ALL: return FILE_ASSET_LIBRARY_ALL; + case ASSET_LIBRARY_ESSENTIALS: case ASSET_LIBRARY_CUSTOM: return FILE_ASSET_LIBRARY; case ASSET_LIBRARY_LOCAL: diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index 0cc188b47c00..a940be844e06 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -55,6 +55,8 @@ #include "GPU_immediate_util.h" #include "GPU_state.h" +#include "AS_asset_representation.h" + #include "filelist.h" #include "file_intern.h" /* own include */ @@ -126,6 +128,19 @@ static void draw_tile_background(const rcti *draw_rect, int colorid, int shade) UI_draw_roundbox_aa(&draw_rect_fl, true, 5.0f, color); } +static eFileAssetImportType get_asset_import_type(const SpaceFile *sfile, const FileDirEntry *file) +{ + const FileAssetSelectParams *asset_params = ED_fileselect_get_asset_params(sfile); + BLI_assert(asset_params != NULL); + if (asset_params->import_type != FILE_ASSET_IMPORT_LINK) { + return asset_params->import_type; + } + if (AS_asset_representation_is_never_link(file->asset)) { + return FILE_ASSET_IMPORT_APPEND_REUSE; + } + return FILE_ASSET_IMPORT_LINK; +} + static void file_draw_icon(const SpaceFile *sfile, uiBlock *block, const FileDirEntry *file, @@ -165,13 +180,10 @@ static void file_draw_icon(const SpaceFile *sfile, ImBuf *preview_image = filelist_file_getimage(file); char blend_path[FILE_MAX_LIBEXTRA]; if (BLO_library_path_explode(path, blend_path, NULL, NULL)) { - const FileAssetSelectParams *asset_params = ED_fileselect_get_asset_params(sfile); - BLI_assert(asset_params != NULL); - UI_but_drag_set_asset(but, &(AssetHandle){.file_data = file}, BLI_strdup(blend_path), - asset_params->import_type, + get_asset_import_type(sfile, file), icon, preview_image, UI_DPI_FAC); @@ -558,13 +570,10 @@ static void file_draw_preview(const SpaceFile *sfile, char blend_path[FILE_MAX_LIBEXTRA]; if (BLO_library_path_explode(path, blend_path, NULL, NULL)) { - const FileAssetSelectParams *asset_params = ED_fileselect_get_asset_params(sfile); - BLI_assert(asset_params != NULL); - UI_but_drag_set_asset(but, &(AssetHandle){.file_data = file}, BLI_strdup(blend_path), - asset_params->import_type, + get_asset_import_type(sfile, file), icon, imb, scale); diff --git a/source/blender/editors/space_file/filesel.cc b/source/blender/editors/space_file/filesel.cc index e6dfe6bdfb35..87d163203623 100644 --- a/source/blender/editors/space_file/filesel.cc +++ b/source/blender/editors/space_file/filesel.cc @@ -58,6 +58,8 @@ #include "UI_interface_icons.h" #include "UI_view2d.h" +#include "AS_essentials_library.hh" + #include "file_intern.h" #include "filelist.h" @@ -424,7 +426,13 @@ static void fileselect_refresh_asset_params(FileAssetSelectParams *asset_params) } } - switch (library->type) { + switch (eAssetLibraryType(library->type)) { + case ASSET_LIBRARY_ESSENTIALS: + BLI_strncpy(base_params->dir, + blender::asset_system::essentials_directory_path().c_str(), + sizeof(base_params->dir)); + base_params->type = FILE_ASSET_LIBRARY; + break; case ASSET_LIBRARY_ALL: base_params->dir[0] = '\0'; base_params->type = FILE_ASSET_LIBRARY_ALL; diff --git a/source/blender/makesdna/DNA_asset_types.h b/source/blender/makesdna/DNA_asset_types.h index 195cc059f188..d61e75d98c08 100644 --- a/source/blender/makesdna/DNA_asset_types.h +++ b/source/blender/makesdna/DNA_asset_types.h @@ -85,11 +85,11 @@ typedef struct AssetMetaData { } AssetMetaData; typedef enum eAssetLibraryType { - /* For the future. Display assets bundled with Blender by default. */ - // ASSET_LIBRARY_BUNDLED = 0, /** Display assets from the current session (current "Main"). */ ASSET_LIBRARY_LOCAL = 1, ASSET_LIBRARY_ALL = 2, + /** Display assets bundled with Blender by default. */ + ASSET_LIBRARY_ESSENTIALS = 3, /** Display assets from custom asset libraries, as defined in the preferences * (#bUserAssetLibrary). The name will be taken from #FileSelectParams.asset_library_ref.idname diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index 22b3d1976728..265c12cac3dc 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -1481,6 +1481,20 @@ install( ) +# ----------------------------------------------------------------------------- +# Bundle assets + +set(ASSET_BUNDLE_DIR ${CMAKE_SOURCE_DIR}/../lib/assets/publish/) + +if(EXISTS "${ASSET_BUNDLE_DIR}") + install( + DIRECTORY ${ASSET_BUNDLE_DIR} + DESTINATION ${TARGETDIR_VER}/datafiles/assets + PATTERN ".svn" EXCLUDE + ) +endif() + + # ----------------------------------------------------------------------------- # Setup link libraries -- 2.30.2 From ad934593af16f11ea38ef29f528c2efe035201ff Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Tue, 14 Feb 2023 17:44:41 +0100 Subject: [PATCH 101/182] Assets: show all assets by default instead of current file The "current file" mode is only useful when creating new assets. However, the far more common use case and the one that should require fewer steps is to use existing assets. There is a risk that this causes freezing if the file browser preview caching does not work properly. So we'll have to keep an eye on the bug tracker to see if this is an issue in practice. Pull Request #104749 --- .../editors/asset/intern/asset_library_reference_enum.cc | 2 +- source/blender/editors/space_file/filesel.cc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/asset/intern/asset_library_reference_enum.cc b/source/blender/editors/asset/intern/asset_library_reference_enum.cc index 95cecfcc2493..e94881c47da2 100644 --- a/source/blender/editors/asset/intern/asset_library_reference_enum.cc +++ b/source/blender/editors/asset/intern/asset_library_reference_enum.cc @@ -57,7 +57,7 @@ AssetLibraryReference ED_asset_library_reference_from_enum_value(int value) /* Note that there is no check if the path exists here. If an invalid library path is used, the * Asset Browser can give a nice hint on what's wrong. */ if (!user_library) { - library.type = ASSET_LIBRARY_LOCAL; + library.type = ASSET_LIBRARY_ALL; library.custom_library_index = -1; } else { diff --git a/source/blender/editors/space_file/filesel.cc b/source/blender/editors/space_file/filesel.cc index 87d163203623..4d6c94e6bae7 100644 --- a/source/blender/editors/space_file/filesel.cc +++ b/source/blender/editors/space_file/filesel.cc @@ -104,7 +104,7 @@ static void fileselect_ensure_updated_asset_params(SpaceFile *sfile) asset_params = sfile->asset_params = static_cast( MEM_callocN(sizeof(*asset_params), "FileAssetSelectParams")); asset_params->base_params.details_flags = U_default.file_space_data.details_flags; - asset_params->asset_library_ref.type = ASSET_LIBRARY_LOCAL; + asset_params->asset_library_ref.type = ASSET_LIBRARY_ALL; asset_params->asset_library_ref.custom_library_index = -1; asset_params->import_type = FILE_ASSET_IMPORT_APPEND_REUSE; } @@ -422,7 +422,7 @@ static void fileselect_refresh_asset_params(FileAssetSelectParams *asset_params) user_library = BKE_preferences_asset_library_find_from_index(&U, library->custom_library_index); if (!user_library) { - library->type = ASSET_LIBRARY_LOCAL; + library->type = ASSET_LIBRARY_ALL; } } -- 2.30.2 From d6e95c58018c87c8b70b33310af48b41c316126e Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Tue, 14 Feb 2023 17:53:00 +0100 Subject: [PATCH 102/182] Cleanup: rename vertex buffer attribute to be more specific This renames `data` and `color` to `selection`. This is better because it's actually what the corresponding buffers contain. Using this more correct name makes sharing vertex buffers between different gpu batches for different shaders easier. --- .../shaders/infos/overlay_edit_mode_info.hh | 4 +-- .../overlay_edit_particle_point_vert.glsl | 2 +- .../overlay_edit_particle_strand_vert.glsl | 4 +-- .../draw/intern/draw_cache_impl_curves.cc | 36 ++++++++++--------- .../draw/intern/draw_cache_impl_particles.c | 36 +++++++++---------- 5 files changed, 42 insertions(+), 40 deletions(-) diff --git a/source/blender/draw/engines/overlay/shaders/infos/overlay_edit_mode_info.hh b/source/blender/draw/engines/overlay/shaders/infos/overlay_edit_mode_info.hh index b1c28bcb3e34..d993c7703c0f 100644 --- a/source/blender/draw/engines/overlay/shaders/infos/overlay_edit_mode_info.hh +++ b/source/blender/draw/engines/overlay/shaders/infos/overlay_edit_mode_info.hh @@ -496,7 +496,7 @@ GPU_SHADER_CREATE_INFO(overlay_edit_lattice_wire_clipped) GPU_SHADER_CREATE_INFO(overlay_edit_particle_strand) .do_static_compilation(true) .vertex_in(0, Type::VEC3, "pos") - .vertex_in(1, Type::FLOAT, "color") + .vertex_in(1, Type::FLOAT, "selection") .sampler(0, ImageType::FLOAT_1D, "weightTex") .push_constant(Type::BOOL, "useWeight") .vertex_out(overlay_edit_smooth_color_iface) @@ -512,7 +512,7 @@ GPU_SHADER_CREATE_INFO(overlay_edit_particle_strand_clipped) GPU_SHADER_CREATE_INFO(overlay_edit_particle_point) .do_static_compilation(true) .vertex_in(0, Type::VEC3, "pos") - .vertex_in(1, Type::FLOAT, "color") + .vertex_in(1, Type::FLOAT, "selection") .vertex_out(overlay_edit_flat_color_iface) .fragment_out(0, Type::VEC4, "fragColor") .vertex_source("overlay_edit_particle_point_vert.glsl") diff --git a/source/blender/draw/engines/overlay/shaders/overlay_edit_particle_point_vert.glsl b/source/blender/draw/engines/overlay/shaders/overlay_edit_particle_point_vert.glsl index 956b27e948d6..39c8683a5854 100644 --- a/source/blender/draw/engines/overlay/shaders/overlay_edit_particle_point_vert.glsl +++ b/source/blender/draw/engines/overlay/shaders/overlay_edit_particle_point_vert.glsl @@ -7,7 +7,7 @@ void main() vec3 world_pos = point_object_to_world(pos); gl_Position = point_world_to_ndc(world_pos); - finalColor = mix(colorWire, colorVertexSelect, color); + finalColor = mix(colorWire, colorVertexSelect, selection); gl_PointSize = sizeVertex * 2.0; diff --git a/source/blender/draw/engines/overlay/shaders/overlay_edit_particle_strand_vert.glsl b/source/blender/draw/engines/overlay/shaders/overlay_edit_particle_strand_vert.glsl index 6a92206d524e..5240244b1b38 100644 --- a/source/blender/draw/engines/overlay/shaders/overlay_edit_particle_strand_vert.glsl +++ b/source/blender/draw/engines/overlay/shaders/overlay_edit_particle_strand_vert.glsl @@ -25,10 +25,10 @@ void main() gl_Position = point_world_to_ndc(world_pos); if (useWeight) { - finalColor = vec4(weight_to_rgb(color), 1.0); + finalColor = vec4(weight_to_rgb(selection), 1.0); } else { - finalColor = mix(colorWire, colorVertexSelect, color); + finalColor = mix(colorWire, colorVertexSelect, selection); } view_clipping_distances(world_pos); diff --git a/source/blender/draw/intern/draw_cache_impl_curves.cc b/source/blender/draw/intern/draw_cache_impl_curves.cc index 70267cdb7d89..7d7831391b3d 100644 --- a/source/blender/draw/intern/draw_cache_impl_curves.cc +++ b/source/blender/draw/intern/draw_cache_impl_curves.cc @@ -54,11 +54,11 @@ struct CurvesBatchCache { GPUBatch *edit_points; GPUBatch *edit_lines; - /* Editmode (original) point positions. */ + /* Crazy-space point positions for original points. */ GPUVertBuf *edit_points_pos; - /* Editmode data (such as selection). */ - GPUVertBuf *edit_points_data; + /* Selection of original points. */ + GPUVertBuf *edit_points_selection; GPUIndexBuf *edit_lines_ibo; @@ -113,7 +113,7 @@ static void curves_batch_cache_clear_edit_data(CurvesBatchCache *cache) { /* TODO: more granular update tagging. */ GPU_VERTBUF_DISCARD_SAFE(cache->edit_points_pos); - GPU_VERTBUF_DISCARD_SAFE(cache->edit_points_data); + GPU_VERTBUF_DISCARD_SAFE(cache->edit_points_selection); GPU_INDEXBUF_DISCARD_SAFE(cache->edit_lines_ibo); GPU_BATCH_DISCARD_SAFE(cache->edit_points); @@ -255,18 +255,19 @@ static void curves_batch_cache_ensure_edit_points_pos(const bke::CurvesGeometry GPU_vertbuf_attr_fill(cache.edit_points_pos, pos, deformed_positions.data()); } -static void curves_batch_cache_ensure_edit_points_data(const bke::CurvesGeometry &curves, - const eAttrDomain selection_domain, - CurvesBatchCache &cache) +static void curves_batch_cache_ensure_edit_points_selection(const bke::CurvesGeometry &curves, + const eAttrDomain selection_domain, + CurvesBatchCache &cache) { static GPUVertFormat format_data = {0}; - static uint color; + static uint selection_id; if (format_data.attr_len == 0) { - color = GPU_vertformat_attr_add(&format_data, "color", GPU_COMP_F32, 1, GPU_FETCH_FLOAT); + selection_id = GPU_vertformat_attr_add( + &format_data, "selection", GPU_COMP_F32, 1, GPU_FETCH_FLOAT); } - GPU_vertbuf_init_with_format(cache.edit_points_data, &format_data); - GPU_vertbuf_data_alloc(cache.edit_points_data, curves.points_num()); + GPU_vertbuf_init_with_format(cache.edit_points_selection, &format_data); + GPU_vertbuf_data_alloc(cache.edit_points_selection, curves.points_num()); const OffsetIndices points_by_curve = curves.points_by_curve(); @@ -276,7 +277,7 @@ static void curves_batch_cache_ensure_edit_points_data(const bke::CurvesGeometry case ATTR_DOMAIN_POINT: for (const int point_i : selection.index_range()) { const float point_selection = selection[point_i] ? 1.0f : 0.0f; - GPU_vertbuf_attr_set(cache.edit_points_data, color, point_i, &point_selection); + GPU_vertbuf_attr_set(cache.edit_points_selection, selection_id, point_i, &point_selection); } break; case ATTR_DOMAIN_CURVE: @@ -284,7 +285,8 @@ static void curves_batch_cache_ensure_edit_points_data(const bke::CurvesGeometry const float curve_selection = selection[curve_i] ? 1.0f : 0.0f; const IndexRange points = points_by_curve[curve_i]; for (const int point_i : points) { - GPU_vertbuf_attr_set(cache.edit_points_data, color, point_i, &curve_selection); + GPU_vertbuf_attr_set( + cache.edit_points_selection, selection_id, point_i, &curve_selection); } } break; @@ -760,18 +762,18 @@ void DRW_curves_batch_cache_create_requested(Object *ob) if (DRW_batch_requested(cache.edit_points, GPU_PRIM_POINTS)) { DRW_vbo_request(cache.edit_points, &cache.edit_points_pos); - DRW_vbo_request(cache.edit_points, &cache.edit_points_data); + DRW_vbo_request(cache.edit_points, &cache.edit_points_selection); } if (DRW_batch_requested(cache.edit_lines, GPU_PRIM_LINE_STRIP)) { DRW_ibo_request(cache.edit_lines, &cache.edit_lines_ibo); DRW_vbo_request(cache.edit_lines, &cache.edit_points_pos); - DRW_vbo_request(cache.edit_lines, &cache.edit_points_data); + DRW_vbo_request(cache.edit_lines, &cache.edit_points_selection); } if (DRW_vbo_requested(cache.edit_points_pos)) { curves_batch_cache_ensure_edit_points_pos(curves_orig, deformation.positions, cache); } - if (DRW_vbo_requested(cache.edit_points_data)) { - curves_batch_cache_ensure_edit_points_data( + if (DRW_vbo_requested(cache.edit_points_selection)) { + curves_batch_cache_ensure_edit_points_selection( curves_orig, eAttrDomain(curves_id->selection_domain), cache); } if (DRW_ibo_requested(cache.edit_lines_ibo)) { diff --git a/source/blender/draw/intern/draw_cache_impl_particles.c b/source/blender/draw/intern/draw_cache_impl_particles.c index cba06eec76ca..78459eec81f2 100644 --- a/source/blender/draw/intern/draw_cache_impl_particles.c +++ b/source/blender/draw/intern/draw_cache_impl_particles.c @@ -89,21 +89,21 @@ typedef struct HairAttributeID { typedef struct EditStrandData { float pos[3]; - float color; + float selection; } EditStrandData; -static GPUVertFormat *edit_points_vert_format_get(uint *r_pos_id, uint *r_color_id) +static GPUVertFormat *edit_points_vert_format_get(uint *r_pos_id, uint *r_selection_id) { static GPUVertFormat edit_point_format = {0}; - static uint pos_id, color_id; + static uint pos_id, selection_id; if (edit_point_format.attr_len == 0) { /* Keep in sync with EditStrandData */ pos_id = GPU_vertformat_attr_add(&edit_point_format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); - color_id = GPU_vertformat_attr_add( - &edit_point_format, "color", GPU_COMP_F32, 1, GPU_FETCH_FLOAT); + selection_id = GPU_vertformat_attr_add( + &edit_point_format, "selection", GPU_COMP_F32, 1, GPU_FETCH_FLOAT); } *r_pos_id = pos_id; - *r_color_id = color_id; + *r_selection_id = selection_id; return &edit_point_format; } @@ -697,11 +697,11 @@ static int particle_batch_cache_fill_segments_edit( if (particle) { float weight = particle_key_weight(particle, i, strand_t); /* NaN or unclamped become 1.0f */ - seg_data->color = (weight < 1.0f) ? weight : 1.0f; + seg_data->selection = (weight < 1.0f) ? weight : 1.0f; } else { /* Computed in psys_cache_edit_paths_iter(). */ - seg_data->color = path[j].col[0]; + seg_data->selection = path[j].col[0]; } GPU_indexbuf_add_generic_vert(elb, curr_point); curr_point++; @@ -1530,8 +1530,8 @@ static void particle_batch_cache_ensure_edit_pos_and_seg(PTCacheEdit *edit, GPUVertBufRaw data_step; GPUIndexBufBuilder elb; - uint pos_id, color_id; - GPUVertFormat *edit_point_format = edit_points_vert_format_get(&pos_id, &color_id); + uint pos_id, selection_id; + GPUVertFormat *edit_point_format = edit_points_vert_format_get(&pos_id, &selection_id); hair_cache->pos = GPU_vertbuf_create_with_format(edit_point_format); GPU_vertbuf_data_alloc(hair_cache->pos, hair_cache->point_len); @@ -1594,8 +1594,8 @@ static void particle_batch_cache_ensure_edit_inner_pos(PTCacheEdit *edit, return; } - uint pos_id, color_id; - GPUVertFormat *edit_point_format = edit_points_vert_format_get(&pos_id, &color_id); + uint pos_id, selection_id; + GPUVertFormat *edit_point_format = edit_points_vert_format_get(&pos_id, &selection_id); cache->edit_inner_pos = GPU_vertbuf_create_with_format(edit_point_format); GPU_vertbuf_data_alloc(cache->edit_inner_pos, cache->edit_inner_point_len); @@ -1608,9 +1608,9 @@ static void particle_batch_cache_ensure_edit_inner_pos(PTCacheEdit *edit, } for (int key_index = 0; key_index < point->totkey - 1; key_index++) { PTCacheEditKey *key = &point->keys[key_index]; - float color = (key->flag & PEK_SELECT) ? 1.0f : 0.0f; + float selection = (key->flag & PEK_SELECT) ? 1.0f : 0.0f; GPU_vertbuf_attr_set(cache->edit_inner_pos, pos_id, global_key_index, key->world_co); - GPU_vertbuf_attr_set(cache->edit_inner_pos, color_id, global_key_index, &color); + GPU_vertbuf_attr_set(cache->edit_inner_pos, selection_id, global_key_index, &selection); global_key_index++; } } @@ -1652,8 +1652,8 @@ static void particle_batch_cache_ensure_edit_tip_pos(PTCacheEdit *edit, Particle return; } - uint pos_id, color_id; - GPUVertFormat *edit_point_format = edit_points_vert_format_get(&pos_id, &color_id); + uint pos_id, selection_id; + GPUVertFormat *edit_point_format = edit_points_vert_format_get(&pos_id, &selection_id); cache->edit_tip_pos = GPU_vertbuf_create_with_format(edit_point_format); GPU_vertbuf_data_alloc(cache->edit_tip_pos, cache->edit_tip_point_len); @@ -1665,10 +1665,10 @@ static void particle_batch_cache_ensure_edit_tip_pos(PTCacheEdit *edit, Particle continue; } PTCacheEditKey *key = &point->keys[point->totkey - 1]; - float color = (key->flag & PEK_SELECT) ? 1.0f : 0.0f; + float selection = (key->flag & PEK_SELECT) ? 1.0f : 0.0f; GPU_vertbuf_attr_set(cache->edit_tip_pos, pos_id, global_point_index, key->world_co); - GPU_vertbuf_attr_set(cache->edit_tip_pos, color_id, global_point_index, &color); + GPU_vertbuf_attr_set(cache->edit_tip_pos, selection_id, global_point_index, &selection); global_point_index++; } } -- 2.30.2 From 481baf0184ab96cfe78ee18cf4e73d2eef6e39e1 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Tue, 14 Feb 2023 18:10:11 +0100 Subject: [PATCH 103/182] Curves: cage overlay for sculpt mode This adds a new overlay for curves sculpt mode that displays the curves that the user currently edits. Those may be different from the evaluated/original curves when procedural deformations or child curves are used. The overlay can clash with the evaluated curves when they are exactly on top of each other. There is not much we can do about that currently. The user will have to decide whether the overlay should be shown or not on a case-by-case basis. Pull Request #104467 --- release/scripts/startup/bl_ui/space_view3d.py | 7 ++ .../blenloader/intern/versioning_300.cc | 12 ++++ source/blender/draw/CMakeLists.txt | 1 + .../draw/engines/overlay/overlay_engine.cc | 4 ++ .../draw/engines/overlay/overlay_private.hh | 4 ++ .../engines/overlay/overlay_sculpt_curves.cc | 69 ++++++++++++++----- .../draw/engines/overlay/overlay_shader.cc | 13 ++++ .../infos/overlay_sculpt_curves_info.hh | 21 ++++++ .../overlay_sculpt_curves_cage_vert.glsl | 15 ++++ source/blender/makesdna/DNA_view3d_types.h | 5 ++ source/blender/makesrna/intern/rna_space.c | 13 ++++ 11 files changed, 148 insertions(+), 16 deletions(-) create mode 100644 source/blender/draw/engines/overlay/shaders/overlay_sculpt_curves_cage_vert.glsl diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 97eb45462edf..a15487411873 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -6755,6 +6755,13 @@ class VIEW3D_PT_overlay_sculpt_curves(Panel): row.active = overlay.show_overlays row.prop(overlay, "sculpt_mode_mask_opacity", text="Selection Opacity") + row = layout.row(align=True) + row.active = overlay.show_overlays + row.prop(overlay, "sculpt_curves_cage", text="") + subrow = row.row(align=True) + subrow.active = overlay.sculpt_curves_cage + subrow.prop(overlay, "sculpt_curves_cage_opacity", text="Cage Opacity") + class VIEW3D_PT_overlay_bones(Panel): bl_space_type = 'VIEW_3D' diff --git a/source/blender/blenloader/intern/versioning_300.cc b/source/blender/blenloader/intern/versioning_300.cc index e8e7c6b552a4..2340d585d5d9 100644 --- a/source/blender/blenloader/intern/versioning_300.cc +++ b/source/blender/blenloader/intern/versioning_300.cc @@ -3926,6 +3926,18 @@ void blo_do_versions_300(FileData *fd, Library * /*lib*/, Main *bmain) } } + LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) { + LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) { + LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) { + if (sl->spacetype == SPACE_VIEW3D) { + View3D *v3d = (View3D *)sl; + v3d->overlay.flag |= V3D_OVERLAY_SCULPT_CURVES_CAGE; + v3d->overlay.sculpt_curves_cage_opacity = 0.5f; + } + } + } + } + /* Keep this block, even when empty. */ } } diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt index 063050660c66..3560a982b901 100644 --- a/source/blender/draw/CMakeLists.txt +++ b/source/blender/draw/CMakeLists.txt @@ -702,6 +702,7 @@ set(GLSL_SRC engines/overlay/shaders/overlay_point_varying_color_frag.glsl engines/overlay/shaders/overlay_point_varying_color_varying_outline_aa_frag.glsl engines/overlay/shaders/overlay_pointcloud_only_vert.glsl + engines/overlay/shaders/overlay_sculpt_curves_cage_vert.glsl engines/overlay/shaders/overlay_sculpt_curves_selection_frag.glsl engines/overlay/shaders/overlay_sculpt_curves_selection_vert.glsl engines/overlay/shaders/overlay_sculpt_mask_frag.glsl diff --git a/source/blender/draw/engines/overlay/overlay_engine.cc b/source/blender/draw/engines/overlay/overlay_engine.cc index 6f90645a0da9..5b414c8c5f0a 100644 --- a/source/blender/draw/engines/overlay/overlay_engine.cc +++ b/source/blender/draw/engines/overlay/overlay_engine.cc @@ -632,6 +632,10 @@ static void OVERLAY_draw_scene(void *vedata) GPU_framebuffer_bind(fbl->overlay_line_fb); } + if (pd->ctx_mode == CTX_MODE_SCULPT_CURVES) { + OVERLAY_sculpt_curves_draw_wires(data); + } + OVERLAY_wireframe_draw(data); OVERLAY_armature_draw(data); OVERLAY_particle_draw(data); diff --git a/source/blender/draw/engines/overlay/overlay_private.hh b/source/blender/draw/engines/overlay/overlay_private.hh index 8eb6ebecb7b1..b9aa77106f58 100644 --- a/source/blender/draw/engines/overlay/overlay_private.hh +++ b/source/blender/draw/engines/overlay/overlay_private.hh @@ -120,6 +120,7 @@ typedef struct OVERLAY_PassList { DRWPass *pointcloud_ps; DRWPass *sculpt_mask_ps; DRWPass *sculpt_curves_selection_ps; + DRWPass *sculpt_curves_cage_ps; DRWPass *volume_ps; DRWPass *wireframe_ps; DRWPass *wireframe_xray_ps; @@ -287,6 +288,7 @@ typedef struct OVERLAY_PrivateData { DRWShadingGroup *pointcloud_dots_grp; DRWShadingGroup *sculpt_mask_grp; DRWShadingGroup *sculpt_curves_selection_grp; + DRWShadingGroup *sculpt_curves_cage_lines_grp; DRWShadingGroup *viewer_attribute_curve_grp; DRWShadingGroup *viewer_attribute_curves_grp; DRWShadingGroup *viewer_attribute_mesh_grp; @@ -687,6 +689,7 @@ void OVERLAY_sculpt_draw(OVERLAY_Data *vedata); void OVERLAY_sculpt_curves_cache_init(OVERLAY_Data *vedata); void OVERLAY_sculpt_curves_cache_populate(OVERLAY_Data *vedata, Object *ob); void OVERLAY_sculpt_curves_draw(OVERLAY_Data *vedata); +void OVERLAY_sculpt_curves_draw_wires(OVERLAY_Data *vedata); void OVERLAY_viewer_attribute_cache_init(OVERLAY_Data *vedata); void OVERLAY_viewer_attribute_cache_populate(OVERLAY_Data *vedata, Object *object); @@ -776,6 +779,7 @@ GPUShader *OVERLAY_shader_particle_dot(void); GPUShader *OVERLAY_shader_particle_shape(void); GPUShader *OVERLAY_shader_sculpt_mask(void); GPUShader *OVERLAY_shader_sculpt_curves_selection(void); +GPUShader *OVERLAY_shader_sculpt_curves_cage(void); GPUShader *OVERLAY_shader_viewer_attribute_curve(void); GPUShader *OVERLAY_shader_viewer_attribute_curves(void); GPUShader *OVERLAY_shader_viewer_attribute_mesh(void); diff --git a/source/blender/draw/engines/overlay/overlay_sculpt_curves.cc b/source/blender/draw/engines/overlay/overlay_sculpt_curves.cc index f84b93a487c0..c73386f78974 100644 --- a/source/blender/draw/engines/overlay/overlay_sculpt_curves.cc +++ b/source/blender/draw/engines/overlay/overlay_sculpt_curves.cc @@ -11,23 +11,41 @@ #include "overlay_private.hh" #include "BKE_attribute.hh" +#include "BKE_crazyspace.hh" #include "BKE_curves.hh" +#include "DEG_depsgraph_query.h" + void OVERLAY_sculpt_curves_cache_init(OVERLAY_Data *vedata) { OVERLAY_PassList *psl = vedata->psl; OVERLAY_PrivateData *pd = vedata->stl->pd; + const View3DOverlay &overlay = vedata->stl->pd->overlay; - const DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_BLEND_ALPHA; - DRW_PASS_CREATE(psl->sculpt_curves_selection_ps, state | pd->clipping_state); + /* Selection overlay. */ + { + const DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_BLEND_ALPHA; + DRW_PASS_CREATE(psl->sculpt_curves_selection_ps, state | pd->clipping_state); - GPUShader *sh = OVERLAY_shader_sculpt_curves_selection(); - pd->sculpt_curves_selection_grp = DRW_shgroup_create(sh, psl->sculpt_curves_selection_ps); - DRWShadingGroup *grp = pd->sculpt_curves_selection_grp; + GPUShader *sh = OVERLAY_shader_sculpt_curves_selection(); + pd->sculpt_curves_selection_grp = DRW_shgroup_create(sh, psl->sculpt_curves_selection_ps); + DRWShadingGroup *grp = pd->sculpt_curves_selection_grp; - /* Reuse the same mask opacity from sculpt mode, since it wasn't worth it to add a different - * property yet. */ - DRW_shgroup_uniform_float_copy(grp, "selection_opacity", pd->overlay.sculpt_mode_mask_opacity); + /* Reuse the same mask opacity from sculpt mode, since it wasn't worth it to add a different + * property yet. */ + DRW_shgroup_uniform_float_copy(grp, "selection_opacity", pd->overlay.sculpt_mode_mask_opacity); + } + /* Cage overlay. */ + { + const DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS_EQUAL | + DRW_STATE_BLEND_ALPHA; + DRW_PASS_CREATE(psl->sculpt_curves_cage_ps, state | pd->clipping_state); + + GPUShader *sh = OVERLAY_shader_sculpt_curves_cage(); + pd->sculpt_curves_cage_lines_grp = DRW_shgroup_create(sh, psl->sculpt_curves_cage_ps); + DRW_shgroup_uniform_float_copy( + pd->sculpt_curves_cage_lines_grp, "opacity", overlay.sculpt_curves_cage_opacity); + } } static bool everything_selected(const Curves &curves_id) @@ -39,7 +57,7 @@ static bool everything_selected(const Curves &curves_id) return selection.is_single() && selection.get_internal_single(); } -void OVERLAY_sculpt_curves_cache_populate(OVERLAY_Data *vedata, Object *object) +static void populate_selection_overlay(OVERLAY_Data *vedata, Object *object) { OVERLAY_PrivateData *pd = vedata->stl->pd; Curves *curves = static_cast(object->data); @@ -68,16 +86,35 @@ void OVERLAY_sculpt_curves_cache_populate(OVERLAY_Data *vedata, Object *object) DRW_shgroup_buffer_texture(grp, "selection_tx", *texture); } +static void populate_edit_overlay(OVERLAY_Data *vedata, Object *object) +{ + OVERLAY_PrivateData *pd = vedata->stl->pd; + Curves *curves = static_cast(object->data); + + GPUBatch *geom_lines = DRW_curves_batch_cache_get_edit_lines(curves); + DRW_shgroup_call_no_cull(pd->sculpt_curves_cage_lines_grp, geom_lines, object); +} + +void OVERLAY_sculpt_curves_cache_populate(OVERLAY_Data *vedata, Object *object) +{ + populate_selection_overlay(vedata, object); + const View3DOverlay &overlay = vedata->stl->pd->overlay; + if ((overlay.flag & V3D_OVERLAY_SCULPT_CURVES_CAGE) && + overlay.sculpt_curves_cage_opacity > 0.0f) { + populate_edit_overlay(vedata, object); + } +} + void OVERLAY_sculpt_curves_draw(OVERLAY_Data *vedata) { OVERLAY_PassList *psl = vedata->psl; - OVERLAY_PrivateData *pd = vedata->stl->pd; - OVERLAY_FramebufferList *fbl = vedata->fbl; - - if (DRW_state_is_fbo()) { - GPU_framebuffer_bind(pd->painting.in_front ? fbl->overlay_in_front_fb : - fbl->overlay_default_fb); - } DRW_draw_pass(psl->sculpt_curves_selection_ps); } + +void OVERLAY_sculpt_curves_draw_wires(OVERLAY_Data *vedata) +{ + OVERLAY_PassList *psl = vedata->psl; + + DRW_draw_pass(psl->sculpt_curves_cage_ps); +} diff --git a/source/blender/draw/engines/overlay/overlay_shader.cc b/source/blender/draw/engines/overlay/overlay_shader.cc index 5fd009db715e..2229316d295c 100644 --- a/source/blender/draw/engines/overlay/overlay_shader.cc +++ b/source/blender/draw/engines/overlay/overlay_shader.cc @@ -91,6 +91,7 @@ struct OVERLAY_Shaders { GPUShader *particle_shape; GPUShader *pointcloud_dot; GPUShader *sculpt_mask; + GPUShader *sculpt_curves_cage; GPUShader *sculpt_curves_selection; GPUShader *uniform_color; GPUShader *uniform_color_pointcloud; @@ -856,6 +857,18 @@ GPUShader *OVERLAY_shader_sculpt_curves_selection(void) return sh_data->sculpt_curves_selection; } +GPUShader *OVERLAY_shader_sculpt_curves_cage(void) +{ + const DRWContextState *draw_ctx = DRW_context_state_get(); + OVERLAY_Shaders *sh_data = &e_data.sh_data[draw_ctx->sh_cfg]; + if (!sh_data->sculpt_curves_cage) { + sh_data->sculpt_curves_cage = GPU_shader_create_from_info_name( + (draw_ctx->sh_cfg == GPU_SHADER_CFG_CLIPPED) ? "overlay_sculpt_curves_cage_clipped" : + "overlay_sculpt_curves_cage"); + } + return sh_data->sculpt_curves_cage; +} + GPUShader *OVERLAY_shader_viewer_attribute_mesh(void) { const DRWContextState *draw_ctx = DRW_context_state_get(); diff --git a/source/blender/draw/engines/overlay/shaders/infos/overlay_sculpt_curves_info.hh b/source/blender/draw/engines/overlay/shaders/infos/overlay_sculpt_curves_info.hh index 46e3943b293a..b0b261ed9f17 100644 --- a/source/blender/draw/engines/overlay/shaders/infos/overlay_sculpt_curves_info.hh +++ b/source/blender/draw/engines/overlay/shaders/infos/overlay_sculpt_curves_info.hh @@ -19,3 +19,24 @@ GPU_SHADER_CREATE_INFO(overlay_sculpt_curves_selection) GPU_SHADER_CREATE_INFO(overlay_sculpt_curves_selection_clipped) .do_static_compilation(true) .additional_info("overlay_sculpt_curves_selection", "drw_clipped"); + +GPU_SHADER_INTERFACE_INFO(overlay_sculpt_curves_cage_iface, "") + .no_perspective(Type::VEC2, "edgePos") + .flat(Type::VEC2, "edgeStart") + .smooth(Type::VEC4, "finalColor"); + +GPU_SHADER_CREATE_INFO(overlay_sculpt_curves_cage) + .do_static_compilation(true) + .vertex_in(0, Type::VEC3, "pos") + .vertex_in(1, Type::FLOAT, "selection") + .vertex_out(overlay_sculpt_curves_cage_iface) + .fragment_out(0, Type::VEC4, "fragColor") + .fragment_out(1, Type::VEC4, "lineOutput") + .push_constant(Type::FLOAT, "opacity") + .vertex_source("overlay_sculpt_curves_cage_vert.glsl") + .fragment_source("overlay_extra_frag.glsl") + .additional_info("draw_modelmat", "draw_view", "draw_globals"); + +GPU_SHADER_CREATE_INFO(overlay_sculpt_curves_cage_clipped) + .do_static_compilation(true) + .additional_info("overlay_sculpt_curves_cage", "drw_clipped"); diff --git a/source/blender/draw/engines/overlay/shaders/overlay_sculpt_curves_cage_vert.glsl b/source/blender/draw/engines/overlay/shaders/overlay_sculpt_curves_cage_vert.glsl new file mode 100644 index 000000000000..162934f64de1 --- /dev/null +++ b/source/blender/draw/engines/overlay/shaders/overlay_sculpt_curves_cage_vert.glsl @@ -0,0 +1,15 @@ + +#pragma BLENDER_REQUIRE(common_view_clipping_lib.glsl) +#pragma BLENDER_REQUIRE(common_view_lib.glsl) + +void main() +{ + vec3 world_pos = point_object_to_world(pos); + gl_Position = point_world_to_ndc(world_pos); + + finalColor = vec4(selection); + finalColor.a *= opacity; + + /* Convert to screen position [0..sizeVp]. */ + edgePos = edgeStart = ((gl_Position.xy / gl_Position.w) * 0.5 + 0.5) * sizeViewport.xy; +} diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h index f6ee3d6e2dd6..fb70fe982ba0 100644 --- a/source/blender/makesdna/DNA_view3d_types.h +++ b/source/blender/makesdna/DNA_view3d_types.h @@ -232,6 +232,10 @@ typedef struct View3DOverlay { float gpencil_vertex_paint_opacity; /** Handles display type for curves. */ int handle_display; + + /** Curves sculpt mode settings. */ + float sculpt_curves_cage_opacity; + char _pad[4]; } View3DOverlay; /** #View3DOverlay.handle_display */ @@ -547,6 +551,7 @@ enum { V3D_OVERLAY_VIEWER_ATTRIBUTE = (1 << 13), V3D_OVERLAY_SCULPT_SHOW_MASK = (1 << 14), V3D_OVERLAY_SCULPT_SHOW_FACE_SETS = (1 << 15), + V3D_OVERLAY_SCULPT_CURVES_CAGE = (1 << 16), }; /** #View3DOverlay.edit_flag */ diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index ae07f2372b64..68c3aeb5c838 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -4714,6 +4714,19 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna) RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); + prop = RNA_def_property(srna, "sculpt_curves_cage", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "overlay.flag", V3D_OVERLAY_SCULPT_CURVES_CAGE); + RNA_def_property_ui_text( + prop, "Sculpt Curves Cage", "Show original curves that are currently being edited"); + RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); + + prop = RNA_def_property(srna, "sculpt_curves_cage_opacity", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "overlay.sculpt_curves_cage_opacity"); + RNA_def_property_ui_text( + prop, "Curves Sculpt Cage Opacity", "Opacity of the cage overlay in curves sculpt mode"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); + prop = RNA_def_property(srna, "sculpt_mode_face_sets_opacity", PROP_FLOAT, PROP_FACTOR); RNA_def_property_float_sdna(prop, NULL, "overlay.sculpt_mode_face_sets_opacity"); RNA_def_property_ui_text(prop, "Sculpt Face Sets Opacity", ""); -- 2.30.2 From 5dda4567d245d08e5489d303158a2b7671eb2f09 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Tue, 14 Feb 2023 18:21:50 +0100 Subject: [PATCH 104/182] Geometry Nodes: Operator to wrap a modifier's node group As described in #104171, add an operator that creates a new node group that contain the current node group and named attribute nodes to deal with the outputs. This saves manual work when moving a high-level modifier to the node editor for better procedural control. Pull Request #104546 --- .../startup/bl_operators/geometry_nodes.py | 170 +++++++++++++++++- .../blender/modifiers/intern/MOD_ui_common.c | 11 ++ 2 files changed, 172 insertions(+), 9 deletions(-) diff --git a/release/scripts/startup/bl_operators/geometry_nodes.py b/release/scripts/startup/bl_operators/geometry_nodes.py index 2b92b87a97fd..9696063ac1ed 100644 --- a/release/scripts/startup/bl_operators/geometry_nodes.py +++ b/release/scripts/startup/bl_operators/geometry_nodes.py @@ -6,8 +6,8 @@ from bpy.types import Operator from bpy.app.translations import pgettext_data as data_ -def geometry_node_group_empty_new(): - group = bpy.data.node_groups.new(data_("Geometry Nodes"), 'GeometryNodeTree') +def build_default_empty_geometry_node_group(name): + group = bpy.data.node_groups.new(name, 'GeometryNodeTree') group.inputs.new('NodeSocketGeometry', data_("Geometry")) group.outputs.new('NodeSocketGeometry', data_("Geometry")) input_node = group.nodes.new('NodeGroupInput') @@ -20,8 +20,12 @@ def geometry_node_group_empty_new(): input_node.location.x = -200 - input_node.width output_node.location.x = 200 - group.links.new(output_node.inputs[0], input_node.outputs[0]) + return group + +def geometry_node_group_empty_new(): + group = build_default_empty_geometry_node_group(data_("Geometry Nodes")) + group.links.new(group.nodes["Group Input"].outputs[0], group.nodes["Group Output"].inputs[0]) return group @@ -35,6 +39,158 @@ def geometry_modifier_poll(context): return True +def get_context_modifier(context): + if context.area.type == 'PROPERTIES': + modifier = context.modifier + else: + modifier = context.object.modifiers.active + if modifier is None or modifier.type != 'NODES': + return None + return modifier + + +def edit_geometry_nodes_modifier_poll(context): + return get_context_modifier(context) is not None + + +def socket_idname_to_attribute_type(idname): + if idname.startswith("NodeSocketInt"): + return "INT" + elif idname.startswith("NodeSocketColor"): + return "FLOAT_COLOR" + elif idname.startswith("NodeSocketVector"): + return "FLOAT_VECTOR" + elif idname.startswith("NodeSocketBool"): + return "BOOLEAN" + elif idname.startswith("NodeSocketFloat"): + return "FLOAT" + raise ValueError("Unsupported socket type") + return "" + + +def modifier_attribute_name_get(modifier, identifier): + try: + return modifier[identifier + "_attribute_name"] + except KeyError: + return None + + +def modifier_input_use_attribute(modifier, identifier): + try: + return modifier[identifier + "_use_attribute"] != 0 + except KeyError: + return False + + +def get_socket_with_identifier(sockets, identifier): + for socket in sockets: + if socket.identifier == identifier: + return socket + return None + + +def get_enabled_socket_with_name(sockets, name): + for socket in sockets: + if socket.name == name and socket.enabled: + return socket + return None + + +class MoveModifierToNodes(Operator): + """Move inputs and outputs from in the modifier to a new node group""" + + bl_idname = "object.geometry_nodes_move_to_nodes" + bl_label = "Move to Nodes" + bl_options = {'REGISTER', 'UNDO'} + + @classmethod + def poll(cls, context): + return edit_geometry_nodes_modifier_poll(context) + + def execute(self, context): + modifier = get_context_modifier(context) + if not modifier: + return {'CANCELLED'} + old_group = modifier.node_group + if not old_group: + return {'CANCELLED'} + + wrapper_name = old_group.name + ".wrapper" + group = build_default_empty_geometry_node_group(wrapper_name) + group_node = group.nodes.new("GeometryNodeGroup") + group_node.node_tree = old_group + group_node.update() + + group_input_node = group.nodes["Group Input"] + group_output_node = group.nodes["Group Output"] + + # Copy default values for inputs and create named attribute input nodes. + input_nodes = [] + first_geometry_input = None + for input_socket in old_group.inputs: + identifier = input_socket.identifier + group_node_input = get_socket_with_identifier(group_node.inputs, identifier) + if modifier_input_use_attribute(modifier, identifier): + input_node = group.nodes.new("GeometryNodeInputNamedAttribute") + input_nodes.append(input_node) + input_node.data_type = socket_idname_to_attribute_type(input_socket.bl_socket_idname) + attribute_name = modifier_attribute_name_get(modifier, identifier) + input_node.inputs["Name"].default_value = attribute_name + output_socket = get_enabled_socket_with_name(input_node.outputs, "Attribute") + group.links.new(output_socket, group_node_input) + elif hasattr(input_socket, "default_value"): + group_node_input.default_value = modifier[identifier] + elif input_socket.bl_socket_idname == 'NodeSocketGeometry': + if not first_geometry_input: + first_geometry_input = group_node_input + + group.links.new(group_input_node.outputs[0], first_geometry_input) + + # Adjust locations of named attribute input nodes and group input node to make some space. + if input_nodes: + for i, node in enumerate(input_nodes): + node.location.x = -175 + node.location.y = i * -50 + group_input_node.location.x = -350 + + # Connect outputs to store named attribute nodes to replace modifier attribute outputs. + store_nodes = [] + first_geometry_output = None + for output_socket in old_group.outputs: + identifier = output_socket.identifier + group_node_output = get_socket_with_identifier(group_node.outputs, identifier) + attribute_name = modifier_attribute_name_get(modifier, identifier) + if attribute_name: + store_node = group.nodes.new("GeometryNodeStoreNamedAttribute") + store_nodes.append(store_node) + store_node.data_type = socket_idname_to_attribute_type(output_socket.bl_socket_idname) + store_node.domain = output_socket.attribute_domain + store_node.inputs["Name"].default_value = attribute_name + input_socket = get_enabled_socket_with_name(store_node.inputs, "Value") + group.links.new(group_node_output, input_socket) + elif output_socket.bl_socket_idname == 'NodeSocketGeometry': + if not first_geometry_output: + first_geometry_output = group_node_output + + # Adjust locations of store named attribute nodes and move group output. + if store_nodes: + for i, node in enumerate(store_nodes): + node.location.x = (i + 1) * 175 + node.location.y = 0 + group_output_node.location.x = (len(store_nodes) + 1) * 175 + + group.links.new(first_geometry_output, store_nodes[0].inputs["Geometry"]) + for i in range(len(store_nodes) - 1): + group.links.new(store_nodes[i].outputs["Geometry"], store_nodes[i + 1].inputs["Geometry"]) + group.links.new(store_nodes[-1].outputs["Geometry"], group_output_node.inputs["Geometry"]) + else: + group.links.new(first_geometry_output, group_output_node.inputs["Geometry"]) + + modifier.node_group = group + + return {'FINISHED'} + + class NewGeometryNodesModifier(Operator): """Create a new modifier with a new geometry node group""" @@ -48,7 +204,6 @@ class NewGeometryNodesModifier(Operator): def execute(self, context): modifier = context.object.modifiers.new(data_("GeometryNodes"), "NODES") - if not modifier: return {'CANCELLED'} @@ -70,11 +225,7 @@ class NewGeometryNodeTreeAssign(Operator): return geometry_modifier_poll(context) def execute(self, context): - if context.area.type == 'PROPERTIES': - modifier = context.modifier - else: - modifier = context.object.modifiers.active - + modifier = get_context_modifier(context) if not modifier: return {'CANCELLED'} @@ -87,4 +238,5 @@ class NewGeometryNodeTreeAssign(Operator): classes = ( NewGeometryNodesModifier, NewGeometryNodeTreeAssign, + MoveModifierToNodes, ) diff --git a/source/blender/modifiers/intern/MOD_ui_common.c b/source/blender/modifiers/intern/MOD_ui_common.c index 0f6c40610a0d..f88fb971b9ca 100644 --- a/source/blender/modifiers/intern/MOD_ui_common.c +++ b/source/blender/modifiers/intern/MOD_ui_common.c @@ -274,6 +274,17 @@ static void modifier_ops_extra_draw(bContext *C, uiLayout *layout, void *md_v) if (!md->next) { uiLayoutSetEnabled(row, false); } + + if (md->type == eModifierType_Nodes) { + uiItemFullO(layout, + "OBJECT_OT_geometry_nodes_move_to_nodes", + NULL, + ICON_NONE, + NULL, + WM_OP_INVOKE_DEFAULT, + 0, + &op_ptr); + } } static void modifier_panel_header(const bContext *C, Panel *panel) -- 2.30.2 From e1e157565bcccb62599568225b130021b2096b2e Mon Sep 17 00:00:00 2001 From: Falk David Date: Tue, 14 Feb 2023 18:24:24 +0100 Subject: [PATCH 105/182] Curves: Add transform tools to toolbar This commit also makes `ED_transform_calc_gizmo_stats` work for curves. Pull Request #104750 --- .../startup/bl_ui/space_toolsystem_toolbar.py | 2 +- .../editors/transform/transform_gizmo_3d.cc | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py index 7e0fe54ab8dd..bc6407993526 100644 --- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py +++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py @@ -2997,7 +2997,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): _defs_edit_curve.curve_vertex_randomize, ], 'EDIT_CURVES': [ - *_tools_select, + *_tools_default, ], 'EDIT_SURFACE': [ *_tools_default, diff --git a/source/blender/editors/transform/transform_gizmo_3d.cc b/source/blender/editors/transform/transform_gizmo_3d.cc index 157a80e41465..cbc60a8631de 100644 --- a/source/blender/editors/transform/transform_gizmo_3d.cc +++ b/source/blender/editors/transform/transform_gizmo_3d.cc @@ -30,7 +30,9 @@ #include "BKE_action.h" #include "BKE_armature.h" #include "BKE_context.h" +#include "BKE_crazyspace.hh" #include "BKE_curve.h" +#include "BKE_curves.hh" #include "BKE_editmesh.h" #include "BKE_global.h" #include "BKE_gpencil.h" @@ -47,6 +49,7 @@ #include "WM_types.h" #include "ED_armature.h" +#include "ED_curves.h" #include "ED_gizmo_library.h" #include "ED_gizmo_utils.h" #include "ED_gpencil.h" @@ -623,6 +626,7 @@ int ED_transform_calc_gizmo_stats(const bContext *C, const TransformCalcParams *params, TransformBounds *tbounds) { + using namespace blender; ScrArea *area = CTX_wm_area(C); ARegion *region = CTX_wm_region(C); Scene *scene = CTX_data_scene(C); @@ -929,6 +933,28 @@ int ED_transform_calc_gizmo_stats(const bContext *C, } FOREACH_EDIT_OBJECT_END(); } + else if (obedit->type == OB_CURVES) { + FOREACH_EDIT_OBJECT_BEGIN (ob_iter, use_mat_local) { + const Curves &curves_id = *static_cast(ob_iter->data); + const bke::CurvesGeometry &curves = curves_id.geometry.wrap(); + const bke::crazyspace::GeometryDeformation deformation = + bke::crazyspace::get_evaluated_curves_deformation(*depsgraph, *ob); + + float4x4 mat_local; + if (use_mat_local) { + mat_local = float4x4(obedit->world_to_object) * float4x4(ob_iter->object_to_world); + } + + Vector indices; + const IndexMask selected_points = ed::curves::retrieve_selected_points(curves, indices); + const Span positions = deformation.positions; + totsel += selected_points.size(); + for (const int point_i : selected_points) { + calc_tw_center_with_matrix(tbounds, positions[point_i], use_mat_local, mat_local.ptr()); + } + } + FOREACH_EDIT_OBJECT_END(); + } #undef FOREACH_EDIT_OBJECT_BEGIN #undef FOREACH_EDIT_OBJECT_END -- 2.30.2 From 452522958d067b256e322c981d9a1721da283609 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Tue, 14 Feb 2023 17:32:13 +0100 Subject: [PATCH 106/182] Fix #104748: GPencil: Fill tool is not working at all Caused by missing color uniform update. --- source/blender/editors/gpencil/gpencil_fill.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/source/blender/editors/gpencil/gpencil_fill.c b/source/blender/editors/gpencil/gpencil_fill.c index 7f8ff54cc122..af1ab5e56596 100644 --- a/source/blender/editors/gpencil/gpencil_fill.c +++ b/source/blender/editors/gpencil/gpencil_fill.c @@ -993,23 +993,25 @@ static void draw_mouse_position(tGPDfill *tgpf) if (tgpf->gps_mouse == NULL) { return; } - uchar mouse_color[4] = {0, 0, 255, 255}; bGPDspoint *pt = &tgpf->gps_mouse->points[0]; float point_size = (tgpf->zoom == 1.0f) ? 4.0f * tgpf->fill_factor : (0.5f * tgpf->zoom) + tgpf->fill_factor; GPUVertFormat *format = immVertexFormat(); uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); - uint col = GPU_vertformat_attr_add(format, "color", GPU_COMP_U8, 4, GPU_FETCH_INT_TO_FLOAT_UNIT); + uint size = GPU_vertformat_attr_add(format, "size", GPU_COMP_F32, 1, GPU_FETCH_FLOAT); + uint color = GPU_vertformat_attr_add(format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT); /* Draw mouse click position in Blue. */ - immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA); - immUniform1f("size", point_size * M_SQRT2); + GPU_program_point_size(true); + immBindBuiltinProgram(GPU_SHADER_3D_POINT_VARYING_SIZE_VARYING_COLOR); immBegin(GPU_PRIM_POINTS, 1); - immAttr4ubv(col, mouse_color); + immAttr1f(size, point_size * M_SQRT2); + immAttr4f(color, 0.0f, 0.0f, 1.0f, 1.0f); immVertex3fv(pos, &pt->x); immEnd(); immUnbindProgram(); + GPU_program_point_size(false); } /* Helper: Check if must skip the layer */ -- 2.30.2 From 024c4bfc9023f36827d0114bb475206d1edfe92e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Tue, 14 Feb 2023 18:14:18 +0100 Subject: [PATCH 107/182] GPU: Fix wrong 2D shader used from 3D drawing Regression introduced by d165d6aa2aee438a626cef929c9ad02513cdebb3. --- source/blender/editors/gpencil/annotate_draw.c | 2 +- source/blender/editors/sculpt_paint/curves_sculpt_ops.cc | 2 +- source/blender/editors/space_view3d/view3d_draw.cc | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/gpencil/annotate_draw.c b/source/blender/editors/gpencil/annotate_draw.c index ae09aea28d39..8021d976add1 100644 --- a/source/blender/editors/gpencil/annotate_draw.c +++ b/source/blender/editors/gpencil/annotate_draw.c @@ -279,7 +279,7 @@ static void annotation_draw_stroke_point(const bGPDspoint *points, immBindBuiltinProgram(GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA); } else { - immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA); + immBindBuiltinProgram(GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA); /* get 2D coordinates of point */ float co[3] = {0.0f}; diff --git a/source/blender/editors/sculpt_paint/curves_sculpt_ops.cc b/source/blender/editors/sculpt_paint/curves_sculpt_ops.cc index 54bef8d2257d..2b024c22b7d1 100644 --- a/source/blender/editors/sculpt_paint/curves_sculpt_ops.cc +++ b/source/blender/editors/sculpt_paint/curves_sculpt_ops.cc @@ -966,7 +966,7 @@ static void min_distance_edit_draw(bContext *C, int /*x*/, int /*y*/, void *cust const uint pos3d = GPU_vertformat_attr_add(format3d, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); const uint col3d = GPU_vertformat_attr_add(format3d, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT); - immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA); + immBindBuiltinProgram(GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA); immUniform1f("size", 4.0f); immBegin(GPU_PRIM_POINTS, points_wo.size()); diff --git a/source/blender/editors/space_view3d/view3d_draw.cc b/source/blender/editors/space_view3d/view3d_draw.cc index b50721a22c55..80ec3cae4929 100644 --- a/source/blender/editors/space_view3d/view3d_draw.cc +++ b/source/blender/editors/space_view3d/view3d_draw.cc @@ -1104,7 +1104,7 @@ static void draw_rotation_guide(const RegionView3D *rv3d) immUnbindProgram(); /* -- draw rotation center -- */ - immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA); + immBindBuiltinProgram(GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA); immUniform1f("size", 7.0f); immBegin(GPU_PRIM_POINTS, 1); immAttr4ubv(col, color); -- 2.30.2 From 42d838ca0712cf3a8483a9e28224c25a0eb2c9d8 Mon Sep 17 00:00:00 2001 From: Germano Cavalcante Date: Sat, 4 Feb 2023 03:12:23 -0300 Subject: [PATCH 108/182] MSVC: lower C4100 warning level from 4 to 3 This better aligns with OSX/Linux warnings. Although `__pragma(warning(suppress:4100))` is not the same as `__attribute__((__unused__))` in gcc (which only affects the attribute instead of the line), it still seems to be better to use it than to hide the warning entirely. --- CMakeLists.txt | 1 + build_files/cmake/macros.cmake | 3 ++- intern/ghost/intern/GHOST_DropTargetWin32.cpp | 6 +++--- intern/ghost/intern/GHOST_ImeWin32.cpp | 6 +++--- intern/ghost/intern/GHOST_SystemWin32.cpp | 10 ++++++---- intern/ghost/intern/GHOST_TrackpadWin32.cpp | 4 ++-- intern/ghost/intern/GHOST_WindowWin32.cpp | 13 +++++++++---- intern/guardedalloc/intern/mallocn_intern.h | 3 +++ source/blender/blenlib/BLI_utildefines.h | 3 +++ source/blender/blenlib/intern/BLI_filelist.c | 2 ++ source/blender/makesrna/intern/CMakeLists.txt | 3 +++ source/blender/python/intern/stubs.c | 3 +++ source/creator/blender_launcher_win32.c | 5 +++++ 13 files changed, 45 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b61275522a9..46c1b78c4961 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1631,6 +1631,7 @@ elseif(CMAKE_C_COMPILER_ID MATCHES "MSVC") # warning level: "/W3" "/w34062" # switch statement contains 'default' but no 'case' labels + "/w34100" # 'identifier' : unreferenced formal parameter "/w34115" # 'type' : named type definition in parentheses "/w34189" # local variable is initialized but not referenced # see https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/c5038?view=vs-2017 diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index fe3bb9d4737e..07e442ddbcd6 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -702,6 +702,7 @@ macro(remove_strict_flags) endif() if(MSVC) + remove_cc_flag(/w34100) # Restore warn C4100 (unreferenced formal parameter) back to w4 remove_cc_flag(/w34189) # Restore warn C4189 (unused variable) back to w4 endif() @@ -721,7 +722,7 @@ macro(remove_extra_strict_flags) endif() if(MSVC) - # TODO + remove_cc_flag(/w34100) # Restore warn C4100 (unreferenced formal parameter) back to w4 endif() endmacro() diff --git a/intern/ghost/intern/GHOST_DropTargetWin32.cpp b/intern/ghost/intern/GHOST_DropTargetWin32.cpp index 86483118b3d6..a26377ca6d1e 100644 --- a/intern/ghost/intern/GHOST_DropTargetWin32.cpp +++ b/intern/ghost/intern/GHOST_DropTargetWin32.cpp @@ -78,7 +78,7 @@ ULONG __stdcall GHOST_DropTargetWin32::Release(void) * Implementation of IDropTarget::DragEnter */ HRESULT __stdcall GHOST_DropTargetWin32::DragEnter(IDataObject *p_data_object, - DWORD grf_key_state, + DWORD /*grf_key_state*/, POINTL pt, DWORD *pdw_effect) { @@ -95,7 +95,7 @@ HRESULT __stdcall GHOST_DropTargetWin32::DragEnter(IDataObject *p_data_object, /* * Implementation of IDropTarget::DragOver */ -HRESULT __stdcall GHOST_DropTargetWin32::DragOver(DWORD grf_key_state, +HRESULT __stdcall GHOST_DropTargetWin32::DragOver(DWORD /*grf_key_state*/, POINTL pt, DWORD *pdw_effect) { @@ -128,7 +128,7 @@ HRESULT __stdcall GHOST_DropTargetWin32::DragLeave(void) * the implementation of IDropTarget::DragOver */ HRESULT __stdcall GHOST_DropTargetWin32::Drop(IDataObject *p_data_object, - DWORD grf_key_state, + DWORD /*grf_key_state*/, POINTL pt, DWORD *pdw_effect) { diff --git a/intern/ghost/intern/GHOST_ImeWin32.cpp b/intern/ghost/intern/GHOST_ImeWin32.cpp index 780d93ac9955..764a6a1e2410 100644 --- a/intern/ghost/intern/GHOST_ImeWin32.cpp +++ b/intern/ghost/intern/GHOST_ImeWin32.cpp @@ -140,7 +140,7 @@ void GHOST_ImeWin32::SetImeWindowStyle( ::DefWindowProc(window_handle, message, wparam, lparam); } -void GHOST_ImeWin32::DestroyImeWindow(HWND window_handle) +void GHOST_ImeWin32::DestroyImeWindow(HWND /*window_handle*/) { /* Destroy the system caret if we have created for this IME input context. */ if (system_caret_) { @@ -149,7 +149,7 @@ void GHOST_ImeWin32::DestroyImeWindow(HWND window_handle) } } -void GHOST_ImeWin32::MoveImeWindow(HWND window_handle, HIMC imm_context) +void GHOST_ImeWin32::MoveImeWindow(HWND /*window_handle*/, HIMC imm_context) { int x = caret_rect_.m_l; int y = caret_rect_.m_t; @@ -228,7 +228,7 @@ void GHOST_ImeWin32::CheckFirst(HWND window_handle) } } -void GHOST_ImeWin32::ResetComposition(HWND window_handle) +void GHOST_ImeWin32::ResetComposition(HWND /*window_handle*/) { /* Currently, just reset the composition status. */ is_composing_ = false; diff --git a/intern/ghost/intern/GHOST_SystemWin32.cpp b/intern/ghost/intern/GHOST_SystemWin32.cpp index 9fc69dabe002..9c527985ad37 100644 --- a/intern/ghost/intern/GHOST_SystemWin32.cpp +++ b/intern/ghost/intern/GHOST_SystemWin32.cpp @@ -217,7 +217,7 @@ GHOST_IWindow *GHOST_SystemWin32::createWindow(const char *title, uint32_t height, GHOST_TWindowState state, GHOST_GLSettings glSettings, - const bool exclusive, + const bool /*exclusive*/, const bool is_dialog, const GHOST_IWindow *parentWindow) { @@ -568,7 +568,7 @@ GHOST_TKey GHOST_SystemWin32::hardKey(RAWINPUT const &raw, bool *r_key_down) * This function was added in response to bug #25715. * This is going to be a long list #42426. */ -GHOST_TKey GHOST_SystemWin32::processSpecialKey(short vKey, short scanCode) const +GHOST_TKey GHOST_SystemWin32::processSpecialKey(short vKey, short /*scanCode*/) const { GHOST_TKey key = GHOST_kKeyUnknown; if (vKey == 0xFF) { @@ -1148,7 +1148,9 @@ GHOST_EventCursor *GHOST_SystemWin32::processCursorEvent(GHOST_WindowWin32 *wind GHOST_TABLET_DATA_NONE); } -void GHOST_SystemWin32::processWheelEvent(GHOST_WindowWin32 *window, WPARAM wParam, LPARAM lParam) +void GHOST_SystemWin32::processWheelEvent(GHOST_WindowWin32 *window, + WPARAM wParam, + LPARAM /*lParam*/) { GHOST_SystemWin32 *system = (GHOST_SystemWin32 *)getSystem(); @@ -2181,7 +2183,7 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, uint msg, WPARAM wParam, return lResult; } -char *GHOST_SystemWin32::getClipboard(bool selection) const +char *GHOST_SystemWin32::getClipboard(bool /*selection*/) const { if (IsClipboardFormatAvailable(CF_UNICODETEXT) && OpenClipboard(NULL)) { wchar_t *buffer; diff --git a/intern/ghost/intern/GHOST_TrackpadWin32.cpp b/intern/ghost/intern/GHOST_TrackpadWin32.cpp index d5317f0f7800..4d5ce6fabe13 100644 --- a/intern/ghost/intern/GHOST_TrackpadWin32.cpp +++ b/intern/ghost/intern/GHOST_TrackpadWin32.cpp @@ -265,14 +265,14 @@ HRESULT GHOST_DirectManipulationViewportEventHandler::OnViewportStatusChanged( } HRESULT GHOST_DirectManipulationViewportEventHandler::OnViewportUpdated( - IDirectManipulationViewport *viewport) + IDirectManipulationViewport * /*viewport*/) { /* Nothing to do here. */ return S_OK; } HRESULT GHOST_DirectManipulationViewportEventHandler::OnContentUpdated( - IDirectManipulationViewport *viewport, IDirectManipulationContent *content) + IDirectManipulationViewport * /*viewport*/, IDirectManipulationContent *content) { float transform[6]; HRESULT hr = content->GetContentTransform(transform, ARRAYSIZE(transform)); diff --git a/intern/ghost/intern/GHOST_WindowWin32.cpp b/intern/ghost/intern/GHOST_WindowWin32.cpp index 3e82f55c5839..06d9ea939e0d 100644 --- a/intern/ghost/intern/GHOST_WindowWin32.cpp +++ b/intern/ghost/intern/GHOST_WindowWin32.cpp @@ -898,7 +898,7 @@ GHOST_TSuccess GHOST_WindowWin32::hasCursorShape(GHOST_TStandardCursor cursorSha } GHOST_TSuccess GHOST_WindowWin32::getPointerInfo( - std::vector &outPointerInfo, WPARAM wParam, LPARAM lParam) + std::vector &outPointerInfo, WPARAM wParam, LPARAM /*lParam*/) { int32_t pointerId = GET_POINTERID_WPARAM(wParam); int32_t isPrimary = IS_POINTER_PRIMARY_WPARAM(wParam); @@ -1109,8 +1109,13 @@ static uint16_t uns16ReverseBits(uint16_t shrt) } #endif -GHOST_TSuccess GHOST_WindowWin32::setWindowCustomCursorShape( - uint8_t *bitmap, uint8_t *mask, int sizeX, int sizeY, int hotX, int hotY, bool canInvertColor) +GHOST_TSuccess GHOST_WindowWin32::setWindowCustomCursorShape(uint8_t *bitmap, + uint8_t *mask, + int sizeX, + int sizeY, + int hotX, + int hotY, + bool /*canInvertColor*/) { uint32_t andData[32]; uint32_t xorData[32]; @@ -1175,7 +1180,7 @@ GHOST_TSuccess GHOST_WindowWin32::endProgressBar() } #ifdef WITH_INPUT_IME -void GHOST_WindowWin32::beginIME(int32_t x, int32_t y, int32_t w, int32_t h, bool completed) +void GHOST_WindowWin32::beginIME(int32_t x, int32_t y, int32_t /*w*/, int32_t h, bool completed) { m_imeInput.BeginIME(m_hWnd, GHOST_Rect(x, y - h, x, y), completed); } diff --git a/intern/guardedalloc/intern/mallocn_intern.h b/intern/guardedalloc/intern/mallocn_intern.h index c2e9f9117bcb..14e5c171e7e5 100644 --- a/intern/guardedalloc/intern/mallocn_intern.h +++ b/intern/guardedalloc/intern/mallocn_intern.h @@ -10,6 +10,9 @@ #ifdef __GNUC__ # define UNUSED(x) UNUSED_##x __attribute__((__unused__)) +#elif defined(_MSC_VER) +/* NOTE: This suppresses the warning for the line, not the attribute. */ +# define UNUSED(x) UNUSED_##x __pragma(warning(suppress : 4100)) #else # define UNUSED(x) UNUSED_##x #endif diff --git a/source/blender/blenlib/BLI_utildefines.h b/source/blender/blenlib/BLI_utildefines.h index e03bc7ba78af..35e3345f4c28 100644 --- a/source/blender/blenlib/BLI_utildefines.h +++ b/source/blender/blenlib/BLI_utildefines.h @@ -668,6 +668,9 @@ extern bool BLI_memory_is_zero(const void *arr, size_t arr_size); /* UNUSED macro, for function argument */ # if defined(__GNUC__) || defined(__clang__) # define UNUSED(x) UNUSED_##x __attribute__((__unused__)) +# elif defined(_MSC_VER) +/* NOTE: This suppresses the warning for the line, not the attribute. */ +# define UNUSED(x) UNUSED_##x __pragma(warning(suppress : 4100)) # else # define UNUSED(x) UNUSED_##x # endif diff --git a/source/blender/blenlib/intern/BLI_filelist.c b/source/blender/blenlib/intern/BLI_filelist.c index 7dca60128d36..6240c855c997 100644 --- a/source/blender/blenlib/intern/BLI_filelist.c +++ b/source/blender/blenlib/intern/BLI_filelist.c @@ -272,6 +272,7 @@ void BLI_filelist_entry_mode_to_string(const struct stat *st, const char *types[8] = {"---", "--x", "-w-", "-wx", "r--", "r-x", "rw-", "rwx"}; #ifdef WIN32 + UNUSED_VARS(st); BLI_strncpy(r_mode1, types[0], sizeof(*r_mode1) * FILELIST_DIRENTRY_MODE_LEN); BLI_strncpy(r_mode2, types[0], sizeof(*r_mode2) * FILELIST_DIRENTRY_MODE_LEN); BLI_strncpy(r_mode3, types[0], sizeof(*r_mode3) * FILELIST_DIRENTRY_MODE_LEN); @@ -315,6 +316,7 @@ void BLI_filelist_entry_owner_to_string(const struct stat *st, char r_owner[FILELIST_DIRENTRY_OWNER_LEN]) { #ifdef WIN32 + UNUSED_VARS(st); strcpy(r_owner, "unknown"); #else struct passwd *pwuser = getpwuid(st->st_uid); diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt index adf139f3e6a3..7b0d7725f1d4 100644 --- a/source/blender/makesrna/intern/CMakeLists.txt +++ b/source/blender/makesrna/intern/CMakeLists.txt @@ -140,6 +140,9 @@ if(CMAKE_COMPILER_IS_GNUCC OR (CMAKE_C_COMPILER_ID MATCHES "Clang")) endif() if(CMAKE_C_COMPILER_ID MATCHES "Clang") string(APPEND GENSRC_CFLAGS " -Wno-missing-variable-declarations") +elseif(MSVC) + # Restore warn C4100 (unreferenced formal parameter) back to w4 + remove_cc_flag(/w34100) endif() if(GENSRC_CFLAGS) diff --git a/source/blender/python/intern/stubs.c b/source/blender/python/intern/stubs.c index f860bdc36ee0..6ac9cd64f333 100644 --- a/source/blender/python/intern/stubs.c +++ b/source/blender/python/intern/stubs.c @@ -12,6 +12,9 @@ #if defined(__GNUC__) || defined(__clang__) # pragma GCC diagnostic error "-Wmissing-prototypes" # pragma GCC diagnostic ignored "-Wunused-parameter" +#elif defined(_MSC_VER) +/* Suppress unreferenced formal parameter warning. */ +# pragma warning(disable : 4100) #endif /* python, will come back */ diff --git a/source/creator/blender_launcher_win32.c b/source/creator/blender_launcher_win32.c index 993efafb53d9..49acc591487a 100644 --- a/source/creator/blender_launcher_win32.c +++ b/source/creator/blender_launcher_win32.c @@ -55,6 +55,11 @@ BOOL LaunchedFromSteam() int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) { + /* Silence unreferenced formal parameter warning. */ + (void)hInstance; + (void)hPrevInstance; + (void)nCmdShow; + STARTUPINFO siStartInfo = {0}; PROCESS_INFORMATION procInfo; wchar_t path[MAX_PATH]; -- 2.30.2 From 90f57ca1cae20c1f22e96c4a54b70e27bc162104 Mon Sep 17 00:00:00 2001 From: Germano Cavalcante Date: Tue, 14 Feb 2023 14:07:47 -0300 Subject: [PATCH 109/182] Gizmo: use the final matrix for the dial3D clip plane Dial3D uses the `matrix_basis` for the clip plane. This can cause inconsistencies if the gizmo has `matrix_offset` or `matrix_space`. --- .../gizmo_library/gizmo_types/dial3d_gizmo.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c index d7ae9be6c33d..bb7d4cb8b127 100644 --- a/source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c +++ b/source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c @@ -86,8 +86,7 @@ struct Dial3dParams { float arc_inner_factor; float *clip_plane; }; -static void dial_3d_draw_util(const float matrix_basis[4][4], - const float matrix_final[4][4], +static void dial_3d_draw_util(const float matrix_final[4][4], const float line_width, const float color[4], const bool select, @@ -96,7 +95,7 @@ static void dial_3d_draw_util(const float matrix_basis[4][4], static void dial_geom_draw(const float color[4], const float line_width, const bool select, - const float axis_modal_mat[4][4], + const float clip_plane_mat[4][4], const float clip_plane[4], const float arc_partial_angle, const float arc_inner_factor, @@ -118,7 +117,7 @@ static void dial_geom_draw(const float color[4], immBindBuiltinProgram(filled ? GPU_SHADER_3D_CLIPPED_UNIFORM_COLOR : GPU_SHADER_3D_POLYLINE_CLIPPED_UNIFORM_COLOR); immUniform4fv("ClipPlane", clip_plane); - immUniformMatrix4fv("ModelMatrix", axis_modal_mat); + immUniformMatrix4fv("ModelMatrix", clip_plane_mat); } else { immBindBuiltinProgram(filled ? GPU_SHADER_3D_UNIFORM_COLOR : @@ -432,8 +431,7 @@ static void dial_draw_intern( } } - dial_3d_draw_util(gz->matrix_basis, - matrix_final, + dial_3d_draw_util(matrix_final, gz->line_width, color, select, @@ -613,8 +611,7 @@ static int gizmo_dial_invoke(bContext *UNUSED(C), wmGizmo *gz, const wmEvent *ev /** \name Dial Gizmo API * \{ */ -static void dial_3d_draw_util(const float matrix_basis[4][4], - const float matrix_final[4][4], +static void dial_3d_draw_util(const float matrix_final[4][4], const float line_width, const float color[4], const bool select, @@ -650,7 +647,7 @@ static void dial_3d_draw_util(const float matrix_basis[4][4], dial_geom_draw(color, line_width, select, - matrix_basis, + matrix_final, params->clip_plane, params->arc_partial_angle, params->arc_inner_factor, -- 2.30.2 From 46d858a8dd31711bccfcbfdfbc93e5a222ef8dae Mon Sep 17 00:00:00 2001 From: Germano Cavalcante Date: Tue, 14 Feb 2023 15:35:36 -0300 Subject: [PATCH 110/182] Revert "MSVC: lower C4100 warning level from 4 to 3" This reverts commit db4e7616f3590c04484fe8a015b6a02b7a1ede44. Caused many issues when compiling mantaflow. --- CMakeLists.txt | 1 - build_files/cmake/macros.cmake | 3 +-- intern/ghost/intern/GHOST_DropTargetWin32.cpp | 6 +++--- intern/ghost/intern/GHOST_ImeWin32.cpp | 6 +++--- intern/ghost/intern/GHOST_SystemWin32.cpp | 10 ++++------ intern/ghost/intern/GHOST_TrackpadWin32.cpp | 4 ++-- intern/ghost/intern/GHOST_WindowWin32.cpp | 13 ++++--------- intern/guardedalloc/intern/mallocn_intern.h | 3 --- source/blender/blenlib/BLI_utildefines.h | 3 --- source/blender/blenlib/intern/BLI_filelist.c | 2 -- source/blender/makesrna/intern/CMakeLists.txt | 3 --- source/blender/python/intern/stubs.c | 3 --- source/creator/blender_launcher_win32.c | 5 ----- 13 files changed, 17 insertions(+), 45 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 46c1b78c4961..7b61275522a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1631,7 +1631,6 @@ elseif(CMAKE_C_COMPILER_ID MATCHES "MSVC") # warning level: "/W3" "/w34062" # switch statement contains 'default' but no 'case' labels - "/w34100" # 'identifier' : unreferenced formal parameter "/w34115" # 'type' : named type definition in parentheses "/w34189" # local variable is initialized but not referenced # see https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/c5038?view=vs-2017 diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index 07e442ddbcd6..fe3bb9d4737e 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -702,7 +702,6 @@ macro(remove_strict_flags) endif() if(MSVC) - remove_cc_flag(/w34100) # Restore warn C4100 (unreferenced formal parameter) back to w4 remove_cc_flag(/w34189) # Restore warn C4189 (unused variable) back to w4 endif() @@ -722,7 +721,7 @@ macro(remove_extra_strict_flags) endif() if(MSVC) - remove_cc_flag(/w34100) # Restore warn C4100 (unreferenced formal parameter) back to w4 + # TODO endif() endmacro() diff --git a/intern/ghost/intern/GHOST_DropTargetWin32.cpp b/intern/ghost/intern/GHOST_DropTargetWin32.cpp index a26377ca6d1e..86483118b3d6 100644 --- a/intern/ghost/intern/GHOST_DropTargetWin32.cpp +++ b/intern/ghost/intern/GHOST_DropTargetWin32.cpp @@ -78,7 +78,7 @@ ULONG __stdcall GHOST_DropTargetWin32::Release(void) * Implementation of IDropTarget::DragEnter */ HRESULT __stdcall GHOST_DropTargetWin32::DragEnter(IDataObject *p_data_object, - DWORD /*grf_key_state*/, + DWORD grf_key_state, POINTL pt, DWORD *pdw_effect) { @@ -95,7 +95,7 @@ HRESULT __stdcall GHOST_DropTargetWin32::DragEnter(IDataObject *p_data_object, /* * Implementation of IDropTarget::DragOver */ -HRESULT __stdcall GHOST_DropTargetWin32::DragOver(DWORD /*grf_key_state*/, +HRESULT __stdcall GHOST_DropTargetWin32::DragOver(DWORD grf_key_state, POINTL pt, DWORD *pdw_effect) { @@ -128,7 +128,7 @@ HRESULT __stdcall GHOST_DropTargetWin32::DragLeave(void) * the implementation of IDropTarget::DragOver */ HRESULT __stdcall GHOST_DropTargetWin32::Drop(IDataObject *p_data_object, - DWORD /*grf_key_state*/, + DWORD grf_key_state, POINTL pt, DWORD *pdw_effect) { diff --git a/intern/ghost/intern/GHOST_ImeWin32.cpp b/intern/ghost/intern/GHOST_ImeWin32.cpp index 764a6a1e2410..780d93ac9955 100644 --- a/intern/ghost/intern/GHOST_ImeWin32.cpp +++ b/intern/ghost/intern/GHOST_ImeWin32.cpp @@ -140,7 +140,7 @@ void GHOST_ImeWin32::SetImeWindowStyle( ::DefWindowProc(window_handle, message, wparam, lparam); } -void GHOST_ImeWin32::DestroyImeWindow(HWND /*window_handle*/) +void GHOST_ImeWin32::DestroyImeWindow(HWND window_handle) { /* Destroy the system caret if we have created for this IME input context. */ if (system_caret_) { @@ -149,7 +149,7 @@ void GHOST_ImeWin32::DestroyImeWindow(HWND /*window_handle*/) } } -void GHOST_ImeWin32::MoveImeWindow(HWND /*window_handle*/, HIMC imm_context) +void GHOST_ImeWin32::MoveImeWindow(HWND window_handle, HIMC imm_context) { int x = caret_rect_.m_l; int y = caret_rect_.m_t; @@ -228,7 +228,7 @@ void GHOST_ImeWin32::CheckFirst(HWND window_handle) } } -void GHOST_ImeWin32::ResetComposition(HWND /*window_handle*/) +void GHOST_ImeWin32::ResetComposition(HWND window_handle) { /* Currently, just reset the composition status. */ is_composing_ = false; diff --git a/intern/ghost/intern/GHOST_SystemWin32.cpp b/intern/ghost/intern/GHOST_SystemWin32.cpp index 9c527985ad37..9fc69dabe002 100644 --- a/intern/ghost/intern/GHOST_SystemWin32.cpp +++ b/intern/ghost/intern/GHOST_SystemWin32.cpp @@ -217,7 +217,7 @@ GHOST_IWindow *GHOST_SystemWin32::createWindow(const char *title, uint32_t height, GHOST_TWindowState state, GHOST_GLSettings glSettings, - const bool /*exclusive*/, + const bool exclusive, const bool is_dialog, const GHOST_IWindow *parentWindow) { @@ -568,7 +568,7 @@ GHOST_TKey GHOST_SystemWin32::hardKey(RAWINPUT const &raw, bool *r_key_down) * This function was added in response to bug #25715. * This is going to be a long list #42426. */ -GHOST_TKey GHOST_SystemWin32::processSpecialKey(short vKey, short /*scanCode*/) const +GHOST_TKey GHOST_SystemWin32::processSpecialKey(short vKey, short scanCode) const { GHOST_TKey key = GHOST_kKeyUnknown; if (vKey == 0xFF) { @@ -1148,9 +1148,7 @@ GHOST_EventCursor *GHOST_SystemWin32::processCursorEvent(GHOST_WindowWin32 *wind GHOST_TABLET_DATA_NONE); } -void GHOST_SystemWin32::processWheelEvent(GHOST_WindowWin32 *window, - WPARAM wParam, - LPARAM /*lParam*/) +void GHOST_SystemWin32::processWheelEvent(GHOST_WindowWin32 *window, WPARAM wParam, LPARAM lParam) { GHOST_SystemWin32 *system = (GHOST_SystemWin32 *)getSystem(); @@ -2183,7 +2181,7 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, uint msg, WPARAM wParam, return lResult; } -char *GHOST_SystemWin32::getClipboard(bool /*selection*/) const +char *GHOST_SystemWin32::getClipboard(bool selection) const { if (IsClipboardFormatAvailable(CF_UNICODETEXT) && OpenClipboard(NULL)) { wchar_t *buffer; diff --git a/intern/ghost/intern/GHOST_TrackpadWin32.cpp b/intern/ghost/intern/GHOST_TrackpadWin32.cpp index 4d5ce6fabe13..d5317f0f7800 100644 --- a/intern/ghost/intern/GHOST_TrackpadWin32.cpp +++ b/intern/ghost/intern/GHOST_TrackpadWin32.cpp @@ -265,14 +265,14 @@ HRESULT GHOST_DirectManipulationViewportEventHandler::OnViewportStatusChanged( } HRESULT GHOST_DirectManipulationViewportEventHandler::OnViewportUpdated( - IDirectManipulationViewport * /*viewport*/) + IDirectManipulationViewport *viewport) { /* Nothing to do here. */ return S_OK; } HRESULT GHOST_DirectManipulationViewportEventHandler::OnContentUpdated( - IDirectManipulationViewport * /*viewport*/, IDirectManipulationContent *content) + IDirectManipulationViewport *viewport, IDirectManipulationContent *content) { float transform[6]; HRESULT hr = content->GetContentTransform(transform, ARRAYSIZE(transform)); diff --git a/intern/ghost/intern/GHOST_WindowWin32.cpp b/intern/ghost/intern/GHOST_WindowWin32.cpp index 06d9ea939e0d..3e82f55c5839 100644 --- a/intern/ghost/intern/GHOST_WindowWin32.cpp +++ b/intern/ghost/intern/GHOST_WindowWin32.cpp @@ -898,7 +898,7 @@ GHOST_TSuccess GHOST_WindowWin32::hasCursorShape(GHOST_TStandardCursor cursorSha } GHOST_TSuccess GHOST_WindowWin32::getPointerInfo( - std::vector &outPointerInfo, WPARAM wParam, LPARAM /*lParam*/) + std::vector &outPointerInfo, WPARAM wParam, LPARAM lParam) { int32_t pointerId = GET_POINTERID_WPARAM(wParam); int32_t isPrimary = IS_POINTER_PRIMARY_WPARAM(wParam); @@ -1109,13 +1109,8 @@ static uint16_t uns16ReverseBits(uint16_t shrt) } #endif -GHOST_TSuccess GHOST_WindowWin32::setWindowCustomCursorShape(uint8_t *bitmap, - uint8_t *mask, - int sizeX, - int sizeY, - int hotX, - int hotY, - bool /*canInvertColor*/) +GHOST_TSuccess GHOST_WindowWin32::setWindowCustomCursorShape( + uint8_t *bitmap, uint8_t *mask, int sizeX, int sizeY, int hotX, int hotY, bool canInvertColor) { uint32_t andData[32]; uint32_t xorData[32]; @@ -1180,7 +1175,7 @@ GHOST_TSuccess GHOST_WindowWin32::endProgressBar() } #ifdef WITH_INPUT_IME -void GHOST_WindowWin32::beginIME(int32_t x, int32_t y, int32_t /*w*/, int32_t h, bool completed) +void GHOST_WindowWin32::beginIME(int32_t x, int32_t y, int32_t w, int32_t h, bool completed) { m_imeInput.BeginIME(m_hWnd, GHOST_Rect(x, y - h, x, y), completed); } diff --git a/intern/guardedalloc/intern/mallocn_intern.h b/intern/guardedalloc/intern/mallocn_intern.h index 14e5c171e7e5..c2e9f9117bcb 100644 --- a/intern/guardedalloc/intern/mallocn_intern.h +++ b/intern/guardedalloc/intern/mallocn_intern.h @@ -10,9 +10,6 @@ #ifdef __GNUC__ # define UNUSED(x) UNUSED_##x __attribute__((__unused__)) -#elif defined(_MSC_VER) -/* NOTE: This suppresses the warning for the line, not the attribute. */ -# define UNUSED(x) UNUSED_##x __pragma(warning(suppress : 4100)) #else # define UNUSED(x) UNUSED_##x #endif diff --git a/source/blender/blenlib/BLI_utildefines.h b/source/blender/blenlib/BLI_utildefines.h index 35e3345f4c28..e03bc7ba78af 100644 --- a/source/blender/blenlib/BLI_utildefines.h +++ b/source/blender/blenlib/BLI_utildefines.h @@ -668,9 +668,6 @@ extern bool BLI_memory_is_zero(const void *arr, size_t arr_size); /* UNUSED macro, for function argument */ # if defined(__GNUC__) || defined(__clang__) # define UNUSED(x) UNUSED_##x __attribute__((__unused__)) -# elif defined(_MSC_VER) -/* NOTE: This suppresses the warning for the line, not the attribute. */ -# define UNUSED(x) UNUSED_##x __pragma(warning(suppress : 4100)) # else # define UNUSED(x) UNUSED_##x # endif diff --git a/source/blender/blenlib/intern/BLI_filelist.c b/source/blender/blenlib/intern/BLI_filelist.c index 6240c855c997..7dca60128d36 100644 --- a/source/blender/blenlib/intern/BLI_filelist.c +++ b/source/blender/blenlib/intern/BLI_filelist.c @@ -272,7 +272,6 @@ void BLI_filelist_entry_mode_to_string(const struct stat *st, const char *types[8] = {"---", "--x", "-w-", "-wx", "r--", "r-x", "rw-", "rwx"}; #ifdef WIN32 - UNUSED_VARS(st); BLI_strncpy(r_mode1, types[0], sizeof(*r_mode1) * FILELIST_DIRENTRY_MODE_LEN); BLI_strncpy(r_mode2, types[0], sizeof(*r_mode2) * FILELIST_DIRENTRY_MODE_LEN); BLI_strncpy(r_mode3, types[0], sizeof(*r_mode3) * FILELIST_DIRENTRY_MODE_LEN); @@ -316,7 +315,6 @@ void BLI_filelist_entry_owner_to_string(const struct stat *st, char r_owner[FILELIST_DIRENTRY_OWNER_LEN]) { #ifdef WIN32 - UNUSED_VARS(st); strcpy(r_owner, "unknown"); #else struct passwd *pwuser = getpwuid(st->st_uid); diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt index 7b0d7725f1d4..adf139f3e6a3 100644 --- a/source/blender/makesrna/intern/CMakeLists.txt +++ b/source/blender/makesrna/intern/CMakeLists.txt @@ -140,9 +140,6 @@ if(CMAKE_COMPILER_IS_GNUCC OR (CMAKE_C_COMPILER_ID MATCHES "Clang")) endif() if(CMAKE_C_COMPILER_ID MATCHES "Clang") string(APPEND GENSRC_CFLAGS " -Wno-missing-variable-declarations") -elseif(MSVC) - # Restore warn C4100 (unreferenced formal parameter) back to w4 - remove_cc_flag(/w34100) endif() if(GENSRC_CFLAGS) diff --git a/source/blender/python/intern/stubs.c b/source/blender/python/intern/stubs.c index 6ac9cd64f333..f860bdc36ee0 100644 --- a/source/blender/python/intern/stubs.c +++ b/source/blender/python/intern/stubs.c @@ -12,9 +12,6 @@ #if defined(__GNUC__) || defined(__clang__) # pragma GCC diagnostic error "-Wmissing-prototypes" # pragma GCC diagnostic ignored "-Wunused-parameter" -#elif defined(_MSC_VER) -/* Suppress unreferenced formal parameter warning. */ -# pragma warning(disable : 4100) #endif /* python, will come back */ diff --git a/source/creator/blender_launcher_win32.c b/source/creator/blender_launcher_win32.c index 49acc591487a..993efafb53d9 100644 --- a/source/creator/blender_launcher_win32.c +++ b/source/creator/blender_launcher_win32.c @@ -55,11 +55,6 @@ BOOL LaunchedFromSteam() int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) { - /* Silence unreferenced formal parameter warning. */ - (void)hInstance; - (void)hPrevInstance; - (void)nCmdShow; - STARTUPINFO siStartInfo = {0}; PROCESS_INFORMATION procInfo; wchar_t path[MAX_PATH]; -- 2.30.2 From 77417114ca5db354306813cb21a968a85fc88623 Mon Sep 17 00:00:00 2001 From: Germano Cavalcante Date: Tue, 14 Feb 2023 15:39:32 -0300 Subject: [PATCH 111/182] Fix wrong variable being used as plan in 'gizmo_3d_dial_matrixbasis_calc' A plane must be `float[4]`. --- source/blender/editors/transform/transform_gizmo_3d.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/transform/transform_gizmo_3d.cc b/source/blender/editors/transform/transform_gizmo_3d.cc index cbc60a8631de..811ff0e85bd9 100644 --- a/source/blender/editors/transform/transform_gizmo_3d.cc +++ b/source/blender/editors/transform/transform_gizmo_3d.cc @@ -1320,11 +1320,10 @@ static void gizmo_3d_dial_matrixbasis_calc(const ARegion *region, const float mval_init[2], float r_mat_basis[4][4]) { - copy_v3_v3(r_mat_basis[2], axis); + plane_from_point_normal_v3(r_mat_basis[2], center_global, axis); copy_v3_v3(r_mat_basis[3], center_global); - r_mat_basis[2][3] = -dot_v3v3(axis, center_global); - if (ED_view3d_win_to_3d_on_plane(region, axis, mval_init, false, r_mat_basis[1])) { + if (ED_view3d_win_to_3d_on_plane(region, r_mat_basis[2], mval_init, false, r_mat_basis[1])) { sub_v3_v3(r_mat_basis[1], center_global); normalize_v3(r_mat_basis[1]); cross_v3_v3v3(r_mat_basis[0], r_mat_basis[1], r_mat_basis[2]); -- 2.30.2 From 48693eecb0e2b93b49eb49aea2706839b59fa240 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Tue, 14 Feb 2023 19:59:37 +0100 Subject: [PATCH 112/182] Fix: Curve resolution input node missing default When the attribute doesn't exist, the node should give the default of 12, as defined by the accessor method for `bke::CurvesGeometry`. Pull Request #104674 --- .../nodes/node_geo_input_spline_resolution.cc | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/source/blender/nodes/geometry/nodes/node_geo_input_spline_resolution.cc b/source/blender/nodes/geometry/nodes/node_geo_input_spline_resolution.cc index fb895aaf7dc8..741bd2932253 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_input_spline_resolution.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_input_spline_resolution.cc @@ -1,5 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0-or-later */ +#include "BKE_curves.hh" + #include "node_geometry_util.hh" namespace blender::nodes::node_geo_input_spline_resolution_cc { @@ -9,10 +11,39 @@ static void node_declare(NodeDeclarationBuilder &b) b.add_output(N_("Resolution")).field_source(); } +class ResolutionFieldInput final : public bke::CurvesFieldInput { + public: + ResolutionFieldInput() : bke::CurvesFieldInput(CPPType::get(), "resolution") + { + category_ = Category::NamedAttribute; + } + + GVArray get_varray_for_context(const bke::CurvesGeometry &curves, + const eAttrDomain domain, + const IndexMask /*mask*/) const final + { + return curves.adapt_domain(curves.resolution(), ATTR_DOMAIN_CURVE, domain); + } + + uint64_t hash() const final + { + return 82713465872345682; + } + + bool is_equal_to(const fn::FieldNode &other) const final + { + return dynamic_cast(&other) != nullptr; + } + + std::optional preferred_domain(const bke::CurvesGeometry & /*curves*/) const final + { + return ATTR_DOMAIN_CURVE; + } +}; + static void node_geo_exec(GeoNodeExecParams params) { - Field resolution_field = AttributeFieldInput::Create("resolution"); - params.set_output("Resolution", std::move(resolution_field)); + params.set_output("Resolution", Field(std::make_shared())); } } // namespace blender::nodes::node_geo_input_spline_resolution_cc -- 2.30.2 From 4bfffa41a6b1b8f2cfe72874058f1c9f13ffd9d3 Mon Sep 17 00:00:00 2001 From: Aras Pranckevicius Date: Tue, 14 Feb 2023 21:49:03 +0200 Subject: [PATCH 113/182] OBJ: fixed some faces wrongly skipped in invalid face validation logic (#104593) The logic for looping over imported OBJ faces and checking whether any of them are "invalid" (duplicate vertices) was wrongly skipping validation of the next face right after some invalid face. It was the previously invalid face, moving the last into its place, but then the loop was incrementing the face index and that just-moved face was not properly validated. Fixes #104593 - importing attached obj file (which contains some faces that have duplicate indices). Added test coverage with a much smaller obj file. --- .../blender/io/wavefront_obj/importer/obj_import_mesh.cc | 2 ++ .../blender/io/wavefront_obj/tests/obj_importer_tests.cc | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/source/blender/io/wavefront_obj/importer/obj_import_mesh.cc b/source/blender/io/wavefront_obj/importer/obj_import_mesh.cc index 3c9d5663a431..aa89be9780c6 100644 --- a/source/blender/io/wavefront_obj/importer/obj_import_mesh.cc +++ b/source/blender/io/wavefront_obj/importer/obj_import_mesh.cc @@ -86,6 +86,7 @@ void MeshFromGeometry::fixup_invalid_faces() /* Skip and remove faces that have fewer than 3 corners. */ mesh_geometry_.total_loops_ -= curr_face.corner_count_; mesh_geometry_.face_elements_.remove_and_reorder(face_idx); + --face_idx; continue; } @@ -128,6 +129,7 @@ void MeshFromGeometry::fixup_invalid_faces() /* Remove the invalid face. */ mesh_geometry_.total_loops_ -= curr_face.corner_count_; mesh_geometry_.face_elements_.remove_and_reorder(face_idx); + --face_idx; Vector> new_faces = fixup_invalid_polygon(global_vertices_.vertices, face_verts); diff --git a/source/blender/io/wavefront_obj/tests/obj_importer_tests.cc b/source/blender/io/wavefront_obj/tests/obj_importer_tests.cc index b2ba10a7abd0..62998a51d766 100644 --- a/source/blender/io/wavefront_obj/tests/obj_importer_tests.cc +++ b/source/blender/io/wavefront_obj/tests/obj_importer_tests.cc @@ -486,6 +486,15 @@ TEST_F(obj_importer_test, import_faces_invalid_or_with_holes) import_and_check("faces_invalid_or_with_holes.obj", expect, std::size(expect), 0); } +TEST_F(obj_importer_test, import_invalid_faces) +{ + Expectation expect[] = { + {"OBCube", OB_MESH, 8, 12, 6, 24, float3(1, 1, -1), float3(-1, 1, 1)}, + {"OBTheMesh", OB_MESH, 5, 3, 1, 3, float3(-2, 0, -2), float3(0, 2, 0)}, + }; + import_and_check("invalid_faces.obj", expect, std::size(expect), 0); +} + TEST_F(obj_importer_test, import_invalid_indices) { Expectation expect[] = { -- 2.30.2 From b47c938af250535758703fc95ca7c26a8346dcc6 Mon Sep 17 00:00:00 2001 From: Jason Fielder Date: Tue, 14 Feb 2023 21:51:03 +0100 Subject: [PATCH 114/182] Eevee: GPU Material node graph optimization. Certain material node graphs can be very expensive to run. This feature aims to produce secondary GPUPass shaders within a GPUMaterial which provide optimal runtime performance. Such optimizations include baking constant data into the shader source directly, allowing the compiler to propogate constants and perform aggressive optimization upfront. As optimizations can result in reduction of shader editor and animation interactivity, optimized pass generation and compilation is deferred until all outstanding compilations have completed. Optimization is also delayed util a material has remained unmodified for a set period of time, to reduce excessive compilation. The original variant of the material shader is kept to maintain interactivity. Also adding a new concept to gpu::Shader allowing assignment of a parent shader from which a shader can pull PSO descriptors and any required metadata for asynchronous shader cache warming. This enables fully asynchronous shader optimization, without runtime hitching, while also reducing runtime hitching for standard materials, by using PSO descriptors from default materials, ahead of rendering. Further shader graph optimizations are likely also possible with this architecture. Certain scenes, such as Wanderer benefit significantly. Viewport performance for this scene is 2-3x faster on Apple-silicon based GPUs. Authored by Apple: Michael Parkin-White Ref T96261 Pull Request #104536 --- source/blender/draw/DRW_engine.h | 1 + .../blender/draw/engines/eevee/eevee_engine.c | 6 + .../draw/engines/eevee/eevee_private.h | 2 + .../draw/engines/eevee/eevee_shaders.cc | 19 +- .../draw/engines/eevee_next/eevee_shader.cc | 2 + source/blender/draw/intern/DRW_render.h | 1 + .../blender/draw/intern/draw_manager_shader.c | 190 ++++++++++--- source/blender/gpu/GPU_material.h | 29 ++ source/blender/gpu/GPU_shader.h | 41 +++ source/blender/gpu/intern/gpu_codegen.cc | 104 +++++-- source/blender/gpu/intern/gpu_codegen.h | 4 +- source/blender/gpu/intern/gpu_material.c | 263 +++++++++++++++++- source/blender/gpu/intern/gpu_node_graph.cc | 19 ++ source/blender/gpu/intern/gpu_node_graph.h | 13 + source/blender/gpu/intern/gpu_shader.cc | 20 ++ .../blender/gpu/intern/gpu_shader_private.hh | 23 +- .../gpu/metal/mtl_pso_descriptor_state.hh | 35 ++- source/blender/gpu/metal/mtl_shader.hh | 10 + source/blender/gpu/metal/mtl_shader.mm | 118 +++++--- source/blender/gpu/opengl/gl_shader.hh | 1 + source/blender/gpu/vulkan/vk_shader.hh | 1 + 21 files changed, 800 insertions(+), 102 deletions(-) diff --git a/source/blender/draw/DRW_engine.h b/source/blender/draw/DRW_engine.h index 8c5f1b70cc0f..6763d77d916c 100644 --- a/source/blender/draw/DRW_engine.h +++ b/source/blender/draw/DRW_engine.h @@ -197,6 +197,7 @@ void DRW_gpu_render_context_enable(void *re_gpu_context); void DRW_gpu_render_context_disable(void *re_gpu_context); void DRW_deferred_shader_remove(struct GPUMaterial *mat); +void DRW_deferred_shader_optimize_remove(struct GPUMaterial *mat); /** * Get DrawData from the given ID-block. In order for this to work, we assume that diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c index fd11839d5b3f..48d000116814 100644 --- a/source/blender/draw/engines/eevee/eevee_engine.c +++ b/source/blender/draw/engines/eevee/eevee_engine.c @@ -53,6 +53,7 @@ static void eevee_engine_init(void *ved) stl->g_data->valid_double_buffer = (txl->color_double_buffer != NULL); stl->g_data->valid_taa_history = (txl->taa_history != NULL); stl->g_data->queued_shaders_count = 0; + stl->g_data->queued_optimise_shaders_count = 0; stl->g_data->render_timesteps = 1; stl->g_data->disable_ligthprobes = v3d && (v3d->object_type_exclude_viewport & (1 << OB_LIGHTPROBE)); @@ -178,6 +179,11 @@ static void eevee_cache_finish(void *vedata) if (g_data->queued_shaders_count > 0) { SNPRINTF(ved->info, TIP_("Compiling Shaders (%d remaining)"), g_data->queued_shaders_count); } + else if (g_data->queued_optimise_shaders_count > 0) { + SNPRINTF(ved->info, + TIP_("Optimizing Shaders (%d remaining)"), + g_data->queued_optimise_shaders_count); + } } /* As renders in an HDR off-screen buffer, we need draw everything once diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h index 136f14afbb35..ab960414353a 100644 --- a/source/blender/draw/engines/eevee/eevee_private.h +++ b/source/blender/draw/engines/eevee/eevee_private.h @@ -1000,6 +1000,8 @@ typedef struct EEVEE_PrivateData { /* Compiling shaders count. This is to track if a shader has finished compiling. */ int queued_shaders_count; int queued_shaders_count_prev; + /* Optimising shaders count. */ + int queued_optimise_shaders_count; /* LookDev Settings */ int studiolight_index; diff --git a/source/blender/draw/engines/eevee/eevee_shaders.cc b/source/blender/draw/engines/eevee/eevee_shaders.cc index 3b3ff33308c9..638c3dd3cd42 100644 --- a/source/blender/draw/engines/eevee/eevee_shaders.cc +++ b/source/blender/draw/engines/eevee/eevee_shaders.cc @@ -1390,12 +1390,21 @@ struct GPUMaterial *EEVEE_material_get( return nullptr; } switch (status) { - case GPU_MAT_SUCCESS: - break; - case GPU_MAT_QUEUED: + case GPU_MAT_SUCCESS: { + /* Determine optimization status for remaining compilations counter. */ + int optimization_status = GPU_material_optimization_status(mat); + if (optimization_status == GPU_MAT_OPTIMIZATION_QUEUED) { + vedata->stl->g_data->queued_optimise_shaders_count++; + } + } break; + case GPU_MAT_QUEUED: { vedata->stl->g_data->queued_shaders_count++; - mat = EEVEE_material_default_get(scene, ma, options); - break; + GPUMaterial *default_mat = EEVEE_material_default_get(scene, ma, options); + /* Mark pending material with its default material for future cache warming.*/ + GPU_material_set_default(mat, default_mat); + /* Return default material. */ + mat = default_mat; + } break; case GPU_MAT_FAILED: default: ma = EEVEE_material_default_error_get(); diff --git a/source/blender/draw/engines/eevee_next/eevee_shader.cc b/source/blender/draw/engines/eevee_next/eevee_shader.cc index f27ced53e394..0207a2574b23 100644 --- a/source/blender/draw/engines/eevee_next/eevee_shader.cc +++ b/source/blender/draw/engines/eevee_next/eevee_shader.cc @@ -507,6 +507,8 @@ GPUMaterial *ShaderModule::material_shader_get(const char *name, this); GPU_material_status_set(gpumat, GPU_MAT_QUEUED); GPU_material_compile(gpumat); + /* Queue deferred material optimization. */ + DRW_shader_queue_optimize_material(gpumat); return gpumat; } diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h index 0d406646f2e3..a316eef92932 100644 --- a/source/blender/draw/intern/DRW_render.h +++ b/source/blender/draw/intern/DRW_render.h @@ -307,6 +307,7 @@ struct GPUMaterial *DRW_shader_from_material(struct Material *ma, bool deferred, GPUCodegenCallbackFn callback, void *thunk); +void DRW_shader_queue_optimize_material(struct GPUMaterial *mat); void DRW_shader_free(struct GPUShader *shader); #define DRW_SHADER_FREE_SAFE(shader) \ do { \ diff --git a/source/blender/draw/intern/draw_manager_shader.c b/source/blender/draw/intern/draw_manager_shader.c index bdfe1c48c35f..61900825d7b8 100644 --- a/source/blender/draw/intern/draw_manager_shader.c +++ b/source/blender/draw/intern/draw_manager_shader.c @@ -55,6 +55,9 @@ typedef struct DRWShaderCompiler { ListBase queue; /* GPUMaterial */ SpinLock list_lock; + /** Optimization queue. */ + ListBase optimize_queue; /* GPUMaterial */ + void *gl_context; GPUContext *gpu_context; bool own_context; @@ -110,8 +113,29 @@ static void drw_deferred_shader_compilation_exec( MEM_freeN(link); } else { - /* No more materials to optimize, or shaders to compile. */ - break; + /* Check for Material Optimization job once there are no more + * shaders to compile. */ + BLI_spin_lock(&comp->list_lock); + /* Pop tail because it will be less likely to lock the main thread + * if all GPUMaterials are to be freed (see DRW_deferred_shader_remove()). */ + LinkData *link = (LinkData *)BLI_poptail(&comp->optimize_queue); + GPUMaterial *optimize_mat = link ? (GPUMaterial *)link->data : NULL; + if (optimize_mat) { + /* Avoid another thread freeing the material during optimization. */ + GPU_material_acquire(optimize_mat); + } + BLI_spin_unlock(&comp->list_lock); + + if (optimize_mat) { + /* Compile optimized material shader. */ + GPU_material_optimize(optimize_mat); + GPU_material_release(optimize_mat); + MEM_freeN(link); + } + else { + /* No more materials to optimize, or shaders to compile. */ + break; + } } if (GPU_type_matches_ex(GPU_DEVICE_ANY, GPU_OS_ANY, GPU_DRIVER_ANY, GPU_BACKEND_OPENGL)) { @@ -133,6 +157,7 @@ static void drw_deferred_shader_compilation_free(void *custom_data) BLI_spin_lock(&comp->list_lock); BLI_freelistN(&comp->queue); + BLI_freelistN(&comp->optimize_queue); BLI_spin_unlock(&comp->list_lock); if (comp->own_context) { @@ -148,34 +173,13 @@ static void drw_deferred_shader_compilation_free(void *custom_data) MEM_freeN(comp); } -static void drw_deferred_shader_add(GPUMaterial *mat, bool deferred) +/** + * Append either shader compilation or optimization job to deferred queue and + * ensure shader compilation worker is active. + * We keep two separate queue's to ensure core compilations always complete before optimization. + */ +static void drw_deferred_queue_append(GPUMaterial *mat, bool is_optimization_job) { - if (ELEM(GPU_material_status(mat), GPU_MAT_SUCCESS, GPU_MAT_FAILED)) { - return; - } - /* Do not defer the compilation if we are rendering for image. - * deferred rendering is only possible when `evil_C` is available */ - if (DST.draw_ctx.evil_C == NULL || DRW_state_is_image_render() || !USE_DEFERRED_COMPILATION) { - deferred = false; - } - - if (!deferred) { - DRW_deferred_shader_remove(mat); - /* Shaders could already be compiling. Have to wait for compilation to finish. */ - while (GPU_material_status(mat) == GPU_MAT_QUEUED) { - PIL_sleep_ms(20); - } - if (GPU_material_status(mat) == GPU_MAT_CREATED) { - GPU_material_compile(mat); - } - return; - } - - /* Don't add material to the queue twice. */ - if (GPU_material_status(mat) == GPU_MAT_QUEUED) { - return; - } - const bool use_main_context = GPU_use_main_context_workaround(); const bool job_own_context = !use_main_context; @@ -196,6 +200,7 @@ static void drw_deferred_shader_add(GPUMaterial *mat, bool deferred) if (old_comp) { BLI_spin_lock(&old_comp->list_lock); BLI_movelisttolist(&comp->queue, &old_comp->queue); + BLI_movelisttolist(&comp->optimize_queue, &old_comp->optimize_queue); BLI_spin_unlock(&old_comp->list_lock); /* Do not recreate context, just pass ownership. */ if (old_comp->gl_context) { @@ -206,9 +211,18 @@ static void drw_deferred_shader_add(GPUMaterial *mat, bool deferred) } } - GPU_material_status_set(mat, GPU_MAT_QUEUED); - LinkData *node = BLI_genericNodeN(mat); - BLI_addtail(&comp->queue, node); + /* Add to either compilation or optimization queue. */ + if (is_optimization_job) { + BLI_assert(GPU_material_optimization_status(mat) != GPU_MAT_OPTIMIZATION_QUEUED); + GPU_material_optimization_status_set(mat, GPU_MAT_OPTIMIZATION_QUEUED); + LinkData *node = BLI_genericNodeN(mat); + BLI_addtail(&comp->optimize_queue, node); + } + else { + GPU_material_status_set(mat, GPU_MAT_QUEUED); + LinkData *node = BLI_genericNodeN(mat); + BLI_addtail(&comp->queue, node); + } /* Create only one context. */ if (comp->gl_context == NULL) { @@ -237,6 +251,39 @@ static void drw_deferred_shader_add(GPUMaterial *mat, bool deferred) WM_jobs_start(wm, wm_job); } +static void drw_deferred_shader_add(GPUMaterial *mat, bool deferred) +{ + if (ELEM(GPU_material_status(mat), GPU_MAT_SUCCESS, GPU_MAT_FAILED)) { + return; + } + + /* Do not defer the compilation if we are rendering for image. + * deferred rendering is only possible when `evil_C` is available */ + if (DST.draw_ctx.evil_C == NULL || DRW_state_is_image_render() || !USE_DEFERRED_COMPILATION) { + deferred = false; + } + + if (!deferred) { + DRW_deferred_shader_remove(mat); + /* Shaders could already be compiling. Have to wait for compilation to finish. */ + while (GPU_material_status(mat) == GPU_MAT_QUEUED) { + PIL_sleep_ms(20); + } + if (GPU_material_status(mat) == GPU_MAT_CREATED) { + GPU_material_compile(mat); + } + return; + } + + /* Don't add material to the queue twice. */ + if (GPU_material_status(mat) == GPU_MAT_QUEUED) { + return; + } + + /* Add deferred shader compilation to queue. */ + drw_deferred_queue_append(mat, false); +} + static void drw_register_shader_vlattrs(GPUMaterial *mat) { const ListBase *attrs = GPU_material_layer_attributes(mat); @@ -288,9 +335,42 @@ void DRW_deferred_shader_remove(GPUMaterial *mat) BLI_remlink(&comp->queue, link); GPU_material_status_set(link->data, GPU_MAT_CREATED); } - BLI_spin_unlock(&comp->list_lock); MEM_SAFE_FREE(link); + + /* Search for optimization job in queue. */ + LinkData *opti_link = (LinkData *)BLI_findptr( + &comp->optimize_queue, mat, offsetof(LinkData, data)); + if (opti_link) { + BLI_remlink(&comp->optimize_queue, opti_link); + GPU_material_optimization_status_set(opti_link->data, GPU_MAT_OPTIMIZATION_READY); + } + BLI_spin_unlock(&comp->list_lock); + + MEM_SAFE_FREE(opti_link); + } + } + } +} + +void DRW_deferred_shader_optimize_remove(GPUMaterial *mat) +{ + LISTBASE_FOREACH (wmWindowManager *, wm, &G_MAIN->wm) { + LISTBASE_FOREACH (wmWindow *, win, &wm->windows) { + DRWShaderCompiler *comp = (DRWShaderCompiler *)WM_jobs_customdata_from_type( + wm, wm, WM_JOB_TYPE_SHADER_COMPILATION); + if (comp != NULL) { + BLI_spin_lock(&comp->list_lock); + /* Search for optimization job in queue. */ + LinkData *opti_link = (LinkData *)BLI_findptr( + &comp->optimize_queue, mat, offsetof(LinkData, data)); + if (opti_link) { + BLI_remlink(&comp->optimize_queue, opti_link); + GPU_material_optimization_status_set(opti_link->data, GPU_MAT_OPTIMIZATION_READY); + } + BLI_spin_unlock(&comp->list_lock); + + MEM_SAFE_FREE(opti_link); } } } @@ -432,6 +512,7 @@ GPUMaterial *DRW_shader_from_world(World *wo, } drw_deferred_shader_add(mat, deferred); + DRW_shader_queue_optimize_material(mat); return mat; } @@ -463,9 +544,52 @@ GPUMaterial *DRW_shader_from_material(Material *ma, } drw_deferred_shader_add(mat, deferred); + DRW_shader_queue_optimize_material(mat); return mat; } +void DRW_shader_queue_optimize_material(GPUMaterial *mat) +{ + /* Do not perform deferred optimization if performing render. + * De-queue any queued optimization jobs. */ + if (DRW_state_is_image_render()) { + if (GPU_material_optimization_status(mat) == GPU_MAT_OPTIMIZATION_QUEUED) { + /* Remove from pending optimization job queue. */ + DRW_deferred_shader_optimize_remove(mat); + /* If optimization job had already started, wait for it to complete. */ + while (GPU_material_optimization_status(mat) == GPU_MAT_OPTIMIZATION_QUEUED) { + PIL_sleep_ms(20); + } + } + return; + } + + /* We do not need to perform optimization on the material if it is already compiled or in the + * optimization queue. If optimization is not required, the status will be flagged as + * `GPU_MAT_OPTIMIZATION_SKIP`. + * We can also skip cases which have already been queued up. */ + if (ELEM(GPU_material_optimization_status(mat), + GPU_MAT_OPTIMIZATION_SKIP, + GPU_MAT_OPTIMIZATION_SUCCESS, + GPU_MAT_OPTIMIZATION_QUEUED)) { + return; + } + + /* Only queue optimization once the original shader has been successfully compiled. */ + if (GPU_material_status(mat) != GPU_MAT_SUCCESS) { + return; + } + + /* Defer optimization until sufficient time has passed beyond creation. This avoids excessive + * recompilation for shaders which are being actively modified. */ + if (!GPU_material_optimization_ready(mat)) { + return; + } + + /* Add deferred shader compilation to queue. */ + drw_deferred_queue_append(mat, true); +} + void DRW_shader_free(GPUShader *shader) { GPU_shader_free(shader); diff --git a/source/blender/gpu/GPU_material.h b/source/blender/gpu/GPU_material.h index f9bae39b0166..7e7905c3aeb9 100644 --- a/source/blender/gpu/GPU_material.h +++ b/source/blender/gpu/GPU_material.h @@ -254,9 +254,20 @@ void GPU_materials_free(struct Main *bmain); struct Scene *GPU_material_scene(GPUMaterial *material); struct GPUPass *GPU_material_get_pass(GPUMaterial *material); +/* Return the most optimal shader configuration for the given material .*/ struct GPUShader *GPU_material_get_shader(GPUMaterial *material); +/* Return the base un-optimized shader. */ +struct GPUShader *GPU_material_get_shader_base(GPUMaterial *material); const char *GPU_material_get_name(GPUMaterial *material); +/** + * Material Optimization. + * \note Compiles optimal version of shader graph, populating mat->optimized_pass. + * This operation should always be deferred until existing compilations have completed. + * Default un-optimized materials will still exist for interactive material editing performance. + */ +void GPU_material_optimize(GPUMaterial *mat); + /** * Return can be NULL if it's a world material. */ @@ -274,6 +285,24 @@ eGPUMaterialOptimizationStatus GPU_material_optimization_status(GPUMaterial *mat void GPU_material_optimization_status_set(GPUMaterial *mat, eGPUMaterialOptimizationStatus status); bool GPU_material_optimization_ready(GPUMaterial *mat); +/** + * Store reference to a similar default material for async PSO cache warming. + * + * This function expects `material` to have not yet been compiled and for `default_material` to be + * ready. When compiling `material` as part of an async shader compilation job, use existing PSO + * descriptors from `default_material`'s shader to also compile PSOs for this new material + * asynchronously, rather than at runtime. + * + * The default_material `options` should match this new materials options in order + * for PSO descriptors to match those needed by the new `material`. + * + * NOTE: `default_material` must exist when `GPU_material_compile(..)` is called for + * `material`. + * + * See `GPU_shader_warm_cache(..)` for more information. + */ +void GPU_material_set_default(GPUMaterial *material, GPUMaterial *default_material); + struct GPUUniformBuf *GPU_material_uniform_buffer_get(GPUMaterial *material); /** * Create dynamic UBO from parameters diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h index ecc66f92c23a..7b1fcead3498 100644 --- a/source/blender/gpu/GPU_shader.h +++ b/source/blender/gpu/GPU_shader.h @@ -217,6 +217,47 @@ GPUShader *GPU_shader_create_ex(const char *vertcode, bool GPU_shader_transform_feedback_enable(GPUShader *shader, struct GPUVertBuf *vertbuf); void GPU_shader_transform_feedback_disable(GPUShader *shader); +/** + * Shader cache warming. + * For each shader, rendering APIs perform a two-step compilation: + * + * * The first stage is Front-End compilation which only needs to be performed once, and generates + * a portable intermediate representation. This happens during `gpu::Shader::finalize()`. + * + * * The second is Back-End compilation which compiles a device-specific executable shader + * program. This compilation requires some contextual pipeline state which is baked into the + * executable shader source, producing a Pipeline State Object (PSO). In OpenGL, backend + * compilation happens in the background, within the driver, but can still incur runtime stutters. + * In Metal/Vulkan, PSOs are compiled explicitly. These are currently resolved within the backend + * based on the current pipeline state and can incur runtime stalls when they occur. + * + * Shader Cache warming uses the specified parent shader set using `GPU_shader_set_parent(..)` as a + * template reference for pre-compiling Render Pipeline State Objects (PSOs) outside of the main + * render pipeline. + * + * PSOs require descriptors containing information on the render state for a given shader, which + * includes input vertex data layout and output pixel formats, along with some state such as + * blend mode and colour output masks. As this state information is usually consistent between + * similar draws, we can assign a parent shader and use this shader's cached pipeline state's to + * prime compilations. + * + * Shaders do not necessarily have to be similar in functionality to be used as a parent, so long + * as the GPUVertFormt and GPUFrameBuffer which they are used with remain the same. Other bindings + * such as textures, uniforms and UBOs are all assigned independently as dynamic state. + * + * This function should be called asynchronously, mitigating the impact of run-time stuttering from + * dynamic compilation of PSOs during normal rendering. + * + * \param: shader: The shader whose cache to warm. + * \param limit: The maximum number of PSOs to compile within a call. Specifying + * a limit <= 0 will compile a PSO for all cached PSOs in the parent shader. */ +void GPU_shader_warm_cache(GPUShader *shader, int limit); + +/* We expect the parent shader to be compiled and already have some cached PSOs when being assigned + * as a reference. Ensure the parent shader still exists when `GPU_shader_cache_warm(..)` is + * called. */ +void GPU_shader_set_parent(GPUShader *shader, GPUShader *parent); + /** DEPRECATED: Kept only because of BGL API. */ int GPU_shader_get_program(GPUShader *shader); diff --git a/source/blender/gpu/intern/gpu_codegen.cc b/source/blender/gpu/intern/gpu_codegen.cc index 351334537fea..ef71638b4156 100644 --- a/source/blender/gpu/intern/gpu_codegen.cc +++ b/source/blender/gpu/intern/gpu_codegen.cc @@ -25,6 +25,7 @@ #include "BKE_material.h" #include "GPU_capabilities.h" +#include "GPU_context.h" #include "GPU_material.h" #include "GPU_shader.h" #include "GPU_uniform_buffer.h" @@ -95,6 +96,9 @@ struct GPUPass { uint32_t hash; /** Did we already tried to compile the attached GPUShader. */ bool compiled; + /** Hint that an optimized variant of this pass should be created based on a complexity heuristic + * during pass code generation. */ + bool should_optimize; }; /* -------------------------------------------------------------------- */ @@ -252,6 +256,11 @@ class GPUCodegen { ListBase ubo_inputs_ = {nullptr, nullptr}; GPUInput *cryptomatte_input_ = nullptr; + /** Cache paramters for complexity heuristic. */ + uint nodes_total_ = 0; + uint textures_total_ = 0; + uint uniforms_total_ = 0; + public: GPUCodegen(GPUMaterial *mat_, GPUNodeGraph *graph_) : mat(*mat_), graph(*graph_) { @@ -292,6 +301,17 @@ class GPUCodegen { return hash_; } + /* Heuristic determined during pass codegen for whether a + * more optimal variant of this material should be compiled. */ + bool should_optimize_heuristic() const + { + /* If each of the maximal attributes are exceeded, we can optimize, but we should also ensure + * the baseline is met.*/ + bool do_optimize = (nodes_total_ >= 60 || textures_total_ >= 4 || uniforms_total_ >= 64) && + (textures_total_ >= 1 && uniforms_total_ >= 8 && nodes_total_ >= 4); + return do_optimize; + } + private: void set_unique_ids(); @@ -413,6 +433,9 @@ void GPUCodegen::generate_resources() } } + /* Increment heuristic. */ + textures_total_ = slot; + if (!BLI_listbase_is_empty(&ubo_inputs_)) { /* NOTE: generate_uniform_buffer() should have sorted the inputs before this. */ ss << "struct NodeTree {\n"; @@ -454,11 +477,16 @@ void GPUCodegen::generate_library() GPUCodegenCreateInfo &info = *create_info; void *value; - GSetIterState pop_state = {}; - while (BLI_gset_pop(graph.used_libraries, &pop_state, &value)) { + /* Iterate over libraries. We need to keep this struct intact incase + * it is required for the optimization pass. */ + GHashIterator *ihash = BLI_ghashIterator_new((GHash *)graph.used_libraries); + while (!BLI_ghashIterator_done(ihash)) { + value = BLI_ghashIterator_getKey(ihash); auto deps = gpu_shader_dependency_get_resolved_source((const char *)value); info.dependencies_generated.extend_non_duplicates(deps); + BLI_ghashIterator_step(ihash); } + BLI_ghashIterator_free(ihash); } void GPUCodegen::node_serialize(std::stringstream &eval_ss, const GPUNode *node) @@ -526,6 +554,9 @@ void GPUCodegen::node_serialize(std::stringstream &eval_ss, const GPUNode *node) } } eval_ss << ");\n\n"; + + /* Increment heuristic. */ + nodes_total_++; } char *GPUCodegen::graph_serialize(eGPUNodeTag tree_tag, GPUNodeLink *output_link) @@ -589,6 +620,7 @@ void GPUCodegen::generate_uniform_buffer() if (input->source == GPU_SOURCE_UNIFORM && !input->link) { /* We handle the UBO uniforms separately. */ BLI_addtail(&ubo_inputs_, BLI_genericNodeN(input)); + uniforms_total_++; } } } @@ -661,10 +693,17 @@ void GPUCodegen::generate_graphs() GPUPass *GPU_generate_pass(GPUMaterial *material, GPUNodeGraph *graph, GPUCodegenCallbackFn finalize_source_cb, - void *thunk) + void *thunk, + bool optimize_graph) { gpu_node_graph_prune_unused(graph); + /* If Optimize flag is passed in, we are generating an optimized + * variant of the GPUMaterial's GPUPass. */ + if (optimize_graph) { + gpu_node_graph_optimize(graph); + } + /* Extract attributes before compiling so the generated VBOs are ready to accept the future * shader. */ gpu_node_graph_finalize_uniform_attrs(graph); @@ -672,23 +711,33 @@ GPUPass *GPU_generate_pass(GPUMaterial *material, GPUCodegen codegen(material, graph); codegen.generate_graphs(); codegen.generate_cryptomatte(); - codegen.generate_uniform_buffer(); - /* Cache lookup: Reuse shaders already compiled. */ - GPUPass *pass_hash = gpu_pass_cache_lookup(codegen.hash_get()); + GPUPass *pass_hash = nullptr; - /* FIXME(fclem): This is broken. Since we only check for the hash and not the full source - * there is no way to have a collision currently. Some advocated to only use a bigger hash. */ - if (pass_hash && (pass_hash->next == nullptr || pass_hash->next->hash != codegen.hash_get())) { - if (!gpu_pass_is_valid(pass_hash)) { - /* Shader has already been created but failed to compile. */ - return nullptr; + if (!optimize_graph) { + /* The optimized version of the shader should not re-generate a UBO. + * The UBO will not be used for this variant. */ + codegen.generate_uniform_buffer(); + + /** Cache lookup: Reuse shaders already compiled. + * NOTE: We only perform cache look-up for non-optimized shader + * graphs, as baked constant data amongst other optimizations will generate too many + * shader source permutations, with minimal re-usability. */ + pass_hash = gpu_pass_cache_lookup(codegen.hash_get()); + + /* FIXME(fclem): This is broken. Since we only check for the hash and not the full source + * there is no way to have a collision currently. Some advocated to only use a bigger hash. */ + if (pass_hash && (pass_hash->next == nullptr || pass_hash->next->hash != codegen.hash_get())) { + if (!gpu_pass_is_valid(pass_hash)) { + /* Shader has already been created but failed to compile. */ + return nullptr; + } + /* No collision, just return the pass. */ + BLI_spin_lock(&pass_cache_spin); + pass_hash->refcount += 1; + BLI_spin_unlock(&pass_cache_spin); + return pass_hash; } - /* No collision, just return the pass. */ - BLI_spin_lock(&pass_cache_spin); - pass_hash->refcount += 1; - BLI_spin_unlock(&pass_cache_spin); - return pass_hash; } /* Either the shader is not compiled or there is a hash collision... @@ -726,14 +775,33 @@ GPUPass *GPU_generate_pass(GPUMaterial *material, pass->create_info = codegen.create_info; pass->hash = codegen.hash_get(); pass->compiled = false; + /* Only flag pass optimization hint if this is the first generated pass for a material. + * Optimized passes cannot be optimized further, even if the heuristic is still not + * favourable. */ + pass->should_optimize = (!optimize_graph) && codegen.should_optimize_heuristic(); codegen.create_info = nullptr; - gpu_pass_cache_insert_after(pass_hash, pass); + /* Only insert non-optimized graphs into cache. + * Optimized graphs will continuously be recompiled with new unique source during material + * editing, and thus causing the cache to fill up quickly with materials offering minimal + * re-use. */ + if (!optimize_graph) { + gpu_pass_cache_insert_after(pass_hash, pass); + } } return pass; } +bool GPU_pass_should_optimize(GPUPass *pass) +{ + /* Returns optimization heuristic prepared during + * initial codegen. + * NOTE: Optimization currently limited to Metal backend as repeated compilations required for + * material specialization cause impactful CPU stalls on OpenGL platforms. */ + return (GPU_backend_get_type() == GPU_BACKEND_METAL) && pass->should_optimize; +} + /** \} */ /* -------------------------------------------------------------------- */ diff --git a/source/blender/gpu/intern/gpu_codegen.h b/source/blender/gpu/intern/gpu_codegen.h index 95a672c04005..aabdf1ac003d 100644 --- a/source/blender/gpu/intern/gpu_codegen.h +++ b/source/blender/gpu/intern/gpu_codegen.h @@ -25,10 +25,12 @@ typedef struct GPUPass GPUPass; GPUPass *GPU_generate_pass(GPUMaterial *material, struct GPUNodeGraph *graph, GPUCodegenCallbackFn finalize_source_cb, - void *thunk); + void *thunk, + bool optimize_graph); GPUShader *GPU_pass_shader_get(GPUPass *pass); bool GPU_pass_compile(GPUPass *pass, const char *shname); void GPU_pass_release(GPUPass *pass); +bool GPU_pass_should_optimize(GPUPass *pass); /* Module */ diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c index d0881ea48144..9b4a7fb55949 100644 --- a/source/blender/gpu/intern/gpu_material.c +++ b/source/blender/gpu/intern/gpu_material.c @@ -34,6 +34,8 @@ #include "DRW_engine.h" +#include "PIL_time.h" + #include "gpu_codegen.h" #include "gpu_node_graph.h" @@ -43,6 +45,17 @@ #define MAX_COLOR_BAND 128 #define MAX_GPU_SKIES 8 +/** Whether the optimized variant of the GPUPass should be created asynchronously. + * Usage of this depends on whether there are possible threading challenges of doing so. + * Currently, the overhead of GPU_generate_pass is relatively small in comparison to shader + * compilation, though this option exists in case any potential scenarios for material graph + * optimization cause a slow down on the main thread. + * + * NOTE: The actual shader program for the optimized pass will always be compiled asynchronously, + * this flag controls whether shader node graph source serialization happens on the compilation + * worker thread as well. */ +#define ASYNC_OPTIMIZED_PASS_CREATION 0 + typedef struct GPUColorBandBuilder { float pixels[MAX_COLOR_BAND][CM_TABLE + 1][4]; int current_layer; @@ -57,6 +70,27 @@ struct GPUMaterial { /* Contains #GPUShader and source code for deferred compilation. * Can be shared between similar material (i.e: sharing same node-tree topology). */ GPUPass *pass; + /* Optimized GPUPass, situationally compiled after initial pass for optimal realtime performance. + * This shader variant bakes dynamic uniform data as constant. This variant will not use + * the ubo, and instead bake constants directly into the shader source. */ + GPUPass *optimized_pass; + /* Optimization status. + * We also use this status to determine whether this material should be considered for + * optimization. Only sufficiently complex shaders benefit from constant-folding optimizations. + * `GPU_MAT_OPTIMIZATION_READY` -> shader should be optimized and is ready for optimization. + * `GPU_MAT_OPTIMIZATION_SKIP` -> Shader should not be optimized as it would not benefit + * performance to do so, based on the heuristic. + */ + eGPUMaterialOptimizationStatus optimization_status; + double creation_time; +#if ASYNC_OPTIMIZED_PASS_CREATION == 1 + struct DeferredOptimizePass { + GPUCodegenCallbackFn callback; + void *thunk; + } DeferredOptimizePass; + struct DeferredOptimizePass optimize_pass_info; +#endif + /** UBOs for this material parameters. */ GPUUniformBuf *ubo; /** Compilation status. Do not use if shader is not GPU_MAT_SUCCESS. */ @@ -86,6 +120,12 @@ struct GPUMaterial { /* Low level node graph(s). Also contains resources needed by the material. */ GPUNodeGraph graph; + /** Default material reference used for PSO cache warming. Default materials may perform + * different operations, but the permutation will frequently share the same input PSO + * descriptors. This enables async PSO compilation as part of the deferred compiltion + * pass, reducing runtime stuttering and responsiveness while compiling materials. */ + GPUMaterial *default_mat; + /** DEPRECATED: To remove. */ bool has_surface_output; bool has_volume_output; @@ -214,6 +254,9 @@ void GPU_material_free_single(GPUMaterial *material) gpu_node_graph_free(&material->graph); + if (material->optimized_pass != NULL) { + GPU_pass_release(material->optimized_pass); + } if (material->pass != NULL) { GPU_pass_release(material->pass); } @@ -252,12 +295,29 @@ Scene *GPU_material_scene(GPUMaterial *material) GPUPass *GPU_material_get_pass(GPUMaterial *material) { - return material->pass; + /* If an optimized pass variant is available, and optimization is + * flagged as complete, we use this one instead. */ + return ((GPU_material_optimization_status(material) == GPU_MAT_OPTIMIZATION_SUCCESS) && + material->optimized_pass) ? + material->optimized_pass : + material->pass; } GPUShader *GPU_material_get_shader(GPUMaterial *material) { - return material->pass ? GPU_pass_shader_get(material->pass) : NULL; + /* If an optimized material shader variant is available, and optimization is + * flagged as complete, we use this one instead. */ + GPUShader *shader = ((GPU_material_optimization_status(material) == + GPU_MAT_OPTIMIZATION_SUCCESS) && + material->optimized_pass) ? + GPU_pass_shader_get(material->optimized_pass) : + NULL; + return (shader) ? shader : ((material->pass) ? GPU_pass_shader_get(material->pass) : NULL); +} + +GPUShader *GPU_material_get_shader_base(GPUMaterial *material) +{ + return (material->pass) ? GPU_pass_shader_get(material->pass) : NULL; } const char *GPU_material_get_name(GPUMaterial *material) @@ -665,6 +725,41 @@ void GPU_material_status_set(GPUMaterial *mat, eGPUMaterialStatus status) mat->status = status; } +eGPUMaterialOptimizationStatus GPU_material_optimization_status(GPUMaterial *mat) +{ + return mat->optimization_status; +} + +void GPU_material_optimization_status_set(GPUMaterial *mat, eGPUMaterialOptimizationStatus status) +{ + mat->optimization_status = status; + if (mat->optimization_status == GPU_MAT_OPTIMIZATION_READY) { + /* Reset creation timer to delay optimization pass. */ + mat->creation_time = PIL_check_seconds_timer(); + } +} + +bool GPU_material_optimization_ready(GPUMaterial *mat) +{ + /* Timer threshold before optimizations will be queued. + * When materials are frequently being modified, optimization + * can incur CPU overhead from excessive compilation. + * + * As the optimization is entirely asynchronous, it is still beneficial + * to do this quickly to avoid build-up and improve runtime performance. + * The threshold just prevents compilations being queued frame after frame. */ + const double optimization_time_threshold_s = 1.2; + return ((PIL_check_seconds_timer() - mat->creation_time) >= optimization_time_threshold_s); +} + +void GPU_material_set_default(GPUMaterial *material, GPUMaterial *default_material) +{ + BLI_assert(material != default_material); + if (material != default_material) { + material->default_mat = default_material; + } +} + /* Code generation */ bool GPU_material_has_surface_output(GPUMaterial *mat) @@ -730,6 +825,7 @@ GPUMaterial *GPU_material_from_nodetree(Scene *scene, mat->uuid = shader_uuid; mat->flag = GPU_MATFLAG_UPDATED; mat->status = GPU_MAT_CREATED; + mat->default_mat = NULL; mat->is_volume_shader = is_volume_shader; mat->graph.used_libraries = BLI_gset_new( BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "GPUNodeGraph.used_libraries"); @@ -748,7 +844,7 @@ GPUMaterial *GPU_material_from_nodetree(Scene *scene, { /* Create source code and search pass cache for an already compiled version. */ - mat->pass = GPU_generate_pass(mat, &mat->graph, callback, thunk); + mat->pass = GPU_generate_pass(mat, &mat->graph, callback, thunk, false); if (mat->pass == NULL) { /* We had a cache hit and the shader has already failed to compile. */ @@ -756,11 +852,44 @@ GPUMaterial *GPU_material_from_nodetree(Scene *scene, gpu_node_graph_free(&mat->graph); } else { + /* Determine whether we should generate an optimized variant of the graph. + * Heuristic is based on complexity of default material pass and shader node graph. */ + if (GPU_pass_should_optimize(mat->pass)) { + GPU_material_optimization_status_set(mat, GPU_MAT_OPTIMIZATION_READY); + } + GPUShader *sh = GPU_pass_shader_get(mat->pass); if (sh != NULL) { /* We had a cache hit and the shader is already compiled. */ mat->status = GPU_MAT_SUCCESS; - gpu_node_graph_free_nodes(&mat->graph); + + if (mat->optimization_status == GPU_MAT_OPTIMIZATION_SKIP) { + gpu_node_graph_free_nodes(&mat->graph); + } + } + + /* Generate optimized pass. */ + if (mat->optimization_status == GPU_MAT_OPTIMIZATION_READY) { +#if ASYNC_OPTIMIZED_PASS_CREATION == 1 + mat->optimized_pass = NULL; + mat->optimize_pass_info.callback = callback; + mat->optimize_pass_info.thunk = thunk; +#else + mat->optimized_pass = GPU_generate_pass(mat, &mat->graph, callback, thunk, true); + if (mat->optimized_pass == NULL) { + /* Failed to create optimized pass. */ + gpu_node_graph_free_nodes(&mat->graph); + GPU_material_optimization_status_set(mat, GPU_MAT_OPTIMIZATION_SKIP); + } + else { + GPUShader *optimized_sh = GPU_pass_shader_get(mat->optimized_pass); + if (optimized_sh != NULL) { + /* Optimized shader already available. */ + gpu_node_graph_free_nodes(&mat->graph); + GPU_material_optimization_status_set(mat, GPU_MAT_OPTIMIZATION_SUCCESS); + } + } +#endif } } } @@ -810,8 +939,37 @@ void GPU_material_compile(GPUMaterial *mat) if (success) { GPUShader *sh = GPU_pass_shader_get(mat->pass); if (sh != NULL) { + + /** Perform async Render Pipeline State Object (PSO) compilation. + * + * Warm PSO cache within async compilation thread using default material as source. + * GPU_shader_warm_cache(..) performs the API-specific PSO compilation using the assigned + * parent shader's cached PSO descriptors as an input. + * + * This is only applied if the given material has a specified default reference + * material available, and the default material is already compiled. + * + * As PSOs do not always match for default shaders, we limit warming for PSO + * configurations to ensure compile time remains fast, as these first + * entries will be the most commonly used PSOs. As not all PSOs are necesasrily + * required immediately, this limit should remain low (1-3 at most). + * */ + if (mat->default_mat != NULL && mat->default_mat != mat) { + if (mat->default_mat->pass != NULL) { + GPUShader *parent_sh = GPU_pass_shader_get(mat->default_mat->pass); + if (parent_sh) { + GPU_shader_set_parent(sh, parent_sh); + GPU_shader_warm_cache(sh, 1); + } + } + } + + /* Flag success. */ mat->status = GPU_MAT_SUCCESS; - gpu_node_graph_free_nodes(&mat->graph); + if (mat->optimization_status == GPU_MAT_OPTIMIZATION_SKIP) { + /* Only free node graph nodes if not required by secondary optimization pass. */ + gpu_node_graph_free_nodes(&mat->graph); + } } else { mat->status = GPU_MAT_FAILED; @@ -825,6 +983,89 @@ void GPU_material_compile(GPUMaterial *mat) } } +void GPU_material_optimize(GPUMaterial *mat) +{ + /* If shader is flagged for skipping optimization or has already been successfully + * optimized, skip. */ + if (ELEM(mat->optimization_status, GPU_MAT_OPTIMIZATION_SKIP, GPU_MAT_OPTIMIZATION_SUCCESS)) { + return; + } + + /* If original shader has not been fully compiled, we are not + * ready to perform optimization. */ + if (mat->status != GPU_MAT_SUCCESS) { + /* Reset optimization status. */ + GPU_material_optimization_status_set(mat, GPU_MAT_OPTIMIZATION_READY); + return; + } + +#if ASYNC_OPTIMIZED_PASS_CREATION == 1 + /* If the optimized pass is not valid, first generate optimized pass. + * NOTE(Threading): Need to verify if GPU_generate_pass can cause side-effects, especially when + * used with "thunk". So far, this appears to work, and deferring optimized pass creation is more + * optimal, as these do not benefit from caching, due to baked constants. However, this could + * possibly be cause for concern for certain cases. */ + if (!mat->optimized_pass) { + mat->optimized_pass = GPU_generate_pass( + mat, &mat->graph, mat->optimize_pass_info.callback, mat->optimize_pass_info.thunk, true); + BLI_assert(mat->optimized_pass); + } +#else + if (!mat->optimized_pass) { + /* Optimized pass has not been created, skip future optimization attempts. */ + GPU_material_optimization_status_set(mat, GPU_MAT_OPTIMIZATION_SKIP); + return; + } +#endif + + bool success; + /* NOTE: The shader may have already been compiled here since we are + * sharing GPUShader across GPUMaterials. In this case it's a no-op. */ +#ifndef NDEBUG + success = GPU_pass_compile(mat->optimized_pass, mat->name); +#else + success = GPU_pass_compile(mat->optimized_pass, __func__); +#endif + + if (success) { + GPUShader *sh = GPU_pass_shader_get(mat->optimized_pass); + if (sh != NULL) { + /** Perform async Render Pipeline State Object (PSO) compilation. + * + * Warm PSO cache within async compilation thread for optimized materials. + * This setup assigns the original unoptimized shader as a "parent" shader + * for the optimized version. This then allows the associated GPU backend to + * compile PSOs within this asynchronous pass, using the identical PSO descriptors of the + * parent shader. + * + * This eliminates all run-time stuttering associated with material optimization and ensures + * realtime material editing and animation remains seamless, while retaining optimal realtime + * performance. */ + GPUShader *parent_sh = GPU_pass_shader_get(mat->pass); + if (parent_sh) { + GPU_shader_set_parent(sh, parent_sh); + GPU_shader_warm_cache(sh, -1); + } + + /* Mark as complete. */ + GPU_material_optimization_status_set(mat, GPU_MAT_OPTIMIZATION_SUCCESS); + } + else { + /* Optimized pass failed to compile. Disable any future optimization attempts. */ + GPU_material_optimization_status_set(mat, GPU_MAT_OPTIMIZATION_SKIP); + } + } + else { + /* Optimization pass generation failed. Disable future attempts to optimize. */ + GPU_pass_release(mat->optimized_pass); + mat->optimized_pass = NULL; + GPU_material_optimization_status_set(mat, GPU_MAT_OPTIMIZATION_SKIP); + } + + /* Release node graph as no longer needed. */ + gpu_node_graph_free_nodes(&mat->graph); +} + void GPU_materials_free(Main *bmain) { LISTBASE_FOREACH (Material *, ma, &bmain->materials) { @@ -847,6 +1088,9 @@ GPUMaterial *GPU_material_from_callbacks(ConstructGPUMaterialFn construct_functi material->graph.used_libraries = BLI_gset_new( BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "GPUNodeGraph.used_libraries"); material->refcount = 1; + material->optimization_status = GPU_MAT_OPTIMIZATION_SKIP; + material->optimized_pass = NULL; + material->default_mat = NULL; /* Construct the material graph by adding and linking the necessary GPU material nodes. */ construct_function_cb(thunk, material); @@ -855,7 +1099,9 @@ GPUMaterial *GPU_material_from_callbacks(ConstructGPUMaterialFn construct_functi gpu_material_ramp_texture_build(material); /* Lookup an existing pass in the cache or generate a new one. */ - material->pass = GPU_generate_pass(material, &material->graph, generate_code_function_cb, thunk); + material->pass = GPU_generate_pass( + material, &material->graph, generate_code_function_cb, thunk, false); + material->optimized_pass = NULL; /* The pass already exists in the pass cache but its shader already failed to compile. */ if (material->pass == NULL) { @@ -868,7 +1114,10 @@ GPUMaterial *GPU_material_from_callbacks(ConstructGPUMaterialFn construct_functi GPUShader *shader = GPU_pass_shader_get(material->pass); if (shader != NULL) { material->status = GPU_MAT_SUCCESS; - gpu_node_graph_free_nodes(&material->graph); + if (material->optimization_status == GPU_MAT_OPTIMIZATION_SKIP) { + /* Only free node graph if not required by secondary optimization pass. */ + gpu_node_graph_free_nodes(&material->graph); + } return material; } diff --git a/source/blender/gpu/intern/gpu_node_graph.cc b/source/blender/gpu/intern/gpu_node_graph.cc index 2c905f8474b0..a00f621d106c 100644 --- a/source/blender/gpu/intern/gpu_node_graph.cc +++ b/source/blender/gpu/intern/gpu_node_graph.cc @@ -983,3 +983,22 @@ void gpu_node_graph_prune_unused(GPUNodeGraph *graph) } } } + +void gpu_node_graph_optimize(GPUNodeGraph *graph) +{ + /* Replace all uniform node links with constant. */ + LISTBASE_FOREACH (GPUNode *, node, &graph->nodes) { + LISTBASE_FOREACH (GPUInput *, input, &node->inputs) { + if (input->link) { + if (input->link->link_type == GPU_NODE_LINK_UNIFORM) { + input->link->link_type = GPU_NODE_LINK_CONSTANT; + } + } + if (input->source == GPU_SOURCE_UNIFORM) { + input->source = (input->type == GPU_CLOSURE) ? GPU_SOURCE_STRUCT : GPU_SOURCE_CONSTANT; + } + } + } + + /* TODO: Consider performing other node graph optimizations here. */ +} diff --git a/source/blender/gpu/intern/gpu_node_graph.h b/source/blender/gpu/intern/gpu_node_graph.h index 6e3f71744e73..4ac1f4a7ec9c 100644 --- a/source/blender/gpu/intern/gpu_node_graph.h +++ b/source/blender/gpu/intern/gpu_node_graph.h @@ -190,6 +190,19 @@ void gpu_nodes_tag(GPUNodeLink *link, eGPUNodeTag tag); void gpu_node_graph_prune_unused(GPUNodeGraph *graph); void gpu_node_graph_finalize_uniform_attrs(GPUNodeGraph *graph); +/** + * Optimize node graph for optimized material shader path. + * Once the base material has been generated, we can modify the shader + * node graph to create one which will produce an optimally performing shader. + * This currently involves baking uniform data into constant data to enable + * aggressive constant folding by the compiler in order to reduce complexity and + * shader core memory pressure. + * + * NOTE: Graph optimizations will produce a shader which needs to be re-compiled + * more frequently, however, the default material pass will always exist to fall + * back on. */ +void gpu_node_graph_optimize(GPUNodeGraph *graph); + /** * Free intermediate node graph. */ diff --git a/source/blender/gpu/intern/gpu_shader.cc b/source/blender/gpu/intern/gpu_shader.cc index 0edc20723026..eac38adaed90 100644 --- a/source/blender/gpu/intern/gpu_shader.cc +++ b/source/blender/gpu/intern/gpu_shader.cc @@ -500,6 +500,26 @@ const char *GPU_shader_get_name(GPUShader *shader) return unwrap(shader)->name_get(); } +/* -------------------------------------------------------------------- */ +/** \name Shader cache warming + * \{ */ + +void GPU_shader_set_parent(GPUShader *shader, GPUShader *parent) +{ + BLI_assert(shader != nullptr); + BLI_assert(shader != parent); + if (shader != parent) { + Shader *shd_child = unwrap(shader); + Shader *shd_parent = unwrap(parent); + shd_child->parent_set(shd_parent); + } +} + +void GPU_shader_warm_cache(GPUShader *shader, int limit) +{ + unwrap(shader)->warm_cache(limit); +} + /** \} */ /* -------------------------------------------------------------------- */ diff --git a/source/blender/gpu/intern/gpu_shader_private.hh b/source/blender/gpu/intern/gpu_shader_private.hh index e4d036a95547..59c4d2b0ea96 100644 --- a/source/blender/gpu/intern/gpu_shader_private.hh +++ b/source/blender/gpu/intern/gpu_shader_private.hh @@ -34,6 +34,12 @@ class Shader { /** For debugging purpose. */ char name[64]; + /* Parent shader can be used for shaders which are derived from the same source material. + * The child shader can pull information from its parent to prepare additional resources + * such as PSOs upfront. This enables asynchronous PSO compilation which mitigates stuttering + * when updating new materials. */ + Shader *parent_shader_ = nullptr; + public: Shader(const char *name); virtual ~Shader(); @@ -43,6 +49,11 @@ class Shader { virtual void fragment_shader_from_glsl(MutableSpan sources) = 0; virtual void compute_shader_from_glsl(MutableSpan sources) = 0; virtual bool finalize(const shader::ShaderCreateInfo *info = nullptr) = 0; + /* Pre-warms PSOs using parent shader's cached PSO descriptors. Limit specifies maximum PSOs to + * warm. If -1, compiles all PSO permutations in parent shader. + * + * See `GPU_shader_warm_cache(..)` in `GPU_shader.h` for more information. */ + virtual void warm_cache(int limit) = 0; virtual void transform_feedback_names_set(Span name_list, eGPUShaderTFBType geom_type) = 0; @@ -69,7 +80,17 @@ class Shader { inline const char *const name_get() const { return name; - }; + } + + inline void parent_set(Shader *parent) + { + parent_shader_ = parent; + } + + inline Shader *parent_get() const + { + return parent_shader_; + } static bool srgb_uniform_dirty_get(); static void set_srgb_uniform(GPUShader *shader); diff --git a/source/blender/gpu/metal/mtl_pso_descriptor_state.hh b/source/blender/gpu/metal/mtl_pso_descriptor_state.hh index 1890f6e8ccda..a3d2ded72a2a 100644 --- a/source/blender/gpu/metal/mtl_pso_descriptor_state.hh +++ b/source/blender/gpu/metal/mtl_pso_descriptor_state.hh @@ -31,6 +31,14 @@ struct MTLVertexAttributeDescriptorPSO { return uint64_t((uint64_t(this->format) ^ (this->offset << 4) ^ (this->buffer_index << 8) ^ (this->format_conversion_mode << 12))); } + + void reset() + { + format = MTLVertexFormatInvalid; + offset = 0; + buffer_index = 0; + format_conversion_mode = GPU_FETCH_FLOAT; + } }; struct MTLVertexBufferLayoutDescriptorPSO { @@ -48,6 +56,13 @@ struct MTLVertexBufferLayoutDescriptorPSO { { return uint64_t(uint64_t(this->step_function) ^ (this->step_rate << 4) ^ (this->stride << 8)); } + + void reset() + { + step_function = MTLVertexStepFunctionPerVertex; + step_rate = 1; + stride = 0; + } }; /* SSBO attribute state caching. */ @@ -76,6 +91,16 @@ struct MTLSSBOAttribute { { return (memcmp(this, &other, sizeof(MTLSSBOAttribute)) == 0); } + + void reset() + { + mtl_attribute_index = 0; + vbo_id = 0; + attribute_offset = 0; + per_vertex_stride = 0; + attribute_format = 0; + is_instance = false; + } }; struct MTLVertexDescriptor { @@ -241,10 +266,10 @@ struct MTLRenderPipelineStateDescriptor { hash ^= uint64_t(this->dest_rgb_blend_factor) << 37; /* Up to 18 (5 bits). */ hash ^= uint64_t(this->src_alpha_blend_factor) << 42; /* Up to 18 (5 bits). */ hash ^= uint64_t(this->src_rgb_blend_factor) << 47; /* Up to 18 (5 bits). */ - } - for (const uint c : IndexRange(GPU_FB_MAX_COLOR_ATTACHMENT)) { - hash ^= uint64_t(this->color_attachment_format[c]) << (c + 52); /* Up to 555 (9 bits). */ + for (const uint c : IndexRange(GPU_FB_MAX_COLOR_ATTACHMENT)) { + hash ^= uint64_t(this->color_attachment_format[c]) << (c + 52); /* Up to 555 (9 bits). */ + } } hash |= uint64_t((this->blending_enabled && (this->num_color_attachments > 0)) ? 1 : 0) << 62; @@ -262,9 +287,9 @@ struct MTLRenderPipelineStateDescriptor { vertex_descriptor.total_attributes = 0; vertex_descriptor.max_attribute_value = 0; vertex_descriptor.num_vert_buffers = 0; + vertex_descriptor.prim_topology_class = MTLPrimitiveTopologyClassUnspecified; for (int i = 0; i < GPU_VERT_ATTR_MAX_LEN; i++) { - vertex_descriptor.attributes[i].format = MTLVertexFormatInvalid; - vertex_descriptor.attributes[i].offset = 0; + vertex_descriptor.attributes[i].reset(); } vertex_descriptor.uses_ssbo_vertex_fetch = false; vertex_descriptor.num_ssbo_attributes = 0; diff --git a/source/blender/gpu/metal/mtl_shader.hh b/source/blender/gpu/metal/mtl_shader.hh index 59c5a810e5e0..095ca94cc411 100644 --- a/source/blender/gpu/metal/mtl_shader.hh +++ b/source/blender/gpu/metal/mtl_shader.hh @@ -76,6 +76,8 @@ struct MTLRenderPipelineStateInstance { int null_attribute_buffer_index; /* buffer bind used for transform feedback output buffer. */ int transform_feedback_buffer_index; + /* Topology class. */ + MTLPrimitiveTopologyClass prim_type; /** Reflection Data. * Currently used to verify whether uniform buffers of incorrect sizes being bound, due to left @@ -188,6 +190,7 @@ class MTLShader : public Shader { MTLRenderPipelineStateDescriptor current_pipeline_state_; /* Cache of compiled PipelineStateObjects. */ blender::Map pso_cache_; + std::mutex pso_cache_lock_; /** Compute pipeline state and Compute PSO caching. */ MTLComputePipelineStateInstance compute_pso_instance_; @@ -256,6 +259,7 @@ class MTLShader : public Shader { /* Compile and build - Return true if successful. */ bool finalize(const shader::ShaderCreateInfo *info = nullptr) override; bool finalize_compute(const shader::ShaderCreateInfo *info); + void warm_cache(int limit) override; /* Utility. */ bool is_valid() @@ -331,8 +335,14 @@ class MTLShader : public Shader { void shader_source_from_msl(NSString *input_vertex_source, NSString *input_fragment_source); void shader_compute_source_from_msl(NSString *input_compute_source); void set_interface(MTLShaderInterface *interface); + MTLRenderPipelineStateInstance *bake_current_pipeline_state(MTLContext *ctx, MTLPrimitiveTopologyClass prim_type); + MTLRenderPipelineStateInstance *bake_pipeline_state( + MTLContext *ctx, + MTLPrimitiveTopologyClass prim_type, + const MTLRenderPipelineStateDescriptor &pipeline_descriptor); + bool bake_compute_pipeline_state(MTLContext *ctx); const MTLComputePipelineStateInstance &get_compute_pipeline_state(); diff --git a/source/blender/gpu/metal/mtl_shader.mm b/source/blender/gpu/metal/mtl_shader.mm index 610079a644f8..6623c218e541 100644 --- a/source/blender/gpu/metal/mtl_shader.mm +++ b/source/blender/gpu/metal/mtl_shader.mm @@ -6,6 +6,8 @@ #include "BKE_global.h" +#include "PIL_time.h" + #include "BLI_string.h" #include #include @@ -110,6 +112,7 @@ MTLShader::~MTLShader() } /* Free Pipeline Cache. */ + pso_cache_lock_.lock(); for (const MTLRenderPipelineStateInstance *pso_inst : pso_cache_.values()) { if (pso_inst->vert) { [pso_inst->vert release]; @@ -123,6 +126,7 @@ MTLShader::~MTLShader() delete pso_inst; } pso_cache_.clear(); + pso_cache_lock_.unlock(); /* Free Compute pipeline state object. */ if (compute_pso_instance_.compute) { @@ -616,6 +620,36 @@ void MTLShader::push_constant_bindstate_mark_dirty(bool is_dirty) push_constant_modified_ = is_dirty; } +void MTLShader::warm_cache(int limit) +{ + if (parent_shader_ != nullptr) { + MTLContext *ctx = MTLContext::get(); + MTLShader *parent_mtl = reinterpret_cast(parent_shader_); + + /* Extract PSO descriptors from parent shader. */ + blender::Vector descriptors; + blender::Vector prim_classes; + + parent_mtl->pso_cache_lock_.lock(); + for (const auto &pso_entry : parent_mtl->pso_cache_.items()) { + const MTLRenderPipelineStateDescriptor &pso_descriptor = pso_entry.key; + const MTLRenderPipelineStateInstance *pso_inst = pso_entry.value; + descriptors.append(pso_descriptor); + prim_classes.append(pso_inst->prim_type); + } + parent_mtl->pso_cache_lock_.unlock(); + + /* Warm shader cache with applied limit. + * If limit is <= 0, compile all PSO permutations. */ + limit = (limit > 0) ? limit : descriptors.size(); + for (int i : IndexRange(min_ii(descriptors.size(), limit))) { + const MTLRenderPipelineStateDescriptor &pso_descriptor = descriptors[i]; + const MTLPrimitiveTopologyClass &prim_class = prim_classes[i]; + bake_pipeline_state(ctx, prim_class, pso_descriptor); + } + } +} + /** \} */ /* -------------------------------------------------------------------- */ @@ -681,12 +715,10 @@ void MTLShader::set_interface(MTLShaderInterface *interface) MTLRenderPipelineStateInstance *MTLShader::bake_current_pipeline_state( MTLContext *ctx, MTLPrimitiveTopologyClass prim_type) { + /** Populate global pipeline descriptor and use this to prepare new PSO. */ /* NOTE(Metal): PSO cache can be accessed from multiple threads, though these operations should * be thread-safe due to organization of high-level renderer. If there are any issues, then * access can be guarded as appropriate. */ - BLI_assert(this); - MTLShaderInterface *mtl_interface = this->get_interface(); - BLI_assert(mtl_interface); BLI_assert(this->is_valid()); /* NOTE(Metal): Vertex input assembly description will have been populated externally @@ -756,15 +788,32 @@ MTLRenderPipelineStateInstance *MTLShader::bake_current_pipeline_state( pipeline_descriptor.vertex_descriptor.prim_topology_class = (requires_specific_topology_class) ? prim_type : MTLPrimitiveTopologyClassUnspecified; + /* Bake pipeline state using global descriptor. */ + return bake_pipeline_state(ctx, prim_type, pipeline_descriptor); +} + +/* Variant which bakes a pipeline state based on an an existing MTLRenderPipelineStateDescriptor. + * This function should be callable from a secondary compilatiom thread. */ +MTLRenderPipelineStateInstance *MTLShader::bake_pipeline_state( + MTLContext *ctx, + MTLPrimitiveTopologyClass prim_type, + const MTLRenderPipelineStateDescriptor &pipeline_descriptor) +{ + /* Fetch shader interface. */ + MTLShaderInterface *mtl_interface = this->get_interface(); + BLI_assert(mtl_interface); + BLI_assert(this->is_valid()); + /* Check if current PSO exists in the cache. */ + pso_cache_lock_.lock(); MTLRenderPipelineStateInstance **pso_lookup = pso_cache_.lookup_ptr(pipeline_descriptor); MTLRenderPipelineStateInstance *pipeline_state = (pso_lookup) ? *pso_lookup : nullptr; + pso_cache_lock_.unlock(); + if (pipeline_state != nullptr) { return pipeline_state; } - shader_debug_printf("Baking new pipeline variant for shader: %s\n", this->name); - /* Generate new Render Pipeline State Object (PSO). */ @autoreleasepool { /* Prepare Render Pipeline Descriptor. */ @@ -774,7 +823,6 @@ MTLRenderPipelineStateInstance *MTLShader::bake_current_pipeline_state( MTLFunctionConstantValues *values = [[MTLFunctionConstantValues new] autorelease]; /* Prepare Vertex descriptor based on current pipeline vertex binding state. */ - MTLRenderPipelineStateDescriptor ¤t_state = pipeline_descriptor; MTLRenderPipelineDescriptor *desc = pso_descriptor_; [desc reset]; pso_descriptor_.label = [NSString stringWithUTF8String:this->name]; @@ -784,7 +832,7 @@ MTLRenderPipelineStateInstance *MTLShader::bake_current_pipeline_state( * specialization constant, customized per unique pipeline state permutation. * * NOTE: For binding point compaction, we could use the number of VBOs present - * in the current PSO configuration `current_state.vertex_descriptor.num_vert_buffers`). + * in the current PSO configuration `pipeline_descriptors.vertex_descriptor.num_vert_buffers`). * However, it is more efficient to simply offset the uniform buffer base index to the * maximal number of VBO bind-points, as then UBO bind-points for similar draw calls * will align and avoid the requirement for additional binding. */ @@ -792,7 +840,7 @@ MTLRenderPipelineStateInstance *MTLShader::bake_current_pipeline_state( /* Null buffer index is used if an attribute is not found in the * bound VBOs #VertexFormat. */ - int null_buffer_index = current_state.vertex_descriptor.num_vert_buffers; + int null_buffer_index = pipeline_descriptor.vertex_descriptor.num_vert_buffers; bool using_null_buffer = false; if (this->get_uses_ssbo_vertex_fetch()) { @@ -806,11 +854,12 @@ MTLRenderPipelineStateInstance *MTLShader::bake_current_pipeline_state( MTL_uniform_buffer_base_index = MTL_SSBO_VERTEX_FETCH_IBO_INDEX + 1; } else { - for (const uint i : IndexRange(current_state.vertex_descriptor.max_attribute_value + 1)) { + for (const uint i : + IndexRange(pipeline_descriptor.vertex_descriptor.max_attribute_value + 1)) { /* Metal back-end attribute descriptor state. */ - MTLVertexAttributeDescriptorPSO &attribute_desc = - current_state.vertex_descriptor.attributes[i]; + const MTLVertexAttributeDescriptorPSO &attribute_desc = + pipeline_descriptor.vertex_descriptor.attributes[i]; /* Flag format conversion */ /* In some cases, Metal cannot implicitly convert between data types. @@ -860,10 +909,10 @@ MTLRenderPipelineStateInstance *MTLShader::bake_current_pipeline_state( mtl_attribute.bufferIndex = attribute_desc.buffer_index; } - for (const uint i : IndexRange(current_state.vertex_descriptor.num_vert_buffers)) { + for (const uint i : IndexRange(pipeline_descriptor.vertex_descriptor.num_vert_buffers)) { /* Metal back-end state buffer layout. */ const MTLVertexBufferLayoutDescriptorPSO &buf_layout = - current_state.vertex_descriptor.buffer_layouts[i]; + pipeline_descriptor.vertex_descriptor.buffer_layouts[i]; /* Copy metal back-end buffer layout state into PSO descriptor. * NOTE: need to copy each element due to copying from internal * back-end descriptor to Metal API descriptor. */ @@ -875,7 +924,7 @@ MTLRenderPipelineStateInstance *MTLShader::bake_current_pipeline_state( } /* Mark empty attribute conversion. */ - for (int i = current_state.vertex_descriptor.max_attribute_value + 1; + for (int i = pipeline_descriptor.vertex_descriptor.max_attribute_value + 1; i < GPU_VERT_ATTR_MAX_LEN; i++) { int MTL_attribute_conversion_mode = 0; @@ -1039,7 +1088,7 @@ MTLRenderPipelineStateInstance *MTLShader::bake_current_pipeline_state( for (int color_attachment = 0; color_attachment < GPU_FB_MAX_COLOR_ATTACHMENT; color_attachment++) { /* Fetch color attachment pixel format in back-end pipeline state. */ - MTLPixelFormat pixel_format = current_state.color_attachment_format[color_attachment]; + MTLPixelFormat pixel_format = pipeline_descriptor.color_attachment_format[color_attachment]; /* Populate MTL API PSO attachment descriptor. */ MTLRenderPipelineColorAttachmentDescriptor *col_attachment = desc.colorAttachments[color_attachment]; @@ -1048,19 +1097,19 @@ MTLRenderPipelineStateInstance *MTLShader::bake_current_pipeline_state( if (pixel_format != MTLPixelFormatInvalid) { bool format_supports_blending = mtl_format_supports_blending(pixel_format); - col_attachment.writeMask = current_state.color_write_mask; - col_attachment.blendingEnabled = current_state.blending_enabled && + col_attachment.writeMask = pipeline_descriptor.color_write_mask; + col_attachment.blendingEnabled = pipeline_descriptor.blending_enabled && format_supports_blending; - if (format_supports_blending && current_state.blending_enabled) { - col_attachment.alphaBlendOperation = current_state.alpha_blend_op; - col_attachment.rgbBlendOperation = current_state.rgb_blend_op; - col_attachment.destinationAlphaBlendFactor = current_state.dest_alpha_blend_factor; - col_attachment.destinationRGBBlendFactor = current_state.dest_rgb_blend_factor; - col_attachment.sourceAlphaBlendFactor = current_state.src_alpha_blend_factor; - col_attachment.sourceRGBBlendFactor = current_state.src_rgb_blend_factor; + if (format_supports_blending && pipeline_descriptor.blending_enabled) { + col_attachment.alphaBlendOperation = pipeline_descriptor.alpha_blend_op; + col_attachment.rgbBlendOperation = pipeline_descriptor.rgb_blend_op; + col_attachment.destinationAlphaBlendFactor = pipeline_descriptor.dest_alpha_blend_factor; + col_attachment.destinationRGBBlendFactor = pipeline_descriptor.dest_rgb_blend_factor; + col_attachment.sourceAlphaBlendFactor = pipeline_descriptor.src_alpha_blend_factor; + col_attachment.sourceRGBBlendFactor = pipeline_descriptor.src_rgb_blend_factor; } else { - if (current_state.blending_enabled && !format_supports_blending) { + if (pipeline_descriptor.blending_enabled && !format_supports_blending) { shader_debug_printf( "[Warning] Attempting to Bake PSO, but MTLPixelFormat %d does not support " "blending\n", @@ -1069,8 +1118,8 @@ MTLRenderPipelineStateInstance *MTLShader::bake_current_pipeline_state( } } } - desc.depthAttachmentPixelFormat = current_state.depth_attachment_format; - desc.stencilAttachmentPixelFormat = current_state.stencil_attachment_format; + desc.depthAttachmentPixelFormat = pipeline_descriptor.depth_attachment_format; + desc.stencilAttachmentPixelFormat = pipeline_descriptor.stencil_attachment_format; /* Compile PSO */ MTLAutoreleasedRenderPipelineReflection reflection_data; @@ -1090,7 +1139,7 @@ MTLRenderPipelineStateInstance *MTLShader::bake_current_pipeline_state( return nullptr; } else { -#ifndef NDEBUG +#if 0 NSLog(@"Successfully compiled PSO for shader: %s (Metal Context: %p)\n", this->name, ctx); #endif } @@ -1103,7 +1152,7 @@ MTLRenderPipelineStateInstance *MTLShader::bake_current_pipeline_state( pso_inst->base_uniform_buffer_index = MTL_uniform_buffer_base_index; pso_inst->null_attribute_buffer_index = (using_null_buffer) ? null_buffer_index : -1; pso_inst->transform_feedback_buffer_index = MTL_transform_feedback_buffer_index; - pso_inst->shader_pso_index = pso_cache_.size(); + pso_inst->prim_type = prim_type; pso_inst->reflection_data_available = (reflection_data != nil); if (reflection_data != nil) { @@ -1189,9 +1238,14 @@ MTLRenderPipelineStateInstance *MTLShader::bake_current_pipeline_state( [pso_inst->pso retain]; /* Insert into pso cache. */ + pso_cache_lock_.lock(); + pso_inst->shader_pso_index = pso_cache_.size(); pso_cache_.add(pipeline_descriptor, pso_inst); - shader_debug_printf("PSO CACHE: Stored new variant in PSO cache for shader '%s'\n", - this->name); + pso_cache_lock_.unlock(); + shader_debug_printf( + "PSO CACHE: Stored new variant in PSO cache for shader '%s' Hash: '%llu'\n", + this->name, + pipeline_descriptor.hash()); return pso_inst; } } @@ -1256,7 +1310,7 @@ bool MTLShader::bake_compute_pipeline_state(MTLContext *ctx) return false; } else { -#ifndef NDEBUG +#if 0 NSLog(@"Successfully compiled compute PSO for shader: %s (Metal Context: %p)\n", this->name, ctx); diff --git a/source/blender/gpu/opengl/gl_shader.hh b/source/blender/gpu/opengl/gl_shader.hh index bebbb2fa82e6..178b10c254ab 100644 --- a/source/blender/gpu/opengl/gl_shader.hh +++ b/source/blender/gpu/opengl/gl_shader.hh @@ -47,6 +47,7 @@ class GLShader : public Shader { void fragment_shader_from_glsl(MutableSpan sources) override; void compute_shader_from_glsl(MutableSpan sources) override; bool finalize(const shader::ShaderCreateInfo *info = nullptr) override; + void warm_cache(int limit) override{}; std::string resources_declare(const shader::ShaderCreateInfo &info) const override; std::string vertex_interface_declare(const shader::ShaderCreateInfo &info) const override; diff --git a/source/blender/gpu/vulkan/vk_shader.hh b/source/blender/gpu/vulkan/vk_shader.hh index 2fca185ea939..6cc0e0c77e54 100644 --- a/source/blender/gpu/vulkan/vk_shader.hh +++ b/source/blender/gpu/vulkan/vk_shader.hh @@ -35,6 +35,7 @@ class VKShader : public Shader { void fragment_shader_from_glsl(MutableSpan sources) override; void compute_shader_from_glsl(MutableSpan sources) override; bool finalize(const shader::ShaderCreateInfo *info = nullptr) override; + void warm_cache(int limit) override{}; void transform_feedback_names_set(Span name_list, eGPUShaderTFBType geom_type) override; -- 2.30.2 From de23e636079633716cf7a25e7e3709f4a8703d26 Mon Sep 17 00:00:00 2001 From: Jorijn de Graaf Date: Tue, 14 Feb 2023 22:21:59 +0100 Subject: [PATCH 115/182] Fix overlay_uniform_color_clipped inheritance overlay_uniform_color_clipped was inheriting from overlay_depth_only, which doesn't make much sense. I've changed it to inherit from overlay_uniform_color instead, which is consistent with other \*\_clipped variants of shaders. Pull Request #104761 --- .../engines/overlay/shaders/infos/overlay_edit_mode_info.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/draw/engines/overlay/shaders/infos/overlay_edit_mode_info.hh b/source/blender/draw/engines/overlay/shaders/infos/overlay_edit_mode_info.hh index d993c7703c0f..4404eef76e45 100644 --- a/source/blender/draw/engines/overlay/shaders/infos/overlay_edit_mode_info.hh +++ b/source/blender/draw/engines/overlay/shaders/infos/overlay_edit_mode_info.hh @@ -630,7 +630,7 @@ GPU_SHADER_CREATE_INFO(overlay_uniform_color_pointcloud) GPU_SHADER_CREATE_INFO(overlay_uniform_color_clipped) .do_static_compilation(true) - .additional_info("overlay_depth_only", "drw_clipped"); + .additional_info("overlay_uniform_color", "drw_clipped"); GPU_SHADER_CREATE_INFO(overlay_uniform_color_pointcloud_clipped) .do_static_compilation(true) -- 2.30.2 From 1a51ff2f4b552f5f6655286f1c1cd271bc9a5203 Mon Sep 17 00:00:00 2001 From: Richard Antalik Date: Wed, 15 Feb 2023 01:20:04 +0100 Subject: [PATCH 116/182] Fix #84057: Delete operator removes unexpected strip Caused by strips being flagged for removal, but the flag was never cleared. As far as I can tell, this issue is not reproducible anymore, but there may be files with this flag still set. --- source/blender/blenloader/intern/versioning_300.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/source/blender/blenloader/intern/versioning_300.cc b/source/blender/blenloader/intern/versioning_300.cc index 2340d585d5d9..3eb77f0b76d7 100644 --- a/source/blender/blenloader/intern/versioning_300.cc +++ b/source/blender/blenloader/intern/versioning_300.cc @@ -1601,6 +1601,12 @@ static bool version_merge_still_offsets(Sequence *seq, void * /*user_data*/) return true; } +static bool version_fix_delete_flag(Sequence *seq, void * /*user_data*/) +{ + seq->flag &= ~SEQ_FLAG_DELETE; + return true; +} + /* Those `version_liboverride_rnacollections_*` functions mimic the old, pre-3.0 code to find * anchor and source items in the given list of modifiers, constraints etc., using only the * `subitem_local` data of the override property operation. @@ -3938,6 +3944,14 @@ void blo_do_versions_300(FileData *fd, Library * /*lib*/, Main *bmain) } } + /* Fix possible uncleared `SEQ_FLAG_DELETE` flag */ + LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) { + Editing *ed = SEQ_editing_get(scene); + if (ed != nullptr) { + SEQ_for_each_callback(&ed->seqbase, version_fix_delete_flag, nullptr); + } + } + /* Keep this block, even when empty. */ } } -- 2.30.2 From a1e9657794f10a1c3f39be4800cae67b097b1d01 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 15 Feb 2023 13:11:04 +1100 Subject: [PATCH 117/182] Cleanup: use 'show_' prefix for RNA sculpt booleans Follow naming conventions from https://wiki.blender.org/wiki/Source/Architecture/RNA --- release/scripts/startup/bl_ui/space_view3d.py | 12 ++++++------ source/blender/makesrna/intern/rna_space.c | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index a15487411873..9032fb6b4a9a 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -6720,15 +6720,15 @@ class VIEW3D_PT_overlay_sculpt(Panel): overlay = view.overlay row = layout.row(align=True) - row.prop(overlay, "sculpt_show_mask", text="") + row.prop(overlay, "show_sculpt_mask", text="") sub = row.row() - sub.active = overlay.sculpt_show_mask + sub.active = overlay.show_sculpt_mask sub.prop(overlay, "sculpt_mode_mask_opacity", text="Mask") row = layout.row(align=True) - row.prop(overlay, "sculpt_show_face_sets", text="") + row.prop(overlay, "show_sculpt_face_sets", text="") sub = row.row() - sub.active = overlay.sculpt_show_face_sets + sub.active = overlay.show_sculpt_face_sets row.prop(overlay, "sculpt_mode_face_sets_opacity", text="Face Sets") @@ -6757,9 +6757,9 @@ class VIEW3D_PT_overlay_sculpt_curves(Panel): row = layout.row(align=True) row.active = overlay.show_overlays - row.prop(overlay, "sculpt_curves_cage", text="") + row.prop(overlay, "show_sculpt_curves_cage", text="") subrow = row.row(align=True) - subrow.active = overlay.sculpt_curves_cage + subrow.active = overlay.show_sculpt_curves_cage subrow.prop(overlay, "sculpt_curves_cage_opacity", text="Cage Opacity") diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 68c3aeb5c838..260e4c5bc7e8 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -4714,7 +4714,7 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna) RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); - prop = RNA_def_property(srna, "sculpt_curves_cage", PROP_BOOLEAN, PROP_NONE); + prop = RNA_def_property(srna, "show_sculpt_curves_cage", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "overlay.flag", V3D_OVERLAY_SCULPT_CURVES_CAGE); RNA_def_property_ui_text( prop, "Sculpt Curves Cage", "Show original curves that are currently being edited"); @@ -4733,12 +4733,12 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna) RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); - prop = RNA_def_property(srna, "sculpt_show_mask", PROP_BOOLEAN, PROP_NONE); + prop = RNA_def_property(srna, "show_sculpt_mask", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "overlay.flag", V3D_OVERLAY_SCULPT_SHOW_MASK); RNA_def_property_ui_text(prop, "Sculpt Show Mask", ""); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); - prop = RNA_def_property(srna, "sculpt_show_face_sets", PROP_BOOLEAN, PROP_NONE); + prop = RNA_def_property(srna, "show_sculpt_face_sets", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "overlay.flag", V3D_OVERLAY_SCULPT_SHOW_FACE_SETS); RNA_def_property_ui_text(prop, "Sculpt Show Face Sets", ""); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); -- 2.30.2 From a43dca7424df95ef656e50f3ddfe2ffa8fbe4cef Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 15 Feb 2023 13:11:06 +1100 Subject: [PATCH 118/182] Cleanup: quiet warnings from shellcheck, correct indentation --- .../linux/make_deps_wrapper.sh | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/build_files/build_environment/linux/make_deps_wrapper.sh b/build_files/build_environment/linux/make_deps_wrapper.sh index e81bac3c5acc..2e2d00a9efc6 100755 --- a/build_files/build_environment/linux/make_deps_wrapper.sh +++ b/build_files/build_environment/linux/make_deps_wrapper.sh @@ -6,11 +6,11 @@ # - That dependency uses all available cores. # # Without this, simply calling `make -j$(nproc)` from the `${CMAKE_BUILD_DIR}/deps/` -# directory will build all projects at once. +# directory will build many projects at once. # # This is undesirable for the following reasons: # -# - The output from many projects is mixed together, +# - The output from projects is mixed together, # making it difficult to track down the cause of a build failure. # # - Larger dependencies such as LLVM can bottleneck the build process, @@ -20,7 +20,7 @@ # It's possible canceling happens as a patch is being applied or files are being copied. # (steps that aren't part of the compilation process where it's typically safe to cancel). -if [[ -z "${MY_MAKE_CALL_LEVEL}" ]]; then +if [[ -z "$MY_MAKE_CALL_LEVEL" ]]; then export MY_MAKE_CALL_LEVEL=0 export MY_MAKEFLAGS=$MAKEFLAGS @@ -31,34 +31,35 @@ if [[ -z "${MY_MAKE_CALL_LEVEL}" ]]; then -j*) export MY_JOBS_ARG=$i if [ "$MY_JOBS_ARG" = "-j" ]; then - add_next=1 + add_next=1 fi ;; --jobs=*) shift # past argument=value - export MY_JOBS_ARG=$i + MY_JOBS_ARG=$i ;; *) - if (( $add_next == 1 )); then - export MY_JOBS_ARG="$MY_JOBS_ARG $i" - add_next=0 + if (( add_next == 1 )); then + MY_JOBS_ARG="$MY_JOBS_ARG $i" + add_next=0 fi ;; esac done unset i add_next - if [[ -z "${MY_JOBS_ARG}" ]]; then - export MY_JOBS_ARG="-j$(nproc)" + if [[ -z "$MY_JOBS_ARG" ]]; then + MY_JOBS_ARG="-j$(nproc)" fi + export MY_JOBS_ARG # Support user defined `MAKEFLAGS`. export MAKEFLAGS="$MY_MAKEFLAGS -j1" else - export MY_MAKE_CALL_LEVEL=$(( $MY_MAKE_CALL_LEVEL + 1 )) - if (( $MY_MAKE_CALL_LEVEL == 1 )); then + export MY_MAKE_CALL_LEVEL=$(( MY_MAKE_CALL_LEVEL + 1 )) + if (( MY_MAKE_CALL_LEVEL == 1 )); then # Important to set jobs to 1, otherwise user defined jobs argument is used. export MAKEFLAGS="$MY_MAKEFLAGS -j1" - elif (( $MY_MAKE_CALL_LEVEL == 2 )); then + elif (( MY_MAKE_CALL_LEVEL == 2 )); then # This is the level used by each sub-project. export MAKEFLAGS="$MY_MAKEFLAGS $MY_JOBS_ARG" fi -- 2.30.2 From fdaf71d1261cb9e7ff538bae54f23a6cbc1e8b23 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 15 Feb 2023 13:11:14 +1100 Subject: [PATCH 119/182] Cleanup: spelling in comments --- source/blender/draw/engines/eevee/eevee_private.h | 2 +- source/blender/gpu/GPU_shader.h | 7 ++++--- source/blender/gpu/intern/gpu_codegen.cc | 8 ++++---- source/blender/gpu/intern/gpu_material.c | 4 ++-- source/blender/gpu/metal/mtl_shader.mm | 2 +- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h index ab960414353a..43bcb7faab2b 100644 --- a/source/blender/draw/engines/eevee/eevee_private.h +++ b/source/blender/draw/engines/eevee/eevee_private.h @@ -1000,7 +1000,7 @@ typedef struct EEVEE_PrivateData { /* Compiling shaders count. This is to track if a shader has finished compiling. */ int queued_shaders_count; int queued_shaders_count_prev; - /* Optimising shaders count. */ + /* Optimizing shaders count. */ int queued_optimise_shaders_count; /* LookDev Settings */ diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h index 7b1fcead3498..8268dd78c106 100644 --- a/source/blender/gpu/GPU_shader.h +++ b/source/blender/gpu/GPU_shader.h @@ -237,13 +237,14 @@ void GPU_shader_transform_feedback_disable(GPUShader *shader); * * PSOs require descriptors containing information on the render state for a given shader, which * includes input vertex data layout and output pixel formats, along with some state such as - * blend mode and colour output masks. As this state information is usually consistent between + * blend mode and color output masks. As this state information is usually consistent between * similar draws, we can assign a parent shader and use this shader's cached pipeline state's to * prime compilations. * * Shaders do not necessarily have to be similar in functionality to be used as a parent, so long - * as the GPUVertFormt and GPUFrameBuffer which they are used with remain the same. Other bindings - * such as textures, uniforms and UBOs are all assigned independently as dynamic state. + * as the #GPUVertFormt and #GPUFrameBuffer which they are used with remain the same. + * Other bindings such as textures, uniforms and UBOs are all assigned independently as dynamic + * state. * * This function should be called asynchronously, mitigating the impact of run-time stuttering from * dynamic compilation of PSOs during normal rendering. diff --git a/source/blender/gpu/intern/gpu_codegen.cc b/source/blender/gpu/intern/gpu_codegen.cc index ef71638b4156..78cddc6d272a 100644 --- a/source/blender/gpu/intern/gpu_codegen.cc +++ b/source/blender/gpu/intern/gpu_codegen.cc @@ -256,7 +256,7 @@ class GPUCodegen { ListBase ubo_inputs_ = {nullptr, nullptr}; GPUInput *cryptomatte_input_ = nullptr; - /** Cache paramters for complexity heuristic. */ + /** Cache parameters for complexity heuristic. */ uint nodes_total_ = 0; uint textures_total_ = 0; uint uniforms_total_ = 0; @@ -477,7 +477,7 @@ void GPUCodegen::generate_library() GPUCodegenCreateInfo &info = *create_info; void *value; - /* Iterate over libraries. We need to keep this struct intact incase + /* Iterate over libraries. We need to keep this struct intact in case * it is required for the optimization pass. */ GHashIterator *ihash = BLI_ghashIterator_new((GHash *)graph.used_libraries); while (!BLI_ghashIterator_done(ihash)) { @@ -721,7 +721,7 @@ GPUPass *GPU_generate_pass(GPUMaterial *material, /** Cache lookup: Reuse shaders already compiled. * NOTE: We only perform cache look-up for non-optimized shader - * graphs, as baked constant data amongst other optimizations will generate too many + * graphs, as baked constant data among other optimizations will generate too many * shader source permutations, with minimal re-usability. */ pass_hash = gpu_pass_cache_lookup(codegen.hash_get()); @@ -777,7 +777,7 @@ GPUPass *GPU_generate_pass(GPUMaterial *material, pass->compiled = false; /* Only flag pass optimization hint if this is the first generated pass for a material. * Optimized passes cannot be optimized further, even if the heuristic is still not - * favourable. */ + * favorable. */ pass->should_optimize = (!optimize_graph) && codegen.should_optimize_heuristic(); codegen.create_info = nullptr; diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c index 9b4a7fb55949..f1b790a0a038 100644 --- a/source/blender/gpu/intern/gpu_material.c +++ b/source/blender/gpu/intern/gpu_material.c @@ -122,7 +122,7 @@ struct GPUMaterial { /** Default material reference used for PSO cache warming. Default materials may perform * different operations, but the permutation will frequently share the same input PSO - * descriptors. This enables async PSO compilation as part of the deferred compiltion + * descriptors. This enables asynchronous PSO compilation as part of the deferred compilation * pass, reducing runtime stuttering and responsiveness while compiling materials. */ GPUMaterial *default_mat; @@ -951,7 +951,7 @@ void GPU_material_compile(GPUMaterial *mat) * * As PSOs do not always match for default shaders, we limit warming for PSO * configurations to ensure compile time remains fast, as these first - * entries will be the most commonly used PSOs. As not all PSOs are necesasrily + * entries will be the most commonly used PSOs. As not all PSOs are necessarily * required immediately, this limit should remain low (1-3 at most). * */ if (mat->default_mat != NULL && mat->default_mat != mat) { diff --git a/source/blender/gpu/metal/mtl_shader.mm b/source/blender/gpu/metal/mtl_shader.mm index 6623c218e541..3f0bcaea8756 100644 --- a/source/blender/gpu/metal/mtl_shader.mm +++ b/source/blender/gpu/metal/mtl_shader.mm @@ -793,7 +793,7 @@ MTLRenderPipelineStateInstance *MTLShader::bake_current_pipeline_state( } /* Variant which bakes a pipeline state based on an an existing MTLRenderPipelineStateDescriptor. - * This function should be callable from a secondary compilatiom thread. */ + * This function should be callable from a secondary compilation thread. */ MTLRenderPipelineStateInstance *MTLShader::bake_pipeline_state( MTLContext *ctx, MTLPrimitiveTopologyClass prim_type, -- 2.30.2 From be92bfd6faa3a94b24efdbc30a46ac43c257c75a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 15 Feb 2023 13:14:26 +1100 Subject: [PATCH 120/182] Cleanup: quiet clang warnings Quiet unused argument, shadow, array-bounds & range-loop-bind-reference warnings. --- .../blender/compositor/realtime_compositor/intern/evaluator.cc | 2 +- .../compositor/realtime_compositor/intern/shader_operation.cc | 2 +- source/blender/draw/intern/draw_manager_shader.c | 2 +- source/blender/editors/sculpt_paint/sculpt.cc | 2 +- source/blender/gpu/opengl/gl_shader.hh | 2 +- source/blender/nodes/intern/geometry_nodes_log.cc | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/source/blender/compositor/realtime_compositor/intern/evaluator.cc b/source/blender/compositor/realtime_compositor/intern/evaluator.cc index 1b52e1d381dd..f8c63cd7f6e8 100644 --- a/source/blender/compositor/realtime_compositor/intern/evaluator.cc +++ b/source/blender/compositor/realtime_compositor/intern/evaluator.cc @@ -161,7 +161,7 @@ void Evaluator::compile_and_evaluate_shader_compile_unit(CompileState &compile_s void Evaluator::map_shader_operation_inputs_to_their_results(ShaderOperation *operation, CompileState &compile_state) { - for (const auto &item : operation->get_inputs_to_linked_outputs_map().items()) { + for (const auto item : operation->get_inputs_to_linked_outputs_map().items()) { Result &result = compile_state.get_result_from_output_socket(item.value); operation->map_input_to_result(item.key, &result); } diff --git a/source/blender/compositor/realtime_compositor/intern/shader_operation.cc b/source/blender/compositor/realtime_compositor/intern/shader_operation.cc index b4976e5eff0a..e85075f59cd3 100644 --- a/source/blender/compositor/realtime_compositor/intern/shader_operation.cc +++ b/source/blender/compositor/realtime_compositor/intern/shader_operation.cc @@ -81,7 +81,7 @@ Map &ShaderOperation::get_inputs_to_linked_outputs_m void ShaderOperation::compute_results_reference_counts(const Schedule &schedule) { - for (const auto &item : output_sockets_to_output_identifiers_map_.items()) { + for (const auto item : output_sockets_to_output_identifiers_map_.items()) { const int reference_count = number_of_inputs_linked_to_output_conditioned( item.key, [&](DInputSocket input) { return schedule.contains(input.node()); }); diff --git a/source/blender/draw/intern/draw_manager_shader.c b/source/blender/draw/intern/draw_manager_shader.c index 61900825d7b8..c7c3cc6b7184 100644 --- a/source/blender/draw/intern/draw_manager_shader.c +++ b/source/blender/draw/intern/draw_manager_shader.c @@ -118,7 +118,7 @@ static void drw_deferred_shader_compilation_exec( BLI_spin_lock(&comp->list_lock); /* Pop tail because it will be less likely to lock the main thread * if all GPUMaterials are to be freed (see DRW_deferred_shader_remove()). */ - LinkData *link = (LinkData *)BLI_poptail(&comp->optimize_queue); + link = (LinkData *)BLI_poptail(&comp->optimize_queue); GPUMaterial *optimize_mat = link ? (GPUMaterial *)link->data : NULL; if (optimize_mat) { /* Avoid another thread freeing the material during optimization. */ diff --git a/source/blender/editors/sculpt_paint/sculpt.cc b/source/blender/editors/sculpt_paint/sculpt.cc index 59bf3f04dd68..6b5e24380682 100644 --- a/source/blender/editors/sculpt_paint/sculpt.cc +++ b/source/blender/editors/sculpt_paint/sculpt.cc @@ -2715,7 +2715,7 @@ void SCULPT_brush_strength_color(SculptSession *ss, void SCULPT_calc_vertex_displacement(SculptSession *ss, const Brush *brush, - float rgba[4], + float rgba[3], float out_offset[3]) { mul_v3_fl(rgba, ss->cache->bstrength); diff --git a/source/blender/gpu/opengl/gl_shader.hh b/source/blender/gpu/opengl/gl_shader.hh index 178b10c254ab..17e4339e130e 100644 --- a/source/blender/gpu/opengl/gl_shader.hh +++ b/source/blender/gpu/opengl/gl_shader.hh @@ -47,7 +47,7 @@ class GLShader : public Shader { void fragment_shader_from_glsl(MutableSpan sources) override; void compute_shader_from_glsl(MutableSpan sources) override; bool finalize(const shader::ShaderCreateInfo *info = nullptr) override; - void warm_cache(int limit) override{}; + void warm_cache(int /*limit*/) override{}; std::string resources_declare(const shader::ShaderCreateInfo &info) const override; std::string vertex_interface_declare(const shader::ShaderCreateInfo &info) const override; diff --git a/source/blender/nodes/intern/geometry_nodes_log.cc b/source/blender/nodes/intern/geometry_nodes_log.cc index a57bfad7a79a..c1d8a8f81b31 100644 --- a/source/blender/nodes/intern/geometry_nodes_log.cc +++ b/source/blender/nodes/intern/geometry_nodes_log.cc @@ -330,7 +330,7 @@ void GeoTreeLog::ensure_used_named_attributes() GeoTreeLog &child_log = modifier_log_->get_tree_log(child_hash); child_log.ensure_used_named_attributes(); if (const std::optional &group_node_id = child_log.tree_loggers_[0]->group_node_id) { - for (const auto &item : child_log.used_named_attributes.items()) { + for (const auto item : child_log.used_named_attributes.items()) { add_attribute(*group_node_id, item.key, item.value); } } -- 2.30.2 From df58ee679fd0b03a23b6e99f44e603f28c2e7a1c Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Wed, 15 Feb 2023 04:34:53 +0100 Subject: [PATCH 121/182] Mesh: Set active attribute values edit mode operator This patch adds a simple operator to set values of the active attribute for the selected element. The aim is to give simple control over attribute values in edit mode rather than to provide the fastest workflow for most cases. Eventually this operator might be less important compared to more advanced attribute editing tools, but for now, exposing a little bit of functionality is low hanging fruit and will help to see the possibilities. The implementation mostly consists of boilerplate to register the necessary property types for the operator and draw their UI. Beyond that, we just loop over selected elements and set a value. Pull Request #104426 --- release/scripts/startup/bl_ui/space_view3d.py | 1 + source/blender/editors/mesh/CMakeLists.txt | 2 + .../editors/mesh/editmesh_attribute.cc | 393 ++++++++++++++++++ source/blender/editors/mesh/mesh_intern.h | 4 + source/blender/editors/mesh/mesh_ops.c | 2 + 5 files changed, 402 insertions(+) create mode 100644 source/blender/editors/mesh/editmesh_attribute.cc diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 9032fb6b4a9a..9903ebc085b2 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -3869,6 +3869,7 @@ class VIEW3D_MT_edit_mesh(Menu): layout.menu("VIEW3D_MT_edit_mesh_normals") layout.menu("VIEW3D_MT_edit_mesh_shading") layout.menu("VIEW3D_MT_edit_mesh_weights") + layout.operator("mesh.attribute_set") layout.operator_menu_enum("mesh.sort_elements", "type", text="Sort Elements...") layout.separator() diff --git a/source/blender/editors/mesh/CMakeLists.txt b/source/blender/editors/mesh/CMakeLists.txt index a0769fbaa5f4..db25aeea2895 100644 --- a/source/blender/editors/mesh/CMakeLists.txt +++ b/source/blender/editors/mesh/CMakeLists.txt @@ -12,6 +12,7 @@ set(INC ../../draw ../../geometry ../../gpu + ../../functions ../../imbuf ../../makesdna ../../makesrna @@ -27,6 +28,7 @@ set(SRC editface.cc editmesh_add.c editmesh_add_gizmo.c + editmesh_attribute.cc editmesh_automerge.c editmesh_bevel.c editmesh_bisect.c diff --git a/source/blender/editors/mesh/editmesh_attribute.cc b/source/blender/editors/mesh/editmesh_attribute.cc new file mode 100644 index 000000000000..8594f3ebc1c7 --- /dev/null +++ b/source/blender/editors/mesh/editmesh_attribute.cc @@ -0,0 +1,393 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +/** \file + * \ingroup edmesh + */ + +#include "BLI_color.hh" +#include "BLI_generic_pointer.hh" + +#include "BKE_attribute.h" +#include "BKE_context.h" +#include "BKE_editmesh.h" +#include "BKE_layer.h" +#include "BKE_mesh.h" +#include "BKE_report.h" +#include "BKE_type_conversions.hh" + +#include "WM_api.h" +#include "WM_types.h" + +#include "RNA_access.h" +#include "RNA_define.h" +#include "RNA_enum_types.h" + +#include "ED_mesh.h" +#include "ED_object.h" +#include "ED_screen.h" +#include "ED_transform.h" +#include "ED_view3d.h" + +#include "BLT_translation.h" + +#include "DNA_object_types.h" + +#include "UI_interface.h" +#include "UI_resources.h" + +#include "bmesh_tools.h" + +#include "DEG_depsgraph.h" +#include "DEG_depsgraph_query.h" + +#include "mesh_intern.h" + +/* -------------------------------------------------------------------- */ +/** \name Delete Operator + * \{ */ + +namespace blender::ed::mesh { + +static char domain_to_htype(const eAttrDomain domain) +{ + switch (domain) { + case ATTR_DOMAIN_POINT: + return BM_VERT; + case ATTR_DOMAIN_EDGE: + return BM_EDGE; + case ATTR_DOMAIN_FACE: + return BM_FACE; + case ATTR_DOMAIN_CORNER: + return BM_LOOP; + default: + BLI_assert_unreachable(); + return BM_VERT; + } +} + +static bool mesh_active_attribute_poll(bContext *C) +{ + if (!ED_operator_editmesh(C)) { + return false; + } + const Mesh *mesh = ED_mesh_context(C); + const CustomDataLayer *layer = BKE_id_attributes_active_get(&const_cast(mesh->id)); + if (!layer) { + CTX_wm_operator_poll_msg_set(C, "No active attribute"); + return false; + } + if (layer->type == CD_PROP_STRING) { + CTX_wm_operator_poll_msg_set(C, "Active string attribute not supported"); + return false; + } + return true; +} + +namespace set_attribute { + +static StringRefNull rna_property_name_for_type(const eCustomDataType type) +{ + switch (type) { + case CD_PROP_FLOAT: + return "value_float"; + case CD_PROP_FLOAT2: + return "value_float_vector_2d"; + case CD_PROP_FLOAT3: + return "value_float_vector_3d"; + case CD_PROP_COLOR: + case CD_PROP_BYTE_COLOR: + return "value_color"; + case CD_PROP_BOOL: + return "value_bool"; + case CD_PROP_INT8: + case CD_PROP_INT32: + return "value_int"; + default: + BLI_assert_unreachable(); + return ""; + } +} + +static void bmesh_vert_edge_face_layer_selected_values_set(BMesh &bm, + const BMIterType iter_type, + const GPointer value, + const int offset) +{ + const CPPType &type = *value.type(); + BMIter iter; + BMElem *elem; + BM_ITER_MESH (elem, &iter, &bm, iter_type) { + if (BM_elem_flag_test(elem, BM_ELEM_SELECT)) { + type.copy_assign(value.get(), POINTER_OFFSET(elem->head.data, offset)); + } + } +} + +/** + * For face select mode, set face corner values of any selected face. For edge and vertex + * select mode, set face corner values of loops connected to selected vertices. + */ +static void bmesh_loop_layer_selected_values_set(BMEditMesh &em, + const GPointer value, + const int offset) +{ + /* In the separate select modes we may set the same loop values more than once. + * This is okay because we're always setting the same value. */ + BMesh &bm = *em.bm; + const CPPType &type = *value.type(); + if (em.selectmode & SCE_SELECT_FACE) { + BMIter face_iter; + BMFace *face; + BM_ITER_MESH (face, &face_iter, &bm, BM_FACES_OF_MESH) { + if (BM_elem_flag_test(face, BM_ELEM_SELECT)) { + BMIter loop_iter; + BMLoop *loop; + BM_ITER_ELEM (loop, &loop_iter, face, BM_LOOPS_OF_FACE) { + type.copy_assign(value.get(), POINTER_OFFSET(loop->head.data, offset)); + } + } + } + } + if (em.selectmode & (SCE_SELECT_VERTEX | SCE_SELECT_EDGE)) { + BMIter vert_iter; + BMVert *vert; + BM_ITER_MESH (vert, &vert_iter, &bm, BM_VERTS_OF_MESH) { + if (BM_elem_flag_test(vert, BM_ELEM_SELECT)) { + BMIter loop_iter; + BMLoop *loop; + BM_ITER_ELEM (loop, &loop_iter, vert, BM_LOOPS_OF_VERT) { + type.copy_assign(value.get(), POINTER_OFFSET(loop->head.data, offset)); + } + } + } + } +} + +static int mesh_set_attribute_exec(bContext *C, wmOperator *op) +{ + const Scene *scene = CTX_data_scene(C); + ViewLayer *view_layer = CTX_data_view_layer(C); + + uint objects_len = 0; + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data( + scene, view_layer, CTX_wm_view3d(C), &objects_len); + + Mesh *mesh = ED_mesh_context(C); + CustomDataLayer *active_attribute = BKE_id_attributes_active_get(&mesh->id); + const eCustomDataType active_type = eCustomDataType(active_attribute->type); + const CPPType &type = *bke::custom_data_type_to_cpp_type(active_type); + + BUFFER_FOR_CPP_TYPE_VALUE(type, buffer); + BLI_SCOPED_DEFER([&]() { type.destruct(buffer); }); + + const StringRefNull prop_name = rna_property_name_for_type(active_type); + switch (active_type) { + case CD_PROP_FLOAT: + *static_cast(buffer) = RNA_float_get(op->ptr, prop_name.c_str()); + break; + case CD_PROP_FLOAT2: + RNA_float_get_array(op->ptr, prop_name.c_str(), static_cast(buffer)); + break; + case CD_PROP_FLOAT3: + RNA_float_get_array(op->ptr, prop_name.c_str(), static_cast(buffer)); + break; + case CD_PROP_COLOR: + RNA_float_get_array(op->ptr, prop_name.c_str(), static_cast(buffer)); + break; + case CD_PROP_BYTE_COLOR: + ColorGeometry4f value; + RNA_float_get_array(op->ptr, prop_name.c_str(), value); + *static_cast(buffer) = value.encode(); + break; + case CD_PROP_BOOL: + *static_cast(buffer) = RNA_boolean_get(op->ptr, prop_name.c_str()); + break; + case CD_PROP_INT8: + *static_cast(buffer) = RNA_int_get(op->ptr, prop_name.c_str()); + break; + case CD_PROP_INT32: + *static_cast(buffer) = RNA_int_get(op->ptr, prop_name.c_str()); + break; + default: + BLI_assert_unreachable(); + } + const GPointer value(type, buffer); + const bke::DataTypeConversions &conversions = bke::get_implicit_type_conversions(); + + bool changed = false; + for (const int i : IndexRange(objects_len)) { + Object *object = objects[i]; + Mesh *mesh = static_cast(object->data); + BMEditMesh *em = BKE_editmesh_from_object(object); + BMesh *bm = em->bm; + + CustomDataLayer *layer = BKE_id_attributes_active_get(&mesh->id); + if (!layer) { + continue; + } + /* Use implicit conversions to try to handle the case where the active attribute has a + * different type on multiple objects. */ + const eCustomDataType dst_data_type = eCustomDataType(active_attribute->type); + const CPPType &dst_type = *bke::custom_data_type_to_cpp_type(dst_data_type); + if (&type != &dst_type && !conversions.is_convertible(type, dst_type)) { + continue; + } + BUFFER_FOR_CPP_TYPE_VALUE(dst_type, dst_buffer); + BLI_SCOPED_DEFER([&]() { dst_type.destruct(dst_buffer); }); + conversions.convert_to_uninitialized(type, dst_type, value.get(), dst_buffer); + const GPointer dst_value(dst_type, dst_buffer); + switch (BKE_id_attribute_domain(&mesh->id, layer)) { + case ATTR_DOMAIN_POINT: + bmesh_vert_edge_face_layer_selected_values_set( + *bm, BM_VERTS_OF_MESH, dst_value, layer->offset); + break; + case ATTR_DOMAIN_EDGE: + bmesh_vert_edge_face_layer_selected_values_set( + *bm, BM_EDGES_OF_MESH, dst_value, layer->offset); + break; + case ATTR_DOMAIN_FACE: + bmesh_vert_edge_face_layer_selected_values_set( + *bm, BM_FACES_OF_MESH, dst_value, layer->offset); + break; + case ATTR_DOMAIN_CORNER: + bmesh_loop_layer_selected_values_set(*em, dst_value, layer->offset); + break; + default: + BLI_assert_unreachable(); + break; + } + + changed = true; + EDBMUpdate_Params update{}; + update.calc_looptri = false; + update.calc_normals = false; + update.is_destructive = false; + EDBM_update(mesh, &update); + } + + MEM_freeN(objects); + + return changed ? OPERATOR_FINISHED : OPERATOR_CANCELLED; +} + +static int mesh_set_attribute_invoke(bContext *C, wmOperator *op, const wmEvent *event) +{ + Mesh *mesh = ED_mesh_context(C); + BMesh *bm = mesh->edit_mesh->bm; + + const CustomDataLayer *layer = BKE_id_attributes_active_get(&mesh->id); + const eCustomDataType data_type = eCustomDataType(layer->type); + const eAttrDomain domain = BKE_id_attribute_domain(&mesh->id, layer); + const BMElem *active_elem = BM_mesh_active_elem_get(bm); + if (!active_elem) { + return WM_operator_props_popup(C, op, event); + } + + /* Only support filling the active data when the active selection mode matches the active + * attribute domain. NOTE: This doesn't work well for corner domain attributes. */ + if (active_elem->head.htype != domain_to_htype(domain)) { + return WM_operator_props_popup(C, op, event); + } + + const StringRefNull prop_name = rna_property_name_for_type(data_type); + const CPPType &type = *bke::custom_data_type_to_cpp_type(data_type); + const GPointer active_value(type, POINTER_OFFSET(active_elem->head.data, layer->offset)); + + PropertyRNA *prop = RNA_struct_find_property(op->ptr, prop_name.c_str()); + if (!RNA_property_is_set(op->ptr, prop)) { + switch (data_type) { + case CD_PROP_FLOAT: + RNA_property_float_set(op->ptr, prop, *active_value.get()); + break; + case CD_PROP_FLOAT2: + RNA_property_float_set_array(op->ptr, prop, *active_value.get()); + break; + case CD_PROP_FLOAT3: + RNA_property_float_set_array(op->ptr, prop, *active_value.get()); + break; + case CD_PROP_BYTE_COLOR: + RNA_property_float_set_array(op->ptr, prop, active_value.get()->decode()); + break; + case CD_PROP_COLOR: + RNA_property_float_set_array(op->ptr, prop, *active_value.get()); + break; + case CD_PROP_BOOL: + RNA_property_boolean_set(op->ptr, prop, *active_value.get()); + break; + case CD_PROP_INT8: + RNA_property_int_set(op->ptr, prop, *active_value.get()); + break; + case CD_PROP_INT32: + RNA_property_int_set(op->ptr, prop, *active_value.get()); + break; + default: + BLI_assert_unreachable(); + } + } + + return WM_operator_props_popup(C, op, event); +} + +static void mesh_set_attribute_ui(bContext *C, wmOperator *op) +{ + uiLayout *layout = uiLayoutColumn(op->layout, true); + uiLayoutSetPropSep(layout, true); + uiLayoutSetPropDecorate(layout, false); + + Mesh *mesh = ED_mesh_context(C); + CustomDataLayer *active_attribute = BKE_id_attributes_active_get(&mesh->id); + const eCustomDataType active_type = eCustomDataType(active_attribute->type); + const StringRefNull prop_name = rna_property_name_for_type(active_type); + const char *name = active_attribute->name; + uiItemR(layout, op->ptr, prop_name.c_str(), 0, name, ICON_NONE); +} + +} // namespace set_attribute + +} // namespace blender::ed::mesh + +void MESH_OT_attribute_set(wmOperatorType *ot) +{ + using namespace blender::ed::mesh; + using namespace blender::ed::mesh::set_attribute; + ot->name = "Set Attribute"; + ot->description = "Set values of the active attribute for selected elements"; + ot->idname = "MESH_OT_attribute_set"; + + ot->exec = mesh_set_attribute_exec; + ot->invoke = mesh_set_attribute_invoke; + ot->poll = mesh_active_attribute_poll; + ot->ui = mesh_set_attribute_ui; + + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + static blender::float4 color_default(1); + + RNA_def_float(ot->srna, "value_float", 0.0f, -FLT_MAX, FLT_MAX, "Value", "", -FLT_MAX, FLT_MAX); + RNA_def_float_array(ot->srna, + "value_float_vector_2d", + 2, + nullptr, + -FLT_MAX, + FLT_MAX, + "Value", + "", + -FLT_MAX, + FLT_MAX); + RNA_def_float_array(ot->srna, + "value_float_vector_3d", + 3, + nullptr, + -FLT_MAX, + FLT_MAX, + "Value", + "", + -FLT_MAX, + FLT_MAX); + RNA_def_int(ot->srna, "value_int", 0, INT_MIN, INT_MAX, "Value", "", INT_MIN, INT_MAX); + RNA_def_float_color( + ot->srna, "value_color", 4, color_default, -FLT_MAX, FLT_MAX, "Value", "", 0.0f, 1.0f); + RNA_def_boolean(ot->srna, "value_bool", false, "Value", ""); +} + +/** \} */ diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h index 856918fa3652..ae22458a2980 100644 --- a/source/blender/editors/mesh/mesh_intern.h +++ b/source/blender/editors/mesh/mesh_intern.h @@ -120,6 +120,10 @@ void MESH_OT_primitive_ico_sphere_add(struct wmOperatorType *ot); void MESH_OT_primitive_cube_add_gizmo(struct wmOperatorType *ot); +/* *** editmesh_attribute.cc *** */ + +void MESH_OT_attribute_set(struct wmOperatorType *ot); + /* *** editmesh_bevel.c *** */ void MESH_OT_bevel(struct wmOperatorType *ot); diff --git a/source/blender/editors/mesh/mesh_ops.c b/source/blender/editors/mesh/mesh_ops.c index b9afeae275b4..226c35a0637f 100644 --- a/source/blender/editors/mesh/mesh_ops.c +++ b/source/blender/editors/mesh/mesh_ops.c @@ -54,6 +54,8 @@ void ED_operatortypes_mesh(void) WM_operatortype_append(MESH_OT_primitive_cube_add_gizmo); + WM_operatortype_append(MESH_OT_attribute_set); + WM_operatortype_append(MESH_OT_duplicate); WM_operatortype_append(MESH_OT_remove_doubles); WM_operatortype_append(MESH_OT_spin); -- 2.30.2 From eaccf5d7b15864c644221273418d419e45588741 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 15 Feb 2023 16:15:59 +1100 Subject: [PATCH 122/182] Cleanup: rename Byte to Bytes in Python string utilities These functions operate on byte arrays, not a single byte, match naming for CPython's PyBytes_AS_STRING. --- intern/cycles/blender/python.cpp | 6 +++--- source/blender/python/generic/idprop_py_api.c | 6 +++--- source/blender/python/generic/imbuf_py_api.c | 2 +- source/blender/python/generic/py_capi_utils.c | 12 ++++++------ source/blender/python/generic/py_capi_utils.h | 8 ++++---- source/blender/python/intern/bpy.c | 12 ++++++------ source/blender/python/intern/bpy_app.c | 8 ++++---- source/blender/python/intern/bpy_interface_run.c | 2 +- source/blender/python/intern/bpy_rna.c | 6 +++--- source/blender/python/intern/bpy_rna_types_capi.c | 4 ++-- 10 files changed, 33 insertions(+), 33 deletions(-) diff --git a/intern/cycles/blender/python.cpp b/intern/cycles/blender/python.cpp index ebbdc8abf7f1..6ac680350331 100644 --- a/intern/cycles/blender/python.cpp +++ b/intern/cycles/blender/python.cpp @@ -94,7 +94,7 @@ void python_thread_state_restore(void **python_thread_state) *python_thread_state = NULL; } -static const char *PyC_UnicodeAsByte(PyObject *py_str, PyObject **coerce) +static const char *PyC_UnicodeAsBytes(PyObject *py_str, PyObject **coerce) { const char *result = PyUnicode_AsUTF8(py_str); if (result) { @@ -131,8 +131,8 @@ static PyObject *init_func(PyObject * /*self*/, PyObject *args) } PyObject *path_coerce = nullptr, *user_path_coerce = nullptr; - path_init(PyC_UnicodeAsByte(path, &path_coerce), - PyC_UnicodeAsByte(user_path, &user_path_coerce)); + path_init(PyC_UnicodeAsBytes(path, &path_coerce), + PyC_UnicodeAsBytes(user_path, &user_path_coerce)); Py_XDECREF(path_coerce); Py_XDECREF(user_path_coerce); diff --git a/source/blender/python/generic/idprop_py_api.c b/source/blender/python/generic/idprop_py_api.c index 615f05adc1be..de18ef5f94b5 100644 --- a/source/blender/python/generic/idprop_py_api.c +++ b/source/blender/python/generic/idprop_py_api.c @@ -54,7 +54,7 @@ static PyObject *idprop_py_from_idp_string(const IDProperty *prop) } #ifdef USE_STRING_COERCE - return PyC_UnicodeFromByteAndSize(IDP_Array(prop), prop->len - 1); + return PyC_UnicodeFromBytesAndSize(IDP_Array(prop), prop->len - 1); #else return PyUnicode_FromStringAndSize(IDP_String(prop), prop->len - 1); #endif @@ -192,7 +192,7 @@ static int BPy_IDGroup_SetData(BPy_IDProperty *self, IDProperty *prop, PyObject int alloc_len; PyObject *value_coerce = NULL; - st = (char *)PyC_UnicodeAsByte(value, &value_coerce); + st = (char *)PyC_UnicodeAsBytes(value, &value_coerce); alloc_len = strlen(st) + 1; st = PyUnicode_AsUTF8(value); @@ -433,7 +433,7 @@ static IDProperty *idp_from_PyUnicode(const char *name, PyObject *ob) #ifdef USE_STRING_COERCE Py_ssize_t value_size; PyObject *value_coerce = NULL; - val.string.str = PyC_UnicodeAsByteAndSize(ob, &value_size, &value_coerce); + val.string.str = PyC_UnicodeAsBytesAndSize(ob, &value_size, &value_coerce); val.string.len = (int)value_size + 1; val.string.subtype = IDP_STRING_SUB_UTF8; prop = IDP_New(IDP_STRING, &val, name); diff --git a/source/blender/python/generic/imbuf_py_api.c b/source/blender/python/generic/imbuf_py_api.c index 77d450d496e8..f17a9c07f3c7 100644 --- a/source/blender/python/generic/imbuf_py_api.c +++ b/source/blender/python/generic/imbuf_py_api.c @@ -261,7 +261,7 @@ static PyObject *py_imbuf_filepath_get(Py_ImBuf *self, void *UNUSED(closure)) { PY_IMBUF_CHECK_OBJ(self); ImBuf *ibuf = self->ibuf; - return PyC_UnicodeFromByte(ibuf->name); + return PyC_UnicodeFromBytes(ibuf->name); } static int py_imbuf_filepath_set(Py_ImBuf *self, PyObject *value, void *UNUSED(closure)) diff --git a/source/blender/python/generic/py_capi_utils.c b/source/blender/python/generic/py_capi_utils.c index fc0065912b6f..be9d36d0b0c1 100644 --- a/source/blender/python/generic/py_capi_utils.c +++ b/source/blender/python/generic/py_capi_utils.c @@ -1012,7 +1012,7 @@ PyObject *PyC_ExceptionBuffer_Simple(void) * In some cases we need to coerce strings, avoid doing this inline. * \{ */ -const char *PyC_UnicodeAsByteAndSize(PyObject *py_str, Py_ssize_t *size, PyObject **coerce) +const char *PyC_UnicodeAsBytesAndSize(PyObject *py_str, Py_ssize_t *size, PyObject **coerce) { const char *result; @@ -1039,7 +1039,7 @@ const char *PyC_UnicodeAsByteAndSize(PyObject *py_str, Py_ssize_t *size, PyObjec return NULL; } -const char *PyC_UnicodeAsByte(PyObject *py_str, PyObject **coerce) +const char *PyC_UnicodeAsBytes(PyObject *py_str, PyObject **coerce) { const char *result; @@ -1064,7 +1064,7 @@ const char *PyC_UnicodeAsByte(PyObject *py_str, PyObject **coerce) return NULL; } -PyObject *PyC_UnicodeFromByteAndSize(const char *str, Py_ssize_t size) +PyObject *PyC_UnicodeFromBytesAndSize(const char *str, Py_ssize_t size) { PyObject *result = PyUnicode_FromStringAndSize(str, size); if (result) { @@ -1079,9 +1079,9 @@ PyObject *PyC_UnicodeFromByteAndSize(const char *str, Py_ssize_t size) return result; } -PyObject *PyC_UnicodeFromByte(const char *str) +PyObject *PyC_UnicodeFromBytes(const char *str) { - return PyC_UnicodeFromByteAndSize(str, strlen(str)); + return PyC_UnicodeFromBytesAndSize(str, strlen(str)); } /** \} */ @@ -1101,7 +1101,7 @@ PyObject *PyC_DefaultNameSpace(const char *filename) if (filename) { /* __file__ mainly for nice UI'ness * NOTE: this won't map to a real file when executing text-blocks and buttons. */ - PyModule_AddObject(mod_main, "__file__", PyC_UnicodeFromByte(filename)); + PyModule_AddObject(mod_main, "__file__", PyC_UnicodeFromBytes(filename)); } PyModule_AddObject(mod_main, "__builtins__", builtins); Py_INCREF(builtins); /* AddObject steals a reference */ diff --git a/source/blender/python/generic/py_capi_utils.h b/source/blender/python/generic/py_capi_utils.h index 51e36892cbdd..dba7c24afdae 100644 --- a/source/blender/python/generic/py_capi_utils.h +++ b/source/blender/python/generic/py_capi_utils.h @@ -105,14 +105,14 @@ void PyC_Tuple_Fill(PyObject *tuple, PyObject *value); void PyC_List_Fill(PyObject *list, PyObject *value); /* follow http://www.python.org/dev/peps/pep-0383/ */ -PyObject *PyC_UnicodeFromByte(const char *str); -PyObject *PyC_UnicodeFromByteAndSize(const char *str, Py_ssize_t size); -const char *PyC_UnicodeAsByte(PyObject *py_str, PyObject **coerce); /* coerce must be NULL */ +PyObject *PyC_UnicodeFromBytes(const char *str); +PyObject *PyC_UnicodeFromBytesAndSize(const char *str, Py_ssize_t size); +const char *PyC_UnicodeAsBytes(PyObject *py_str, PyObject **coerce); /* coerce must be NULL */ /** * String conversion, escape non-unicode chars * \param coerce: must be set to NULL. */ -const char *PyC_UnicodeAsByteAndSize(PyObject *py_str, Py_ssize_t *size, PyObject **coerce); +const char *PyC_UnicodeAsBytesAndSize(PyObject *py_str, Py_ssize_t *size, PyObject **coerce); /** * Description: This function creates a new Python dictionary object. diff --git a/source/blender/python/intern/bpy.c b/source/blender/python/intern/bpy.c index 36d53d69effe..78729ff54d39 100644 --- a/source/blender/python/intern/bpy.c +++ b/source/blender/python/intern/bpy.c @@ -74,11 +74,11 @@ static PyObject *bpy_script_paths(PyObject *UNUSED(self)) const char *path; path = BKE_appdir_folder_id(BLENDER_SYSTEM_SCRIPTS, NULL); - item = PyC_UnicodeFromByte(path ? path : ""); + item = PyC_UnicodeFromBytes(path ? path : ""); BLI_assert(item != NULL); PyTuple_SET_ITEM(ret, 0, item); path = BKE_appdir_folder_id(BLENDER_USER_SCRIPTS, NULL); - item = PyC_UnicodeFromByte(path ? path : ""); + item = PyC_UnicodeFromBytes(path ? path : ""); BLI_assert(item != NULL); PyTuple_SET_ITEM(ret, 1, item); @@ -90,7 +90,7 @@ static bool bpy_blend_foreach_path_cb(BPathForeachPathData *bpath_data, const char *path_src) { PyObject *py_list = bpath_data->user_data; - PyList_APPEND(py_list, PyC_UnicodeFromByte(path_src)); + PyList_APPEND(py_list, PyC_UnicodeFromBytes(path_src)); return false; /* Never edits the path. */ } @@ -238,7 +238,7 @@ static PyObject *bpy_user_resource(PyObject *UNUSED(self), PyObject *args, PyObj * but best leave it up to the script author to create */ path = BKE_appdir_folder_id_user_notest(type.value_found, subdir); - return PyC_UnicodeFromByte(path ? path : ""); + return PyC_UnicodeFromBytes(path ? path : ""); } PyDoc_STRVAR(bpy_system_resource_doc, @@ -279,7 +279,7 @@ static PyObject *bpy_system_resource(PyObject *UNUSED(self), PyObject *args, PyO path = BKE_appdir_folder_id(type.value_found, subdir); - return PyC_UnicodeFromByte(path ? path : ""); + return PyC_UnicodeFromBytes(path ? path : ""); } PyDoc_STRVAR( @@ -326,7 +326,7 @@ static PyObject *bpy_resource_path(PyObject *UNUSED(self), PyObject *args, PyObj path = BKE_appdir_resource_path_id_with_version(type.value_found, false, (major * 100) + minor); - return PyC_UnicodeFromByte(path ? path : ""); + return PyC_UnicodeFromBytes(path ? path : ""); } /* This is only exposed for tests, see: `tests/python/bl_pyapi_bpy_driver_secure_eval.py`. */ diff --git a/source/blender/python/intern/bpy_app.c b/source/blender/python/intern/bpy_app.c index ccff3d5a682d..434151e4bf21 100644 --- a/source/blender/python/intern/bpy_app.c +++ b/source/blender/python/intern/bpy_app.c @@ -312,7 +312,7 @@ static int bpy_app_debug_value_set(PyObject *UNUSED(self), PyObject *value, void PyDoc_STRVAR(bpy_app_tempdir_doc, "String, the temp directory used by blender (read-only)"); static PyObject *bpy_app_tempdir_get(PyObject *UNUSED(self), void *UNUSED(closure)) { - return PyC_UnicodeFromByte(BKE_tempdir_session()); + return PyC_UnicodeFromBytes(BKE_tempdir_session()); } PyDoc_STRVAR( @@ -339,7 +339,7 @@ static PyObject *bpy_app_preview_render_size_get(PyObject *UNUSED(self), void *c static PyObject *bpy_app_autoexec_fail_message_get(PyObject *UNUSED(self), void *UNUSED(closure)) { - return PyC_UnicodeFromByte(G.autoexec_fail); + return PyC_UnicodeFromBytes(G.autoexec_fail); } PyDoc_STRVAR(bpy_app_binary_path_doc, @@ -348,7 +348,7 @@ PyDoc_STRVAR(bpy_app_binary_path_doc, "an empty string which script authors may point to a Blender binary."); static PyObject *bpy_app_binary_path_get(PyObject *UNUSED(self), void *UNUSED(closure)) { - return PyC_UnicodeFromByte(BKE_appdir_program_path()); + return PyC_UnicodeFromBytes(BKE_appdir_program_path()); } static int bpy_app_binary_path_set(PyObject *UNUSED(self), PyObject *value, void *UNUSED(closure)) @@ -359,7 +359,7 @@ static int bpy_app_binary_path_set(PyObject *UNUSED(self), PyObject *value, void return -1; #endif PyObject *value_coerce = NULL; - const char *filepath = PyC_UnicodeAsByte(value, &value_coerce); + const char *filepath = PyC_UnicodeAsBytes(value, &value_coerce); if (filepath == NULL) { PyErr_Format(PyExc_ValueError, "expected a string or bytes, got %s", Py_TYPE(value)->tp_name); return -1; diff --git a/source/blender/python/intern/bpy_interface_run.c b/source/blender/python/intern/bpy_interface_run.c index 0ed2fc0b63c4..2d50980d6f0c 100644 --- a/source/blender/python/intern/bpy_interface_run.c +++ b/source/blender/python/intern/bpy_interface_run.c @@ -118,7 +118,7 @@ static bool python_script_exec(bContext *C, char *buf; PyObject *filepath_dummy_py; - filepath_dummy_py = PyC_UnicodeFromByte(filepath_dummy); + filepath_dummy_py = PyC_UnicodeFromBytes(filepath_dummy); size_t buf_len_dummy; buf = txt_to_buf(text, &buf_len_dummy); diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 1c21d00ab3bd..821846ddb4f8 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -1403,7 +1403,7 @@ PyObject *pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop) ret = PyBytes_FromStringAndSize(buf, buf_len); } else if (ELEM(subtype, PROP_FILEPATH, PROP_DIRPATH, PROP_FILENAME)) { - ret = PyC_UnicodeFromByteAndSize(buf, buf_len); + ret = PyC_UnicodeFromBytesAndSize(buf, buf_len); } else { ret = PyUnicode_FromStringAndSize(buf, buf_len); @@ -1712,7 +1712,7 @@ static int pyrna_py_to_prop( PyObject *value_coerce = NULL; if (ELEM(subtype, PROP_FILEPATH, PROP_DIRPATH, PROP_FILENAME)) { /* TODO: get size. */ - param = PyC_UnicodeAsByte(value, &value_coerce); + param = PyC_UnicodeAsBytes(value, &value_coerce); } else { param = PyUnicode_AsUTF8(value); @@ -6057,7 +6057,7 @@ static PyObject *pyrna_param_to_py(PointerRNA *ptr, PropertyRNA *prop, void *dat ret = PyBytes_FromStringAndSize(data_ch, data_ch_len); } else if (ELEM(subtype, PROP_FILEPATH, PROP_DIRPATH, PROP_FILENAME)) { - ret = PyC_UnicodeFromByteAndSize(data_ch, data_ch_len); + ret = PyC_UnicodeFromBytesAndSize(data_ch, data_ch_len); } else { ret = PyUnicode_FromStringAndSize(data_ch, data_ch_len); diff --git a/source/blender/python/intern/bpy_rna_types_capi.c b/source/blender/python/intern/bpy_rna_types_capi.c index 45642cb1f1c5..dbcd35abff36 100644 --- a/source/blender/python/intern/bpy_rna_types_capi.c +++ b/source/blender/python/intern/bpy_rna_types_capi.c @@ -112,7 +112,7 @@ static PyObject *pyrna_WindowManager_clipboard_get(PyObject *UNUSED(self), void { int text_len = 0; char *text = WM_clipboard_text_get(false, &text_len); - PyObject *result = PyC_UnicodeFromByteAndSize(text ? text : "", text_len); + PyObject *result = PyC_UnicodeFromBytesAndSize(text ? text : "", text_len); if (text != NULL) { MEM_freeN(text); } @@ -124,7 +124,7 @@ static int pyrna_WindowManager_clipboard_set(PyObject *UNUSED(self), void *UNUSED(flag)) { PyObject *value_coerce = NULL; - const char *text = PyC_UnicodeAsByte(value, &value_coerce); + const char *text = PyC_UnicodeAsBytes(value, &value_coerce); if (text == NULL) { return -1; } -- 2.30.2 From fbbe2b4eaaf91e6e8991765ee9ce4aa77cfd79d3 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 15 Feb 2023 16:17:52 +1100 Subject: [PATCH 123/182] Cleanup: extract the check to save a blend file into a function Part of D11422 by @filedescriptor, makes it convenient to run a funciton when the file cannot be saved. --- .../blender/windowmanager/intern/wm_files.cc | 62 +++++++++++-------- 1 file changed, 37 insertions(+), 25 deletions(-) diff --git a/source/blender/windowmanager/intern/wm_files.cc b/source/blender/windowmanager/intern/wm_files.cc index c4903f3ff233..3de5684e085b 100644 --- a/source/blender/windowmanager/intern/wm_files.cc +++ b/source/blender/windowmanager/intern/wm_files.cc @@ -1760,6 +1760,41 @@ bool write_crash_blend(void) return 0; } +/** + * Helper to check if file `filepath` can be written. + * \return true if it can, otherwise report an error and return false. + */ +static bool wm_file_write_check_with_report_on_failure(Main *bmain, + const char *filepath, + ReportList *reports) +{ + const int filepath_len = strlen(filepath); + if (filepath_len == 0) { + BKE_report(reports, RPT_ERROR, "Path is empty, cannot save"); + return false; + } + + if (filepath_len >= FILE_MAX) { + BKE_report(reports, RPT_ERROR, "Path too long, cannot save"); + return false; + } + + /* Check if file write permission is ok */ + if (BLI_exists(filepath) && !BLI_file_is_writable(filepath)) { + BKE_reportf(reports, RPT_ERROR, "Cannot save blend file, path '%s' is not writable", filepath); + return false; + } + + LISTBASE_FOREACH (Library *, li, &bmain->libraries) { + if (BLI_path_cmp(li->filepath_abs, filepath) == 0) { + BKE_reportf(reports, RPT_ERROR, "Cannot overwrite used library '%.240s'", filepath); + return false; + } + } + + return true; +} + /** * \see #wm_homefile_write_exec wraps #BLO_write_file in a similar way. */ @@ -1771,39 +1806,16 @@ static bool wm_file_write(bContext *C, ReportList *reports) { Main *bmain = CTX_data_main(C); - int len; int ok = false; BlendThumbnail *thumb = nullptr, *main_thumb = nullptr; ImBuf *ibuf_thumb = nullptr; - len = strlen(filepath); - - if (len == 0) { - BKE_report(reports, RPT_ERROR, "Path is empty, cannot save"); - return ok; - } - - if (len >= FILE_MAX) { - BKE_report(reports, RPT_ERROR, "Path too long, cannot save"); - return ok; - } - - /* Check if file write permission is ok */ - if (BLI_exists(filepath) && !BLI_file_is_writable(filepath)) { - BKE_reportf(reports, RPT_ERROR, "Cannot save blend file, path '%s' is not writable", filepath); - return ok; - } - /* NOTE: used to replace the file extension (to ensure '.blend'), * no need to now because the operator ensures, * its handy for scripts to save to a predefined name without blender editing it */ - /* send the OnSave event */ - LISTBASE_FOREACH (Library *, li, &bmain->libraries) { - if (BLI_path_cmp(li->filepath_abs, filepath) == 0) { - BKE_reportf(reports, RPT_ERROR, "Cannot overwrite used library '%.240s'", filepath); - return ok; - } + if (!wm_file_write_check_with_report_on_failure(bmain, filepath, reports)) { + return ok; } /* Call pre-save callbacks before writing preview, -- 2.30.2 From 33fd7c1ce8b9319af4f6464a784593a0f0c98c62 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Wed, 15 Feb 2023 10:42:30 +0100 Subject: [PATCH 124/182] Curves: add Curve Parameter Falloff to comb brush This adds a new `Curve Falloff` popover to the comb brush tool settings. The curve control allows changing the brush weight along the curve to e.g. affect the tip more than the root. This is a relative way to get something like stiffness for short hair. This functionality could potentially be added to some other brushes, but the comb brush is the most important one, so that is added first. I did add the buttons add the buttons to choose a curve map preset. However, I did not add the preset dropdown, because that just adds some unnecessary complexity in the code now and is redundant. Pull Request #104589 --- release/scripts/startup/bl_ui/space_view3d.py | 26 ++++++++- source/blender/blenkernel/intern/brush.cc | 11 ++++ .../blenloader/intern/versioning_300.cc | 9 ++++ .../sculpt_paint/curves_sculpt_comb.cc | 49 ++++++++++++++++- .../sculpt_paint/curves_sculpt_intern.hh | 5 ++ .../editors/sculpt_paint/paint_intern.h | 1 + .../blender/editors/sculpt_paint/paint_ops.cc | 1 + .../editors/sculpt_paint/paint_utils.c | 54 +++++++++++++++---- source/blender/makesdna/DNA_brush_types.h | 3 +- source/blender/makesrna/intern/rna_brush.c | 6 +++ 10 files changed, 150 insertions(+), 15 deletions(-) diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 9903ebc085b2..5c294cee683f 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -522,7 +522,8 @@ class _draw_tool_settings_context_mode: if curves_tool == 'COMB': layout.prop(brush, "falloff_shape", expand=True) - layout.popover("VIEW3D_PT_tools_brush_falloff") + layout.popover("VIEW3D_PT_tools_brush_falloff", text="Brush Falloff") + layout.popover("VIEW3D_PT_curves_sculpt_parameter_falloff", text="Curve Falloff") elif curves_tool == 'ADD': layout.prop(brush, "falloff_shape", expand=True) layout.prop(brush.curves_sculpt_settings, "add_amount") @@ -7944,6 +7945,28 @@ class VIEW3D_PT_curves_sculpt_add_shape(Panel): col.prop(brush.curves_sculpt_settings, "points_per_curve", text="Points") +class VIEW3D_PT_curves_sculpt_parameter_falloff(Panel): + # Only for popover, these are dummy values. + bl_space_type = 'VIEW_3D' + bl_region_type = 'WINDOW' + bl_label = "Curves Sculpt Parameter Falloff" + + def draw(self, context): + layout = self.layout + + settings = UnifiedPaintPanel.paint_settings(context) + brush = settings.brush + + layout.template_curve_mapping(brush.curves_sculpt_settings, "curve_parameter_falloff") + row = layout.row(align=True) + row.operator("brush.sculpt_curves_falloff_preset", icon='SMOOTHCURVE', text="").shape = 'SMOOTH' + row.operator("brush.sculpt_curves_falloff_preset", icon='SPHERECURVE', text="").shape = 'ROUND' + row.operator("brush.sculpt_curves_falloff_preset", icon='ROOTCURVE', text="").shape = 'ROOT' + row.operator("brush.sculpt_curves_falloff_preset", icon='SHARPCURVE', text="").shape = 'SHARP' + row.operator("brush.sculpt_curves_falloff_preset", icon='LINCURVE', text="").shape = 'LINE' + row.operator("brush.sculpt_curves_falloff_preset", icon='NOCURVE', text="").shape = 'MAX' + + class VIEW3D_PT_curves_sculpt_grow_shrink_scaling(Panel): # Only for popover, these are dummy values. bl_space_type = 'VIEW_3D' @@ -8221,6 +8244,7 @@ classes = ( TOPBAR_PT_gpencil_vertexcolor, TOPBAR_PT_annotation_layers, VIEW3D_PT_curves_sculpt_add_shape, + VIEW3D_PT_curves_sculpt_parameter_falloff, VIEW3D_PT_curves_sculpt_grow_shrink_scaling, VIEW3D_PT_viewport_debug, ) diff --git a/source/blender/blenkernel/intern/brush.cc b/source/blender/blenkernel/intern/brush.cc index 8d5737e940d0..9a66b6b7d96a 100644 --- a/source/blender/blenkernel/intern/brush.cc +++ b/source/blender/blenkernel/intern/brush.cc @@ -100,6 +100,8 @@ static void brush_copy_data(Main * /*bmain*/, ID *id_dst, const ID *id_src, cons if (brush_src->curves_sculpt_settings != nullptr) { brush_dst->curves_sculpt_settings = MEM_cnew( __func__, *(brush_src->curves_sculpt_settings)); + brush_dst->curves_sculpt_settings->curve_parameter_falloff = BKE_curvemapping_copy( + brush_src->curves_sculpt_settings->curve_parameter_falloff); } /* enable fake user by default */ @@ -130,6 +132,7 @@ static void brush_free_data(ID *id) MEM_SAFE_FREE(brush->gpencil_settings); } if (brush->curves_sculpt_settings != nullptr) { + BKE_curvemapping_free(brush->curves_sculpt_settings->curve_parameter_falloff); MEM_freeN(brush->curves_sculpt_settings); } @@ -255,6 +258,7 @@ static void brush_blend_write(BlendWriter *writer, ID *id, const void *id_addres } if (brush->curves_sculpt_settings) { BLO_write_struct(writer, BrushCurvesSculptSettings, brush->curves_sculpt_settings); + BKE_curvemapping_blend_write(writer, brush->curves_sculpt_settings->curve_parameter_falloff); } if (brush->gradient) { BLO_write_struct(writer, ColorBand, brush->gradient); @@ -337,6 +341,12 @@ static void brush_blend_read_data(BlendDataReader *reader, ID *id) } BLO_read_data_address(reader, &brush->curves_sculpt_settings); + if (brush->curves_sculpt_settings) { + BLO_read_data_address(reader, &brush->curves_sculpt_settings->curve_parameter_falloff); + if (brush->curves_sculpt_settings->curve_parameter_falloff) { + BKE_curvemapping_blend_read(reader, brush->curves_sculpt_settings->curve_parameter_falloff); + } + } brush->preview = nullptr; brush->icon_imbuf = nullptr; @@ -1583,6 +1593,7 @@ void BKE_brush_init_curves_sculpt_settings(Brush *brush) settings->minimum_length = 0.01f; settings->curve_length = 0.3f; settings->density_add_attempts = 100; + settings->curve_parameter_falloff = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); } struct Brush *BKE_brush_first_search(struct Main *bmain, const eObjectMode ob_mode) diff --git a/source/blender/blenloader/intern/versioning_300.cc b/source/blender/blenloader/intern/versioning_300.cc index 3eb77f0b76d7..ca39543c8412 100644 --- a/source/blender/blenloader/intern/versioning_300.cc +++ b/source/blender/blenloader/intern/versioning_300.cc @@ -3952,6 +3952,15 @@ void blo_do_versions_300(FileData *fd, Library * /*lib*/, Main *bmain) } } + LISTBASE_FOREACH (Brush *, brush, &bmain->brushes) { + if (brush->ob_mode == OB_MODE_SCULPT_CURVES) { + if (brush->curves_sculpt_settings->curve_parameter_falloff == nullptr) { + brush->curves_sculpt_settings->curve_parameter_falloff = BKE_curvemapping_add( + 1, 0.0f, 0.0f, 1.0f, 1.0f); + } + } + } + /* Keep this block, even when empty. */ } } diff --git a/source/blender/editors/sculpt_paint/curves_sculpt_comb.cc b/source/blender/editors/sculpt_paint/curves_sculpt_comb.cc index 89a7d926fe95..79c175caf5f1 100644 --- a/source/blender/editors/sculpt_paint/curves_sculpt_comb.cc +++ b/source/blender/editors/sculpt_paint/curves_sculpt_comb.cc @@ -18,6 +18,7 @@ #include "BKE_attribute_math.hh" #include "BKE_brush.h" #include "BKE_bvhutils.h" +#include "BKE_colortools.h" #include "BKE_context.h" #include "BKE_crazyspace.hh" #include "BKE_curves.hh" @@ -69,6 +70,8 @@ class CombOperation : public CurvesSculptStrokeOperation { /** Solver for length and collision constraints. */ CurvesConstraintSolver constraint_solver_; + Array curve_lengths_; + friend struct CombOperationExecutor; public: @@ -146,6 +149,17 @@ struct CombOperationExecutor { } self_->constraint_solver_.initialize( *curves_orig_, curve_selection_, curves_id_orig_->flag & CV_SCULPT_COLLISION_ENABLED); + + self_->curve_lengths_.reinitialize(curves_orig_->curves_num()); + const Span segment_lengths = self_->constraint_solver_.segment_lengths(); + const OffsetIndices points_by_curve = curves_orig_->points_by_curve(); + threading::parallel_for(curve_selection_.index_range(), 512, [&](const IndexRange range) { + for (const int curve_i : curve_selection_.slice(range)) { + const IndexRange points = points_by_curve[curve_i]; + const Span lengths = segment_lengths.slice(points.drop_back(1)); + self_->curve_lengths_[curve_i] = std::accumulate(lengths.begin(), lengths.end(), 0.0f); + } + }); /* Combing does nothing when there is no mouse movement, so return directly. */ return; } @@ -204,11 +218,23 @@ struct CombOperationExecutor { const float brush_radius_re = brush_radius_base_re_ * brush_radius_factor_; const float brush_radius_sq_re = pow2f(brush_radius_re); + CurveMapping &curve_parameter_falloff_mapping = + *brush_->curves_sculpt_settings->curve_parameter_falloff; + BKE_curvemapping_init(&curve_parameter_falloff_mapping); + + const Span segment_lengths = self_->constraint_solver_.segment_lengths(); + threading::parallel_for(curve_selection_.index_range(), 256, [&](const IndexRange range) { for (const int curve_i : curve_selection_.slice(range)) { bool curve_changed = false; const IndexRange points = points_by_curve[curve_i]; + + const float total_length = self_->curve_lengths_[curve_i]; + const float total_length_inv = safe_divide(1.0f, total_length); + float current_length = 0.0f; for (const int point_i : points.drop_front(1)) { + current_length += segment_lengths[point_i - 1]; + const float3 old_pos_cu = deformation.positions[point_i]; const float3 old_symm_pos_cu = math::transform_point(brush_transform_inv, old_pos_cu); @@ -228,8 +254,12 @@ struct CombOperationExecutor { /* A falloff that is based on how far away the point is from the stroke. */ const float radius_falloff = BKE_brush_curve_strength( brush_, distance_to_brush_re, brush_radius_re); + const float curve_parameter = current_length * total_length_inv; + const float curve_falloff = BKE_curvemapping_evaluateF( + &curve_parameter_falloff_mapping, 0, curve_parameter); /* Combine the falloff and brush strength. */ - const float weight = brush_strength_ * radius_falloff * point_factors_[point_i]; + const float weight = brush_strength_ * curve_falloff * radius_falloff * + point_factors_[point_i]; /* Offset the old point position in screen space and transform it back into 3D space. */ @@ -304,15 +334,26 @@ struct CombOperationExecutor { const float brush_radius_sq_cu = pow2f(brush_radius_cu); const float3 brush_diff_cu = brush_end_cu - brush_start_cu; + CurveMapping &curve_parameter_falloff_mapping = + *brush_->curves_sculpt_settings->curve_parameter_falloff; + BKE_curvemapping_init(&curve_parameter_falloff_mapping); + const bke::crazyspace::GeometryDeformation deformation = bke::crazyspace::get_evaluated_curves_deformation(*ctx_.depsgraph, *curves_ob_orig_); const OffsetIndices points_by_curve = curves_orig_->points_by_curve(); + const Span segment_lengths = self_->constraint_solver_.segment_lengths(); threading::parallel_for(curve_selection_.index_range(), 256, [&](const IndexRange range) { for (const int curve_i : curve_selection_.slice(range)) { bool curve_changed = false; const IndexRange points = points_by_curve[curve_i]; + + const float total_length = self_->curve_lengths_[curve_i]; + const float total_length_inv = safe_divide(1.0f, total_length); + float current_length = 0.0f; for (const int point_i : points.drop_front(1)) { + current_length += segment_lengths[point_i - 1]; + const float3 pos_old_cu = deformation.positions[point_i]; /* Compute distance to the brush. */ @@ -328,8 +369,12 @@ struct CombOperationExecutor { /* A falloff that is based on how far away the point is from the stroke. */ const float radius_falloff = BKE_brush_curve_strength( brush_, distance_to_brush_cu, brush_radius_cu); + const float curve_parameter = current_length * total_length_inv; + const float curve_falloff = BKE_curvemapping_evaluateF( + &curve_parameter_falloff_mapping, 0, curve_parameter); /* Combine the falloff and brush strength. */ - const float weight = brush_strength_ * radius_falloff * point_factors_[point_i]; + const float weight = brush_strength_ * curve_falloff * radius_falloff * + point_factors_[point_i]; const float3 translation_eval_cu = weight * brush_diff_cu; const float3 translation_orig_cu = deformation.translation_from_deformed_to_original( diff --git a/source/blender/editors/sculpt_paint/curves_sculpt_intern.hh b/source/blender/editors/sculpt_paint/curves_sculpt_intern.hh index 10e4d08763ba..11ee5628d425 100644 --- a/source/blender/editors/sculpt_paint/curves_sculpt_intern.hh +++ b/source/blender/editors/sculpt_paint/curves_sculpt_intern.hh @@ -163,6 +163,11 @@ struct CurvesConstraintSolver { const IndexMask curve_selection, const Mesh *surface, const CurvesSurfaceTransforms &transforms); + + Span segment_lengths() const + { + return segment_lengths_; + } }; } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/paint_intern.h b/source/blender/editors/sculpt_paint/paint_intern.h index 312d93051dc5..cdf1256a097e 100644 --- a/source/blender/editors/sculpt_paint/paint_intern.h +++ b/source/blender/editors/sculpt_paint/paint_intern.h @@ -373,6 +373,7 @@ void paint_sample_color( void paint_stroke_operator_properties(struct wmOperatorType *ot); void BRUSH_OT_curve_preset(struct wmOperatorType *ot); +void BRUSH_OT_sculpt_curves_falloff_preset(struct wmOperatorType *ot); void PAINT_OT_face_select_linked(struct wmOperatorType *ot); void PAINT_OT_face_select_linked_pick(struct wmOperatorType *ot); diff --git a/source/blender/editors/sculpt_paint/paint_ops.cc b/source/blender/editors/sculpt_paint/paint_ops.cc index c7c317508dd2..c8216bda59d6 100644 --- a/source/blender/editors/sculpt_paint/paint_ops.cc +++ b/source/blender/editors/sculpt_paint/paint_ops.cc @@ -1421,6 +1421,7 @@ void ED_operatortypes_paint(void) WM_operatortype_append(BRUSH_OT_add_gpencil); WM_operatortype_append(BRUSH_OT_scale_size); WM_operatortype_append(BRUSH_OT_curve_preset); + WM_operatortype_append(BRUSH_OT_sculpt_curves_falloff_preset); WM_operatortype_append(BRUSH_OT_reset); WM_operatortype_append(BRUSH_OT_stencil_control); WM_operatortype_append(BRUSH_OT_stencil_fit_image_aspect); diff --git a/source/blender/editors/sculpt_paint/paint_utils.c b/source/blender/editors/sculpt_paint/paint_utils.c index ef794ea6a39e..4953ab846870 100644 --- a/source/blender/editors/sculpt_paint/paint_utils.c +++ b/source/blender/editors/sculpt_paint/paint_utils.c @@ -25,6 +25,7 @@ #include "BLT_translation.h" #include "BKE_brush.h" +#include "BKE_colortools.h" #include "BKE_context.h" #include "BKE_customdata.h" #include "BKE_image.h" @@ -569,19 +570,18 @@ static bool brush_curve_preset_poll(bContext *C) return br && br->curve; } +static const EnumPropertyItem prop_shape_items[] = { + {CURVE_PRESET_SHARP, "SHARP", 0, "Sharp", ""}, + {CURVE_PRESET_SMOOTH, "SMOOTH", 0, "Smooth", ""}, + {CURVE_PRESET_MAX, "MAX", 0, "Max", ""}, + {CURVE_PRESET_LINE, "LINE", 0, "Line", ""}, + {CURVE_PRESET_ROUND, "ROUND", 0, "Round", ""}, + {CURVE_PRESET_ROOT, "ROOT", 0, "Root", ""}, + {0, NULL, 0, NULL, NULL}, +}; + void BRUSH_OT_curve_preset(wmOperatorType *ot) { - PropertyRNA *prop; - static const EnumPropertyItem prop_shape_items[] = { - {CURVE_PRESET_SHARP, "SHARP", 0, "Sharp", ""}, - {CURVE_PRESET_SMOOTH, "SMOOTH", 0, "Smooth", ""}, - {CURVE_PRESET_MAX, "MAX", 0, "Max", ""}, - {CURVE_PRESET_LINE, "LINE", 0, "Line", ""}, - {CURVE_PRESET_ROUND, "ROUND", 0, "Round", ""}, - {CURVE_PRESET_ROOT, "ROOT", 0, "Root", ""}, - {0, NULL, 0, NULL, NULL}, - }; - ot->name = "Preset"; ot->description = "Set brush shape"; ot->idname = "BRUSH_OT_curve_preset"; @@ -589,6 +589,38 @@ void BRUSH_OT_curve_preset(wmOperatorType *ot) ot->exec = brush_curve_preset_exec; ot->poll = brush_curve_preset_poll; + PropertyRNA *prop; + prop = RNA_def_enum(ot->srna, "shape", prop_shape_items, CURVE_PRESET_SMOOTH, "Mode", ""); + RNA_def_property_translation_context(prop, + BLT_I18NCONTEXT_ID_CURVE_LEGACY); /* Abusing id_curve :/ */ +} + +static bool brush_sculpt_curves_falloff_preset_poll(bContext *C) +{ + Brush *br = BKE_paint_brush(BKE_paint_get_active_from_context(C)); + return br && br->curves_sculpt_settings && br->curves_sculpt_settings->curve_parameter_falloff; +} + +static int brush_sculpt_curves_falloff_preset_exec(bContext *C, wmOperator *op) +{ + Brush *brush = BKE_paint_brush(BKE_paint_get_active_from_context(C)); + CurveMapping *mapping = brush->curves_sculpt_settings->curve_parameter_falloff; + mapping->preset = RNA_enum_get(op->ptr, "shape"); + CurveMap *map = mapping->cm; + BKE_curvemap_reset(map, &mapping->clipr, mapping->preset, CURVEMAP_SLOPE_POSITIVE); + return OPERATOR_FINISHED; +} + +void BRUSH_OT_sculpt_curves_falloff_preset(wmOperatorType *ot) +{ + ot->name = "Curve Falloff Preset"; + ot->description = "Set Curve Falloff Preset"; + ot->idname = "BRUSH_OT_sculpt_curves_falloff_preset"; + + ot->exec = brush_sculpt_curves_falloff_preset_exec; + ot->poll = brush_sculpt_curves_falloff_preset_poll; + + PropertyRNA *prop; prop = RNA_def_enum(ot->srna, "shape", prop_shape_items, CURVE_PRESET_SMOOTH, "Mode", ""); RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_CURVE_LEGACY); /* Abusing id_curve :/ */ diff --git a/source/blender/makesdna/DNA_brush_types.h b/source/blender/makesdna/DNA_brush_types.h index fd72a58fe14b..dd335335b903 100644 --- a/source/blender/makesdna/DNA_brush_types.h +++ b/source/blender/makesdna/DNA_brush_types.h @@ -162,7 +162,8 @@ typedef struct BrushCurvesSculptSettings { int density_add_attempts; /** #eBrushCurvesSculptDensityMode. */ uint8_t density_mode; - char _pad[7]; + char _pad[3]; + struct CurveMapping *curve_parameter_falloff; } BrushCurvesSculptSettings; typedef struct Brush { diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c index 13832457c238..319531d68214 100644 --- a/source/blender/makesrna/intern/rna_brush.c +++ b/source/blender/makesrna/intern/rna_brush.c @@ -2106,6 +2106,12 @@ static void rna_def_curves_sculpt_options(BlenderRNA *brna) RNA_def_property_enum_items(prop, density_mode_items); RNA_def_property_ui_text( prop, "Density Mode", "Determines whether the brush adds or removes curves"); + + prop = RNA_def_property(srna, "curve_parameter_falloff", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "CurveMapping"); + RNA_def_property_ui_text(prop, + "Curve Parameter Falloff", + "Falloff that is applied from the tip to the root of each curve"); } static void rna_def_brush(BlenderRNA *brna) -- 2.30.2 From 15cdd89f2b8976db098b52269fd1b7bbe1c61bcb Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Wed, 15 Feb 2023 10:50:01 +0100 Subject: [PATCH 125/182] Curves: Add delete operator to edit mode This implements the delete operator in curves edit mode. The behavior is similar to the delete operator in the edit mode of legacy curves, i.e. it's actually dissolving and doesn't split curves. This is also the behavior that we generally want for the hair use case. The operator is added to the `Curves` menu and can be accessed via the keyboard using `X` or `Del`. Pull Request #104765 --- .../keyconfig/keymap_data/blender_default.py | 2 + release/scripts/startup/bl_ui/space_view3d.py | 1 + .../editors/curves/intern/curves_ops.cc | 47 +++++++++++++++++++ 3 files changed, 50 insertions(+) diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py index 393c73cc2302..4bad5530e525 100644 --- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -5629,6 +5629,8 @@ def km_curves(params): ("curves.disable_selection", {"type": 'TWO', "value": 'PRESS', "alt": True}, None), *_template_items_select_actions(params, "curves.select_all"), ("curves.select_linked", {"type": 'L', "value": 'PRESS', "ctrl": True}, None), + ("curves.delete", {"type": 'X', "value": 'PRESS'}, None), + ("curves.delete", {"type": 'DEL', "value": 'PRESS'}, None), ]) return keymap diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 5c294cee683f..164f76820723 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -5312,6 +5312,7 @@ class VIEW3D_MT_edit_curves(Menu): layout.menu("VIEW3D_MT_transform") layout.separator() + layout.operator("curves.delete") class VIEW3D_MT_object_mode_pie(Menu): diff --git a/source/blender/editors/curves/intern/curves_ops.cc b/source/blender/editors/curves/intern/curves_ops.cc index d80ebff2adcb..d9496cf6e250 100644 --- a/source/blender/editors/curves/intern/curves_ops.cc +++ b/source/blender/editors/curves/intern/curves_ops.cc @@ -1091,6 +1091,52 @@ static void CURVES_OT_surface_set(wmOperatorType *ot) ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } +namespace curves_delete { + +static int delete_exec(bContext *C, wmOperator * /*op*/) +{ + for (Curves *curves_id : get_unique_editable_curves(*C)) { + bke::CurvesGeometry &curves = curves_id->geometry.wrap(); + const eAttrDomain domain = eAttrDomain(curves_id->selection_domain); + const bke::AttributeAccessor attributes = curves.attributes(); + const VArray selection = attributes.lookup_or_default(".selection", domain, false); + const int domain_size_orig = attributes.domain_size(domain); + Vector indices; + const IndexMask mask = index_mask_ops::find_indices_from_virtual_array( + selection.index_range(), selection, 4096, indices); + switch (domain) { + case ATTR_DOMAIN_POINT: + curves.remove_points(mask); + break; + case ATTR_DOMAIN_CURVE: + curves.remove_curves(mask); + break; + default: + BLI_assert_unreachable(); + } + if (attributes.domain_size(domain) != domain_size_orig) { + DEG_id_tag_update(&curves_id->id, ID_RECALC_GEOMETRY); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, curves_id); + } + } + + return OPERATOR_FINISHED; +} + +} // namespace curves_delete + +static void CURVES_OT_delete(wmOperatorType *ot) +{ + ot->name = "Delete"; + ot->idname = __func__; + ot->description = "Remove selected control points or curves"; + + ot->exec = curves_delete::delete_exec; + ot->poll = editable_curves_in_edit_mode_poll; + + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + } // namespace blender::ed::curves void ED_operatortypes_curves() @@ -1105,6 +1151,7 @@ void ED_operatortypes_curves() WM_operatortype_append(CURVES_OT_select_end); WM_operatortype_append(CURVES_OT_select_linked); WM_operatortype_append(CURVES_OT_surface_set); + WM_operatortype_append(CURVES_OT_delete); } void ED_keymap_curves(wmKeyConfig *keyconf) -- 2.30.2 From 2ea260993f8f6b802b570e0c87aac8ade891a055 Mon Sep 17 00:00:00 2001 From: Jason Fielder Date: Wed, 15 Feb 2023 11:27:25 +0100 Subject: [PATCH 126/182] EEVEE: Remove unnecessary material optimization assertion. Fix unreported assert in basic scenes. Authored by Apple: Michael Parkin-White Pull Request #104775 --- source/blender/gpu/intern/gpu_material.c | 1 - 1 file changed, 1 deletion(-) diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c index f1b790a0a038..a6d411a6ef01 100644 --- a/source/blender/gpu/intern/gpu_material.c +++ b/source/blender/gpu/intern/gpu_material.c @@ -754,7 +754,6 @@ bool GPU_material_optimization_ready(GPUMaterial *mat) void GPU_material_set_default(GPUMaterial *material, GPUMaterial *default_material) { - BLI_assert(material != default_material); if (material != default_material) { material->default_mat = default_material; } -- 2.30.2 From 4316ab1d24fa5e2734c0d41d46ae03aff3eb67eb Mon Sep 17 00:00:00 2001 From: YimingWu Date: Wed, 15 Feb 2023 11:33:37 +0100 Subject: [PATCH 127/182] Cleanup: LineArt: Remove lineart_cpp_bridge.cc Removed this file because lineart_cpu.cc is already c++. Pull Request #104736 --- .../blender/gpencil_modifiers/CMakeLists.txt | 1 - .../intern/lineart/lineart_cpp_bridge.cc | 23 ------------------- .../intern/lineart/lineart_cpu.cc | 21 +++++++++++++++++ .../intern/lineart/lineart_intern.h | 2 -- 4 files changed, 21 insertions(+), 26 deletions(-) delete mode 100644 source/blender/gpencil_modifiers/intern/lineart/lineart_cpp_bridge.cc diff --git a/source/blender/gpencil_modifiers/CMakeLists.txt b/source/blender/gpencil_modifiers/CMakeLists.txt index 8c85d9772636..cac836386ede 100644 --- a/source/blender/gpencil_modifiers/CMakeLists.txt +++ b/source/blender/gpencil_modifiers/CMakeLists.txt @@ -66,7 +66,6 @@ set(SRC # Lineart code intern/lineart/lineart_chain.c - intern/lineart/lineart_cpp_bridge.cc intern/lineart/lineart_cpu.cc intern/lineart/lineart_ops.c intern/lineart/lineart_shadow.c diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpp_bridge.cc b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpp_bridge.cc deleted file mode 100644 index 85f158d42e63..000000000000 --- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpp_bridge.cc +++ /dev/null @@ -1,23 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-or-later */ - -/** \file - * \ingroup modifiers - */ - -#include "BLI_sort.hh" -#include "BLI_vector.hh" -#include "MOD_lineart.h" -#include "lineart_intern.h" - -void lineart_sort_adjacent_items(LineartAdjacentEdge *ai, int length) -{ - blender::parallel_sort( - ai, ai + length, [](const LineartAdjacentEdge &p1, const LineartAdjacentEdge &p2) { - int a = p1.v1 - p2.v1; - int b = p1.v2 - p2.v2; - /* parallel_sort() requires cmp() to return true when the first element needs to appear - * before the second element in the sorted array, false otherwise (strict weak ordering), - * see https://en.cppreference.com/w/cpp/named_req/Compare. */ - return a < 0 ? true : (a == 0 ? b < 0 : false); - }); -} diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc index 920707218162..b9ff59b6c6fc 100644 --- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc +++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc @@ -14,6 +14,8 @@ #include "BLI_math.h" #include "BLI_task.h" #include "BLI_utildefines.h" +#include "BLI_sort.hh" +#include "BLI_vector.hh" #include "PIL_time.h" @@ -1887,6 +1889,25 @@ static void lineart_edge_neighbor_init_task(void *__restrict userdata, edge_nabr->flags = 0; } +void lineart_sort_adjacent_items(LineartAdjacentEdge *ai, int length) +{ + blender::parallel_sort( + ai, ai + length, [](const LineartAdjacentEdge &p1, const LineartAdjacentEdge &p2) { + int a = p1.v1 - p2.v1; + int b = p1.v2 - p2.v2; + /* parallel_sort() requires cmp() to return true when the first element needs to appear + * before the second element in the sorted array, false otherwise (strict weak ordering), + * see https://en.cppreference.com/w/cpp/named_req/Compare. */ + if (a < 0) { + return true; + } + if (a > 0) { + return false; + } + return b < 0; + }); +} + static LineartEdgeNeighbor *lineart_build_edge_neighbor(Mesh *me, int total_edges) { /* Because the mesh is triangulated, so `me->totedge` should be reliable? */ diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h b/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h index f33208ff9310..086428ff481f 100644 --- a/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h +++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h @@ -173,8 +173,6 @@ void lineart_add_edge_to_array(struct LineartPendingEdges *pe, struct LineartEdg void lineart_finalize_object_edge_array_reserve(struct LineartPendingEdges *pe, int count); void lineart_destroy_render_data_keep_init(struct LineartData *ld); -void lineart_sort_adjacent_items(struct LineartAdjacentEdge *ai, int length); - #ifdef __cplusplus } #endif -- 2.30.2 From af437548f22b573e81b8646b27c906bdadd5b962 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Wed, 15 Feb 2023 11:42:15 +0100 Subject: [PATCH 128/182] Curves: move edit mode out of experimental We (Dalai, Hans, Falk, Simon and me) decided that the curves edit mode is useful enough to justify moving it out of experimental now. So far it supports the following features: * Various selection tools. The selections are synced with sculpt mode. * Transform tools. * Delete curves/points. More functionality of the old curve edit mode will be ported over in future releases. --- source/blender/editors/object/object_modes.cc | 7 +------ source/blender/makesdna/DNA_object_types.h | 3 +-- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/source/blender/editors/object/object_modes.cc b/source/blender/editors/object/object_modes.cc index 95b487c199dc..f0874c48f6e4 100644 --- a/source/blender/editors/object/object_modes.cc +++ b/source/blender/editors/object/object_modes.cc @@ -142,12 +142,7 @@ bool ED_object_mode_compat_test(const Object *ob, eObjectMode mode) } break; case OB_CURVES: - if (U.experimental.use_new_curves_tools) { - if (mode & OB_MODE_EDIT) { - return true; - } - } - if (mode & OB_MODE_SCULPT_CURVES) { + if (mode & (OB_MODE_EDIT | OB_MODE_SCULPT_CURVES)) { return true; } break; diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h index 29d74ba20465..e217ff3ad9cb 100644 --- a/source/blender/makesdna/DNA_object_types.h +++ b/source/blender/makesdna/DNA_object_types.h @@ -556,8 +556,7 @@ enum { /** Matches #OB_TYPE_SUPPORT_EDITMODE. */ #define OB_DATA_SUPPORT_EDITMODE(_type) \ - (ELEM(_type, ID_ME, ID_CU_LEGACY, ID_MB, ID_LT, ID_AR) || \ - (U.experimental.use_new_curves_tools && (_type) == ID_CV)) + (ELEM(_type, ID_ME, ID_CU_LEGACY, ID_MB, ID_LT, ID_AR, ID_CV)) /* is this ID type used as object data */ #define OB_DATA_SUPPORT_ID(_id_type) \ -- 2.30.2 From c1d2081e6d4a3051fb2bdea8d96ea97a85463783 Mon Sep 17 00:00:00 2001 From: Antonio Vazquez Date: Wed, 15 Feb 2023 11:54:44 +0100 Subject: [PATCH 129/182] Fix #104760: GPencil Fill Gap circles no longer disappear when blue line appear The problem was the alpha channel was set wrongly and the original 0 value was replaced with 1 by error. --- source/blender/editors/gpencil/gpencil_fill.c | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/source/blender/editors/gpencil/gpencil_fill.c b/source/blender/editors/gpencil/gpencil_fill.c index af1ab5e56596..20e9cc32c691 100644 --- a/source/blender/editors/gpencil/gpencil_fill.c +++ b/source/blender/editors/gpencil/gpencil_fill.c @@ -917,6 +917,7 @@ static void gpencil_draw_basic_stroke(tGPDfill *tgpf, const bool is_line_mode = (tgpf->fill_extend_mode == GP_FILL_EMODE_EXTEND); const bool use_stroke_collide = (tgpf->flag & GP_BRUSH_FILL_STROKE_COLLIDE) != 0; const bool stroke_collide = (gps->flag & GP_STROKE_COLLIDE) != 0; + bool circle_contact = false; if (!gpencil_stroke_is_drawable(tgpf, gps)) { return; @@ -933,7 +934,11 @@ static void gpencil_draw_basic_stroke(tGPDfill *tgpf, /* If there is contact, hide the circles to avoid noise and keep the focus * in the pending gaps. */ - col[3] = (gps->flag & GP_STROKE_TAG) ? 0.0f : 0.5f; + col[3] = 0.5f; + if (gps->flag & GP_STROKE_TAG) { + circle_contact = true; + col[3] = 0.0f; + } } else if ((is_extend) && (!tgpf->is_render)) { if (stroke_collide || !use_stroke_collide || !is_line_mode) { @@ -962,14 +967,16 @@ static void gpencil_draw_basic_stroke(tGPDfill *tgpf, for (int i = 0; i < totpoints; i++, pt++) { - /* This flag is inverted in the UI. */ - if ((flag & GP_BRUSH_FILL_HIDE) == 0) { - float alpha = gp_style->stroke_rgba[3] * pt->strength; - CLAMP(alpha, 0.0f, 1.0f); - col[3] = alpha <= thershold ? 0.0f : 1.0f; - } - else if (!is_help) { - col[3] = 1.0f; + if (!circle_contact) { + /* This flag is inverted in the UI. */ + if ((flag & GP_BRUSH_FILL_HIDE) == 0) { + float alpha = gp_style->stroke_rgba[3] * pt->strength; + CLAMP(alpha, 0.0f, 1.0f); + col[3] = alpha <= thershold ? 0.0f : 1.0f; + } + else if (!is_help) { + col[3] = 1.0f; + } } /* set point */ immAttr4fv(color, col); -- 2.30.2 From f1b7c2fb6557cd3ddc72afcf5934c29cee27319a Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 15 Feb 2023 12:03:27 +0100 Subject: [PATCH 130/182] Fix #90629: VSE: Split selection is determined by menu position Use the right hand side selection, as it fits the typical workflow the best. Arguably, the same would need to be done for the k-shortcut, but that is another issue to be tackled. As well as making the selection active. Pull Request #104777 --- release/scripts/startup/bl_ui/space_sequencer.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py index cae06add9ef1..3976f503aa24 100644 --- a/release/scripts/startup/bl_ui/space_sequencer.py +++ b/release/scripts/startup/bl_ui/space_sequencer.py @@ -931,8 +931,14 @@ class SEQUENCER_MT_strip(Menu): if has_sequencer: - layout.operator("sequencer.split", text="Split").type = 'SOFT' - layout.operator("sequencer.split", text="Hold Split").type = 'HARD' + props = layout.operator("sequencer.split", text="Split") + props.type = 'SOFT' + props.side = 'RIGHT' + + props = layout.operator("sequencer.split", text="Hold Split") + props.type = 'HARD' + props.side = 'RIGHT' + layout.separator() if has_sequencer: -- 2.30.2 From 637dcd8a0ad995ada9f43d032dd89bfc2ff7b1cb Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Wed, 15 Feb 2023 12:13:34 +0100 Subject: [PATCH 131/182] Curves: Replace quick fur operator, add to add menu The quick fur operator now uses the new hair system. It adds a new curves object for every selected mesh, and adds geometry nodes modifiers from the essentials assets that generate curves. A few settings are exposed in the redo panel, including an option for whether to apply the modifier to generate the initial curves so that there is original editable data. The point of the operator is to give people a sense of how to use the node groups and to give a very fast way to build a basic setup for further tweaking. Pull Request #104764 --- .../bl_operators/object_quick_effects.py | 136 +++++++++++++----- release/scripts/startup/bl_ui/space_view3d.py | 1 + 2 files changed, 103 insertions(+), 34 deletions(-) diff --git a/release/scripts/startup/bl_operators/object_quick_effects.py b/release/scripts/startup/bl_operators/object_quick_effects.py index d8b0e85be0e0..06f443369722 100644 --- a/release/scripts/startup/bl_operators/object_quick_effects.py +++ b/release/scripts/startup/bl_operators/object_quick_effects.py @@ -36,67 +36,135 @@ class ObjectModeOperator: class QuickFur(ObjectModeOperator, Operator): - """Add fur setup to the selected objects""" + """Add a fur setup to the selected objects""" bl_idname = "object.quick_fur" bl_label = "Quick Fur" bl_options = {'REGISTER', 'UNDO'} density: EnumProperty( - name="Fur Density", + name="Density", items=( - ('LIGHT', "Light", ""), + ('LOW', "Low", ""), ('MEDIUM', "Medium", ""), - ('HEAVY', "Heavy", ""), + ('HIGH', "High", ""), ), default='MEDIUM', ) - view_percentage: IntProperty( - name="View %", - min=1, max=100, - soft_min=1, soft_max=100, - default=10, - ) length: FloatProperty( name="Length", min=0.001, max=100, soft_min=0.01, soft_max=10, default=0.1, + subtype='DISTANCE' + ) + radius: FloatProperty( + name="Hair Radius", + min=0.0, max=10, + soft_min=0.0001, soft_max=0.1, + default=0.001, + subtype='DISTANCE' + ) + view_percentage: FloatProperty( + name="View Percentage", + min=0.0, max=1.0, + default=1.0, + subtype='FACTOR' + ) + apply_hair_guides: BoolProperty( + name="Apply Hair Guides", + default=True, + ) + use_noise: BoolProperty( + name="Noise", + default=True, + ) + use_frizz: BoolProperty( + name="Frizz", + default=True, ) def execute(self, context): - fake_context = context.copy() - mesh_objects = [obj for obj in context.selected_objects - if obj.type == 'MESH'] - + import os + mesh_objects = [obj for obj in context.selected_objects if obj.type == 'MESH'] if not mesh_objects: self.report({'ERROR'}, "Select at least one mesh object") return {'CANCELLED'} - mat = bpy.data.materials.new("Fur Material") + if self.density == 'LOW': + count = 1000 + elif self.density == 'MEDIUM': + count = 10000 + elif self.density == 'HIGH': + count = 100000 - for obj in mesh_objects: - fake_context["object"] = obj - bpy.ops.object.particle_system_add(fake_context) + node_groups_to_append = {"Generate Hair Curves", "Set Hair Curve Profile", "Interpolate Hair Curves"} + if self.use_noise: + node_groups_to_append.add("Hair Curves Noise") + if self.use_frizz: + node_groups_to_append.add("Frizz Hair Curves") + assets_directory = os.path.join(bpy.utils.system_resource('DATAFILES'), + "assets", + "geometry_nodes", + "procedural_hair_node_assets.blend", + "NodeTree") + for name in node_groups_to_append: + bpy.ops.wm.append(directory=assets_directory, + filename=name, + use_recursive=True, + do_reuse_local_id=True) + generate_group = bpy.data.node_groups["Generate Hair Curves"] + interpolate_group = bpy.data.node_groups["Interpolate Hair Curves"] + radius_group = bpy.data.node_groups["Set Hair Curve Profile"] + noise_group = bpy.data.node_groups["Hair Curves Noise"] if self.use_noise else None + frizz_group = bpy.data.node_groups["Frizz Hair Curves"] if self.use_frizz else None - psys = obj.particle_systems[-1] - psys.settings.type = 'HAIR' + material = bpy.data.materials.new("Fur Material") - if self.density == 'LIGHT': - psys.settings.count = 100 - elif self.density == 'MEDIUM': - psys.settings.count = 1000 - elif self.density == 'HEAVY': - psys.settings.count = 10000 + for mesh_object in mesh_objects: + mesh = mesh_object.data + with context.temp_override(active_object=mesh_object): + bpy.ops.object.curves_empty_hair_add() + curves_object = context.active_object + curves = curves_object.data + curves.materials.append(material) - psys.settings.child_nbr = self.view_percentage - psys.settings.hair_length = self.length - psys.settings.use_strand_primitive = True - psys.settings.use_hair_bspline = True - psys.settings.child_type = 'INTERPOLATED' - psys.settings.tip_radius = 0.25 + area = 0.0 + for poly in mesh.polygons: + area += poly.area + density = count / area - obj.data.materials.append(mat) - psys.settings.material = len(obj.data.materials) + generate_modifier = curves_object.modifiers.new(name="Generate", type='NODES') + generate_modifier.node_group = generate_group + generate_modifier["Input_2"] = mesh_object + generate_modifier["Input_18_attribute_name"] = curves.surface_uv_map + generate_modifier["Input_20"] = self.length + generate_modifier["Input_22"] = material + generate_modifier["Input_15"] = density * 0.01 + curves_object.modifiers.move(1, 0) + + radius_modifier = curves_object.modifiers.new(name="Set Hair Curve Profile", type='NODES') + radius_modifier.node_group = radius_group + radius_modifier["Input_3"] = self.radius + + interpolate_modifier = curves_object.modifiers.new(name="Interpolate Hair Curves", type='NODES') + interpolate_modifier.node_group = interpolate_group + interpolate_modifier["Input_2"] = mesh_object + interpolate_modifier["Input_18_attribute_name"] = curves.surface_uv_map + interpolate_modifier["Input_15"] = density + interpolate_modifier["Input_17"] = self.view_percentage + interpolate_modifier["Input_24"] = True + + if noise_group: + noise_modifier = curves_object.modifiers.new(name="Hair Curves Noise", type='NODES') + noise_modifier.node_group = noise_group + + if frizz_group: + frizz_modifier = curves_object.modifiers.new(name="Frizz Hair Curves", type='NODES') + frizz_modifier.node_group = frizz_group + + if self.apply_hair_guides: + with context.temp_override(object=curves_object): + bpy.ops.object.modifier_apply(modifier=generate_modifier.name) return {'FINISHED'} diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 164f76820723..28180be16987 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -2117,6 +2117,7 @@ class VIEW3D_MT_curve_add(Menu): layout.separator() layout.operator("object.curves_empty_hair_add", text="Empty Hair", icon='CURVES_DATA') + layout.operator("object.quick_fur", text="Fur", icon='CURVES_DATA') experimental = context.preferences.experimental if experimental.use_new_curves_tools: -- 2.30.2 From 34a203cfb122d3440f8b6ae7642f2bcae6bdc085 Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Wed, 15 Feb 2023 12:47:47 +0100 Subject: [PATCH 132/182] Assets: Preference for default import method for an asset library The default import method for an asset library can now be determined in the Preferences. The Asset Browser has a new "Follow Preferences" option for the importing. The essentials asset library still only uses "Append (Reuse Data)". This is part of #104686, which aims at improving the import method selection, especially for the introduction of the new essentials library (which doesn't support certain import methods). Further changes are coming to improve the UI, see #104686. Pull Request: #104688 --- .../scripts/startup/bl_ui/space_userpref.py | 8 ++++ .../blender/asset_system/AS_asset_library.hh | 10 ++-- .../asset_system/AS_asset_representation.hh | 15 ++++++ .../intern/asset_library_service.cc | 48 +++++++++++++------ .../intern/asset_library_service.hh | 3 ++ .../intern/asset_representation.cc | 39 ++++++++++++--- .../blender/blenkernel/BKE_blender_version.h | 4 +- .../blender/blenkernel/intern/preferences.c | 3 ++ .../blenloader/intern/versioning_300.cc | 42 ++++++++++++---- .../blenloader/intern/versioning_userdef.c | 6 +++ .../blender/editors/asset/ED_asset_handle.h | 8 ++++ .../editors/asset/intern/asset_handle.cc | 6 +++ .../blender/editors/include/ED_fileselect.h | 16 +++++++ source/blender/editors/include/UI_interface.h | 2 +- .../interface_template_asset_view.cc | 5 +- source/blender/editors/space_file/file_draw.c | 29 ++++++----- source/blender/editors/space_file/filesel.cc | 42 +++++++++++++++- source/blender/makesdna/DNA_asset_types.h | 11 +++++ source/blender/makesdna/DNA_space_types.h | 2 + source/blender/makesdna/DNA_userdef_types.h | 3 ++ source/blender/makesrna/intern/rna_space.c | 6 +++ source/blender/makesrna/intern/rna_userdef.c | 25 ++++++++++ source/blender/windowmanager/WM_api.h | 2 +- source/blender/windowmanager/WM_types.h | 2 +- .../windowmanager/intern/wm_dragdrop.cc | 15 +++--- 25 files changed, 289 insertions(+), 63 deletions(-) diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index fa5f451f9eee..a7dcd9f68b86 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -1442,12 +1442,20 @@ class USERPREF_PT_file_paths_asset_libraries(FilePathsPanel, Panel): row = name_col.row() row.alert = not library.name row.prop(library, "name", text="") + row = name_col.row() + # Dummy for spacing + row.label(text="") + name_col.separator() row = path_col.row() subrow = row.row() subrow.alert = not library.path subrow.prop(library, "path", text="") row.operator("preferences.asset_library_remove", text="", icon='X', emboss=False).index = i + row = path_col.row() + row.prop(library, "import_method", text="") + row.label(text="", icon='BLANK1') + path_col.separator() row = box.row() row.alignment = 'RIGHT' diff --git a/source/blender/asset_system/AS_asset_library.hh b/source/blender/asset_system/AS_asset_library.hh index d487f9711fd7..290e8e44b9f6 100644 --- a/source/blender/asset_system/AS_asset_library.hh +++ b/source/blender/asset_system/AS_asset_library.hh @@ -19,6 +19,7 @@ #include "BKE_callbacks.h" struct AssetLibrary; +class bUserAssetLibrary; struct IDRemapper; struct Main; @@ -58,6 +59,11 @@ class AssetLibrary { std::function on_refresh_; + std::optional import_method_; + /** Assets owned by this library may be imported with a different method than set in + * #import_method_ above, it's just a default. */ + bool may_override_import_method_ = false; + bCallbackFuncStore on_save_callback_store_{}; public: @@ -67,10 +73,8 @@ class AssetLibrary { std::unique_ptr catalog_service; - /** Assets owned by this library should never be linked. */ - bool never_link = false; - friend class AssetLibraryService; + friend class AssetRepresentation; public: /** diff --git a/source/blender/asset_system/AS_asset_representation.hh b/source/blender/asset_system/AS_asset_representation.hh index 6793cd8097cf..99fde7d3dc25 100644 --- a/source/blender/asset_system/AS_asset_representation.hh +++ b/source/blender/asset_system/AS_asset_representation.hh @@ -12,10 +12,13 @@ #pragma once #include +#include #include #include "BLI_string_ref.hh" +#include "DNA_asset_types.h" + #include "AS_asset_identifier.hh" struct AssetMetaData; @@ -70,6 +73,15 @@ class AssetRepresentation { StringRefNull get_name() const; AssetMetaData &get_metadata() const; + /** Get the import method to use for this asset. A different one may be used if + * #may_override_import_method() returns true, otherwise, the returned value must be used. If + * there is no import method predefined for this asset no value is returned. + */ + std::optional get_import_method() const; + /** Returns if this asset may be imported with an import method other than the one returned by + * #get_import_method(). Also returns true if there is no predefined import method + * (when #get_import_method() returns no value). */ + bool may_override_import_method() const; /** Returns if this asset is stored inside this current file, and as such fully editable. */ bool is_local_id() const; const AssetLibrary &owner_asset_library() const; @@ -81,3 +93,6 @@ class AssetRepresentation { struct AssetRepresentation; const std::string AS_asset_representation_full_path_get(const ::AssetRepresentation *asset); +std::optional AS_asset_representation_import_method_get( + const ::AssetRepresentation *asset_handle); +bool AS_asset_representation_may_override_import_method(const ::AssetRepresentation *asset_handle); diff --git a/source/blender/asset_system/intern/asset_library_service.cc b/source/blender/asset_system/intern/asset_library_service.cc index b9ae8e7bd692..cf52f9d1d76e 100644 --- a/source/blender/asset_system/intern/asset_library_service.cc +++ b/source/blender/asset_system/intern/asset_library_service.cc @@ -63,9 +63,11 @@ AssetLibrary *AssetLibraryService::get_asset_library( switch (type) { case ASSET_LIBRARY_ESSENTIALS: { const StringRefNull root_path = essentials_directory_path(); - AssetLibrary *asset_library = get_asset_library_on_disk(root_path); - asset_library->never_link = true; - return asset_library; + + AssetLibrary *library = get_asset_library_on_disk(root_path); + library->import_method_ = ASSET_IMPORT_APPEND_REUSE; + + return library; } case ASSET_LIBRARY_LOCAL: { /* For the "Current File" library we get the asset library root path based on main. */ @@ -81,12 +83,22 @@ AssetLibrary *AssetLibraryService::get_asset_library( case ASSET_LIBRARY_ALL: return get_asset_library_all(bmain); case ASSET_LIBRARY_CUSTOM: { - std::string root_path = root_path_from_library_ref(library_reference); - - if (!root_path.empty()) { - return get_asset_library_on_disk(root_path); + bUserAssetLibrary *custom_library = find_custom_asset_library_from_library_ref( + library_reference); + if (!custom_library) { + return nullptr; } - break; + + std::string root_path = custom_library->path; + if (root_path.empty()) { + return nullptr; + } + + AssetLibrary *library = get_asset_library_on_disk(root_path); + library->import_method_ = eAssetImportMethod(custom_library->import_method); + library->may_override_import_method_ = true; + + return library; } } @@ -187,6 +199,15 @@ AssetLibrary *AssetLibraryService::get_asset_library_all(const Main *bmain) return all_library_.get(); } +bUserAssetLibrary *AssetLibraryService::find_custom_asset_library_from_library_ref( + const AssetLibraryReference &library_reference) +{ + BLI_assert(library_reference.type == ASSET_LIBRARY_CUSTOM); + BLI_assert(library_reference.custom_library_index >= 0); + + return BKE_preferences_asset_library_find_from_index(&U, library_reference.custom_library_index); +} + std::string AssetLibraryService::root_path_from_library_ref( const AssetLibraryReference &library_reference) { @@ -194,16 +215,13 @@ std::string AssetLibraryService::root_path_from_library_ref( return ""; } - BLI_assert(library_reference.type == ASSET_LIBRARY_CUSTOM); - BLI_assert(library_reference.custom_library_index >= 0); - - bUserAssetLibrary *user_library = BKE_preferences_asset_library_find_from_index( - &U, library_reference.custom_library_index); - if (!user_library || !user_library->path[0]) { + bUserAssetLibrary *custom_library = find_custom_asset_library_from_library_ref( + library_reference); + if (!custom_library || !custom_library->path[0]) { return ""; } - return user_library->path; + return custom_library->path; } void AssetLibraryService::allocate_service_instance() diff --git a/source/blender/asset_system/intern/asset_library_service.hh b/source/blender/asset_system/intern/asset_library_service.hh index 1dd9bda7acad..1c0a2e9dc368 100644 --- a/source/blender/asset_system/intern/asset_library_service.hh +++ b/source/blender/asset_system/intern/asset_library_service.hh @@ -14,6 +14,7 @@ #include struct AssetLibraryReference; +struct bUserAssetLibrary; namespace blender::asset_system { @@ -58,6 +59,8 @@ class AssetLibraryService { static void destroy(); static std::string root_path_from_library_ref(const AssetLibraryReference &library_reference); + static bUserAssetLibrary *find_custom_asset_library_from_library_ref( + const AssetLibraryReference &library_reference); AssetLibrary *get_asset_library(const Main *bmain, const AssetLibraryReference &library_reference); diff --git a/source/blender/asset_system/intern/asset_representation.cc b/source/blender/asset_system/intern/asset_representation.cc index 5d3660e4bb30..daaa7bdff0f5 100644 --- a/source/blender/asset_system/intern/asset_representation.cc +++ b/source/blender/asset_system/intern/asset_representation.cc @@ -8,6 +8,7 @@ #include "DNA_ID.h" #include "DNA_asset_types.h" +#include "DNA_userdef_types.h" #include "AS_asset_identifier.hh" #include "AS_asset_library.hh" @@ -80,6 +81,22 @@ AssetMetaData &AssetRepresentation::get_metadata() const return is_local_id_ ? *local_asset_id_->asset_data : *external_asset_.metadata_; } +std::optional AssetRepresentation::get_import_method() const +{ + if (!owner_asset_library_) { + return {}; + } + return owner_asset_library_->import_method_; +} + +bool AssetRepresentation::may_override_import_method() const +{ + if (!owner_asset_library_ || !owner_asset_library_->import_method_) { + return true; + } + return owner_asset_library_->may_override_import_method_; +} + bool AssetRepresentation::is_local_id() const { return is_local_id_; @@ -102,6 +119,21 @@ const std::string AS_asset_representation_full_path_get(const AssetRepresentatio return identifier.full_path(); } +std::optional AS_asset_representation_import_method_get( + const AssetRepresentation *asset_handle) +{ + const asset_system::AssetRepresentation *asset = + reinterpret_cast(asset_handle); + return asset->get_import_method(); +} + +bool AS_asset_representation_may_override_import_method(const AssetRepresentation *asset_handle) +{ + const asset_system::AssetRepresentation *asset = + reinterpret_cast(asset_handle); + return asset->may_override_import_method(); +} + /* ---------------------------------------------------------------------- */ /** \name C-API * \{ */ @@ -127,11 +159,4 @@ bool AS_asset_representation_is_local_id(const AssetRepresentation *asset_handle return asset->is_local_id(); } -bool AS_asset_representation_is_never_link(const AssetRepresentation *asset_handle) -{ - const asset_system::AssetRepresentation *asset = - reinterpret_cast(asset_handle); - return asset->owner_asset_library().never_link; -} - /** \} */ diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h index 395a0c34538e..e83abeae3295 100644 --- a/source/blender/blenkernel/BKE_blender_version.h +++ b/source/blender/blenkernel/BKE_blender_version.h @@ -23,9 +23,11 @@ extern "C" { /** Blender release cycle stage: alpha/beta/rc/release. */ #define BLENDER_VERSION_CYCLE alpha +/* TODO proper version bump. */ + /* Blender file format version. */ #define BLENDER_FILE_VERSION BLENDER_VERSION -#define BLENDER_FILE_SUBVERSION 9 +#define BLENDER_FILE_SUBVERSION 10 /* Minimum Blender version that supports reading file written with the current * version. Older Blender versions will test this and show a warning if the file diff --git a/source/blender/blenkernel/intern/preferences.c b/source/blender/blenkernel/intern/preferences.c index dd76f9eddc17..02169cd45350 100644 --- a/source/blender/blenkernel/intern/preferences.c +++ b/source/blender/blenkernel/intern/preferences.c @@ -8,6 +8,8 @@ #include +#include "DNA_asset_types.h" + #include "MEM_guardedalloc.h" #include "BLI_fileops.h" @@ -44,6 +46,7 @@ bUserAssetLibrary *BKE_preferences_asset_library_add(UserDef *userdef, if (path) { BLI_strncpy(library->path, path, sizeof(library->path)); } + library->import_method = ASSET_IMPORT_APPEND_REUSE; return library; } diff --git a/source/blender/blenloader/intern/versioning_300.cc b/source/blender/blenloader/intern/versioning_300.cc index ca39543c8412..4a1c14bd4304 100644 --- a/source/blender/blenloader/intern/versioning_300.cc +++ b/source/blender/blenloader/intern/versioning_300.cc @@ -3913,16 +3913,27 @@ void blo_do_versions_300(FileData *fd, Library * /*lib*/, Main *bmain) } } - /** - * Versioning code until next subversion bump goes here. - * - * \note Be sure to check when bumping the version: - * - "versioning_userdef.c", #blo_do_versions_userdef - * - "versioning_userdef.c", #do_versions_theme - * - * \note Keep this message at the bottom of the function. - */ - { + if (!MAIN_VERSION_ATLEAST(bmain, 305, 10)) { + LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) { + LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) { + LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) { + if (sl->spacetype != SPACE_FILE) { + continue; + } + SpaceFile *sfile = reinterpret_cast(sl); + if (!sfile->asset_params) { + continue; + } + + /* When an asset browser uses the default import method, make it follow the new + * preference setting. This means no effective default behavior change. */ + if (sfile->asset_params->import_type == FILE_ASSET_IMPORT_APPEND_REUSE) { + sfile->asset_params->import_type = FILE_ASSET_IMPORT_FOLLOW_PREFS; + } + } + } + } + if (!DNA_struct_elem_find(fd->filesdna, "SceneEEVEE", "int", "shadow_pool_size")) { LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) { scene->eevee.flag |= SCE_EEVEE_SHADOW_ENABLED; @@ -3960,7 +3971,18 @@ void blo_do_versions_300(FileData *fd, Library * /*lib*/, Main *bmain) } } } + } + /** + * Versioning code until next subversion bump goes here. + * + * \note Be sure to check when bumping the version: + * - "versioning_userdef.c", #blo_do_versions_userdef + * - "versioning_userdef.c", #do_versions_theme + * + * \note Keep this message at the bottom of the function. + */ + { /* Keep this block, even when empty. */ } } diff --git a/source/blender/blenloader/intern/versioning_userdef.c b/source/blender/blenloader/intern/versioning_userdef.c index 10a21356c8fe..3c4b1a04d635 100644 --- a/source/blender/blenloader/intern/versioning_userdef.c +++ b/source/blender/blenloader/intern/versioning_userdef.c @@ -773,6 +773,12 @@ void blo_do_versions_userdef(UserDef *userdef) userdef->gpu_backend = GPU_BACKEND_OPENGL; } + if (!USER_VERSION_ATLEAST(305, 10)) { + LISTBASE_FOREACH (bUserAssetLibrary *, asset_library, &userdef->asset_libraries) { + asset_library->import_method = ASSET_IMPORT_APPEND_REUSE; + } + } + /** * Versioning code until next subversion bump goes here. * diff --git a/source/blender/editors/asset/ED_asset_handle.h b/source/blender/editors/asset/ED_asset_handle.h index b3d9b58b30ec..436194fd885f 100644 --- a/source/blender/editors/asset/ED_asset_handle.h +++ b/source/blender/editors/asset/ED_asset_handle.h @@ -13,6 +13,7 @@ #pragma once #include "DNA_ID_enums.h" +#include "DNA_asset_types.h" #ifdef __cplusplus extern "C" { @@ -37,6 +38,13 @@ void ED_asset_handle_get_full_library_path( #ifdef __cplusplus +# include + +/** The asset library may have an import method (e.g. append vs. link) defined to use. If so, this + * returns it. Otherwise a reasonable method should be used, usually "Append (Reuse Data)". */ +std::optional ED_asset_handle_get_import_method( + const struct AssetHandle *asset); + namespace blender::ed::asset { /** If the ID already exists in the database, return it, otherwise add it. */ diff --git a/source/blender/editors/asset/intern/asset_handle.cc b/source/blender/editors/asset/intern/asset_handle.cc index 26b6f09b231b..4a6a7fda40b0 100644 --- a/source/blender/editors/asset/intern/asset_handle.cc +++ b/source/blender/editors/asset/intern/asset_handle.cc @@ -42,6 +42,12 @@ int ED_asset_handle_get_preview_icon_id(const AssetHandle *asset) return asset->file_data->preview_icon_id; } +std::optional ED_asset_handle_get_import_method( + const AssetHandle *asset_handle) +{ + return AS_asset_representation_import_method_get(asset_handle->file_data->asset); +} + void ED_asset_handle_get_full_library_path(const AssetHandle *asset_handle, char r_full_lib_path[FILE_MAX_LIBEXTRA]) { diff --git a/source/blender/editors/include/ED_fileselect.h b/source/blender/editors/include/ED_fileselect.h index cf9b423dd7a6..df6fe03bf053 100644 --- a/source/blender/editors/include/ED_fileselect.h +++ b/source/blender/editors/include/ED_fileselect.h @@ -150,6 +150,22 @@ struct ID *ED_fileselect_active_asset_get(const struct SpaceFile *sfile); void ED_fileselect_activate_asset_catalog(const struct SpaceFile *sfile, bUUID catalog_id); +/** + * Resolve this space's #eFileAssetImportMethod to the #eAssetImportMethod (note the different + * type) to be used for the actual import of a specific asset. + * - If the asset system dictates a certain import method, this will be returned. + * - If the Asset Browser is set to follow the Preferences (#FILE_ASSET_IMPORT_FOLLOW_PREFS), the + * asset system determines the import method (which is the default from the Preferences). -1 is + * returned if the asset system doesn't specify a method (e.g. because the asset library doesn't + * come from the Preferences). + * - Otherwise, the Asset Browser determines (possibly overrides) the import method. + * + * \return -1 on error, for example when #FILE_ASSET_IMPORT_FOLLOW_PREFS was requested but the + * active asset library reference couldn't be found in the preferences. + */ +int /* #eAssetImportMethod */ ED_fileselect_asset_import_method_get( + const struct SpaceFile *sfile, const struct FileDirEntry *file); + /** * Activate and select the file that corresponds to the given ID. * Pass deferred=true to wait for the next refresh before activating. diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index b04a276feb45..066aef1886d6 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -1797,7 +1797,7 @@ void UI_but_drag_attach_image(uiBut *but, struct ImBuf *imb, float scale); void UI_but_drag_set_asset(uiBut *but, const struct AssetHandle *asset, const char *path, - int import_type, /* eFileAssetImportType */ + int import_type, /* eAssetImportType */ int icon, struct ImBuf *imb, float scale); diff --git a/source/blender/editors/interface/interface_template_asset_view.cc b/source/blender/editors/interface/interface_template_asset_view.cc index 3e707031dd24..55b2e780a9e7 100644 --- a/source/blender/editors/interface/interface_template_asset_view.cc +++ b/source/blender/editors/interface/interface_template_asset_view.cc @@ -49,12 +49,15 @@ static void asset_view_item_but_drag_set(uiBut *but, AssetHandle *asset_handle) * away before too long. */ ED_asset_handle_get_full_library_path(asset_handle, blend_path); + const eAssetImportMethod import_method = + ED_asset_handle_get_import_method(asset_handle).value_or(ASSET_IMPORT_APPEND_REUSE); + if (blend_path[0]) { ImBuf *imbuf = ED_assetlist_asset_image_get(asset_handle); UI_but_drag_set_asset(but, asset_handle, BLI_strdup(blend_path), - FILE_ASSET_IMPORT_APPEND, + import_method, ED_asset_handle_get_preview_icon_id(asset_handle), imbuf, 1.0f); diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index a940be844e06..97e6531eadd1 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -128,19 +128,6 @@ static void draw_tile_background(const rcti *draw_rect, int colorid, int shade) UI_draw_roundbox_aa(&draw_rect_fl, true, 5.0f, color); } -static eFileAssetImportType get_asset_import_type(const SpaceFile *sfile, const FileDirEntry *file) -{ - const FileAssetSelectParams *asset_params = ED_fileselect_get_asset_params(sfile); - BLI_assert(asset_params != NULL); - if (asset_params->import_type != FILE_ASSET_IMPORT_LINK) { - return asset_params->import_type; - } - if (AS_asset_representation_is_never_link(file->asset)) { - return FILE_ASSET_IMPORT_APPEND_REUSE; - } - return FILE_ASSET_IMPORT_LINK; -} - static void file_draw_icon(const SpaceFile *sfile, uiBlock *block, const FileDirEntry *file, @@ -180,10 +167,16 @@ static void file_draw_icon(const SpaceFile *sfile, ImBuf *preview_image = filelist_file_getimage(file); char blend_path[FILE_MAX_LIBEXTRA]; if (BLO_library_path_explode(path, blend_path, NULL, NULL)) { + const FileAssetSelectParams *asset_params = ED_fileselect_get_asset_params(sfile); + BLI_assert(asset_params != NULL); + + const int import_method = ED_fileselect_asset_import_method_get(sfile, file); + BLI_assert(import_method > -1); + UI_but_drag_set_asset(but, &(AssetHandle){.file_data = file}, BLI_strdup(blend_path), - get_asset_import_type(sfile, file), + import_method, icon, preview_image, UI_DPI_FAC); @@ -570,10 +563,16 @@ static void file_draw_preview(const SpaceFile *sfile, char blend_path[FILE_MAX_LIBEXTRA]; if (BLO_library_path_explode(path, blend_path, NULL, NULL)) { + const FileAssetSelectParams *asset_params = ED_fileselect_get_asset_params(sfile); + BLI_assert(asset_params != NULL); + + const int import_method = ED_fileselect_asset_import_method_get(sfile, file); + BLI_assert(import_method > -1); + UI_but_drag_set_asset(but, &(AssetHandle){.file_data = file}, BLI_strdup(blend_path), - get_asset_import_type(sfile, file), + import_method, icon, imb, scale); diff --git a/source/blender/editors/space_file/filesel.cc b/source/blender/editors/space_file/filesel.cc index 4d6c94e6bae7..45bbb25a4deb 100644 --- a/source/blender/editors/space_file/filesel.cc +++ b/source/blender/editors/space_file/filesel.cc @@ -23,6 +23,8 @@ # include #endif +#include "AS_asset_representation.hh" + #include "DNA_screen_types.h" #include "DNA_space_types.h" #include "DNA_userdef_types.h" @@ -58,6 +60,7 @@ #include "UI_interface_icons.h" #include "UI_view2d.h" +#include "AS_asset_representation.h" #include "AS_essentials_library.hh" #include "file_intern.h" @@ -106,7 +109,7 @@ static void fileselect_ensure_updated_asset_params(SpaceFile *sfile) asset_params->base_params.details_flags = U_default.file_space_data.details_flags; asset_params->asset_library_ref.type = ASSET_LIBRARY_ALL; asset_params->asset_library_ref.custom_library_index = -1; - asset_params->import_type = FILE_ASSET_IMPORT_APPEND_REUSE; + asset_params->import_type = FILE_ASSET_IMPORT_FOLLOW_PREFS; } FileSelectParams *base_params = &asset_params->base_params; @@ -503,6 +506,43 @@ void ED_fileselect_activate_asset_catalog(const SpaceFile *sfile, const bUUID ca WM_main_add_notifier(NC_SPACE | ND_SPACE_ASSET_PARAMS, nullptr); } +int ED_fileselect_asset_import_method_get(const SpaceFile *sfile, const FileDirEntry *file) +{ + if (!ED_fileselect_is_asset_browser(sfile) || !file->asset) { + return -1; + } + + /* First handle the case where the asset system dictates a certain import method. */ + if (AS_asset_representation_may_override_import_method(file->asset) == false) { + BLI_assert(AS_asset_representation_import_method_get(file->asset).has_value()); + + return *AS_asset_representation_import_method_get(file->asset); + } + + const FileAssetSelectParams *params = ED_fileselect_get_asset_params(sfile); + + if (params->import_type == FILE_ASSET_IMPORT_FOLLOW_PREFS) { + std::optional import_method = AS_asset_representation_import_method_get(file->asset); + return import_method ? *import_method : -1; + } + + switch (eFileAssetImportType(params->import_type)) { + case FILE_ASSET_IMPORT_LINK: + return ASSET_IMPORT_LINK; + case FILE_ASSET_IMPORT_APPEND: + return ASSET_IMPORT_APPEND; + case FILE_ASSET_IMPORT_APPEND_REUSE: + return ASSET_IMPORT_APPEND_REUSE; + + /* Should be handled above already. Break and fail below. */ + case FILE_ASSET_IMPORT_FOLLOW_PREFS: + break; + } + + BLI_assert_unreachable(); + return -1; +} + static void on_reload_activate_by_id(SpaceFile *sfile, onReloadFnData custom_data) { ID *asset_id = (ID *)custom_data; diff --git a/source/blender/makesdna/DNA_asset_types.h b/source/blender/makesdna/DNA_asset_types.h index d61e75d98c08..5ab24b2db4ac 100644 --- a/source/blender/makesdna/DNA_asset_types.h +++ b/source/blender/makesdna/DNA_asset_types.h @@ -99,6 +99,17 @@ typedef enum eAssetLibraryType { ASSET_LIBRARY_CUSTOM = 100, } eAssetLibraryType; +typedef enum eAssetImportMethod { + /** Regular data-block linking. */ + ASSET_IMPORT_LINK = 0, + /** Regular data-block appending (basically linking + "Make Local"). */ + ASSET_IMPORT_APPEND = 1, + /** Append data-block with the #BLO_LIBLINK_APPEND_LOCAL_ID_REUSE flag enabled. Some typically + * heavy data dependencies (e.g. the image data-blocks of a material, the mesh of an object) may + * be reused from an earlier append. */ + ASSET_IMPORT_APPEND_REUSE = 2, +} eAssetImportMethod; + /** * Information to identify an asset library. May be either one of the predefined types (current * 'Main', builtin library, project library), or a custom type as defined in the Preferences. diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 2742f62357d0..2330d7dec7b3 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -850,6 +850,8 @@ typedef enum eFileAssetImportType { * heavy data dependencies (e.g. the image data-blocks of a material, the mesh of an object) may * be reused from an earlier append. */ FILE_ASSET_IMPORT_APPEND_REUSE = 2, + /** Default: Follow the preference setting for this asset library. */ + FILE_ASSET_IMPORT_FOLLOW_PREFS = 3, } eFileAssetImportType; /** diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index bdf2210deae3..91e950b540e2 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -577,6 +577,9 @@ typedef struct bUserAssetLibrary { char name[64]; /* MAX_NAME */ char path[1024]; /* FILE_MAX */ + + short import_method; /* eAssetImportMethod */ + char _pad0[6]; } bUserAssetLibrary; typedef struct SolidLight { diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 260e4c5bc7e8..e8ee2593dc7e 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -6912,6 +6912,12 @@ static void rna_def_fileselect_asset_params(BlenderRNA *brna) PropertyRNA *prop; static const EnumPropertyItem asset_import_type_items[] = { + {FILE_ASSET_IMPORT_FOLLOW_PREFS, + "FOLLOW_PREFS", + 0, + "Follow Preferences", + "Use the import method set in the Preferences for this asset library, don't override it " + "for this Asset Browser"}, {FILE_ASSET_IMPORT_LINK, "LINK", 0, "Link", "Import the assets as linked data-block"}, {FILE_ASSET_IMPORT_APPEND, "APPEND", diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 1b10a924b128..6fa8884c54c3 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -6134,6 +6134,31 @@ static void rna_def_userdef_filepaths_asset_library(BlenderRNA *brna) prop, "Path", "Path to a directory with .blend files to use as an asset library"); RNA_def_property_string_funcs(prop, NULL, NULL, "rna_userdef_asset_library_path_set"); RNA_def_property_update(prop, 0, "rna_userdef_update"); + + static const EnumPropertyItem import_method_items[] = { + {ASSET_IMPORT_LINK, "LINK", 0, "Link", "Import the assets as linked data-block"}, + {ASSET_IMPORT_APPEND, + "APPEND", + 0, + "Append", + "Import the assets as copied data-block, with no link to the original asset data-block"}, + {ASSET_IMPORT_APPEND_REUSE, + "APPEND_REUSE", + 0, + "Append (Reuse Data)", + "Import the assets as copied data-block while avoiding multiple copies of nested, " + "typically heavy data. For example the textures of a material asset, or the mesh of an " + "object asset, don't have to be copied every time this asset is imported. The instances of " + "the asset share the data instead"}, + {0, NULL, 0, NULL, NULL}, + }; + prop = RNA_def_property(srna, "import_method", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, import_method_items); + RNA_def_property_ui_text( + prop, + "Default Import Method", + "Determine how the asset will be imported, unless overridden by the Asset Browser"); + RNA_def_property_update(prop, 0, "rna_userdef_update"); } static void rna_def_userdef_filepaths(BlenderRNA *brna) diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 80785954a4e9..d66cf407b55a 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -1345,7 +1345,7 @@ bool WM_drag_is_ID_type(const struct wmDrag *drag, int idcode); */ wmDragAsset *WM_drag_create_asset_data(const struct AssetHandle *asset, const char *path, - int import_type); + int /* #eAssetImportMethod */ import_type); struct wmDragAsset *WM_drag_get_asset_data(const struct wmDrag *drag, int idcode); struct AssetMetaData *WM_drag_get_asset_meta_data(const struct wmDrag *drag, int idcode); /** diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 4c912f379dcd..bdde49a1495e 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -1074,7 +1074,7 @@ typedef struct wmDragAsset { const char *path; int id_type; struct AssetMetaData *metadata; - int import_type; /* eFileAssetImportType */ + int import_method; /* eAssetImportType */ /* FIXME: This is temporary evil solution to get scene/view-layer/etc in the copy callback of the * #wmDropBox. diff --git a/source/blender/windowmanager/intern/wm_dragdrop.cc b/source/blender/windowmanager/intern/wm_dragdrop.cc index 7b0056cc987c..df621d253304 100644 --- a/source/blender/windowmanager/intern/wm_dragdrop.cc +++ b/source/blender/windowmanager/intern/wm_dragdrop.cc @@ -9,6 +9,7 @@ #include +#include "DNA_asset_types.h" #include "DNA_screen_types.h" #include "DNA_space_types.h" #include "DNA_windowmanager_types.h" @@ -563,7 +564,7 @@ wmDragAsset *WM_drag_create_asset_data(const AssetHandle *asset, const char *pat asset_drag->metadata = ED_asset_handle_get_metadata(asset); asset_drag->path = path; asset_drag->id_type = ED_asset_handle_get_id_type(asset); - asset_drag->import_type = import_type; + asset_drag->import_method = import_type; return asset_drag; } @@ -617,11 +618,11 @@ ID *WM_drag_asset_id_import(wmDragAsset *asset_drag, const int flag_extra) ViewLayer *view_layer = CTX_data_view_layer(asset_drag->evil_C); View3D *view3d = CTX_wm_view3d(asset_drag->evil_C); - switch ((eFileAssetImportType)asset_drag->import_type) { - case FILE_ASSET_IMPORT_LINK: + switch (eAssetImportMethod(asset_drag->import_method)) { + case ASSET_IMPORT_LINK: return WM_file_link_datablock( bmain, scene, view_layer, view3d, asset_drag->path, idtype, name, flag); - case FILE_ASSET_IMPORT_APPEND: + case ASSET_IMPORT_APPEND: return WM_file_append_datablock(bmain, scene, view_layer, @@ -631,7 +632,7 @@ ID *WM_drag_asset_id_import(wmDragAsset *asset_drag, const int flag_extra) name, flag | BLO_LIBLINK_APPEND_RECURSIVE | BLO_LIBLINK_APPEND_ASSET_DATA_CLEAR); - case FILE_ASSET_IMPORT_APPEND_REUSE: + case ASSET_IMPORT_APPEND_REUSE: return WM_file_append_datablock(G_MAIN, scene, view_layer, @@ -655,7 +656,7 @@ bool WM_drag_asset_will_import_linked(const wmDrag *drag) } const wmDragAsset *asset_drag = WM_drag_get_asset_data(drag, 0); - return asset_drag->import_type == FILE_ASSET_IMPORT_LINK; + return asset_drag->import_method == ASSET_IMPORT_LINK; } ID *WM_drag_get_local_ID_or_import_from_asset(const wmDrag *drag, int idcode) @@ -728,7 +729,7 @@ void WM_drag_add_asset_list_item(wmDrag *drag, const AssetHandle *asset) ED_asset_handle_get_full_library_path(asset, asset_blend_path); drag_asset->is_external = true; drag_asset->asset_data.external_info = WM_drag_create_asset_data( - asset, BLI_strdup(asset_blend_path), FILE_ASSET_IMPORT_APPEND); + asset, BLI_strdup(asset_blend_path), ASSET_IMPORT_APPEND); } BLI_addtail(&drag->asset_items, drag_asset); } -- 2.30.2 From ded9e2798ca1d7df0fac6e42b658531c0544ef9a Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Wed, 15 Feb 2023 12:58:15 +0100 Subject: [PATCH 133/182] Asset Browser: Rename "Import Type" to "Import Method" "Type" sounds like you're selecting a thing, not a behavior. So "Method" should be better. Part of 104686. --- source/blender/makesrna/intern/rna_space.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index e8ee2593dc7e..b9b9a30d608d 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -6964,7 +6964,7 @@ static void rna_def_fileselect_asset_params(BlenderRNA *brna) prop = RNA_def_property(srna, "import_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, asset_import_type_items); - RNA_def_property_ui_text(prop, "Import Type", "Determine how the asset will be imported"); + RNA_def_property_ui_text(prop, "Import Method", "Determine how the asset will be imported"); /* Asset drag info saved by buttons stores the import type, so the space must redraw when import * type changes. */ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_LIST, NULL); -- 2.30.2 From 6f67d735f7d7fcf020d0dacf37bfddf98a8b7ca5 Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Wed, 15 Feb 2023 13:00:17 +0100 Subject: [PATCH 134/182] Assets/UI: Use UI-list for asset library preferences UI The Preferences for asset libraries are becoming more than a simple name + path. E.g. there is now an Import Method options, and we previously also considered a Relative Paths option (which we may still want to add). The previous UI, while consistent with the Auto Run Python Scripts UI isn't well suited for less than trivial cases. Using UI lists makes the UI more scalable and follows usual list UI patterns more. There is also more space for the path button now. Part of #104686. --- .../scripts/startup/bl_ui/space_userpref.py | 61 ++++++++++--------- .../editors/space_userpref/userpref_ops.c | 31 ++++++++-- source/blender/makesdna/DNA_userdef_types.h | 4 +- source/blender/makesrna/intern/rna_space.c | 4 +- source/blender/makesrna/intern/rna_userdef.c | 7 +++ 5 files changed, 68 insertions(+), 39 deletions(-) diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index a7dcd9f68b86..f0dedc42c54e 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -1424,42 +1424,40 @@ class USERPREF_PT_file_paths_asset_libraries(FilePathsPanel, Panel): layout.use_property_decorate = False paths = context.preferences.filepaths + active_library_index = paths.active_asset_library - box = layout.box() - split = box.split(factor=0.35) - name_col = split.column() - path_col = split.column() + row = layout.row() - row = name_col.row(align=True) # Padding - row.separator() - row.label(text="Name") + row.template_list( + "USERPREF_UL_asset_libraries", "user_asset_libraries", + paths, "asset_libraries", + paths, "active_asset_library" + ) - row = path_col.row(align=True) # Padding - row.separator() - row.label(text="Path") + col = row.column(align=True) + col.operator("preferences.asset_library_add", text="", icon='ADD') + props = col.operator("preferences.asset_library_remove", text="", icon='REMOVE') + props.index = active_library_index - for i, library in enumerate(paths.asset_libraries): - row = name_col.row() - row.alert = not library.name - row.prop(library, "name", text="") - row = name_col.row() - # Dummy for spacing - row.label(text="") - name_col.separator() + if active_library_index < 0: + return - row = path_col.row() - subrow = row.row() - subrow.alert = not library.path - subrow.prop(library, "path", text="") - row.operator("preferences.asset_library_remove", text="", icon='X', emboss=False).index = i - row = path_col.row() - row.prop(library, "import_method", text="") - row.label(text="", icon='BLANK1') - path_col.separator() + layout.separator() - row = box.row() - row.alignment = 'RIGHT' - row.operator("preferences.asset_library_add", text="", icon='ADD', emboss=False) + active_library = paths.asset_libraries[active_library_index] + layout.prop(active_library, "path") + layout.prop(active_library, "import_method", text="Import Method") + + +class USERPREF_UL_asset_libraries(bpy.types.UIList): + def draw_item(self, _context, layout, _data, item, icon, _active_data, _active_propname, _index): + asset_library = item + + if self.layout_type in {'DEFAULT', 'COMPACT'}: + layout.prop(asset_library, "name", text="", emboss=False) + elif self.layout_type == 'GRID': + layout.alignment = 'CENTER' + layout.prop(asset_library, "name", text="", emboss=False) # ----------------------------------------------------------------------------- @@ -2495,6 +2493,9 @@ classes = ( # USERPREF_PT_experimental_tweaks, USERPREF_PT_experimental_debugging, + # UI lists + USERPREF_UL_asset_libraries, + # Add dynamically generated editor theme panels last, # so they show up last in the theme section. *ThemeGenericClassGenerator.generate_panel_classes_from_theme_areas(), diff --git a/source/blender/editors/space_userpref/userpref_ops.c b/source/blender/editors/space_userpref/userpref_ops.c index a7a741b3ce2a..c04fe2cc543d 100644 --- a/source/blender/editors/space_userpref/userpref_ops.c +++ b/source/blender/editors/space_userpref/userpref_ops.c @@ -134,7 +134,9 @@ static int preferences_asset_library_add_exec(bContext *UNUSED(C), wmOperator *o BLI_split_file_part(path, dirname, sizeof(dirname)); /* NULL is a valid directory path here. A library without path will be created then. */ - BKE_preferences_asset_library_add(&U, dirname, path); + const bUserAssetLibrary *new_library = BKE_preferences_asset_library_add(&U, dirname, path); + /* Activate new library in the UI for further setup. */ + U.active_asset_library = BLI_findindex(&U.asset_libraries, new_library); U.runtime.is_dirty = true; /* There's no dedicated notifier for the Preferences. */ @@ -182,16 +184,32 @@ static void PREFERENCES_OT_asset_library_add(wmOperatorType *ot) /** \name Remove Asset Library Operator * \{ */ +static bool preferences_asset_library_remove_poll(bContext *C) +{ + if (BLI_listbase_is_empty(&U.asset_libraries)) { + CTX_wm_operator_poll_msg_set(C, "There is no asset library to remove"); + return false; + } + return true; +} + static int preferences_asset_library_remove_exec(bContext *UNUSED(C), wmOperator *op) { const int index = RNA_int_get(op->ptr, "index"); bUserAssetLibrary *library = BLI_findlink(&U.asset_libraries, index); - if (library) { - BKE_preferences_asset_library_remove(&U, library); - U.runtime.is_dirty = true; - /* Trigger refresh for the Asset Browser. */ - WM_main_add_notifier(NC_SPACE | ND_SPACE_ASSET_PARAMS, NULL); + if (!library) { + return OPERATOR_CANCELLED; } + + BKE_preferences_asset_library_remove(&U, library); + const int count_remaining = BLI_listbase_count(&U.asset_libraries); + /* Update active library index to be in range. */ + CLAMP(U.active_asset_library, 0, count_remaining - 1); + U.runtime.is_dirty = true; + + /* Trigger refresh for the Asset Browser. */ + WM_main_add_notifier(NC_SPACE | ND_SPACE_ASSET_PARAMS, NULL); + return OPERATOR_FINISHED; } @@ -203,6 +221,7 @@ static void PREFERENCES_OT_asset_library_remove(wmOperatorType *ot) "Remove a path to a .blend file, so the Asset Browser will not attempt to show it anymore"; ot->exec = preferences_asset_library_remove_exec; + ot->poll = preferences_asset_library_remove_poll; ot->flag = OPTYPE_INTERNAL; diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index 91e950b540e2..519510cd18ac 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -783,8 +783,10 @@ typedef struct UserDef { char keyconfigstr[64]; + /** Index of the asset library being edited in the Preferences UI. */ + short active_asset_library; + short undosteps; - char _pad1[2]; int undomemory; float gpu_viewport_quality DNA_DEPRECATED; short gp_manhattandist, gp_euclideandist, gp_eraser; diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index b9b9a30d608d..53e5f3a21aa9 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -6965,8 +6965,8 @@ static void rna_def_fileselect_asset_params(BlenderRNA *brna) prop = RNA_def_property(srna, "import_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, asset_import_type_items); RNA_def_property_ui_text(prop, "Import Method", "Determine how the asset will be imported"); - /* Asset drag info saved by buttons stores the import type, so the space must redraw when import - * type changes. */ + /* Asset drag info saved by buttons stores the import method, so the space must redraw when + * import type changes. */ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_LIST, NULL); } diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 6fa8884c54c3..f9e10a4eaf13 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -6346,6 +6346,13 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna) prop = RNA_def_property(srna, "asset_libraries", PROP_COLLECTION, PROP_NONE); RNA_def_property_struct_type(prop, "UserAssetLibrary"); RNA_def_property_ui_text(prop, "Asset Libraries", ""); + + prop = RNA_def_property(srna, "active_asset_library", PROP_INT, PROP_NONE); + RNA_def_property_ui_text(prop, + "Active Asset Library", + "Index of the asset library being edited in the Preferences UI"); + /* Tag for UI-only update, meaning preferences will not be tagged as changed. */ + RNA_def_property_update(prop, 0, "rna_userdef_ui_update"); } static void rna_def_userdef_apps(BlenderRNA *brna) -- 2.30.2 From 0879863aa10ecf1a943964e11633aaf89db67d89 Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Wed, 15 Feb 2023 13:03:36 +0100 Subject: [PATCH 135/182] Asset Browser: Hide import method menu for essentials Essentials always use "Append (Reuse Data)", displaying the menu to change that doesn't make sense. --- release/scripts/startup/bl_ui/space_filebrowser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release/scripts/startup/bl_ui/space_filebrowser.py b/release/scripts/startup/bl_ui/space_filebrowser.py index 85313b143411..88fdc087584c 100644 --- a/release/scripts/startup/bl_ui/space_filebrowser.py +++ b/release/scripts/startup/bl_ui/space_filebrowser.py @@ -22,7 +22,7 @@ class FILEBROWSER_HT_header(Header): layout.separator_spacer() - if params.asset_library_ref != 'LOCAL': + if params.asset_library_ref not in {'LOCAL', 'ESSENTIALS'}: layout.prop(params, "import_type", text="") layout.separator_spacer() -- 2.30.2 From 67383276e21d1c936564ea37efcbca1dbfdc64a4 Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Wed, 15 Feb 2023 13:11:10 +0100 Subject: [PATCH 136/182] Asset Browser: Add separator line & icon padding for import method menu Usually when a menu item displays an icon, we indent all other items with an empty icon so items align nicely. Now with more built-in asset libraries (the new "Essentials" library), this inconsistency becomes more apparent. Also add a separator line between the "All" asset library and the others, makes the menu look more organized. --- .../editors/asset/intern/asset_library_reference_enum.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/asset/intern/asset_library_reference_enum.cc b/source/blender/editors/asset/intern/asset_library_reference_enum.cc index e94881c47da2..9aac90fc6e2a 100644 --- a/source/blender/editors/asset/intern/asset_library_reference_enum.cc +++ b/source/blender/editors/asset/intern/asset_library_reference_enum.cc @@ -79,9 +79,10 @@ const EnumPropertyItem *ED_asset_library_reference_to_rna_enum_itemf(const bool const EnumPropertyItem generated_items[] = { {ASSET_LIBRARY_ALL, "ALL", - ICON_NONE, + ICON_BLANK1, "All", "Show assets from all of the listed asset libraries"}, + RNA_ENUM_ITEM_SEPR, {ASSET_LIBRARY_LOCAL, "LOCAL", ICON_CURRENT_FILE, @@ -89,7 +90,7 @@ const EnumPropertyItem *ED_asset_library_reference_to_rna_enum_itemf(const bool "Show the assets currently available in this Blender session"}, {ASSET_LIBRARY_ESSENTIALS, "ESSENTIALS", - ICON_NONE, + ICON_BLANK1, "Essentials", "Show the basic building blocks and utilities coming with Blender"}, {0, nullptr, 0, nullptr, nullptr}, @@ -121,7 +122,7 @@ const EnumPropertyItem *ED_asset_library_reference_to_rna_enum_itemf(const bool const int enum_value = ED_asset_library_reference_to_enum_value(&library_reference); /* Use library path as description, it's a nice hint for users. */ EnumPropertyItem tmp = { - enum_value, user_library->name, ICON_NONE, user_library->name, user_library->path}; + enum_value, user_library->name, ICON_BLANK1, user_library->name, user_library->path}; RNA_enum_item_add(&item, &totitem, &tmp); } -- 2.30.2 From 4dd17bfaaadc697135bc763212f28bb91a40459c Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Wed, 15 Feb 2023 13:49:56 +0100 Subject: [PATCH 137/182] Release cycle: Bump version to 3.6. --- doc/doxygen/Doxyfile | 2 +- source/blender/blenkernel/BKE_blender_version.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/doxygen/Doxyfile b/doc/doxygen/Doxyfile index e1d8ac39bcf4..a9fa740805d0 100644 --- a/doc/doxygen/Doxyfile +++ b/doc/doxygen/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = Blender # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = V3.5 +PROJECT_NUMBER = V3.6 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h index e83abeae3295..672054b7c529 100644 --- a/source/blender/blenkernel/BKE_blender_version.h +++ b/source/blender/blenkernel/BKE_blender_version.h @@ -17,7 +17,7 @@ extern "C" { */ /* Blender major and minor version. */ -#define BLENDER_VERSION 305 +#define BLENDER_VERSION 306 /* Blender patch version for bugfix releases. */ #define BLENDER_VERSION_PATCH 0 /** Blender release cycle stage: alpha/beta/rc/release. */ @@ -27,7 +27,7 @@ extern "C" { /* Blender file format version. */ #define BLENDER_FILE_VERSION BLENDER_VERSION -#define BLENDER_FILE_SUBVERSION 10 +#define BLENDER_FILE_SUBVERSION 0 /* Minimum Blender version that supports reading file written with the current * version. Older Blender versions will test this and show a warning if the file -- 2.30.2 From 4f3ebb158ca6c5c59097419115c937343a7faa51 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Wed, 15 Feb 2023 13:56:14 +0100 Subject: [PATCH 138/182] Blender 3.5 Beta: * BLENDER_VERSION_CYCLE set to beta * Update pipeline_config.yaml to point to 3.5 branches and svn tags * Update and uncomment BLENDER_VERSION in download.cmake --- .../build_environment/cmake/download.cmake | 2 +- build_files/config/pipeline_config.yaml | 18 +++++++++--------- .../blender/blenkernel/BKE_blender_version.h | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/build_files/build_environment/cmake/download.cmake b/build_files/build_environment/cmake/download.cmake index dab4417109a6..b5da14a63d13 100644 --- a/build_files/build_environment/cmake/download.cmake +++ b/build_files/build_environment/cmake/download.cmake @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later ## Update and uncomment this in the release branch -# set(BLENDER_VERSION 3.1) +set(BLENDER_VERSION 3.5) function(download_source dep) set(TARGET_FILE ${${dep}_FILE}) diff --git a/build_files/config/pipeline_config.yaml b/build_files/config/pipeline_config.yaml index 0576d0c0a1e9..6bade75e70f9 100644 --- a/build_files/config/pipeline_config.yaml +++ b/build_files/config/pipeline_config.yaml @@ -5,38 +5,38 @@ update-code: git: submodules: - - branch: main + - branch: blender-v3.5-release commit_id: HEAD path: release/scripts/addons - - branch: main + - branch: blender-v3.5-release commit_id: HEAD path: release/scripts/addons_contrib - - branch: main + - branch: blender-v3.5-release commit_id: HEAD path: release/datafiles/locale - - branch: main + - branch: blender-v3.5-release commit_id: HEAD path: source/tools svn: libraries: darwin-arm64: - branch: trunk + branch: tags/blender-3.5-release commit_id: HEAD path: lib/darwin_arm64 darwin-x86_64: - branch: trunk + branch: tags/blender-3.5-release commit_id: HEAD path: lib/darwin linux-x86_64: - branch: trunk + branch: tags/blender-3.5-release commit_id: HEAD path: lib/linux_x86_64_glibc_228 windows-amd64: - branch: trunk + branch: tags/blender-3.5-release commit_id: HEAD path: lib/win64_vc15 tests: - branch: trunk + branch: tags/blender-3.5-release commit_id: HEAD path: lib/tests benchmarks: diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h index 672054b7c529..9bd5f2b33644 100644 --- a/source/blender/blenkernel/BKE_blender_version.h +++ b/source/blender/blenkernel/BKE_blender_version.h @@ -21,7 +21,7 @@ extern "C" { /* Blender patch version for bugfix releases. */ #define BLENDER_VERSION_PATCH 0 /** Blender release cycle stage: alpha/beta/rc/release. */ -#define BLENDER_VERSION_CYCLE alpha +#define BLENDER_VERSION_CYCLE beta /* TODO proper version bump. */ -- 2.30.2 From 38455d26162693a812e167e42ed8199be707ba6c Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Wed, 15 Feb 2023 14:14:14 +0100 Subject: [PATCH 139/182] Splash screen for Blender 3.5 Credits: Nicole Morena --- release/datafiles/splash.png | Bin 842492 -> 694426 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/release/datafiles/splash.png b/release/datafiles/splash.png index eb1250cf5a53e2e08eaff46ef7b7e05e4cd0cca6..384822af6a5fec9c04d330482823694571e02f40 100644 GIT binary patch literal 694426 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 z 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�STGZEjuT)(y1(VM%oiY`dp1Q8ZnaELS^GkK%5S#cW#PekLiyj zps2+$5S2qT`p(E&u+Lw;0Sv{BYUw^*6UDyQK9Hhd^D~F=9?uPKcue z1;*HMl4dWn$~E>eqP6AX^q8_}_~Axc-bl+n=`$LV7jd(1X}g|4%BrvmJLs`IA`H^L zE`~r+in46(U$c4fM~|GfQGh2TM8+cU0}?L;`lMxis(JAy`$T_BB~N|e<{Qr)=1GZ@K#BCA-VJG=7mf!m(1^TsK_p9ln!icY5ww9%b^Zf@rOzwF5C_lqf}F z{+1N?T(3EL-+hFxfz2)c<`on*YU}~3Q1wEH90O=uV$Uy7=C9Int}M|fCr~eD?89-c z%*g%M(Hdnfap;nU6`-P`r#e0nnH)N7y~4#j#sB~y07*naR1m%Ddy3^L^~F>6*Vi&W zeBNVCfj(Lj%7JRRpsZ`E<453oN%;q2-%J2a&EpG`ow9iJF@C?Lz51FM-1zyJ2ACMb zrKhja) zSqhP0-xCHmlf4$V-QaI`xLr>u3Y=41zV6r@zspfdXLo(iF!W_)t*9oRLlgXlEo5yq<4yatGL}oUhhHL%j!{1CxD!+)kB0nf(bP`Vbsi8K7?}P zJ2fNmnjP){S;c9$bQ%_AA!P$a&c;ecyc;NtO#na5-C23cRF2_NXN7d|w4E^)Qx^DC zIvL4P^E98eO1`~mDa})i7s++cFO7b1-7jC@~f}d z?RK)APSJnS6as#;ZJUX2)o4Y^c6rideUl#g_$~o|83+ZLcS#*OUS>O>NVUb2dYz5y zgr;(2^&OReQBW>`oJFjr zQtLNHJ;~fd*UN!ZF^Rbq%=rL>&p`U2Aj~8$<}{UQk1zjuY=^mqyt3{zHJD72)# zYn}SK>(uffN34=@pB{`Y1k@K+>e@|mqJ(T9#)w9o7#K5aXEe?_c@{?Y*G5qkmVR&v zz=<(pVU(*;cG4nZjHa#w%c=uqP~`$uNT2Aw>v2Qo698*0MX4u(!RV1fEYGg%xqH1Q zh7Cv7@T*VOIHlR#G~6}?ovIlqD6AnMb^UUTNMX!$&pD+(Oc?`=O3ZL_EIpJjQEc~8 zJ4TFHZ3#ZGYdU)8S=Lc%W4j>z(F0PeQyNG;qk}IY3i;UP|ALX598(W<6H4fRRQ@_fl+SxSv^QDCc57~!>na*hcyeXT*XU6ix522Ni?-i11pwBGDV!`6cJJ|IpzPXqBeb*EEW|Z%d$~KR3b{+;t zef}PxXk5Q^yG;!EiYEm zPOqrM!K4&!=-BQ4Z^}aRsLPhn?G`%+`~PDh)*kiNY0n& z1JTE^R7e0s`klR?SsiPMESFU!=MC9yuMUjQ2T(i#sA*vGGcZ-n`saU-s;)7MQ_P|! z`T^ayguW+qE$jwyNcoQ7C5nFe!;U|{dM)H~XC3AF1wm=Lwqs~p`u(1EE2-@J?Vhgb z1Z;*xxRwmpxrH;DG3k=;_X7jMWl@x=)XN*JRamQ8tOKV$(hPy7^K?!!-HOssl?I~~ zrO_B`3B99rvO0wrN5WX2*4@*in&abR+15Ao?Uqt0bP68C5OJ=f-Q2RfzNERoW9WMN zuIKvo4T`||X^ky}VQ8AW7 zDGWhr+IGMVQsxtZrW@F_j;8Z8ZD8L5~-{t5;TF8YMDJsqJ zQn9Q9+P5g*K^(;SN>4<1Oag(@dnywt3yUc#ZkREBXPx!%lNlPB%iSDi#o4?ZzgLqS zj}rSPdP>283D9NTR9XpOXk*j31%}-{yX#jh%L*ZP6r#;>PNt43-pP6xyiays3Y2({ zHdY+ispKJ&bf5{Cpow1LldbpeFF)ncho7*!zhis#l8EEv?T@*6^(}t$n$^dpNpInCQ<)s!wUKW82#c!X-~H+ne)`K#`Tyv8lP1fO?7r{k!@c*7F=pgYSwmM=Plawa z&}b5b2oVhq5-5=-%4A$=ubsYzzJbiNkhU_@h6|Y_Qlv~I%tXQnq5(A6Ljm1gRj8`0 z$~lHN-pSpyIPQM$i%dpUWJJ7o-yPhKA3y&y{Lf@MjRAp>_2M|ld@$5XbSEJ?0^(lV zcRg*}Vf$XNT+GHa@%dj@CnJQM=k85PM~<|&7eNxdk%&M}d1r{gWQjZU1E}#Q^ClRN zNj7RcQK})%&Z6|Og9R1O7SEMZDI^LY{auOu7M1hzL7fCJf`|mtqk*H8c#KpuOh~|8 zc}X`nlD0HmEI8?Vx~5^j+q2*8g@9(1;$@&U|DoX4q1)~1G(cWHYQjWesGw`&0T zX|P1lBUwjIWhd8oCl6G1c#H_(e5{SNM&||NLu5OQ#vZZm-57Hx@* z^THZArv{}AS_hm{c??hkah}rY+B(*pM-n(M9bQ#HQhv3TsHIi{VDb>if>&DM`z8W) zjqjqz421(sQiUP1NJh`a(P>3B3G{6*k@wnD?^jWd2jwldp)ifc7FLMzstM(?VzQW{ zwTdaiukdXnL{rYQII>J94SieFsAJY{MjHy05#q7Z>S!ECA{;N|P=!@F{XNN~iuIj9*|vMi<6~jzE{dpI0)5}IU#)1Lzo2<`Nx#`*z2|6FVvZ|{MTI_IVrL6s^tJ`T zNc2&=4(EEBT|=|k($zcMW<&RC$2JJyn9L@qcOIaWWq-Y5bF-o_7Tx!_)e5UZ1|@pF zfI_kboC?@#ikd7$-{>i3G7}?AX(o5y=IGb{8rAj^jmMOw^jJ3rB|Wr6fyFhF3D43l zV6D9EJxpeplLr*DB?M2u-%4L>B2k`q=wiyryWb?#8#W3_3vOHKXWV%RE#3um?@-!A zC(40&5y9R_bE}liV-UMI9+w?pDzoCd-qEbLl&79%bxFAl=xPc8+(0A0&5qEwG0H8w zL*8?I7@|mhCnXL{@%@x`^%Z7TqKiU0d<5Ayk`tC>#3pv@hFPi5W`da%XxrhGk^adi0u1__hII}9`m>fN+rW3vHIvtFl@`p$jo?T&W4 zquK9icYEr(p=r8I0x0+OW`lWbc!U6T?-%e>Oe3{=K2u|gp0Lo#rs zwz8>PdhZEZf)MrIv2Q)D4{SQewsou;X@6ArfqgFyi_Up;2wc~D{@}-7P?VZ)e}G`) z4aspv=E#wiZO!zSPqwVe^Ew7$G1+x=E}~OTbU7eS@~c-YvCNJZ2m5U%GV}t{UDx6I zPPkyak1-?ZzM!V!5Eh+nk`_c#ibek#t+11d2OoZma&bbrJmu)(0lJvM^oUnK|1pog z^*(fao_zWl-M$vR6X#r8iwcU>)fLY^{!8Bd?%&|;55CE(FF$9$*$}M3cm-ZzgeeD2 zkeXPnu*!k*P$-ViCp>@oguAw6adgI`Z=UhiyN`JF>?-cZ&ESp0GOwP4?ywgxbbU(FGh2jbo0UXIKDE2%w!Oq(a~_vqq|ZEsU3%R zls=MPO89(u*wGzFoRu-z7~kc6^6+CBQz|vs$hYqzz93+8RQeacx~}8p(`)v1OV@jv zrf0ivF-B9CmPu)uO-d$}6?{+#ht(LQhxnjE{x;N__nnZiIwygxRI;mpr_Zi=^>W3R zUtO|mdI|R2LYQte4!3oBir{C$<~W2}E6z@j_#1!y+r0PaU5cto6E_~_934+5Jorxy z032q$|{A@Ro*AZr@S3CAEe<8Af1%rK9=zR=w}qKX}0wH2&^Zd6is&$ ziGrLm#AxM^l9C7c76Dz_I?~;x-%VU41M8pkR#slxCK*y1w~>^K7{yiDOX;FvDwa#C z`%^)a`uq_AJvLBOfysQv{Nxzl_w;Q`v#;6jYuZNosivBB9UmYGpEj|^H1_H7A<)I4 zD}WehMWk0mI%qRnyn^89 zS1a^pk8V3A(~8-wqB@#kj*l>RPBF_PY&8*p9+}q@Xv)raFGPQMCyppBfJ|3&uoLz# zzvAXszhwR56|?z_!U$urCq}(M>Z`OObOEXouPuF7gDF`a-$S3S=(`3rJz}}MgHzCc z@e%&zS8?-{lttxxQQV1)PNxk#j5bFZa|N(GXZqlM?Ch8jgkiiozL4{Ihwo}!y(9E6 zIex(PUw(uOUi4q874D^;9W5!Ukrtm^Yp-=AR7(Svav29QqMSAzfw1d(y1Jp=?pS^G zg4yvBJw2j0KE+HI5}D~*k;S+>4+Lj@jL>!Rv+HoJqpurw&tCHECqKt5E2^_O<#LXl zmckV>zQ-`Iz9z?ycTNm^FB^Z?^tAhq%jX+HsJQ>=m_8Dw*~mGfTo0;^x(b5pS$**d z+toD}7e~xzQ>sZxS(P~xDEl;sc$Sb$ea1E1$yu3<1MwXO`rgsC9bM<5ffCtjbY*-PGk`;2dV^R3Y?INA+I_TjK&CL9to%R)>Riz$SC+hxv;oB=iFBS}W) zD6*&sxVom>Zlvr$MLE*R0Zxv^%F3X01%*M+ zCj?XD)-_>S<5r5n%l>j!Wi$JoU|@y?_B zPC%FI>0BpWG`vUK3hz4V)g_y&7wpzs+NP!6HLO=FOaaTYIm^>I)5Qc`#!NF?P)sJ2 z(6pN|lD3aF(WIr}qz}F|AzuzfUo_XK58^w8DluHn^ZAM^Hyzro3!dz{?4L(y(& zdq<-boi;g`QEG*Dfud^(!DFj}hmRg`_SQMUDqg($lFeq#;^>^&?1;DC{eZjo-(|JB zW>%JYex$@NfpS?BxwI*cyU*b14WM>BVGMd_+@|aRmaCliGdjncWJUBq(j5nvQHLqw z`4rLUIFOssCl6uo@Osir;+%Mc=w?7Z;HmLlk4GopYCJTkVQhyx4uf7F`xf%g;RWX$ z+x3o{o1J8V4X40+$>j9T({_$xZ*tbGj={O1{FuSv%W!EQb!Z^XQ^?QMd(W@5- zPtUE!x?H>t5SiFDG%&v(A}O)ehX6I?PH@Gw4c!UbyNWKjcd z$gnr!&=80%;T$dm;Y5o;MbQt2@z;2oQ)Y>}B~ZBrK7dVm_hXMs-d)FloP4hk)QIRn z9n_qsfzxWq^QfZ7jB|sOEE)v4*H?npg`b>0qvRbTREAvlXgX!x6+{ z8kNOGa4L+4CbeTDrg3P6(cvI+PLQ#aT40sElEw_tn?%Imf|q`#T2j?hL_8#80VMLM zQ&d^nwWyd@>Y}$9AMm|o7oZe6r18)(#U&YPDhjxkx=drT$J8stkrHce6T7?*vE@-* z+(s+Wa%R9&`W0?{og$-{IJ?5H}*VuGqFl#<@N=I8`fZ?JSMPM1{kId(S1Oy}t7992$oUA2ym zo(wF}U@S^S$DGy>kIfsbwiJscy${r@HMkaq7KUCWZQX(~1S8XiQG3e`1)y1^)M-YHX{tp_XwM`(idm?zeK$IJvz z0aM3vG67rSx*9c^QJ<P#807ntDt9>LyE%sNWRt5)eX(QX0zH;*Da>7ERL3xZ@o?R@Lh_td+6CwEO*G;WHefR z1m`W@bZBSsrjzkdtvF2zi>W4T)-}(bZ&=qI-YSY&!STFcHm@ir!hD{Lnc#_zQHAdu z&Awr?s(JNl&+4XOR+L;kxM08Cv0H7hlPRVU&_9m)Y7_8%&&w~r;AmNK_ui?rOw@xx zFy`F|X#*P>4r3rHM364m)OD@w1#K(6)%#vr*vaoc*W*d6H!;`^fmv1X`00vA@884N zQF+36BMrlM0>9}E0RkQuQ&GF#({!=Lnv2ejly*-tQq*vbXbS}I*}Zy&>KduFwRY%0 zU`&o6CTCA(y&YK$2T92hw06N$@8QK|OQCvc2O6YQtJ&^Y)*DWaW}MyAJbKyiV%zhw z2|R2a3#-^(y<+bTeI`2$*?1ZUIr zCbe6Q0fMgWXqz4zK$j(x#e%EnD;{5WbS_2CN73_m-OdGZWJM=#+ck8q$MqeyoX|E6 zo2!@XZfKi&Yk@OZr$|q|p@Rgvo4))`sQXd-QdKYxcC; z72E3@)>muRYgx;E=jdxk-#U(h7`;hnP+9_-ssLMw=T;j{RSCa}Ya6;c@~1Q%z4Pb* za|5AWW8IYb^cd|o_+}0El;WL#1Q_a{{!dVUCg40d-J-oEr7Rw;9Hr{;eJkxK$6vQ6 zcQog>6HCW`WoMcipXBh^1k%O;GNFqwIxuykQKR$9@5zZMz&zyAp_t;{B}bVXt`YD4 z@}r-ls{(fW!)Tr!*Y`@M<=wA8qL?ljx{oM=F4^8ZWm3kLnp7;#?(raa^v54_{pymo z*%9gn9Xv&8Y4%&TFQ2e{@QCBP_vx;lVB40`1zPWEw5I8it_pO*t7Hlue(->^2j|$L zh#W48y4$jUSyR}TT-<$^2amqXKgJYM!mKHdoS!{MJWRvU^z9L7LBooz^^ChDN9lMj(4x8-hx_YPmrLo!@rxbEw+ zo1ZZp-v7b-=`_i)5HU)^fg#A=u)5h&@4F0SvlB$eHqO@MAe=QilerE-I?Z@*%tM@j zp%ObrxKT8c)hzc{6vFG!_HC4fH#}_s9n-9(4eC&OBI`r3tV-U0`wrjvwMRUB?=7aY zxdcp;F3$25@|eBm*ii}5!Wvx8dqc)q4?MgPU_E#la>c^nSsa~O|u`8(C5C%Q3up8#Ey;$5I7lH;Swsd$LLd`Rq)i_X z(vcu3+cp_LAz+JA3@=mU2oWLnl=Y6(7Ro2Gu=Jgx>RGXeSnDC4B4Z1})RFpirs&Sl z#?9rQE}nmAsg{DtdgPr^SpY;hQ_6e5$Fy=E6`YOrXUWLZ5gd=}JyPokrO0XOX;G%0 z=}BD$H%fU`Lgc4ytTEB#$&z}FD7+(5Bza#Jst23r+Wiz!FZ zv)#8n`^}#1&5r%1mTN^vj4_I~G1R+;&D9_9^rIhh@vR?l=X?JZ5C7r+KzH>kUj6u= z^3@;xG0V5^bNbt{aqcASyFNA-Ry+?FrG( zUWqa_Mqw39XBDk(QFvZ{{3G7_{(qT4YAW{#!J|w-n}VaazDD@|f68b7=3nyS7e8lu zam<~!?=U?%M$M*ZRmABRR(Cx%yn{~;&FtLDz#;wg3hx!ctEgNJrYr%4ozEqG9ONWj zM=@QpxOdFS2j9ldP6lO}(g{PtDk5`fLl$xl0T8M8cJgB@h#=BpCUYKq?{9PVweRrN zpZ_7N&pyU$2ey#f_@crAuHLa-t#R8O^9S#6{;l6+cIP1hML9ddcMSxO>-OlP!gW2H z)gIk9*x)EaFC`yEiMEBLk4I9(V9k&T)H&LHOWS#tAI@m@I}&4gu{;-c;I1aP4%hAI zyA93$l4g5}UChw?hRe$x&%e4xA&$4w7$&8mC<{!HHq^+9p4MaJs~~a#c%XNVw&~dK z8+N;fx^whOVXKNe7bhIwz2NBKLr&lSfcf3Gu=68v^mq?Cx<`{@4gqOBP+$rHI6Cgc z!F!6nM^7f0(^FQ@AG3aWNp-pA@^a1P^Bte=S8Q5G%?Ieb-j;3ypK`cF8=HzD9^+=E|xI`aa<9i0YJcN$7a{k>>Fmw*{}`9B@zXDwEw34 zQc8Zj2iFI@k+f7Dji^)?9nuCfsO|BVJ)Es~Y+k&=t!^--09I`*swjj6)R@R8VzPrq z>2$(jzYtM~nGasFJ5uz}$24G#CfRL@Zt|7E7eJ|M*UA?En&<_iaCA@Wu{O*An+BzH~7R0<6_jg_i=njo}%QLJxXvY1U{Ia)wz%jEcidtW!qPF}En^-4MxMdwf7_pDz$ z=H%^fusk{Ex|#qU69U!;O6Qr_K-VgIrG*^USWfTVp_CgU*<4C9(#&a3SsoP^DJ4D3uUvb?s=qq&ysD`;3?2?fw`x-PJ4o{$W2s$cmITe$L z+y+0{wis-ZF^E>fpQsG7lZ#;V+_#Whn$CPL(b&mqKaGnTU2~-H6n>~PM*wKTWa+vG zj*IN|7J2Erp37G&`rZxqu2PFV>9|r@BW0nn8B0)g zJk#;TjAh22jyPb!OHT?#%%F*DwDX>N-$<~*+E^avFy0E6p-yr->^&i2+_=6|pgT{0 zh;7!!0Q$Bf$~)UgtVAWLTRUMA$T6pDQkTQ#pA0vp^C!>ajIvc>D` zxIv}ZjdPyfOZvGkI*PudFFI^lQIw^C^;=POX>k-4r<3S<_JI1-3L^}j-rxyABdIS& zz@{If@U|?d5>WPz)K3#6O*8d%PD^%NYnYuANm#~FE$?$%FkvTGq}FR=fl>?xh#FRM z{?eo0bLK!?R7niPIWT}9m4Dt|>G3rqjQF~c{?aN0>8q-3Gy>&bUEHWb1e{tcf^+P< zj;84acm^?o+TD&~c0^|_#+XcQ7kt1e@LJNP%1MDYP%ReG_cCHfO~Mxf#P&c%Rbng4 z@@#?Y9rdf&tv}=G zAO3HA`hWi)oPYa!oc`M1oKW$`mxan)SBfdj17RPkzPn-UkqSCa378isVri$MM|$a+|8EuCqH6&c8A&VId*=8Ev1c_QW{-OsZQ== zr%S3k52>$SGJWx!`R9*WJ-=jowPm-dx!kq5%YCeuh1_mLMkPDlqz#=R7!|ujD2X%| z1$MgR_`#B+a{=ayyZ4yiz0d6AjB>ibloM122|h>T^EQ*#U3Tn9wnM6Y#d~>~{+j%-4+xzqqGqonxz9|9dg|W;QGnQvZoZP?1 z^8P*MXJN(2w+P1jQ98L#PF}=`rlO-QL<3DJvZK&B&#vj&ZX-Y+TRUMeHsf*{?eoIz5s2+E zH5qtmYcWNSaz5{uHuhfhu?$NQat&_UlbX$zuqT6X9lIYSa4z6qe$R8C33>)YGNtjR zv~P0MLt4XmCuIO_-EbW|7bh3oy<2j6G3OiWmdj1Yi*3)tz2oetpmja%UV2k!zKm=& zL>nRwQhqfgqngqC;;jDlub<$WnoS!hP!#iqX0Kqnpg3BJ^Uf%|io}UZV{Ab+6(IlY z^OyYM=}y*8aCvVG5X+%uAnK;&`uc`qI>AS_U+*1tvq$xwrtayQP7Gw%qjqa5JgT(P zRtQAz`cal&2*Qf)6zz6LTTUpQ)RK2yLsK`jT`OxFLntbAkjyPT6@8$iRnWVhu4z%u zQx=-C)OeRt*aNQX&_*$zmYkkXIGMw8p(%_*g$}%vRCTu_>^3-sln*v5`j*|-4?Y{VG&3C(~Z0=}ZRuI+jCeucD2nC>B$ur{`JJ z142;coul5~aB=@E2AdqI{bVs&aCBjq9-VN!-?P2C;^yiVoAsJ@dxIh{TOMJm3CcI< z0LBNj@u)tQ>}XKE!;}Tn*^F{BA$16GPI{ovm#6&NZ~i{@ZpUB!{71C)78a9i$EJ=^ z<29H&G9}wGzLt-Qe@Cry0C7jtlg~fa0U7KnGPl*}>LjqM!Z5D`K)xkqYWS(bAY0?N z4!*+pkk?PFZhu}4dR?V?JpfMwvJ#mcN`;edJ5Yo9I)khxho)9TU^CxtfZb-x%jegz ze|X_oL4>)gRAOZq#l~UkT&Ioal^U9@qnjjq#%2LWz)7mVI z;%HW}m`|8YOD2K#U({NS~Jb zJ**kYQgBNs#^Vr|K@>QZpF0Eg@xdxBw9zTYgBt;|bFxVWB^#DkF&GqOqYn-hYZHxa zF-1dBR+LpmQB5ey3R{*GwiqTegn?<(brO+xV?qxBeyJ7`lQzi|bq_f*EFNHw4mN{B z=`ZQ?SjvLDB?xK|UWf*@P=rUK1(!GHr1a9543YEk!i(f=BkyG{EAZI|3?bRqLyLlZ zY|;Y5q{Y@{V)zL#PrX28;=B_uF41xUXRLxJ=tO}uXyp*my~5GL>sdio>)3Djcv}F9j>w1((>r-fPG$az1p+c z?C5)sHqjRw6p4-A`9RwVqh{TRtdw;-tR2;#Wd=$EEg50Z=G=WYZol%1$5^88pF15TL+=a+2m0l4AnM5op&D`dXYlspVTxBg03d>=bRM zvIcxl@Ew`RBMO7ECHFr30bTF;#XtLJxK#twlCy^oc<`O?Fu(scPl@!~CN&kwnceKjT z-mI8k+`|?Xww$1hv`aFkz|2l4r$;RAzK45%&)u&-rQfXSwrkqWnr6LWzuMC58v43n zziZfS8(i0;g2yO@Hb#iBPLG+LEGg$R>~uyspHnTClt)V@%VX?Jz_=+Um~w))RdyI; z@2?voLTSAPys-Z#VzQ`1bT+#Kx}0KcNp=9@9f(CV)o4zNMVcm@b!0kB^z2oG>{$qMR=%CR0oyZ2ofJNb94nWxu|rZ5xhG zW+-i>LxT4?BHraxbz#y@DeG<9<9Z*tE<)x7$>7tE(wyV_D(+KHqz4 z)l;`Uxf@E}AJUJZl5uQ>YAenzA0z`xoTEDHavj&G_{gPIo$($YBkwBjKe6;DI?ggV zDZ^BzYaT?*vsD`RiUgYCuc@_XBBe{jq`^x@g6K5QPk!R~;oo_m>SV@)hdqz3TW-GC z@_5yA_sDWSx9s|!>;6p!dCm(P?6AY54h**My}RUWD!LSF*teGL&6fS;9>*n<^Cgpu zQ;OvhWi2Slw5cYd*Z%6$7yQ{r&uQJbY+&?zymA1x>zb#JUoe|ZC}#7>OX2C25~5D! z2%)Fw8_afv+izJ^nqCWQJ6f{aeCP1G#YN7M-~+~Z8ak}8gt?F8v|Vfm)C)xgS~ALXVZ@QtIea4olu8LN%G|(vU%TLB;W6w`7<{wEw+%$QDL9939X=S$ z;uz(6x+nh*ic`RYIU@KMgdo7*_u?oDPUJ9^{fy`A_8c>QeLTTqTX!6p${>9NAhNuu zL0t6cnkvbU%5pTSzPxo0DR^@$ir)7*Fp+A}Q%~?@@8P2(IS9MHESSNT^hQf>a;=#j zFEQ05+u@>XwUqtzl69C%2Xba;0AdE2EwEJ;?ctWbZ3wPoI$L6@3e_5P)FC((mvYF< z+E|S(D@;+69Bm4i%w~M|Z~P12y#urS_A_P& z1RTisNPgAfCvKhWP#Q<7_m(h|u~iNRssvFyUw-j~-L{V4J?eBN5n~;*ZmluWQ73hI zic#}a_L}(_)ZsG=g^`Z|CMAThBy6c;*@KXQ&n5+JCwi(ZG#|Wuhu{0*_c^~fqbLh( zEVs&KRa$2pIg}TK(L5v_G2Bqvdj%_u_t7+G@>+sDDmp2LfQQad-Z@WOcQj>7UAIi8 z9YyH`TLuoC1;c=ZJP(189Z2aW?2t+xZzPTA2&IpK{up>4UQXpfIUElqN@w(b+P9M@ zCv9Pw=q%lE$Z9hWdM-ZOd~RL2OcFsKGIi=QRpyND<0dbEvG;is-`T zdW)nLT<-{>Ap}p~HS~=D^AN;f2XL;JC{#DDr;ZU)WYPB9Ek_8^oGD~MdM#~WbRuq#pOCu$){RaeTgDzp1%;v0{C- zrRyEKbu@KLy>HlDZ+QOcuQ)zGV|siB)$)jw zci!h~*DtyL_%C?zlb>?=`6s;m;*wXNzhE*gIJtYo?7auf&QB<&B}R)P!iAy5U%PccPJN2DU0cQVMtGUF?ey< zH7)I?=K94`iusIow`X^~X1Cr+ifWM7fG#AbLX4`$h@p#_H_KVYY*OH-6?PeDiw!Ek z^z@u+wm`X#&}$(HOeBjjFWDH2wk2kH3X7AGlThk&CGuI2dMuOPmjOg+gIS&k=r(E7 zGZNLwq+k(<$G-<9E_x}nJA&)8{tz`kWHlV5?8t`(N1D=5R0KfVfT^Ywvm>Tw4{`6- zxOPXoThZ-r=<6+gQ{%c$j7|V0jN5)+Q%q-==y;W%Vnj-bfgyMHPzr1X%COrvG!8bq z7Iv*f!gG3hN8hbbMNRhcIwwW}NSa7q=7Y_!qhO)A$YMWF^`w(osD zClCo6)j&`^+Nb4I8jVCe0}5-S0TX=g?4h-+x1f;j8rtXAlJkmafD9!N(Rhr`1`(YQ z_m4ydKNzrSJBmBZ0ni$FDh>hc?G)r!mwP_{Y{fS|yu;#JKjF8 zc(5?kE6>iy5srIVN_CH>7s+%^#_!l}y?*iMYRx~i=f!=d;a1t9`mcuUeWfEw!#!BmoGU!nsRnGwwwx1 z+Ey8jHy-C}y8Rm6?J0F2bUl;8Vy&z_=REt~0nYxxtrA}W!UzetVaTU+sgjy zJ*u#xOI<226B`E~==+XlUlW|i6q-UQLf6Z4IT=xnqOyv&?jLb_V$t0ddiFK!+y9XM z#gFli|0TYur4+5}Bz?UDiYZ!^sNHiYI(!>>DV)MPBLLm07)g&&^jK#y4&N}Ew+yzE zJVk(<4j9|pVYKHB<#=QHj52)-=me$mH={B?oz}_Nmtfzb@8(JCL$%pfs>MFNm2T@C>A=(y3vv-FLn@W4*L^`*iPFGv+w%5=8riU7iRT-Ma`yZSu1W(tsJp1w`y&E*Bl(g#D zNlM4kSd|IC6Cah<O*%XRNWvLp20`8s9`Hk;C;=OOY zPciEH1LVCVVVT=s2M&VQJr=i)QLnux^L3cFq2joVOD;ozrtPWPmZoWFnwE0XV+)IP zV~As(^iI6zRN6Mas}OI+O3+v_^dBb+aJpZ`sNOrh|N3*h2L8euj)}L(AV}fhRgy5i z{-LC^P)ceJdLIoXj^a!qEFTjztt+Ni}nH`<+DXlsIF0rG&sM*0S_n z4+SW#aa{{tkE?6?{hsaRN^0l405n_Z*ap-Pj70p4`IOn&F?KdV7twXDG}Fa|$)e)U zTPIvSUrSWIc66P?m=3*bSYK@^s)E^KiZ%s370oA~vHtRZpKWm)0PockY~u=?45U^<^; zi;~@TN85FhwiY+xKm_SNpb*edHz5*YiOh6m%jIW3<@l{{p-q_=wi?MCN}(qUP#Oai z(;3y#2}cjV##_JjL-v=?xcc}PT>sTC*gSd6cDv%~kA6Y7>nIl`v-1UuvtyQLbLP_$ zWec3LLX6iZGOTDw`H*XUmG^@)Da3yAv5wWZEumTC%Of$0<;@5lrA?EvQ}p%){pvYg zy~Xt%27}TTJv{;ix~MR-Q_So*Tj`=|R9>G-!K2^%A^YnMb~?valUP$7^;3|H7|{Wp zIO+CVj258&?6apdokUanm=V%-jy|?$>U%$uYgvb7X_?O_oSiP2%`2+elxlgz{Op{g z2M?K@U0^4(*vs4uJdE|ANC2KT+n>vS+%<6fa8t42it?_ygUHOdSVGD<^l zBO#BMkuXM!!#Fx{5(!!+!_fmTiY!=31x5{NhWh1(-M(S9+Ogj3+3lK0sG3?zN-2g5 z@*R-W(9$RhtEmc&51Ol&E6U2SSWHpcVv)A3g|&1FX~S3**bwMjhx3x@PzFtjqHvzZ zdHlYmDR=0iz#1@0)9p%BE1g2Rwxz3MZ%!lS362yIGtqYNH2a#qchVkJ8M;PVHKvIP zA)vfxessji`4Z)J_7C)v$_ zMk#_;+&NydI5`>_$|InV?jvQ1_(TSoNaGU!jvwwvjo_J585~2%YfkA9$+#@#VxAYt zFfNL&Yci1VDa}50(eRECfqCLc^3G+z+wC`0XUCM2DXo^uU=s%`Bs(*<`t%CQvc%d- ztXW&II6mj(;yph7=^wM-y`-8IaxEkGVvJaxTA2Z#$AL@4ae1MtgXMZKXXC%KGx7Gj z3HYkvg9mU#C2&1};xzW@=;4fmeoOM8qU;Qrcmrrl^D_8v4xa4w2U3E+)N2Qf4vhLx z>+uIee)|A2ML3t`Ka3tL{T^jCgaFQAz0CFH)ivwutz?6xaZwD8-3ZLh7>ug~;z!(6 zYS@cVhc_pg7(-MVBBzT^`-9JAfy-%0VKw*e9Wh-@b7t|dpA6Qx=w<~j(*G_k{rN~OUnlAJc;G;QjZ>8!(*#Zba|%PW)}htUQY%_=bN zgFZ5x#wqM!kb%+64g)=?$~d97!1eg~1`L`~PsT^y_FW!6%itJIU`|q#L+>Pt5d@q_ z#3%}l*3p28(Vrwd0hIPA7wEhY(=_!SyW6l|uPCZ3s@aTcw!oGXjJ1c}QWXc&6cp1X zwwmGkj?lNbzKyj;y`*(#Z>77XFkM#C$*>)q0O4><(_o}XhLY3}c`O0Wi49!E^9;faU3`T#V$El2Yud#$lWLEjp@u>{vsYN+=$v*`k(we(fp*SOt|&C46S z>o_Wb-m%cXv-SW0AOJ~3K~!%Xb!WKhl+?uqhc&R6?O9x2Gp#JeVoG&#jG0bzdT3E8 z?!9xy`Mo1vKE3Ah*_y8FP|aSK1?7Cn_kQ;u(AEtffBG@b2g*r_ zSKvbrc!D0v8l020*}FjFJw@SS%f6mw->_TVuzmFf#}7Z0dDmu;YX!=dV5=+|NqLwM zD3+&8&hK;l!FR+#)$D0*Ub4S@#`fhCR!_d<`tes>{puNC?7pNZJd0V$d}>j%3OlJV zRY|BST--g4)&ye-)?l>|3t5Gvs%xoP_P)nAJCvD5Nh%3r@*Ethm|~9K!JNFuB*}hu z%Ee7HWvqad!vvor9Kkivx6tn>t)h-jDL^71iu`w4Gs={hi9r`7r_&kp^E;e>^@Mu8 zrKubGRzO{dGK`lDhk(i{{6$evOiE^_rz{>kpp0`~OlRn#LYq{2Bj1diVFNhNJ6w#C zM;(z;{vylb+wV2(4aKRXmQ@f=pDqCGzz>Lo=Kbv;KR^nFhP`Lprsj8fQsN=5KSIgIbY01 zf)N1_Bcm#tx7;=YUNbbe`<|cv*<*hDhaWIG>v-_6=Ixg?zkIgmFP}F2=KC`id&QB1 z>z3S}NijCwAhk&vh4``#Hvh@2sRaHnvQy1HGMrPU&o!r4# zP*S_x?dw>BEiLA{riTzHjRp;UCu_q#IFrsY&6cp=(tY{w!7gOBRYg$8c(<06_0Hqk zo_@PQml|se2nxTsrr)k4%PknZ)A(NF`XEGOy`t~L>5|Cx-k^*IU{2B|<5*PM+eWtA zAX=l}!hzf+NgquA!!NBB_a2;c{^;%K;P7uaatJhx?LFZiiqZ3=>(mG)#wC@()flOU zXzSTPF`Y$q88goa;63$zgEeXIO8eUoN%wvrsY`(qaa4Nxwqa@vwyNliK?R>n*koKy z{MU2w*4w=QogZ-dYe@PNZmq+w6rrl~RQ1lRSvdi+e<6la*Ha@*%| zihITiw*Yx6S=4bq8TO}<7-uIM=m5ch4MsB2(k*N0!u8;M!MDD4m&vSRSy+^FqPs>9 zbGYi{-;5X2VPV*dNANi7jnM?YS$a70xN0J6UWXBJ zUesIT`x*EdhA*3^Fnh6wO*tg6o;SQS`G*Q^Y#iiqQ{+00;o(L%mp02o{CMkYP_-$- zAAFz>fi9+liC0c#VzHD;BzidtR5WI#?{qY%LQ1_9!!$T2b%$LS!R8Ix6qwi&OsT}! zmm=AzwZJHfoS#v}T2T}G;6}w90lJSQbSc`NndH5YY-He`0ee!wWFswuWvvBcYlR9i zs;G4gKn};{MH?sLa8ajoGI)RiNMtw)R9bW*CtcUlZ5rDBo_f1uzum_4s>mjvL?Og} zvAv7Y#DT?rsN)%oDFvD7-Xn(Ne!b@G!CO>if$KVKQ3}huHW)4Kw4}Z!2Fs+DtD^xZ~rxa z`ll~=@~WnBPU?4KWUgykHrFe3QSiOL9r)hw{nuPx{?EL)yhisHV;ovLSwmjxc0!0z zw_c1Wt)c6jfC8iGnvS+=dGX1A;N;N{q)pkdGG*XxNv;bSi%0%DphHCGuGqbL!TRYluAe?<^Wu{2{s!0VnUorD6?R&2vY4P|6_e$H z<#G;6OAm4-b@{&c=yr!T4Z&1kN`fw8|5q!~ztnqMCAl3Gt%_MI64huS)}n{Lg>Hv( zEvbh)N`ci9X(|ed?AkI%u9eoZw#SAAP#tYp+w8&J{>0@ytv^ig-ISY{*j@Y)BwoeYtp#6vK;6P53o zY}|Ic9gjbI%;si`A!GoSYR3s;kQ=2iimU_k=%&9To2)oVRqm{j_C^sa`CKwERGe?E zHOe_`5Z&K7kMlwT-lbH-k*)Qbh00*y$w+&l98sPoPGWNjCb!&>71u3jYQC=6}l>8 zR+pw`$`{XXNTi&yzWw0^lEE1QMOAQqe!}^^3ucQs)uhU8s8Va$5IkMmvfpgEdi9FO zpM1ryK7GOIqTt@?ocVHwDlJ|abSbiw(hB;{(Kv_l8dX-zCYH%mSk=|dj+;%5GEl0( z{?f5k8Xt@Ql~R~OOY1nTDYV8}2S&Oaw5`L%Hjais+ej~W7oARh>*!qEx1Gb)HKA^x z{u1y01*$s5Hx5_tC3@a@T#t00sXO|0jjlF?w!>}L_@=>isnd?Z^;(<&oucm)T?bx| zfzaW4KFGvK^AN^|-ZsCZjggQ^Qb}P1#K!0)>5BA8HJoEQtC-!tU_L*=*s1UmjBhcF z%vV8Ne|0gU??^Di})VnoWR~(LaFg14Mz1=|w7I$-lH?cg`nw(9TIZzG;A?`705skrc{^t!N{D!iG z@t~y)V`~cm=*c#WvfOnNMQ@uk5JyY`(n5C2W^(@erijyuqi>y+JQUqFy0(1_q96<~5 zR3--r(UKZ5wo32taCmQNLFmz983A+^SN4#Sb1Ma8LOT6|Ry`VPD$ zXa^dmb7@6n3X4OGpsE0xhF$G=w)X71z09698~@;fXV}A2@{|o-$fB#?U z)Iipug8Kgnd$Zq5lI*_k6OoyB`R%nY-CaH1(=$EPY?|SaAVrF@Wy_FY!IotU@RMQx z0sdzMzY36H7zPB{e(;M-Z=@tkBqc6GaeBzvdU~tvSM{skc9+bIh~tM7Ti&XnZ{b&W z%bOV)apIis*`YB=DA6G<8beHLHAmK|@nCEWZWy^dea!XKA9MKDUzzSiGi7r1{+x)Z z%)jEgH5Rb~qW4WZquV=Vc{^~DYArlw!o}`xWV^6R|%JIIF*8CD?an~(;I`m;kXS)C zcua80uk4J_?PHfWS5~L~4mB6|@#e=`pYUrkaHbZi&S(@gs#k25i$ox6n2BT4*a3&YZ%kcs1`? zpTFeg^Oy8nHRz>_B@d5OOENW*K)_7G`VlcF5>tujN}`KE_2ue>ZPwmou8hT(N@_ zm>u%-PgabsoF&(csf_0l`!S!-dHCop9=`hyi-W^rd`TgY)xAmx9Gu+Z`1TzRk8kpm zAO4ijK6%W~K0oK^Xvw`B`y3rCI6hwBY=g(s%{#m?j6pB~Bm`|QIBQuR@3D8d;Kt}Q zI;_!9=ymV8xZJQ_d#<;R^;J*buMuF+Kxi6#+hAKu7(Fnz{; z_K0m%_3>ViVNDnxW9F9xC%CH>pm=|Geeb648DxzwpB*0+c^8k~p9@q{7b;zZ-xk?8QoO>RDXm!_Su>}D+XPiWgi z`qeeV=7RUW`5j!p!v6Hnd3k!qC_Wa`iuY|OQIknr#f_AW5^?TSiF?DNK=JZ^XLa>L z)d7iXRv$-L9G^`Vy%Rkp|7QvzR3GOvoBB7k7rR`iCc!LIn0_YpCkb!mi&q)z=QzJ!b9R1(i~5=|25ibNuR`3jzEkTQ)q6~)nS@6w#1r+% zShO_m32palwZlk~AHe86f)>TK#%Oer56CcR>Qzj8G%@8?thSyewv9EmsuN(!JWY$S zQS{DwdS3frx=@-ytW0BIPEcME4M8joM0Tt5sfxOV^ zdi7tvcmg045UKlsxZ49;VN;Jt$U4nxy+AaMKLzrr`a{Vo3R_x}JFJ@sBhTjj(MGGacf_DI*r z1!DuF3$#sO95gKd^vC~}!-rqf5ZFjjxgz(@W0$4tHl8wjL&Q)iOxYL=s<@|CBsMa% zcD`VKe1qe6-s6D?UvVR@?^&&{c=ppD^7y0g^W^(K;oYx(iM<=QF{VMpqKSzEgb{JQ z7K5{`TH=QlNFSN97PnEx9}4Y-Q9Zrhm3<>oiY)e^6`-RzIbd&b0~>q2YTx&&Selvc zAJsyll8aF#zUjcW7?b*KC-3$SlLtMnoxP4W;!|FqT>(+;dBGPUm=60(8F7)AxhMF} z*phKlc8;GMKoqdEC8nK4o)u#C;21s`L1K}pQVQ(9*7FVfOjLWo<1dvPWMoCn>pY=@dj=mEyyo3%DntZU5%d7H(Ymj2B zO(;1-65z$zn!otdCw${q-eK?d!26H3oL!B4e7fbQPkY{fFlRl&wGXVuDdC$$a)~!v z!}mVC84KkZx|yY2%xIPiuttrg?UKhYN6s(%Vu(xfmEsizHPm#omWOXY;H~%HW3jhS zYCT0XjOE^px9%Kqcr<6(8BGJ4 z&lpEXu|%e1_0T71v~M*ZM9e|gTcFCMc#zhJZ8 z#>h5k#L^hp1Z}k@y>`ISLWshwv;4|;@A2-JZ!^F79%27o#Qi?Q`ZE~T&<`5H)oXFM zFnHW31m7^a27fWq9rT#S;0H%=f*;h&?!4gQvmYb7_v*c`qq-&vN?Fpx3@VB-d4HzQ zvQj*GL|l@77WdeMznf^pkLw-;x-RDL$Ci<1Z=d<$4Ujsm_*rH|2>!HxJ)I}!QVl_0o`nmrtNs}{)Y_i z-@$q96->OLs2SPFmG}H~@7K$l@N1c+YQE|>NpVfDO~Idu<&^WLU(1`%_u7@pd3GO3 zF)fCdc#Zn_os%14KDJE1u76ukg4wxvep`v^$SXI^K@9VG*VjUx#rU?l2H(MhUf)!%FfM=&jm!;_dgtaZMO zF0IevBuyaX`}RID^4L-+RxZ{s$U5&*GDuBfoN;$+h1XgkPgQI4T2FIwvSG%UXhYM2 zIw3OOu2BWcInNjhIJ~~R0gNckhqRUx?yY&A*G~AeC!U|axZ>d#8@~GJfZGpFXqIzKV>vw8=ga#uPM=)x zj`3F z(IWNWDk`?T|Eqt8$3OiGe*WZ)#;B2_L~q14Z6;Q97jRKQcP`+Xz|cEv({TRy=k!-E zm>=CG@3sUe3sJvO0!?H^R-OdBhK@(1U$_s7$c-dJ$aH>f+tM{HM~BB8+eZ2?G+1X2p0Gt7ZmK#FxYE zKx~8Q=2$xi0<>t$uf1b1sY-gPYHjoRROrNTazMN*VY|ivcCz2|oXYeg0Gh7KkKX`5Kv=cu|J;~nyHsp;ztna5nSSE?oXwa}JI4kn~l!xh^w#UnD z*P^TuspyFb?bXK0TFIAu?idjvf{Xz-Y6k<`Y2SHlqt#)pQG-EL)_uR>@u#07l)akx zaJp`mb`?)fie)fWs5|6VYA!^>u~8rrVz_$hA)ffLK|?(o@i?!MMovluk;LlD(-kNJ zLF)I_BY4drbfb@eF7ofjYMaK`gBFRnHKqSYL0=-T^!#EBwyliGhOCH(bdLC37kEpo zR2A~5%txc5zK-p}D(s-Y-3d94^!D$*{~7OoaEHC4eNOIg`O3wXv$f-+(~-M}4Yv;%Xy?D$ckm+AJG_AdvXm8-J;>B?O5&~aO>ec-u?UupMUm*Pri7;U;O+f zv(9q+WXb)TOHPjWFind$AU1Xa5Ey7^+Zl8%(k^HZ@6z3Ti*Ba1EZS~P+bx(K+(SZO zb@`mt)eDB}7i=!i>DO1d&6Y5X4CBD&>=oCqu2`*mhV6(QJ#XFL=evLXt1NFE)879r zjNQjwonv0T#9f^u;t((R(c{Mu|CH^zQ3zYl-pbML#j5R2J?7&edQ1#<^3fm=!gT#7 z3n{$Dl@i#k-Vh!|Bdd0ZDW?WtA>+M>V=V2&4(!I;|dvq+897P$tR_dS4GQP^`kh!H=-QF!K zKM5D?)%zFD6fk}f^hZnIfu7ysUbt4 znIG`*%irMg>?zyRbNtp-3V0H2mJQ9sO zB595#uU+0#P$|vnZ))_*5z=k!3>Bl70~$T7g|Iajec?R5Rl@?=AXhnNQ$4O^fQj?e zX5~B+#}uEJa5{M-(G(Dqwt0G;$tDwnP!V!c`=p%1Oqgp$UDfqMtcqE}la!!?fbk~h zMOb6A)yI2N+Tl!Kjj%f~4Sg-lUVCj9Ff7%0WjYa=0qhcIx}HhQu9gXLQ)PgdH$yr` zGFZytFs6ivC$B~tTV5^EZ5}Ejn-D_^Kdu*rG?p?BHF!h|7b-l*A!LQzr)Y(0sZ#qL zlbK+Qz6>ST5fNNe%rP1suWJ?J=Sq>*DigWBxZuvihcWjhrX;j2CIoC7tAjRHL%zk~ z#}N~AIc;Y-STw9w8|Jf?MbokEhe$t0Q~!-JW*Y^t7_Tf+4-gW`Tq^EQZE*F+6=%dB5uUsRX%qRStHNK8b%-yZ^Nk ztr7IJl!dMzrqIo6-g7B0Wb9*T{p82hQ$i)?4JWXZ!>8x|g&$1#MXr}o@yOld1j$wR zP1AzR6==Fq5jkW9TVGdbCiAw!!}4_!A9gMqY{@hhaBhH&p_wmYA-p1Qf^+n%E57*o zXQZNiY06V;ED?>UNxV-C8qyml%@_?`2M7}L#$!hUYYa%xisG4%+Pp8CM!ncJrhkkv zwa1ILXESk}ISS+rk0Ne%08&sdu_SMJrED~9Lz^SZB-gj{L@R=|nqnSlM^ma&ZhhJM z3EVW2yyS7e2Z=f9CM)wM6`l)K$a^%(gpd?_J)zEdlwyf=e2UJ4YQKK03rX zPd97m<}J-aTkr)R@S|Y%4*1EB&hP=SA?HM9@-9dYBEViO<}7A2!mw4NYKZL$bA?}n zMh`Yf48P143~8{PrD;04#UA^|C)|GLAzym&lBb_M;qxy}Iem4-v(szt9M8FRvd@i^ z1&eM$z-WP7?_nHiI`w#lV3-B<+X0EP^vhql#oo~#VSB;&><^(mB)DE%SvtWF4g`V=_`&0bz&OG<2F4!3 z5a?GPJF^-JKM1bZYVFP&^_T}r6o)_)afIX*DB-h{hwQ#gd^4_{l)WN5Kio05WTm5a zGGy!*l%^V6ynz~dGHM!C!ovyEW;AcGheym0kC-D>akk>+9{Uab^#$w8bGFx)+L0#m zyfBV>Q9tJt#X<{aL*Pq-dgZ(bDxRhCUfgS0UB%yL>mEOh+%eEQ?G~Zc1DXDIIjX%tI%2ksr6Ac<_OMe23_u_ zDCy~anw$`y3$#w>n%>iN6PLwOMzVX;yTYRuRpnfjD4JZ~r1gvEPQ;b0W61++O$y;m z%6VKXAJqCSv8QV&^HRt~s+_RGs08)qVpJ7qB9Zx^U=)a(Qa>L@1-XJ`z?=l)=6c1@ zZ?Q%R{xJvlPH5U0dq)jl{-qf&pI!3l$7gJNSA>~pIO3~d zwHNkBKVi83hkW>-|JUq2`c=MUEq_yfkKg&%&w279=C#+B58LqI>%Y$JKltYiPoH6I z!#E7FpSIwG(+a+}|aqrm0Lc>T+s)oJKZ2pLY8+X{8J=J?L0ilH3d5`v$?MGxg zDmZi_TFuic*KK<)p1Hd#w{iU=nT-Q2X>d=B>p#UW53}_ z`u*h^Z#kyzw6A$OQi@q}H;nD|v*{d$?R8-W>6x9^S(+CFV&e5_S|$kW7e187!VaH~ zpfKJ*`F6tdDo&B7$Y@(QGlOoSh5Ot{0i2Qkq`G2l*hzd)1V3!mJ0ItyHvR~LTU~*< z)@X^YBLt7@*Id1L&e_?y@*jw807LfZCSz}tcv%cR$CU3Rjw{zhiF|?(NCD=WpQg&Y zHEM_q5<}aAkA}|TIk$0^YXu{%;{>9b!e=Mk%4ijF3Bovdm?z_LR4y8WNP{s^5%Q9i z#thJjN=gV?Lep6FC`nPcljmGhl$2#89+~sb#l(E}w1j$R%9B*y=v*X_TNASGGZPZY z7=HTGQ{MmZArIc(!8PA?PTRF*_3%m&0}l6Qqfi|FDERm@Pv9lB~7EGcgbtYN4ZqOHc2sz{7@u1C6otA zD!!H#)l?iVD#+fIV?;=O$-Q%o!xkq2x|X_Nu(1Xkv>iQZ;^T318&o#$9Ujxp7OMQk>zc;K=*xk2Hp|NSRPiopJ!$T<*(GXn z6<05!!;qsKvy;k9y^QQGwMjZadS7AenjUr^`Lac)$@rN>6P5hi`TmWMYK#?NF5kT- zcgy>9y$Q)Py;ps|JAzsoRMJ}N-yq_-8bq_HLefPvCro^j5yGdRKjn}ApRhbQWVW|QGhZ^d7Qc;c zu2Z+HR3toN%48(97&?T;30_9VEri(&+O`;!^S#J~ehd4E^P2cZ%+YV!CWrqA)bQPp zp6zy|?+3j*G73I|Rd2vhD)=U$oLX2V zudqlexKPHP?lFB{h_F)TC%~1-`!{)?6raE0b6$V{rq5~+nHBN4zjCO0{!Z^T1i`sz zK*>sYdY{16bknnY&$WU;RQlr_jlQ&{Nn;QZWelNMoUKiT+a#r5F$^QC%WDo!j&tup zng$brrcQ)FV=!Hd#bD-haDgyr-dAhE_>tSUjyQdB8NpR_97SZT9hkI@U1pBi7?aqu zV60{1gdaQ;K7RR%ufMb5%OBieaeRQamV0mA;NWP%$3K3->FKIi5-ms&UOCwGLjU8( ztp3q|$2b0q|B|B*zRROu3;g@x|K*?k%fQuojC7ZjsSax`U;oX&&C`GKj}T*M+LjQ6 z(T|7-ZDZryL9nsdRHZ<8ui-b>FQ2o1`2~A79wIiB3eFQ6+7$(pmCoxgsUXh8nr$ca zk?Ew`TP6ZVJ71P_Mc_gUwwu!~5Agjdp+8fgVU(HrAR3P9yc!;cfN`43Ypj6P_EPxB z8xrxyMOS>R`A-tm~#v9u)sT7*W>#NTu+R~dg#N;#6c9ZGN7Unlf z`~qk)jPb7Uhr}upy%ZKmc9T}?koKB!Lk1#g>{0<&a-D*DP=yz!w1x=}OZ>iG|0v<| z)zdMlJh*M4i?s&o5crAGUp(naNf!}h+!DMi*VqNE$+NUwtB1I48P``l{^V1JVa&qV zMNe=t?6%Qs9E2EoWimL3wqp7D#gOUN7{hnoKjL7iA?r;8rZJdCfuP@xn0Cp_tH9GI z+QB7Mv?@^!WJ#W16k71Htzzn;kh{FJTIts|DNnMYX=kz1OH$PJ9LW%DS}lOo&gLxl z57<9B=J@20+czHb__I^a&ab)r*$ZBrt+;#VfLnJCIXr9`dq*>l&~F$v*H~F-gn}Ok zq44QsMDnACKKs6Bdws>~)j8v~CyW6TmCDU_WZ7EUw#APgx84vo8?Dmb54hEqaq9_# z0!{D14S``0hF);asNp>r`i(H}H8*`6gt6D$b1x}UQ8F>7TveIykSSFaQb`LUlLeZx z>%vPWsf0xSXNnA{&%4WtO*-D%>ZsW6OhQzS({oXdgLh@VQ{lFqP;~E7x=tLUjWt+I zz#2hB!(?-aIR)g`h5%K>!)xt*L;fp~ImTGTBqN$BI6Zf3iecE+usl3gIhe3*TqQp$ zeOcR-Q2W}eAKR#9T$?P5(O8%2apW1U^*dAXnrihE&fQ%c^V-MewPVWuCCkd1<4IcM ziV{*3+U_N@+B7j2B$@cy(UV8k$9V06`Lg=e8?K#Y!xXno)wwcprFPil)HKF0Ya0e% zjMIs)+0?yi$7)rsYVwv#_p2(H(nqT0B1W{OT3*<457{%H3ep)1_nXD^?pg4Qm4{Wys!!R&+v#h&ls#~IgxR-L|a6rUjp%jUG z4G$&?tw4K}QCV^_17w&Td?J@Yt8SQDdalc`<* zOJTr8NiG|^>4|w4`QD?~DY{Z5 zz!()oqW35PU*|NmGwBp5j1o~0o3AEno4!21VE_1-rm?iv;*5sOiVWGJj4`x(b8Kgk z)?l0prmi*IyL&`yg#G=Fu4@=a52;hH1g(q1G_9Sibh{8HYcA$)_KmYil^|qz4H72>l47yTJVq|CnF;PtLgWoxj1u z?_BY>#_#hxe{`ku*3B~*5E1Tw^}F1E>$myj(@*J#fpOFjwl;^+f`-CHD_!(R1gi?L zcfvRfoPGR#7RwXNVu^%02fgg&N^gtbO(aTGq(T<3y7j7HtqHwKJf~!^YrB$XFCrK# z8K8*7FeP(~!L2kW*EV?5=Foj{0XKO3=wS?61++0>qQaC7KRR}Us1c_@!=R#N7eiE_ znn;7Hd&y2UL--WWbCs)o2`%Y20y1qxGyIK$wk5+w5^_gu{5y@*KdASM zs#u)v(E^N1RpXk^NU^yGIKNo)(Vu+Ex4-*<`9a5nn=>9f@A%|=Ov@Sp&a7LhOVDQk+810x(P4t4%C$sCnS4 z&A@s)V3!@+>kTu&Z3e<>OBfukceu^Su-3L};PDPszK6g#fD0g^VfX8GV6oDOuW?Z2 zeDn#G6`qkul$ZurJdHIT*BeL1jso{OTaLIhv!QrlAuFd- z&$Wvl@)73-%{li)A@{EICQqq}Ndd?P1+;Sl0<*;)i=$g0L%HE7=cm!1wf8>c&~wGK zKF1ZDIjYz2wIBWhWoVbAb`RhEAl2DPX4KQ5e0n)=VI1juPpV3QL1kTIraFWv)S-U`PmrUfBsa7PNjE`x znwhMAN_Qx-C3&PV#IXpy6Rro3U^NxYk8FpL^?FU$U21yK-jc3s5e%!V6;GeO;QV^c zAc7M$09un$*(_aS=~}DZ7}^HYwsiYT_HUjrUoI%=*VFlwyiO+nS*!fMiFKTkL4Wjt zZSP`V^nt}N(smt9r3cpfW8Sktu_?xAi2LhItx}w889x2Ce3lQ0OO}3}vtIW-n{AH~q3gP=TpMfzj6^VAGdVqxkL^jQKdk{>e4iFlqL()W zOUe`Q5tOCpqTt5+NQ$jQHWRH%nIP-=ArigFWSix%l|;Ppv=)l>w|Z@>_i0K)P{lUo zG1k}2OGAE9&2e!$=qh4)zyZUT-iF zs2b3!kT&3*8hk>W1e3>DOebkW8ImUoo~|vg{`8Vxda>avU%kcbc#oN}yz~BTj*b`n z_|H$dyzKRNM&+6FT0GACEyF+kU->JmbMF7z-{isdIe)ADyy$Rwld6a2tH1gm@Z|G< zOlVu&=(JCBY>6UuN^)c}DF@U?us!r6m(M=s{)ZzCd({L&vHD7Wnf7VjVlATgygsE` z=TvYOS~3%&GH6jYlUk*vE9E^R&)?@5lNfDhRNxbp zCS$Oqkb7b{t>)Td8XBXXt#-Z#vjc76R`u4*UN~#Dm|ltw2p-$bi(w+uaP1A)6`yf_ z8g0Keee4Lw|LUez& zjfV1wG?`aGG9(pnGocj{@6->Pro~!I?_9}wt7N$(aFBRKWY!5x<@GWqrX!i?I5XtX zjQD4;bbAYy$2XZD-vHa-`<{Mv&A3_9uUCxQK320$ib9fCl4Y5CQzVA8t1_R{;c}IC z{p`9j=f_XJ>k;OEql88 zjDttF_^1EpkC7p8=kAR>7O8k){U~x;2k2a2=!Xn26|~tL+HNZEkarH}Mw)TNww?CT zZ5nKB#h9umC!>*AUC+hd9!EEC;5RFbcov=Ia<%31y65TXip$HMM-SHAfBOc@gFVbJ zK);5d^;rZJI3@&SbXu^HR9D8c-43dp2gOc9KQeAd?NB)imoG1wOH0^#{A$GaBd+(1 zThI1db3APmqW6d@bX{rG3-mo~uCz63s>z}r;==NhfyaoHO5aQ$+5TBQ*BCXUPIMaJLY7|^cQt8xTM6UNWVNK8Np;E zqss2_6)G=qH@imCnW^$uL(86*jHxGIA{@WbiIH`<+ zmAK1$ROu-jUK?#yX{^n95kVM6$2L}TADv?syI>`ZIFZF7S)Vjo0a}|2O%{zpNM%sd ziG?C8<1aG6l8omPFpJ=Y0(kP*8Bh^7X?5}HxSip#9UZI9R$F2T%w`=nhDv%<3h_Wv zpiFL&VT^_}t5R248$$tild)BRvn~W-W9+px(NjtJO|gnVZs8!ske9TcOsH|JdET-z zWU?emJfik5$j%GN-=u5Tz&R=zWuI3Jv4D|GlF`6ncNn2S?mu4&M(EgG@Wm5lE!G&i z+=h)wPxQ>3(|IN3G!`W|v!>{wU9C5`LGzrNwj;O^7qkdq4bW|4ncX;GIPJC2MXMDZ zo5hS9cW?0Q<(A_chiv;E?*$taoO`3zD~at8NXl+z8f3u`Vo?eo0$r=QbJoJf!5{v7 z%hOlS_}({eaD4xmwwrNuV~?+Y>mEP(ix)h3x{ANoJKPS!FbctM`J?~kxB2kdV;=q1 zZ*uVR3FF7VjokdNpqWkf)Pt{lgZ;xJ{Pl`?kQf>#YM@F!xn%7Wl)h7>i3K-|Y_Bfp z*XQi*ALngn3PF;kfk}I5%CHO|!7+JMm5Xz0vHErT4x`@F*|LD2NUMov)z~BIHM;d4 z>+|Qxa0Vg-thNL68a?188T$;@LtR=%$1WJ7t@cvEGCP}LmwSY!Ay{yxMQjUAtGS{k z<}j&gm+bXUd6CTwY&U^Zc^am(^17gGy2wO+kqE7LL&i)}40#eT-6B@Uk9;eo2T=Ax z0iTI4Oc`qNNT-hqN3Y+Pwq;ths3pH*6W#YrgpO3s&o%fX2`y1w2Sm3hP3d z$%~NqUx?m$6YnnwnmS=jsYMcjVgjwLiDeDYR4p$N{t8NKQ6biJlz@%l*CM5MNM4OM z5Lg{nZmqU|>AjBCX15@DPwMuL-4#-Ofh?qTeJn8&4N8c6I*m2#-M+`eZ+?%HM;|gf zxPfikJh)T{(2qTCyVfFPmlv$gU$TC6#`fxx)x`yyt1GtaHEz&cJ&VBy&3i33EMTBD zmZN3Mo&A=}PfzI@XpRr~;H@R|!(}XzW?9+>gXYi^0(%RglY#S(pL6+q#dZvA9W3T8 zw;mqxJOBD){^x)3Q~utsyc?&etX(yN{Hg}mg0?2rItXbkv|XmPK7zLfgZ8ryXk?!s z9me+2+a5#V+ct(kMrA#2{>H$po3XdQPq=jhi)S{o?CsAuJ{-7S4P32ye)`2ZFE7`; zbLWs-H}>IpFI(>gAf{p<8j=qvFAaj*4v6zK#^A*;4q8pTZ7hSpvlrLwHFH=GxT^ub zRRw+62KtQ_kL|36Vvin17mYiSc7uQu=zF!!Xl=)4N3s;!vPLv7zmj8_*lP`>#!qn% z>B1!JRPmbho8%NoSTQP4`8t&~tKc$4N@|b`Q`VR$p#Z;PB+LqNRb{;nHBV7UX&_m1 zsh`s4hQbS# zfZ+Uw)6aj#e7-<}%lDM}uV-vx$Wb>Sla`eQjGD>5-*p;QRa#(&Zfb11yDsHd(YOFr znv%)5r&{WrGms6Swc=bOqWWE;t;)lZmHIrMYM@1dtz`Zi9%kqD8-|+iF~2v}pHv^l zF}Bul?LsX0tmjPKnre(*3^+;V#e$xZ<}}hG#C-CUYb`*S;C&F7qqZ*VlHXVru`a9VbZqZZ_~#FFqKU&lh5Lzlr13f3tbj61FVYlMrAlf*=cTq zsm_;AxG1RZjMSjkJxtjEy_fy87chrvZl)io4%3K8)SI;{Z<%tkTjJg29I&?h^ z*^r985y6izN{S-T15yw3wn_P8FpOT?u?3kZ{5hN}jvyp(&D4NkVs3}`f%A(i?%cnV zJr0fWxL^s+(WHLhBDBjHZq^~gNE;RC?bU_{kM3emuQ)h7=H-h9V}j;fY9K4#O~JVA z&czN`Fhoy!h`EE-;DhD!OSt-zD}LoGj)z~mLAO|9n}!d+(Xh9F#?L;!U>H>~@j(#vrok}AFyd<886g;rx-e~v z+1uADxXq01`4#=MmmJ=Iz}sK?9wxR`(%Z{%14Y8+!B!0IHRkz?L}&HAsYUWHIHsPv z6dGLZThr*e=RGV5j4D7flJXHJdB&p`SdVXC|ulSwASim9x03ZNKL_t*d z1UJCg!*&I>!OrH`c2=KRHo z>sL~yQou==Q5V5UwCSw@iRnn*DWC8JZMohJ4ORvssG zhRhEW=*V7rwM@stYuZO$`Jw7oZgAMvfP|fPbY(4+Mk?NIE!})ZvrY37L4~+DM)imr zu~igUk?~2k0Wn%E0zadLJrC|Ze6{p2B7iPAV7_oTHsv4(}}J2YC6jk2yWv(hr`S`z=>1&*M$Q2lo$kY$nzk5VEHu z?dh`Bbdo|61`=YfuOOlYv8=V&PIDf+n1`OitrYBe%>#En$~mj;dRh&aG>yfWh7_4( z2z0ZSy~9Hq6PV9C`pueQ961>rn^n)n#fG!X4L|(ZOKvSMxPSYAqoW1$&PEwV4rTT} zQhTGJp?*-$RA?+7iyM86co4(~zIe9cs0%EeW4QA8^~e}|oe!g7be0C_tk-sHLGW0x zu`ppYybMFY81Nx_^`oIO*S?5YNw6`rzm`3fN;HvKg|2oBZ#rLR;zv0zK-|S&K8IW-Hk`s`98zN6N0~}elf+T z$_L|LH4Z(sB?TXsOI3v5DQLuvkEzg`e#8sx-@L=}=mgi_reCkgI(ODUi<0+)*GlfASMUF<%LV1~3K_DKIHWxbsfxQqrjj;v zTF}ZWS%J98;#Uh*VXy*@D?y*{v|1P>E?jl~d;zHnK}dNKL|BglUEi|b%~W(nVAD1> zD_9tVlM;rV2ABvVgU4!oB4lrWkW^7LO+mFTh7@`F>#A8wg^~R!M?4llp!3(3; zbxC1+Dwu^-fW(-pDrwxniHRj}G>m%e#tYBSF1Y*fzIs8M1{15lj>AYhpXc>3*3cd- z>95vE1R0x`mmtDyX6cr5+BSyPL*X>6^d84}Sk&s3*A5HbEgOD9JfnSKJSg9@T>bZgi~99&<}PMw*1Hl|-Y^ zff8by1RBx1gKac#JG<^GhEo$_RlZX)t(z&Rug;KiaY=N50SmMJ6CVEZf6V89{D1T0 zkA4?9J;gcCX1&FX4r46V`+OA^ZOaU15U1cp59PNb;Pg1JmYCM_3C) z&qq5`5EzwpoL1d0e6N0%$$4v@mCm2M_`wZ1&l^Nr`wUyKmS(oZbhCWkiNYP9P19D& z`7S?x{WFn(w4L6^upx{Ce!DKpxKx0*%DYTOle}}d?UsvIuXz6QJQ^BHyGKLpD$yh! zV5>b;!t|_YyS1dyCk0+aqEc`2crDODjC4>VKniL1QUI5a*Z0xeZLONv&M!B7@!2!x z^Oo7H)et?Cc>YxAPGa0_LpSTN+r9|>j4<_g>8&v_e7=%vDfB;unU6uhT9zj_dF!wK zI(NSM9ooe~Cew<#G0_t>kv-WvmdIM5fu?C`=6iH|M=WpLD8M#8vd{rL~M z`skl)-}2>xX4cZqI!xQrESK2DQt8~LdKM6dUW;<|JvNMpwd_B};lYx_qcyKytvS2udGhfY2aArQ{Tci7 zmPKo6TP5@IcWJMiJ1hOiaJb*%s4wFsOS zLoW@p(WlBTQ5MJbj|#!)styQAwxkFvK_fMy(w6hbb}23Mqp6oK?ZfGEm9dl`Pk%Hm zidf6|H=O$~8CEX| zn@dQATho|L%}2@CtRza2Lz%zmcLvq41f?7D{3vfVz`@OvYz+2EL3g9}h<78Yt_&vC zo{(y6Pyp7OX1CTnA|5brpo(;gWYEa}$GeQMV%IC2Ka)&?)$B(MRLw>rS&92G%jb$< z(m6AEn@kS5IAry)=osF{zS;{h3ievXFvap`w#EuXrsmc z0o{Ct+wL)2Twz|Faei?{-#bKLZ~d)+)R|&j;NW=7i!Fet>Tf7$*ofg$; zJ5~NtKD73)jT2^y$9&=$M|KBV{Z*5egns?o`hD#Yspp~wxm3Jp_hun)xax)}Z*wLr zbzupUz)ajwnjV-!)~DC00a@CAKCKPO^Ha54Giaz@2n_Kab??TFW(|!ow2eL+L@Osc z?Pcx*8Q20jXFC;u)ANYt2wMS4$Wsu(#Z5bUVeoJr1b_O9uLDin;v;|wzQGMeAf=ma zmUEi@1#;appEs<}2gdb=!y5-&_5+K>jLmjXKp8zBjR+xEXheGw2l9H>%rh~(WK~3j zrfCU@_H2W(h98{@*PBzm{mok}kC#XY+>L_s@W^5}d25hw3_jVFKb zyFC5qPq;jLPQOvGKnOW(I4zio{WTkFvGX}cw~o2{?XPj?gRgRM>pt_n1DbB0_j@Wp zV44ooEHTZT6upp@zj0eY#YCjb6kMf!SGXVZc& zRg1O2oJ`icR_OJ(fLM#P9d3P%ug8${E#p|KkW%phKaRM~mQO!>5<}EAAaFq?PGT1(ri0@x(*V@>4KhHgH?+CJ7H(eovbnCA2+kU>#~CbA1s zYRBHmO&6zs&sTR@@JDK4C4e3Y?wDz5Fe)^!NJXj2Cu7U5(qXE(2|Yv@$R*9a7?2Bb^AoR@UvO=tb6YXq8{_nxd;k1 zl_sTx*$DKSCgrY|s=tZvns$brLxWKRg>!V?FhpeZNt24m~}128k_{y+mWpc^j_EoVKW5Qy<;4-n5z@vM~|;)zH^UM6~;;fU2U2 z9WP*oPcz|9XpSt`lS*GP&-fEll&Hk3-k|hM$CU{u|CPwg$$;{|a?Qer(?yx`6EpH~MOxjmm&fT|a44lk20uLEDhprb~dL z7(gZD(DsybUUKgBxt1duF;F4;O4eiD*wF1?ej=3wd>qFDH z!pi4heLBW;Or-;t8L#oBK$Yb>#qSl4&)BJkVv{jek$^k=I7ndd z5w9m%SZ-JKZjc_P zs(bh-&tJZL$>!Ay+F2|j3t8u)X)*1LVGOK?0T*=)+i0OqX&Ty@rD<$51O)sbIln$f zT*pP&^dqOI7c7=fSnMyD&t@4H<>II$e5s1LZ7gjx0wmolh=#cjqgM~Q(?3mRDnyfc zUfxrhlG)Z+4$9^zAMd=c@Ly59r)(xoT>8FNa1#-Q{QLR}QQ)V=OM7c_OnLNfWE?&7 zW@K+ZXSvW&cWbQz77qp=7r|=SZ`?DU;vvriiKEXw{-iE$P%-!VCs|;Ze8O^HWo{<- zkQMTB-}P*p$&2)DEd;8KMA@9te3duN?k0{$#PHwZC1{K)=1tPKLMR0z;y7~1OHy28 zHTGC=aiW-q2}3EK`J%s>JicTQFz6x; z3ARCkXV|)Omuc;+q1j*3F4pWF%rQ;N_Il0XgS(u4a>;x?XBZuZfHbiOYi_}%0K*on zMe+-kFuLRgh+xcXxLz9zp;%jrwtf73;MKo+!f$@>4o7#70mI21;XA+lfFJzXa~?lm z=g^p!TLEeCZj9mH>Zx!4@PFdwZ~eEJ*`cmS({ktSM_gQR~mz_M`6OK>|_-d0*Xgf+Gk;xYm;9KtvL9%C7B(;f& zAi!(x-fXeQ!@v4#%#Lrd`MrOExx5DNqUSFvim_^E)3&s;8Hcw{xc%S`M|WUmH5g$%&cab~u}v@R?C zul=T?soiaCHbU4 zS4y=TVY|Y1bDBjgE>sxx zUtjUrljjw0GqF;($zkm<^_n+E_sp2ULR5q&P&V#)5v_BO%w4H4s`fdToX@SNQTh*A zPD0nlE&CPiVH@=!GYn$!~Vfkz7|hz&Q*n zwjcdAi+#)T?RS{n`4a8nJ(}fhXcl_SFe*KT0sKJl1L8)48?dv1X0b=uEb*%|qBP!N=L@=pW3hk0(T!tn+`QuW z^n#b?YfdjVyu2ECaW!ako1}19skV2aQHYqPTHmW7@X@m^2Or$x=++Yd>VmM|#;>*5 zr$(*BHmcSrkQWWKAw+Fn<#52d}^G>W!j1~H1ndtVf;TzFR3!0sx!lj$;*yfejs5)a%h*s6R; z$}#DH~<| zL0*sVOLd`=vTNhLC4-t~p(F#irfxMTFVyN@sWN|xWe>Tpd0ni#Y|FaXveI%$N_zA# zJ0Eafa9#*rzzXZlmVUFsyCEyGJ_zIJ*sM3ac>a>lo}RJVj+5FhUDvYMo72rZO_vQY zI>#_7KXMZ5!9)W=Djv7p4m^8)&fD*-nctihI!gFB?$Z?F-elvdu9FuqK^UE%p@bMh?dXd&?QKu2Y5*e`SNgn&P!h{pFldV)aQ-iKz3ex^MlB zkh%fqR%8{3OgZ&6fKB%~Q9x=YRpSw4XXD1ts?gx6TP+nJssu*@4JIi*WZ+PPBZD%$ z*6KVYh7)|iRqL2Hd{oGj!k2P3n+Q<7)6G<(6ZALPNCv7jn!;R6kun5d0pECEJ_tj! z({f&06-3_gSsB-0WIrt>pF;r2pG?fK~3@jHS1A2Dl@z?+D1^)C0gyTnRKoM4J;Jd&33e-P6 z$FD!%@S-N*MMt1ofx-l%2&T4Z+D}pc)BlO}_y3PrKU(4R)h`48{1X_h5tL^khox;W z=wHsK4)IR~fD}hE4BZ~X_6qgtF3Nx@K!J>9Z|f{yrl4b?%R|juXjnF}(hQug)rI1h zJ)Pc-aQzO${u;w>gMNF3VSCNFmiry{yB)@1#CUZDcYTe19MN|@#*vvHg$UZAxi)2G zHP@cB8e`Yt`R8BY{OL28$6sV7OB6lHln|@6VYGJda~LX@sGAU+hr7IvYeT0^O)K_r zs+a;`3v!vHYAi78#@`3X>E- zek%BN8u4Po&%7uxgD8b386d7X0$A7&nw4rFLlQ-BPtv>azQ|jq0jVN}+^hI5%D5i~ zxNZxxSg}z==p_U&KwMVrN$BBF*-p=ninp5(`VPuk=(dI1Zdgf|5chJki{X}T81UI= zPjJ2Kd5*<6s1>Z1I;J#J&NWdCOOL!wqDP3=5O2^~S+fc(yilz8K^di;aUkNJ7x|$N z`CMxmVb*{!5k+r487t-$Q-+W$2?fq3Tms(4l}Z0B#E!uRvfc?yJg7@g{+OPRI|wxrT}mauv@zQ*!c$q7L~tzbcDL0H~B#qqss z+b5mQ?F=C^tEvm}G8jZHKco_^O(r3A5eNm%QmJfSRhMuAfTW# zp;s*yM{H4SLpX!jN<^QWe(!WA3e$x zrR=m<#gb`YS%LREf{N>y0KjMlaSqv2PRKd~AoQFEM!*MU4GT!ODBR95YWoxwbnh8Z zc|S}zKfgd_4W`MZ8spop$JO-?FE2KDdAUOffgO(4V7aW(v=xFyNSzry-to#{S#xFrQrrBtTMT3Bn?m*ryQTnuxcoR12+=Tx>3 zW%ELh41todH!0{en{rW_3vP8l60*S3Vk>^6**%K2hk_xA%orPF1^l;s9??xgK4^<5 zrp9pi*u{Q_ejKrE8#GM?8#g%}!^e0rhSVsd*aPg9f(w9il)@@xpk~&Mf?+4xPirCz zzjJ0o#o*2RFHA@sEUvtM3J-o1=yb7I3p+5fAUz*44elo^ol#+n%}WLnF{-51ER0S8 zF-%Q>DU6CDR3XG#qtkpRpo!Vk@wY&{*tnLVgs(vP{yFXy9V}q96dP3etQOx$6^80Ud56N+)o{&2)vG< z5nyXg$=8IbsE9`=o-~chTR2r z7te9|^mANaoZ<4tbA0yM6MXvkIX0Uew!03&1z1IB+ZyX-ji$2D5jA|AChYeku68}H zwgdLVgkf?iEy@bWVBy7tHRv6qe^!Qt#SjRK#^V0E!BJad(N;KFw^*+hXc~Ur#AsP) zjlrU+;Jn8;I!vB0Ok6%`av>U8h)eec&t;_|{oBgI+6YUiHI|D8M~fQmqQ%kC5!UN9 zPVe2t$^Cm=x@vs~?eQt<)d_5~Lfcko7Y$ZNODtClG)>Jo z0aj;0PXpvVCeKEYdT|6b^qBTrE_b=>;rkBSJD3n)5V(qtQ2-3caHJS{O4FE-)}#Eu zwTl%HR8sWiw^OF+Af2!C6atD(*BD^r_T;2z`5HLBe z_%w;q429)r|;X;MS_Palb># zb@w59?4vv=Ys&{<96esVxWp^3K1kynifLhIBs+oFz^YM294bP@aq*P$(5IM-ZoQ8Y zdphy$xT4dzDn&Rf#0$D@GSgt*eC6M>Qhs=CIC#(ew8*P26uZ*Omg>lfFu@D4cBi;^q!;vsNtvK&7DdYtYkuVmS z%Q*u;J~2MS7#2DK7Wxz@f=E!zwGdCa02?5oc_a9K*e;2x0W3j#qYb-Bq<)XsIp7NX@i_|`( zaR;|;a@b#<;gq6KU@ItFC#y&j_+(6PlVB1Z#Z82Y--M#0FdE#5soP@r@)=%UJjdme zPx0iFPw>%4pX0;N&hYf*2HoWF_G_p3`dhE!o!9STeYC{M@e)njaHR%gc=LB$8e<%$ zRL;dsoZtE4`31UZLO)D+dA-LN01t)je#FJ5$JMS!jev;=CyN$e|MCO;-nYJlH(xo$ z@@T;TPbPXGBT!Mf5zR~0s2HB*6O{;0gyPU?*>q*&^}#2r@z9Uxx*mN$VYAue@n@gm z{a?P1z8j!|!pVApS6{t{N3Xwv`)|C7<?NZC862i9j3m+u)T^UfVS9guF-9-&~G;ko~V#O-!OSDb7lb2 z0b~Nm2PhNib()f~DFe5%BAtNbjDd|nj3M}(2OlF&KOg1|!4cbsTwsHki*zW?g1CsIjFri2AfO+CdjwQzFDlffnao*8mIX-(@8k6rzuy8* zdK)=Q*gb$0ZOGtu9JcCX7&r5IkrGPDH$4=x$Cn}V@*B+?j5soBIn2JZf7#c#BWn&w(v8dZs(T>ccvj;FM=@iSzdG8|v zeK7}xETy6xMI}8Ti_F=4k`>vRJwwIZ==?RFQ}7k!kELu_@}N?_$xb1fKfjboa{~{j zZ^r0uaLL2pLOZp71rW^Mis{5lDg9`r>2gvItv}+neR#%#>8|9AN;Z1f%mu?i8g(k}1d+{xO; zyfq-JI_0>ra&fuYW4GI3v0SAZvZL1+1_#?@Fo(1;M`$N{;^Vw<~unbb6NQO;Au8~3WUoJ_`83;#=mVVtRJpX z)r>y=jc?wEF$%x<;1VGaI;ZfoS5P6KdD&y}`3sy7q5I%JWBHB$7211LM#B-HjN#nX z;F%VPBMJf$tVHIfH5$<}eZc+#Iv(Y?7I;?0qgY&fBq-m$2Z=64G$iivLzn@Hip=!DBuzR zKTVj1Sm(a35F|I(2dozhy!Op+03htHu5kYBIojhjKx}nAe|m=9%S)WzyMu?XJj8=X zr)ZZ;4pon-F;enK=^TnL^xGYtKYoT^zyBG2_`{!L`0Jlw*;KfH_ZY7{JjI(|eFG2Pd=sljZ=k*V0M+ss zx@sc&^I@)VR&t?j@^&Nfg<{U+I3d;`C(zVqTmTS!w`C7{p`_%n_Kc>UYXL`(HU+3) zVKx`QV#S7lL@T9o9`6O@@6wNP$fechL=CfCvclANG3=PZ;l{4Vho3!3p?8F+1S8f! zPy10+-c`YC<$J*|6<9I1ijr}e^VyKS=hC#o6Q+>&K7eV!8cv{6K|Hz=Q4}yt9v4@8 zXr<6J7VA}m^|D6YHe9;Pnkc}igta1qhf)euRq!JvVFKg}8BoDkh2`-H-u=Tr#aF)n z$7oi^!fX@W%$L2oMdFm+{gzi8hr_dGsWatM{fObohZwqn4ULyqfC5~vj z=8MK)`^nF6@7>>xsZE7BJdT};n<=LrRIqi6_V_MNgjuF_!6_+z8sWx)Ly0$6=(e23 zGxd80JB%0_sdjV-1wH|#`85%DfIZs=#@Ylb=ODr^Ma1E_KN*W^afGGjy!WQ-5JKRR zZgmA)H>jExi}f9>@4bT6-A6EW1Ih6P5i8~1gFGvC!8uMz8V2};%#1(9Z1}+-D7tObs66XNE0l_W%z?qoB%Q_@4Hdt$ z;Xf1(R>jqElmb^_68SgItBjEXh*Wl5#`Y(1UfNZx84?9O0%0loJ$$GFidPzh}FJ85k20|Q`bvR6n7PpgJ}J zxX5*4Jt>866wfip3)#mB5~aOtqu}f$KAeQhk}C5ak30#2W4t=R1cj zDFs~igde_lfj|1bM!Rm(2KUapr%(j^{DVvE0^xj6SX+&H=dgIbK~-DSAN?29_rDHR z-$hk7=!XHuRB+C7{&^JcjOKdvq;(-6#4!nkpaOQ6XPkqal+l^Goi+>cR31)<)Kr~q z)ZW8S1IGOZ*H1se^N-)hkN@F4{LPPkiH{ziwxbs>oRa7-9urrF`lK3|)tA-(&20Ov8w2a=8D>DYOQjK0e28KVp0R6d!){1?&%h zhKHwXeD$ku;O%dI6{lbN3KsWYL345n+pZX~eO8yA>5ys*6Wp0s$NSR9@(vGb` zLkF5h1oH6RE-UP}2!}J}BngoG+153}G=io9s#ySa!|U}BWUgq3@OvTxb$d`MBNW?@ zyrGzuJ?Vbhvv4|2c>4Sd=a<`X+)f0Q02`Z(!h__q>Vlluf#R{EKTy70n3#lgsY9k@llK8^#bjpi3Td! z)T0+YP*U6}0s~3SW667793A1U@Bab5`h!2i;^bbYU0L+VMx?xVmz?3I*qIE{g&?gC zdB!a-xkikDet&`S@(k1DVaEymK-8Lf{86LP)Edi0g`=Ye!}()S@L;s!c@OBYvj9>p zWU>A$04icq*ovcGl)~!X{7$SyP4E+Yqo;0%etV66dyQ^;jefVq)OT>x!1PRnFgXMl z5Q1giRD)A~V(A_qOK$2|iY%=&6m%ckJObEY`}wE%_?N%J)pdtY9-rfEGhjD3OpdD_h>Y}f@3AlnjaF!)Lj_79 z!p6Z7Fa-AeJFT%Ml_Gd%`%h`unXP{$QFG3vWnWVTO(J<)Nq(D=G~Y$VDb>VnGywLy zE=4&oq0fzrN%9chN0j&*C>*pcwk5VfMd2_l8<7vA3{eVy*-?PBx67WK%S_5XR-mh= z+;E?a5oMe5IOTC(u8vVPCm8!Hz)!PrO(Q1HCkb=suzMwIgHp@W^&*4Hb7dNZ<&c!* zP1oP#C4@XSlo zQ^4%Gx4fjirBX3_YAC*y;CFoA^{U0o>wQdl<&JCZBWqI;Z9K};O0*M-I*Us8;dIX& z;-1YLvreKM^-`Azk#0i>oH{s#s1FdVR&c>%+x3i%QCV2SxI9|(zB@V}z3FV^4id>0 zqoo5yG2Q#LmK9{r&JiQBZ?R(*n7qek+rfc7^*W)n%lH)XUr{kg=p%%fzUzDnb+0N5 z?F|5*^a9a4OT9WGn(%;Tj|6T|EfozHE1(=pj6uFr7D&>c5P6mZXTM2abU8w#3QO7n zujK_-+OQ7Kf`qFF3ZH4RQqJzPIwyX~>r4d~(q-WV=ZQx=VnPMZ{-K(mf#MHrMB zw=nro)C){uGsTdWpCk;W+;0+Sn-F|lc#`*&`Eo`|FYg^<{Ck-fA7cCEQt4M3$AU3S zJ?~-)@)+Pyxt9+zuax>7kUjQkkt;xHjk>DQRGh!NTGTjR*0^)Bz~#Qj)9a2y_!FO@ zLegUz)sgW&fAJFUy!{pS78(Q67MtyW`>Yk`rpaPc3gp=fFjKcc3g}oRtMFjUG zkZZAwu_2~13KdieR~6-4ff)x;%qNcf`!qQOGMoYsqGB932Os#eWbHrO1pMT^m-xd! zd=<8C(p-M^oxAXX@ZK*kFge204p=M|uD2fTi)+;DGqk_{D>PsG-(ie}0)r80&A?_d zUkrj4L)Q{LMgc$p6bQp^!-&Twq5?x`LTEG^?i5Qh*^CF?+(m$j9tAh_=&sIi@x>?j z;{BiFC-40VfBTOg;{7L=7+k=@D4=B^joKQ#`sfbceEmL#?IkeopiBi_)mW|9@Ue`N zS>40(S~Lw8}QnryYQP0 zUVr@&7K;X0ueb_9&0*{*q$m)evll=X9K|qV3O=$*<{2i^NnR?vSW_eoSZLN-#r#Xf zNX-DIX~NhI==U9luE)?17>1FR^7uClBc^e}I7}G&k)v6R;xa{~fDrKF>&)%RA>C@T34*lTK4<6m%(2tCw zJB(Zv#CskW1C9=ZQfMlTqg91_cNbV6FHkR9DAywld+7G)=FkXzmK{qP6_SKMOU)~P zFAgeg7}TS55F8W~OjSi-$`(pj2!6uYZ(-a7Z7UcXm333W+6si0qhWjuai1nY5eytGCOkN9 zaJ;NAIQC3QMHn9unPn|NWsDG`a^#{?h~b|a>!T&AN=n|v@l%JRNLd^yB*Ggcm*zs& zw~_tNDKg zzr*}K$nto8Ui4;1h1tjOb5YJydt|}N7{~oW9J9t&Fsj1p_)YA$U%+=)w~TV;^|Rr4DK>ynhB?0gJu4}o!%7PUoNv11h= z4C9C)-dGz2AJ}o{g6y}sqLk=j62a(YJtmnvMB_Up`BuEx8obBs_C5Lt%v)DxPAe)$ z59pYOZVXqf_fb#ar~rp?WCgu;9$Nc27x8YPaG=G{_Hc4%igWQN=Ox}!o+}HX(EO=5 zHz|D(VJn{_VTJ1OLFF@r&}Q5!E|`+w zIB}nV1E2!{&}?mzNmkKnRtPH4NSiP#(s8g0!7&9TiK00pP}w3%K)AHOM1WzjYU%eKO*tg>A!H+ophizT5? z62VO#+5=NJaQM0RSRA!b{+z8{$#aG%AQTY`A@ICv#tWbjVhv-(o&l{9LKG~tX0J<7 z05k&p3{=m@>w*Ad0r>RX;q<4^@%8V$imGBJMK$5=ckWNdKI6&9SJmtc`Q!AO!QtqlyLkL`R z*n3Rf9{bDZxcu}3JpSl?{QZxAfggYH1ul0zc7sc+zpV{|V)|Ir2FI%g`^^Rb&@?q% zAQ)rd_s1~SV)7pD)6Xyt1NzM+UOan_(Fe4Z#)}u1INuH+aD88+H3PW?kCWpgeD8PO z!k51E3aYk6UDq(RE%=7Y5gj4$6q89ciIb2O$4i@xsLbOXZxlW1$wDuArm>E3Ac7kw z^j(K;w@1J4FbyNde#FrC7`h(gIB^JK1Q8iW=1bl)c$N17!Et*O7%L;MN?>vxAO89= zKK%7#y#Crh;s<~DZM^!<+oJ~K9i0MoWm zyB(gtILF!5h9iU&Z+=cOlhaYzQwj-FqZ}8d5EW+5bCgsbPSZikHTNi*t#X*CtTz$- zLtH~fvr=rLFv4C&LZvkt4U8ecT8(>mR;Vk*wX>tpB9$}7$>aQdgT9}zK3Soz8z2he zB|m2mXn@uV58rwhU;C54#Oa&wFf#j0dMr4snsrFJReYU;XU+uD^pS1|tN8{8n-)~w z??DLrOCFz!bNVz9*O46^hcJ5f5>Jl*#wlQ$B-f9P7@hYGP)X(+3q zZH1~`VR14)F9CD;32y8$^*eOi4f@R$#(oDy5m9@$MQ~i6&v}BjO^Ox?F|8(*(j-D~ zQ;blnpsNbTHZW3ILR*-60aG=P6LG%M; z%&6HUsjN%zIho%RD0|=Kd)mE=_7-yXVapF!S7{(9IvlS(99^U*CiYlQfYrO%EjN)9!KeXIi0akicz85dXdf2XQ7*Dj3{Fz!>is)-cDBW4Kfn>7 zJ#8?9rSp#nnoj!!ONbQvhl7*@~)<0u*PQZ!uhpaVG+eLi_v$u5U9ACv25*WYq1 z--~X&c1Go;jDX_5TNZ+}6_ETC2FI$bO)FO`MEHA)rfIQUwm7}JLci;<-}e{>4jmjP zhtYBU&1A_110RSLkwI08Qfwkyq~;xN$i?vkp}Nd$K_cdYnNXp$&jha9$3e{ptY9XY ziI**!Z(hY=QM_?5XGs~C9C09p3TZ|Iwh@%CX)IQY8jHrFwi=buuvIjg=$KD=XNA*; zr#OA(5l)64rzgL{)o$P(&8%_UhjMGS2pIc4+Qlhc1k4$|Mz^1Ee7AveI?*+V(C;T~ zFGehzJ(^XG?d3I&?w+7Fgu$y+UWS$Pn2#P8t|pJxdvw9TkxFRsq%@`}KxvJjDb-Mh z(h>cg1!ay7Mj)YhbEihkdL2yo*F zAGqXHV>lY&;%XZ`%noDU;mOMlocE}Z5&w-bn5KYza9FQe{K4;k2XB7)b*9P6qFu4q zyx;F&jOFrD(-;+A1zXq9+Q0`N!E*wmDp!^PB*p42>mx|MmWH;XjBAk6%#6no!}SLH z?H=8Jk7;C~bm;o%F(2Wk3C?*;qmNA6#qvoZdu)iKi*!_gB_tFv8d=4uk*zrp@Z`x0 z{KxE^BxJn&;xD)mMf$Z2_(EdehnU>?+V719+jSx6c*1Qf@Cy4 z`0Po}=M_OEy>lgxggFuKV-zcJCK_OgD2Bpi<75JXi%eK@X;W?{M4`w6gEbN-#h!Q< z2xGLCS6X3dxG%l)I9aziy|?B{BSJruPbFJ?FbF=N?vmsDLz9*cXn3o+tcolE` zn}3IgZ~qQV-KI9g)tUakU2vW6C*?KsPlvDH^b6hmS~N!ipkV{MXrbU?DwF63R5fhXLfaa) zS>X8Ln>adsgkitIxZlLk_w0?#%14PF?o#eCgWpy8oS2W#TaCjw3~6l3F%$VE9V+G^ z36Yq~H>&)vB=^~TAkj|dEuzFK41>ev$4_wm<|nXKi^ckG!Ye7m$h~t2F1~wK*2R+@ z1%Ui?iMlv!kI3k;C%4MW#h27qk-w90TJmDyy_6nNz7j`BP7;m=3&8`y15Ux{7RM)V zfsQ@KVS{e}65aM3gll-`L74LWH4c#K4;1lYk5Hm59ZW~MZZ?s(ydp2ZaiyBY{^2mC zVJ1gozK#>QsA8$!aD2^Q1c}s=dt}dfra|d{{4WV>Wsh&`Xvt)v9-(dw8~5`-FPN+G zz~s1vca9bqN5?$1n2*GI!SWy*cH(={5u!2-K6hcZCe=KQUqi-2Qp&&vnV5cTqS9Me zhH;jn{2F4;{1oe@2gxNb(~}DwE-0`}uCiP#7&nDTRp>pLHho~QxiE2Cy$k630n<2g zL=jP}++lJh4#V%tGXlMoPMao{^`^Dpt0LJoSZIV z9qZVi0Q7^y^Yb3B9&4;$TjBii8BQLY;%Hst`lVxmeTL+o%hFL`M9U>uDBpU*K7uk4 z0m=vVlp6zMJm&)X5W#yi3?X@9RrJhC4Ol6M(K+Dne|m|(xOW88Hp$Xmx4`$l`+%?S z98OMF*u2IHXZWu%otN z5VC#O!)Sxx92^10YBUDecLO$?4r45(F%2WO-2{XHuYoZDR`a;}z-!~*{^{@I(VK5_ zZe)S3#B3KZ4ghf6y&(MfMhgMJ)K!_Vz7knf#=DCs`fN2CxBlFnh zlIu!KxwN=Hi1)Y@pos{|M$oPB9M5=LoS&n?;;~fsl^}$hd5tU@K7BE4r#X{ zq+B@yp;ihD%Mm)8$-`)cFTHY%sM0?#WzFiOK}1#5t&(pa_zZEI2273#V|)mAV~ z1zXqf{f0M?Xc41ggy#L0_UA4Yoy=o68?RfmgWJaEhT{I)#(F*%DLj=FOl=A@`bV*$ zacz4KH+JYY7ucLV!R6UgjKjbs-)zNuS@fQ3qoK9MRMoIm16wbm@@}y_xrf!A2M`5J z0c=?FQ}iOoJm}y!QVfMME$uA^go4NJ@+_u12zN`J%fnXiDDn2C`-n^w|CQQNQqqv+ zS84ZbYRf4Sxp!~~PhVgcfbQfD?9m#wX`r-8LUuw>kI4K!mNAp)qnR=x`z|t#snmdy zCudOBEKA3^6oLA%@uIBDJ%V`FX)YTGz0CS622G8W$^ytM@!NW~G z#$k(oe}!&$h268q7^dsk9Ptjvl$--uHK`Cl;?J}8-10g!uH>|Zxz?I;%MaO>XlV+_ zDW*}CCHjpISF$hPvgT9xbFqgd?KFNp*nMa8cyPPf@ia}8hBT#b-Q+*NNy!I5gl?EH z^b@QGPL5hk5%IjFpz@a71!9({WNmS7dkQI!ns8EnmF%e~_^8~CJ?Ck~ioqOFL61i5 z(Rr>sLD@_0JlAiRs!=)rJ-3qp$c9Y{5c4_3@i%cC1B&0`oQb?XIgc?`L)q6Ow%a}W zZjZKIruCzXTy$e3IuB`$Nqfhrq*s>rc9IAMDk71i>}1n=P7{%>g|esvD0$^d?Ov{( z30ktrrvHmYM~8IA3?&e6vXn<=wr&n6DpBF>#3&(zI$2PlHHs+t9vSb`!W6mp1_ zw#44H;BmC5;9Z2o_a4qu7Stm6PM}=6EFtiz(qbaNXUN(el9J+)S-tU*;7G<8(Q7d6_ZLfbG{gEo;Ep;Gw+ zie($LR)oSM`=$%6ExqKHvK^tGto`$j(Rb4?D#fo1^w=%ndQeU55I(+!SIll27&PNY1 zhpSyy`0jTe;ur5d!<%oP;HNM5xa=I7+TrZ;mk9MS2#icA8w+I9J>;wfy$JL0&Ld1* z_gYygB_X+ZnGOXJ)(suDFQ4M&=fA>d@Bb42^>2QRpZxN3Oy0w4h1Mv+%uBcm@_3ew zm{AfG+8A;^xd2oOZsgn{Jpwj(T<>~py9qu7^y7qaoVXkki0ezb2(IOLtvx(lgM!E8 z6|AmMADv>*p zi$Wa~!7GJnaQH9(??2?e@c`=9>|_ZKVpv4?FJ&{fOfsxcCv=y)*%S>Pk00-%kc zl!jfcFl`Am^nj!b6l0h8IWagK#T@B8zQtYx0;T}Ez6MrD5s5xt?>$0%M!qf0+L*#e zJsXgwuE)=Q{t*aBwNH~!AO90!+$x|-K-?qZS`@>S z0!5{t!QiBO^z)-wZH0wJD^E;pAQc=%p@@P1@3 zwPL=W2IMXek56`FhA=!xkRj>IyZxhz@nX+!8VMiO(izBR0A0c>;v!|c2F>M^6 zw1E|mx-slUp9VPF!}NP-Yoph_j$!W&w5g)vS3{#^{t%UP23VUC3i^$1vStJ#os3O0 z4{Lcrp=inw+_+!)`{8rq4JATPzRlbdVScT6+N{=CRV_@==$<{p_0+>#12jAq5OCH4 z*<73!sR79?OX=zS3mvQ~f=UW)AymqzQqC;D3okBsEr2p8E;nU1Fy)PMJ2UvFL|J8L zo$zr54Wk!0S}(CaehtsN3B%^PXm5efR5X?XW&Rvx*u&818!si=X*nACy1Bk_3vGy^ zD}U*tk_HN`TFu^W+-mlk=`-{Bni&g#Sw9t+J5bmA}tlZv?!ol?>W0}-4Gn4C&W zMR+4$*9dFaW(b|WsXw%A;60dQ3e z-s^SRTddC5W~!h87r5T~yn-1YV-LD4i~|Cd#+HMB=mpPKNuOOmflDp4O@(&Zpso$7x`MS_M!?nqexIfsj< zkAc%u*t%tl=FuHkvQWN9y;z{%UBd?tMGCfAM2`kX5C}3Shp$&q#$p;LY%eZx`TPu5 z=P$9_?qIFK(VbHq-FqEJ$9J&2a}SH-JGguQ0jhQh$?c3Q6rh03*%O>Sdxq`Vb6h-o zip|*zJpJSo>^D0$G|8AN#89s&Iu_m{3hXU)M6pCjh-F0L#w8xrkntiud2)__|L^}3 z{^BqH2;cfQzYCfs=w^he8fa@Xh+H8glmab#xE*L3kc8d15!%HPQ}77Gkd&w-Lke#- zhSzzRZ$PEcnD!d)p*GjRYQ;(^0n~NuVJ~=KZbRIcVj4;C4q=+`=_jA#@@gCDE%!rY zVGd(Qs^p=f5-$8RE9kjonu`2Vz$(RSE*^PyZe>0K;!t)KmHg51yhWcZY5)iU8^^SF z=gtBEz(7C0-+cEW?%q9Oqi15+ahMdR$Z)z0p|04-T*s;;RlC6HSHFR;{NT^Axbxr^ zB~k>Ux$vsyKPKU=Jd5Oq;=G%B`Hchr`WG?(w`~oj7|>8f?|0CgVnjwmDHpp(pkPwo zp4NahfV1;_TJMN+CUi#TeDZ))~uv!TSJ?gL)c9XfMBY?;ofdUaAN{3OMIZ{WRmR) z8oSLSm}Dqb5~kdNih-J6D_&4anm^6SyQHCb8xE6YhG6Ozi<46<@0?=l_Sl}EVf*|g z2Jhe$^FFF9#G)km_zXrHOERe_V}=mRLnt7YsA3SaETiVCDTm}RpXb>~roIc$O$_?C zzZ43y1=9?QY8$EEx!@qgTze_q#s=8{H*|8d8QYl28M1GreJD%yzm5KH??zIwWA}@#(CRGevL4D~5C4`_<-YlY^odnzn@+HcF(hADx=+y`* z)HH{*@PMf}s|vA#N(fx)@zPcC`Yy!UVudvc`=fQ0r?R4hWE zVqD{L3NnTq3d9cF7~Zl5#R9sj;@lXlkB?AS z7T%9(g;NZ#N?WTE!-0i@XQf#zVG3}hvENN-mNtQP4Wq+$&tbS1d&1TE9?%soUR>eT zlM@^t)i~eB1r`@Dk5SHn;Y47jAC~AnGyx_MmjesTOdNooe9SA=aL&VNjb&{xjf6eM zw18`CxZFZzQZ<16MEJ+|p5ssN9mRY<&eIFQP(Wym5lZA7A3}#eggCaPJM3 z^WSF-PdJ{6%v|O9k$pNyn7v{o_fV(B#hVEO>P>xztLLBM{L^3Jr~mMe_>cehkMR6r zi^@bALxF%FnXkwM3Nb<@(w0_?MxH$U6peOe}vb+88_E> z{;<8o7a#l_@BiqB`245u;rhi{^iscWp>sW<{hZXkNzr(wi@ z`oI1f&!4`)pZ<@3hH7;LswSAa<#iZC_77jub_{(kZgTjxu51zZ3|S;{0-r z7-}9EywS_XNIa%xa+7TCVki;oy+oOaur5vl1*H5{FLX?qG7NYx8HrFg7LQJj@XEtA z?w=l^S=8KTpN$sb#vgkH7+b}_)-CRT^YD7DEYv(XD43w67{Q@oIx?5|$p^2Ias*VkMEF?c`| z6bzTLi^{WB3O+c5AtYhc)-`NZbDp|3@NR@32TX=@*G<*JHW^S(+nN=5TLD$eZSm|; z4{qWzZf=4PT(?`w0+w`=d4O~;_78%eQuLdUd5(;iENJBKX-xphOGqdUcv*&3#q%Yl zL|cnyU88DOSnW^IUtgi$Tw&-sOxrD-_Z&uRG|QdVveB}tpsb1EAbPfRRAe@a82A)E z!0)%9I}Zw#Yc@0o6h!$S&6TvgaUUnPj zmT{4J;O{D3n!A=|%w%jkAY~p$I$)_;c95L+vSIRkHmXy?=V9j>J0MM5(4x3gc?-Fd zV!6OXBYB7sFy0f!(c$c3hxW7QaL(iY{kv$I1^_q@Jz{a0sF#U+5~5?phme$XZ#3XV zepjM$rgdg-EarlXrA1BU=WM-5-;p<0!-tQjR990az&TrLzOc(OMIiM4C>mTX)CVV-B{F3jdm54^W_SrZa7~% zPSEP;2yJ80^;24uS-{E+u&Ffa+Ok)LJdEau2o9&#xVji{_rWsNr4AmLCf)=(N7!s9 zEKdy1pI+hBcRWt+EO55j0*KyT#e1c(8oJV`p%9EpDGnxhIIm!$am55Nw6Ne^DPVF0 zN1pKxG(e;nnL8?1S}WAnqN*&X4pcUc`KK>E&K_Ul(OdUmtmSkJQh)}QCoS4gW4W&J z@mY`kpz*M>FvJW+rcpMr#LrdEw@qtQ1Psl_D~g^+Wo;JXyu+~H;QZ5H;QZ5H;jjMc zNBG;n{}sB?CCbqNmyS~cw#5+xJ}S>jQT71G-?Xe-sl6`WBQIeilqlm!7DcHeEgns+ zfH5jE)@Up$!y)FRu)VrM)wFo_$*)mW7I*L8$2dAH?|9JEW9#LM$5)NO2vVSWE~9xDiD1A&4o7}g=@DwTC)KA0E_ z(5z1I*7yDpU-{l2fV{`W<6qD-e3I{`t2TR$C15C6u}rfEe;nEMhy{sV6Zw9 zIEN}ILeRX?{Nx{gfs6A?{N?}l-{bhfgIL?RfwEOpIz*``Hr7B4-u2atGOwoq)i*Ae|c@J!2q(dk?1?hY-46~;u35Mf@k3RYYSDQTx zWVq=qCt@QjMde&JbfO%>E^A4vY)tVHMSmttDA`9S)=TF5k3QBlhoFWdMU>Qy#qr4k z4?_hgA?Q70iQM9-59VQEnpG-#z1thKOJjpJ9|z*m0oXSn;uJJ6P+k+O8f_nd{X zr+p_$Qa4`(A5k*b<&SBqW}C^)!Fi0XgL8XaT}{}jW1Q+cXpbhCy2IFa zaN~%2b;3$#R5qmsdG^E=l5~^{QvKoI@S^#DH^)w)5Nze}!S~ywrzEF^R2Ixn16SR+ zzQEP_b8IhO!VerBlY%`xUn3YDqi4D^wu(X~N3iLxgRLr5b;Dqr*1(y8%W~NY)=eNc zAXE*!lx(vVNAH-5z3a9Hk(BA&v$8jOxN(dn8MCZ;NKG<&Db+>I6{B=^G7R1}x_KOh zzZRJ|Nd_*DWzj?>511lA8G~xEf-)9WyFk zvHWl?5hTvTZLU!Y)U!w=IhGoEKn^plOFCcDY95c7(WzMGnI}cQn?m<|>(x1C}heEJ>H5J~6qF=zcc(Dh=hFj3ACr zo`)2?S@u8aP4hOEbHeiyO&*0@@SC=!@>Q;89VaA@jf{0nWztdZ)U08$`y#gU#xkLV zX9T6Q1NHxB?9F0sORn>?SD=rbNpkHJF+#iZmfpqa{j0!o)T* zzyS>8MX;QgAbF1y=OM^TUII8kkOUBf#F8vqvMI?LU_nS^N|w|VDT+;YH+#JI{`Viw zxc9DFd01;z)!yg7l+ML}&pG?-p=#BtH4iNC>W7FY{RTrn?%swE0tHW^cQwJQ zoU5Vw>THs<>7t~|BV8UmCq~q6EFpWs0kD<l8Eg~O64 zg2iJA@kTK~jx+XBN=Qz_SdEF)1jX``>{*8A85i4xv$KSU=UW^$JDi>^;nD@X51GKb;Lv%3Z-P1fN;q-;E71>$rC(yqMi`db z1)MO%5$F36V-)<5f>aKD>M@QZc6&nC2Ju9DkKhTP|H30Yc-LL{CLoTIi<{JIM2*L@ z&)>qo|MC@1maPb!OxlmUz|3-AT@A5TmaZ34FDXP$yQc#P5T=T-hk8)uU7FrP* zTGi9?uQ?OQ^?pDg!oiV5FeJh2I1HfX9Ltk8aC+xHhQ7!0)*bkEg%p8T|MW$iKYWPo zW{0<4dlS#T>pl3?-~B0k=)1lj&EiBT1t(F+^PW)}WMn2o7SkhkaKd?vGgQpkIox~q z2k?D==L7ibfBUEL$G`ro_;;WEEVh@|BK)N!%Blk#d=-MH^n?rCq$0e__?nWm7mG3B z<*&Yh|NDRcMf~Vbe`eD=G5`P|07*naR0_|%_dU`wBt?)9k{)D2r;3TxAHZYPnoY-@ z>A8Lni=}wnb~{*Acfai9KH2zK;~y~nfJ~nNARZ3rFE0^ROZaX96Y`4pUipm*gggw` zuCMX=KYJNqMnlq9-03}SubL8W?b6I6Eo`C~ArmKw(10oT$D+R|<eD!txt{~NwC0N=vj{UGAu9FC$^-j_nJ zDFq2}k7B6sV}u`~6wvDiv}4NjH>Jv`?292CfGYeYiYJcJ!mU5_*k1Q|?ad9odd~Qk z?|dhQVF2w92$nJuBlg$lk~XJB)W`>TAK)747jD(gr6pOVykjoUOsR#*57RXeK{1Cx zW{4Rc^7pd068gi4wiDygIE*;# z7~N8^DQUNY(K=9!1Dd!%({%`erII^2_|TwfTeR&Wryi2`QVG6Y!ndnjv{IyfFMDAe zq{93-WLQn|vQ(54NjE&GJlBR> zd9Ia^Kn1=zteUujm%@cBTAXvzHRN4W#;o2`G1z8I&(B~5x}{>~-^>|TE$kG=WxOQ? zY^Fd=p2t~Uty{O{>n6OEs(aewD_k<2V)imL((MV=xa^Kdq&fxH*K#qs*JH~27^UrU z9zi8^SL3dyJJ|=Aru*1^8DeyfYV@@s6V%v|$Dz7_-ixv<=_X*9$Up`Q6rP%)$abzE zAk7C?hFxGV19u4z$87D2K~`ky;t+~8L@Hn#*|o?-A*qBIB}Ft~djj21H>|jGE`wFiB4zvz!unRoKhejgXkPk}Wh{Ev$l&POAo&B5zKl z%?wMn6`*=k34kT^Ps0D4cZfCP$S|~d61*!p@WBC#E?}{2(R7V?^V@*Ma)EBOLc3bQ zw<=6(j++QE4()PgFMGy&IDr#zb-u>EcRawVC2S%jC$aTtd;=mWmXSuQ5-B~1Q!G^^WuK&+q7bW% zY;7O5eZ;G8Y_T6?<99(rwqgS1DwGMWcVG8b)YmSeEf4ihc zpFc{Yf-~KiH;je!d7Z0CE zg>trf7{;JD(+9&tM+p%LU;=CUjnRjg7?+nD{L;_;3O@DYe-rQhYabHW`y@iNm;RnP zvVc zjKhd8e(@_vhaL+j!VxntD2@m#EKyv^24Z_d2~Vo<%vOxKc-ga}po01#S(v8K*e*Dn zE?bE59``W!5M=&yOio%pb+%=dKW3o6wl`V`@wJ+ z-~2;(x&*ZZjt&$Z*e7rjgQ5!wzD)>Si)M_a){CX98QoK5eDYh80-5{m9@kIyIDfpw zTMu`5?J^>*&hUW`Jdf_|48D;(>(DK+x_uYz@-mD675k!kZE_~Lm_p11pe&iNvFL})(>zFK4_Qe7Hev94u64y^2GJPo=#F9Dw2K z0x6DpFBKYWVds_Mbn<5%A4(L|6ktf2-9*gPoBMbP7^cvc1fTn8W85uWb zBzU8$f~}@)8hsw4RNgFMb0Wand~2b_6cuLei>W!jQuL!(?I+l1c<*eeipEs(t8Hsf zL@Z+vmUoU?Dc78GvXCt!+6H$;?p)xwAg@=?J9+IPX!CMZI&kS+oKx=(0bN^p&Kv1H z-!3|Is}-7s^i4GaQ|bZ8eL~aV!Tnp63|H+yT^C2dvJ>kR5s=aV7a%!ZdY_np%O`uB z-Ce>tkI-l#7Nv5B2=sk~_Z}CIuJPc7XR&M@_In^YLI^FIPCV11Y!{)g&i%FC%2xO) zSMr~Q#5}s(gRuojP;N6MtoxKCvD&c z291PK3pF|-_qbF#W3w->i{|-L%J)e|NVdfmZo<+YS<-%U| z$ZDLOon?wNO)s6?HMhx=SGzpLM}Fwj_^TiP0lfH|pT!^i>wksy)jGqhzD`26HD?jp zX+qDDniNX&oG_W~_JCjb`Oo49uGaYQcYlW%E0Y7IfMi9Dh5VJj}cEEKgO%CybcG66o?bNQqOrM zotYsi8}LjPVG$%uA-8$i*n}78p4EFqmV7?v2=9HzZTyw@KZ~XfvPX2By@n0v;(>+_ z)%~TorBkD8!5fCdGavkGc>i~O603X9PK0LCc~$IWCf(iidG@^)ye2}}^cv%*69EZN z&#y+7G&3W);S|oaM3j~W?K2-hd-pvUuHMG*d72Uy-Z!}8WGEN|b# z^3HuMZ{0()l-eMfNijo|^jH+2l#n!BJEak<-6A+e&C4BgQMB5dIbDmQXut${vI1ic z&P#}RXqHms(M!MbYye<@xp<-Xn`^8u&T;YRA=Vcc;GxH&75;3g6=acvl{`51J%;`O zUainH4MrmDwmWc&Xu1Wg3kfI5`?nON5X4g+MYWv!Cs=5)5co{CXpE}I%{$Zd6*r9h_^aLqT* z)NJMvB+809c?TCgoR4|D*>g@sfiM)98rJ3f!=tw`?$+>&RSqj>^|&SbZr*G*dQ;A; z`RxqdGI%Q>R{VCtYzmB&KNc^3X?MvPr>1sxueiC{u8QGF)m`PA!|L+wp=Kf=r7XeSeiDgYgcB63c} zPmU}Fl~SK&8o}j0YAq{Qr$SoYftr<+(DCVr>s6y8_|f#gTre2GkW|8O^QNezeFju11G2J|I4eaq=foD0;;Pjy8`61) z)=4;v2+MlCBP0-*9l)`=%&@r%1gVgKE2~xwp_*_qTmG+{XP(L;K~Vvsjn&pKx7B3i z+;c;ClEP;bB)83_NY!|U;0bN;S!oR3A%uXYYtgNiXcirO2-O@YkI8byebeBXXYUmZ zsmH1y3ZAfRgH}Q(a2mBWnpE!hs;Hko-r@OgxC3%d^Snz~AcJweV=PVx7w2m*N1UB4 zaK7Csew#4lrJB3e0?>XDxnLlp?2&qHOqsWJ*&HNq)jQGUijv5QrH6cC zDb5oI9JXs*oWF_7M_W!h2G5<^=@QrQ_K1bQ4scnuv+iA&{o0%(kA9FRabcqt%AV0_Ep_NKw7!U#dFyfd0`EO&l+2cDu`8{w=tLYM6 z%Jv(SJw92$cW~42)5Ysk+y8eZ&wMJPM;P z(I17bS&=Oh(yV-&84zOREYzGm_dGuMy?+b$-tDB(=hEJ9$l$)=~^rc)-1nH5j_ zT(5HdqGCX&0=r7Ks~-K-hm|vEuHduK;HE=+|J`WsOMm5f*kHIiM}PGg!{wV8*XKyP zHDWvs`YBz}Qm*bPJr^c^97fwtM)d`*(2n z{%v$8XIS34gYNVU?eY}O;zWulhGt?+o&ePF6I?#)T8r^$%q_)|evV_0I2@41J}d88 z1|h)W`niTbM~D$lh^2E5kvtel>K^zc5eCfaHSclQZLqz%z~$pdxW2r^u-~C^K)Yzf zqYGAgSE_ScrE;*ORrSMwI7XbDtl*n~5sdA6i$zQlk)-pDF=`Z7f_GlL?0Vd5FZ+Jz z#j8FHXhMUgYvFy6knvIAv$?*)`r;D%twil~T?Zc|3a-dBGg4H^nJ`Iu{+%lRbEFiM z14hd@gQj%E7&Q$g#w2tmcb4GU7;Ff(F_8H&IVUv>oI0ndDB;BeT$G8q@;q*?ad_)x zg!}J=YdV>o<$R|xd#%~ND}7A4keev)a|ob-HV?pbJTuBoUNwK@`W@LYP!#i&A2Zqc zwofWL@b$=44HH8JVod5P<^6*~!Y2Ewnj$hz+1+RG$TCy)i_rlS{HWY7V;<4ue0h|) zMwBOIc2MO*S1_7P+Q2&j$jx;5sqzQQSWL&u93yFTnPUL1&>S-oPHsa*&dc9bZ>f~w zGIyI(#UyUf_vXfi%7#(CL&oo1Ra3+jddz?pVnrScs?YVfjDJgADdp?Rfn!c#rX2b| zM(c(o4$1^t1Y@V004aO0JBtb_f8b=h^!YxEA*XfHApv+7E(iL(RefjxHuxD ztVnR>39oa`YehUClr5EiM_JS&v0-+}d_C^oy_MS|WZ{krWLodgHLh$-)@riB zsXuG-V`Wv|4p`E!Tnlt8&TipTfA7D*JHPS6a-TF-+~OE`SrM7+vFd%w%Ie*m zapI}3qn~EnRp-9E^8i2eU;Zrq__M!^-~9RiCs($2KyKm3TymbqQK~RoSY~2qDu$+* zI08k+ul>gVhu!XgPyFa7K#jDw!hSF9_i`fSOk}D6!PB9Fx(?`;!p-+POcqZ+@cbe@ z82cXF_hr%ZC5&;s5yMi~W{)LO!mF>mhOfQ#L_^t2Z50zBGTF=b6uM(x_Da^m7^QPS zQYD!n2DTwd#f;WV7%vgfl0##PnR<=(y8+u>k1jO=CbC+@21YSiaYf&aTM;Dp9Uz2u zf%kvc$MFr{`n?G40@-k>gtQi7^35kmN3#=f{C$3Wt`Ssx^Z1f7r^!~Z?*`b}wZ)uJ z@vC}h_DCQLVB{Ub>JGx{4i?Y74|z{mf9@#V!)iiXu+WUEIic>Z|&i@tZfEnxqTxzq|Jf#sKj#8<7?6rEideu4Rf?9I9QFa1p zXgE0=w}rH8BwtL3smIv&==WRfH)~v-KgRXN6CAc%cn2(6kH);_tdTalA8h2ARwq&~ zaY8>N@Op#QYJuPb4&#W;dV|F(BD9^3HX#l&N8uR)pK%;==x2&iA`FtOnIj<4fS4l2 zVZdR($JLWdTwPouj-x2{X{t;buVF6r7G{*PLh(7pH5yhZGAbBn12Jh}ZY5MpNGfBD z(k}6G*JB(i<4R@WlPc%cj;IEi6>{~MmD&P%6xF_~ca`p?6oK6nqzz$n0NRt=pwP^U zvq`kZIP{42Hx8nxYve{Pt2_mG)1QilM7u=hYfp zb-C=n`gZokQjn14N7>UTxDT2ryp{Nz=}s}0q1-P&m+C7gpRyR1dE*Uqcyi8sUOG0; zyK(}Gddz9QW+to8Fu!6O+QMVVg~*$(+wrZ`m3x(tk}ap#9--L3*+J(LRW zHEf8GL+`D#ROWp^u1i$oSk15IG~5bbXBmh&Z@t9A_sv{nHgzTjv{+_A%PdVGrG(wS z$N7b{-d(M_QY_iKBO^l2XO9U)38xNtwhcJ(B*iqZ2aNrQag36Ku5vDNm@ZeFjLUE3 zGhjWh%ee)*wKdU%Xxpd+%PW-$=4GpdGp?{~g44{oFJxwlla($l)-viSF*a+5%&DrX zUP(B$w;%Pq0S(#V{BB5`x1&DCdymtzQ!LwnJu&(o;(^AP3lt<~ZOK+YtbRAxV1j&R zBoU8J@gPplslfqtjweR2gBsJxO6>CnRGjnPAp{2>#QFo0D$(`~V_tS$2vSkK>jIjt zkv0R)<vBJGvmRR>ovf2s`;iiy_gI}Qv1mQkyKK&wFw{1PN8EBdK+u#1@krVI z6FXdA?yxwOaP`HafpdE;2nB3MfJVtNxqN($yZ3IRA;vBxz=gs@NeCq+Ql$rQ#9Hiw z)bmS)cpFiNMp%F`Cc*E-mhUa623S~&{|wF^Jcl|Yuoqv7;MxY9BKEr-{_sz}j9!fufT_R83cF!ZvSN-Xdm*uet3|bdI-`$D=PiV;X?(5( zYr+Ge(8dIZ$O*$3F$@V!TYk5?3zADNcv>q&b1Yk)-Nr|LiBGJCeka8aF;Ma0cFVrSL!F#Xr0k$g6j&Gn*>`nzAnNOvE(w72OK(J z2{aiboUfU{g>TxEa>Z1nD@Sj#P1WzmzaXa_kn;eG$J#Sw4b7Wr;qh_Ibf|`Hji-W> zuKZ@xOG$c}?>5+8UtxXu1lJdm!|lLWb}d2^P#X?1!sOOgQ&@ z4>3?kiferl-8j8k{+S=os8k7kMu}~#d2F_HWc-ry9BjXqDBUSNG+JNQ!i$~P@j*v|L8X!?)TqsotxM96CRRZ%JJn zW5Rm7M|0^xPC7IJ+ICIlU86w`j57zku<*F+8DTtNc>4;QVJxsy**IhmIk*t1LaiX6 z;DX#-EXk8sruRHqY@qVKqx6=Yhr!>pH!Xi)!pLo(D|kvS^ilNsjqX3fXcQdBAD`Iv43X*=WK8!s)!yeN|{5_mLbST?m&3sGo1 zLfgOxDK_JSv{VaSEBVvPT*<=FLj&hL2+}r07E#u0v0CC}(PFc+oL9<3gCGietJM*0 zU7Z%}bKZlz<^=)0C-Uy$XPowyIcrTA`|`@Z#}%m^B;Ite$7S$ zS?hM$!bO=YM+rl$g@73q%=k6gzr+ZO75dFJuHJkVS8u(7$B)nPYoGfP`Y{3|W0d@5 zA!;#+K_OK*l?gYX^%n$i)?tD4+RTul^%%UX_>YF@k0U@Xhhmc&gc6E39#Bgpw5N1F zmL!cNCb)`jS;#ja+xUau@lkyIGk+hUTc~hVEd5hqfy&;Szh>(`ktF5|z&9U0e%TuF z^yH)O^7j0PK7!Bu*Z(bk>3{y8@Y+kSNNYL^!%U?Yv{TwBUKU_v^`xtzqi!GcyTA7$ z#(j?;{M7ftH!Vz>Wh+2sE(@#bc@s=J5!kbLPTQX}?1n$HHjsw)J%^ z;qGCz0C|T$dhtuRxY|fDFsPD`QoqEi+6z6_qAyhxfhS?64XW@tDtHaWSK~h>08Hmk zlERoA`Y~d+>(O>$QXw0pX)Z8tghtS?V7PfsTxjsEKk^woc;7d}FHZHLBkEjd*3jfE z02ih^;b+IMS{#}aiKo44snZV4Xkvv9G`q5Xb{69*;z`s0Zn&;^kqU1sUa(2A*vWb3 zdqL}AAb4!b0hAEKcne}?q!zEl_tg+kf&~^b`*Wl2#==TRKS4%kWF~o?? z^)`2bMF0RG07*naR2s`wgl~mbFee;#2LQk+34I^p0U-qOMr(02BB$P5=}a^9Jr27a z`uzcerXHmxRKkB1)sSUIqwxm1BOy{~m+`&4XDJKy3egEV$HW-MB-Q=Lh#@BQL&Sa< zaflIzG2!KlExz{FIo|ocH5Rw;!nu&=pNp~OJZy<9$Zk0l#iJPYb#G*{Qs`aoQeob2 zC*1>9ckaUnhxOw}xO)5w*4qQ3Ye7vb6>qJty1^-9Alak!8FVAEmmOpC$bhZhYyMa~ z=LO$z{L)QX*JH{ygG!*M$r|OOI6_uELPeCUo&#l9b9#Nlurh70Z=mC=4Am3XpK0Gy z2q2Ih1@&_#DX5sDFPRKwG-NXLY9AcQ6lDxWu0oZ@I)!G94HkY+sGKRTw9l1*TB_1# zD{{-o#*gWcc(QM8J+sa+Q}h*zS{Funx8Cds=K1Uy7z)wU$W_7Ov4X$XahMF0J@LSi zo_ka9V41zk`q(f=T&?#A!Q=E~0Vu4zcW|SO;@L%mZ+rd@9;_Pl+a1#N9!QL3aEML7 zm?R%QMMfHv6p1U3WaAZifb)HJG=VHcRl-yz2IXEEc=d*5yN)X13wa^+WWD4q8C3Wo;pz0WsSoDaXAqy$vbh791bnKk$FO|@1>$MI;I_XP$`_5h5x_b|4 zIN-3kE?yw@YJsKiE|EkkCDYCrNJmnJyb?3|K`gnj9EOyl>6Av7o7 z$umkmmyE^2N5oSEsp9Tz^D;^cKF-(3`Cj|+T4;Nas<3S;oZ+Rczm(O*!NhiTBOZE^z)481&&UO#$|*v@{nQTFrzl$$QXtMI5EoX`iQfo zq+ocGh>I~rRicCnI4R~Y-u-nyH3%tDXJ)j^2DA~uD@DmUW43VKXs!h7+sl9L(((C~lfBy7}IQ!N%&&D}wT%O;alu*vJH z`0X(_lG&DL4LOyAS-Ih=7$2l{q1aa#a4J?*!dre00U!OLAHjz|`Dsb{h$AKstp_;$ zaPzC)t`*I?@%0zn>ghLr%B}S0lRFRa6F>8__`m+~KgOfi-c($%LM3WfWE0P-3l*IL z5rT&pOBBX`^e10NzuVzQf9w-z7Yk&Yg&H)owVcgES_VcTfSR@lX;22{g zqVf-p330bWHWHg)ZTy9SoZA>94wsj>JoNbDmtGYbszPM;XeZm73{GM_H&40uQm>@- zF4I4k@z{!U7MxA>JoAXA`<)ymXoa{M`FKh+EG-kCYNZ zSiyO%gkKB9`5IFIX2r)$F;E_d{G1xDv%y#BVa&E*ViBgN*Kyg<^-b!1kx_0gA>Sl1 z7kMGmuu5R2`7o4NWcF#-&Bn^*7ZfjCy`XgSaOxY(wxt!Ls&AD?f0HLv*E}ohS)QpM zUCB$(ptr10TV-r%Yu4{dW%ehJ9%6TW4MIZO1hhe0CK`+?91|RxOhm^~je>y9_JFI) z4cf+|YXjQgv2Mix-z^tt8d3h^Fk-QiHfjtYMrq0BoJY6lL@5V^ZpRS-ft<8wbL7;^ zK49#7F*Iu)XpF_HRoLGQQh5(?o~rGWa$^0xUYBWP2kE&fCJcjgg&4+&!!TmokJt_o zyD?#(7%`3bqp!S<_rCB7R(I}dx}MAXITvfop6j}OuhIjeBeb(I)cf4(Y-HHvoNfo- zE^+$Ib6A|6;q2-O*5{A0xqgI0KVk%dodG+^}g5A@`Dd$x3EMtzn)s2pc+LQ}T0aSmQ(9`-`)?Fs4eh zD&e&r06-Oai>x&{&}BH-+-s6&7iWD@2b-$TwVX3okZVXxxs=E~cCV3BZeV5gV;GXJ zZtYNOU|QW7C`?4AwygC6O$H{#AQMYHpUZ2BI&7Pe>nJ^QvcR`IdxjTI8jSlrb`RHR zoH&xkal~QIx$T}SFkV}N>il;PN-i0(X>G6)KjyLZ1A|BPfQ^zjF}j3?q^%gZ zgyI-)vLXoO)`d`#lYW7@uz?jf06?{SZGzBJ5YGn>??gckO@M2fER>RZx}DRUIf5`O zNX|JqCk1#k?7dr_;O?DMeC4%A1>Y1Lo(QW&K-2gHQWx2)iU6Eo3MUzjpeEXc&qMMHOf$e^DbAdH!vh!OUnJhFd3}T(wHP) zjZ`=vMhQ1ww9;;=@eYTv&IyBf7C53I!qs||ogZosy7DUT;e$uY1%||kL?&2gApoUA zf$hsAq4MJpF>H6(pFhHOv%zou(N}P}?R5^6BNe>n%OxkhC2J;Q9$MRPMmI#EQI9{N zq}Wm!?`+;SOCmAk?S=$yR$9ohv|F+?95Xy| zO5kzOJW(m;^v(}{7~_6}!}U4VZ@#2(cakF=0(`TCZx`_G624go{cIL+O~`c06guVz zSWB?l>pt_sXZRZN;)0ENcA25faP(;cae-j<6BT+{6O#Jc8$Qm(P*5cch_nO?W1LB? zGXBY9js`rvzB2{6% z<{JC;8i)NJ!>~izCxA2^Bm_`sKw6VQiq@&8vsT8S2EaHXZl3^mp21WRsOUGF%wHUM z#(^f=ak2oM*T>e;__dJ-ThZcts4;Z5elT8+a;9p$bIh1?*1R^ebL}ODhqL?#Q1*zMaW8ikVu`F{ zyH>ZGbzO=UB~n>>EC|Jhm~~iPgp5Nh4uV5J;(EP9*R@zQ0pI_P&*M(N2ex~}ZNj4K z5SE19)in;gLrHa0xndY14rA0dYcnJ{_MF$2$wJhN5^l$<>of4}Izz7tH}b zZBufn9hIt$CNl}46C(k@Ru2U=;c-CTgr3YeQIxOD*sT(=lOj7l1o;kBMhvGRc2@jI z!dLs7ha<)GQSi+>qeD72_uH)l(OQ2hX1pCw|!xGz`;8--l2~P z`ypb{1~?+LjYsH5g^7&IIj4nofbD)nN(^6NdnuA5y%wc?Pn3uX<@nBGgp^=SEaO}} z&zum+{7J`kKns+8iBhM+ISCgowJ|E(WXqkFA5QdY>0Qp51~^Bcl<=z#|nLyf)IWgmNfA%WIfA;J64?g`#w9BPF(jrBSJE`{) z1hfq}gu?ymxf?om;*p27P*b`z9(u(69!e<6n$*k&W;hjk`lXj&$E$BY!KfALdkyRF zQ^Ia!Y_*!YgG6bVAhHa?E1KYQA(vd!LZ3MikhHyw2@b4MTdw3gTWJt5M4-8KTU$;c z&mkFK8MQ5593=<$&|}z3akG=N+Zeak7!DioXt~KIjfk=iQ}lfhk638oLkrh*a7_!} zEa01kd=D+0Ux=4a?~w~xvI#T-*j*;kW&7y{KoU&XM2qd z{)QL&%?NfKeO4JM?BaR|H>Uth{7Qv(=Ao3mcH?fIPw^?wn0_lbR>XNDoF)^9k`{*p zhQk*9c8%@z6|NpX#O3*89Clj-0v279!`THSRX#gc@`bkf<0Qqz7=)&4GvBU9=bS^^ zHo4%N8Fhvs;m}8HcRj*-kERVcS+-a%T7$w}Qo-GyiFEMAn^Za|>iI08o{kU`g z9`4+|i<7fc1T{j$vB!AW!!hH~4;c0vI2QQ^%!s2D1q7#@XUtCO`YoG(H@YQY-0 zpSTu&ORA{HiGr^3fPQu%pjoa!-XnAiwEG=~y`&Drp;u#f0@46N6bFp9CARxz;M&&W zh+%hKDblFqRa+dklVwFL;wSU_>i(?fGgK}v%i%ydfa0Ot{7!ft=SI7+lpLxhkm7we&7_lu!0q*>j!(}o*)^kZ)Z8>jH&Bw`^LW5isX|lLCQLGerPsiuP@E`fB19y}y&gPsH@AARqJW7AO>k(NpdRws zODmY>&~74(iE#a7kLTV4G;P4?X^ThaTZ~c2N(3QB!mVdc@YO$k8+YGvAHhiuxFLtY z%5ccRImr!)QLM|s6?~l-JQP>uJgKhT2A{onV@zl?x4R7vy%vZ7iSjv;tME}h0}4+g zuwxSAkfmP$$nC@gKT4k76kvsUIs#&Uz~{d3RebsN$6x@y5XJiE!q&fY? zs!b5jxmCMn9aDtlJqv+UqDj!S5i6>r0umS8Y#Wcme#o$i5%4)DNEmr!*_)%{GtbyUE(L!f<`!WUk89l!X` ze-oen@lT*zEQAI-E5TMN7>wfM`pA^D21sV)GG;M6%3ocOrhvF!(b^l7f6nyursW|3 z`+bl7ZVza#Z5m_tkV}>2Bpxv>=9H3zvUZCW;D}+rM>_0~#=i1$n}Ai6bkNKz@4O1x zMTvLLOQe!-;6fwHd%J*dSE|G>;Cu^e%(G9(bRvh)M=@;iwC8u}=Uo}VtM$vTry}}P z0Gj}^KF$W)I<2DS1ye7J(636^t9Vz5hAO$o$NPV}poB^ex=AQLy6h$i<|(I6#)uLU z9iu3L{T}^pgWdHduAV%`)#FFlZPoxMbipG8kw@z2FWuxYMK5U)q;ZT=;~^I=lPHsJ z(W#NDq{4XTuxtaG;3VoVF%l=ZG3EkleIKzujM#1t=vt4q4O%$1LEAQn{Q=`)1>ZJE znx{UF65b9L`6WiF;yw;iy;#!s2r*U$h6$X+Fr!#E0pd;4BTqgZFB;YF1PnvOa<#yB ze(Zbj!EgO`EKg41Dp#69Ib$E`n#IE&!}=P-)fL9=7Ca78xqepo4{Bhp>39x}w@UYM zl+gB3jTilxE8XAS?(!(Iu{4iF_g-Zu!XJ)1B%QlkuDuEA1Jw%%_QwADCy*j_1p zF8e$S^%Db-&O>FF+R111*LbG!hphC&io=%aRcuCO-^_&N9`;*hU?mt>Si3`2`head zbEM2psXAC;2~{A0(f-+qL^ln0hF$7J!VGWg)65XTK&{x%$51ASN+_9rHNKDPdrcf! zWjhcdvWzPkN^&)ie6AcwD8Hk+b^WL*t>lcRH`7ZlW33jT7%XWr57BwbS|*et)(JBZ z>0bipnni4|t?-yoLf-(g;X{Mq9DHOP)*JNuJ%)Zj$ikYv=ReMiU5QFXcFGbu_zKe&U&6ZT`8)EQ`- zfUfnbAS(UR&}(UnRJUA^XRfdJh?<9f`_2-JH`mz29#QjA6BteFR4~xOG%>+@Gb#}h zB@kR$Q>S5i5l9q8S)nRK8(OJd@rGGF=)t265r-t!`4BujF`D49AEa20)A^92T)e7a zx-pdEK@UwcO}~gqaIMxT=8_~sS`wv%X8BwJX_Ui$wT*<`w&KF zmVbbgw%lM*$OvkERNNexF#=)?VdN+j!&}be$BE9X#+sM8l7c4o zdj@J(OC{gPdQxtTF-N=ToE(ie;n;L#DjpzKW)Rmi4Y@TjD1FeFlFhIYuDeAd9FhpSgu{M7XaWKVO$=aXk%7_{ZP$;8L&BnM;E*(O%E33{W%kLU#3F_v zV!a(ey8*#VbXe1PRo2&N7Yi(xo#dq3(kst&L>PtvgSHn+swt#Y(OILTlQpOXRE8;S zHEo|nP1XwrqXQEnp!|dIvA^{ReA9P)7kp^T-Xovi7dl(1uU&>U6xbraXFi@{O3%rJ5y zlFcs`#c$@Iw0%;OmV7=>yx4ihgd4|}xQ+_r>;$Xf#U@|r!}@h9zp!CMWy6v{;*tul|!gQ9|8Gm2t~6um3UxR16i?Nfn9VJT~Lk zj!JYXLu#OX>YLtycXfoz$7{Uv`3K~0ko8L9(m1c=`Di|>;0)c|CRL2yUm5H=a zSkRVUj`BvY$C2~NQ}rw$d#%k=o?8}0VQguPdMia34G9X~;pF5Lx9>i{;^Y)AG)QBy zSdx0vvyxsD9w#}yNtGq@)-r3cqXbZLSS}jeTXhl&Y=ULQBy6tceT<-ql1?7ru~ac0 zM=5|J1&Bxr$pnIH0{o&C!K`WFwK99?4*>Or_#2`#@^hURfzJ_1=(^^CXGL1eYdSTS zFj%VO0U+`UTdB!?dUlGFRfpZ>4p#ZckydbT8_oMio_{u)s1VA4q);$pyO)r#&^Vmk zUf|>;V5=44`^Xrgz-ZY8?5=l`cVWa2$`>qDM?>A6CqymqH-g|bpEm*EnBZByGbE>F zj6xVgkbGBZ)52J!1fmjRn-W86`mh*Q63}%a6Qzlc&5W3&$XpKpj%o-2XCj>g)BaPpnCXCrfttT3IzWr4+*J&9tk!b4EP<(;&&lR#?H z&$9O;7dn#1$Yu=Wyq7W+Q9@HkQY4n5AKr{7T+%V#_s!pocmLII&mO=`Fn|e6Ve5@z zyPej9n4F2p4~6GU?pu>Tp8a;rMsK+N*FSW_K?30L{*V3*{J>`(;otoHKSLsm01}0K zjN%~&1Azb+T;4}H>|F~`dN7<0_={h89l!K1ej7jWw?BbywJd@NGpK36O`DbTrw#K+ zaOf6N818UB#c^5a>bnwg7P|58{_GX}?w8+!cZB6aBX+bRxV8Ja2VVrUcs?u#Oyz3}$A{JG#kzJd1*T+?a(yM)w>62F8COTCX8Z*1(9=iL+! zt`vGy0>9CwdL42odzK3-plgH{X)oUiZ>a85c*T6Z{-W3X0xtj4^t@txGqHItKHqdt zE{2R0OP=|DBZ~QxN4R+SHrAJyNMkRC-o-*vy^NM;MF`0C1vEM-D}EL>%vu{|7_lEC z7HzAFH^U_xwJ7!vul9(C9w&=d+OD#tK8fKrI5FzSDBY0{L(FZ-4#NQF2KeC6h69?g zMcV|dmMuCBg^z6uqzLZ_!=XoSdFZ-cG2XmbN6T0X*mE#f3R9-qnHNr931aMj?wt?t z{ttaf_i?ZFbE+riB9DL>K}cmn2{Uid`UcJN1grbcX2m;>1L8PfJnS*-_Zap&4EsI$ z{SG)Bz{7~~&?5~!(xB%Kgdsp=!{o7A-Ny3XEo22ZL!^GM!-Ss0}zV#B$p7{omv&f{u5qrfLnepJ z=)=+7>3Ashfr(I1u;wVSMF%zEIXqQg>r04`W#(F0p1y9D3F>FiQ_iVu3e~ZCUsz~( z?U_El#^7zr|0GTL2y~RM;W^LN=~UEmLKW*7n;x2VBWTB-TE^2!vR+{Fp(O`q-5nWa zRrQl+n{y~m9C-x_PUp!^cnLYGY+X9)YI08bxb_S~8$3S#zGv{xz}Q_MaOduA^p{U? z(gCdpu684a1Pm!6G#>c>y;Q6dimM{vbX|wj(=(i$-a^wZ;M6)Y@e*3dyLVvr7UK&dLZXPIN`-{9 zE2B+LLaRAqxoB{D(xLB7p|x>yC8eqGq6FJJ3;74YG6qg%6C9vcq(pEL7zajA4Du0x zD6k1Y%aS)v^M$Ac0&=3{Tev%^uxEmm7$Yp~QrARrf^uJQ&WikExxm@!0*@}YS>Pf7 z%f_K;Jcy>GjX_nedkLGT#5f!x#>0T7?a(e-+`GHPdffvDt<)L;jtTdlImO!#FEAcP zq=gu3tecb!H;KARrHA*J6gL3%^b;Z{uuJe>^5n-+pkR4D!FvRsaz_qY{;v5`OoKuj6Zv*En4?ShfKnNXWc* z4h=~Oa7Ua|LmWxEMI>n0lh!$q&S;qctKkt2gy5vbS8yeg#RLPJk%d^7P&8<1T zN;E6{BUnVI^{f>tCz;`6xzO?P(U9h!3p3a8GNU;;#c*|{h5HP*^a`80dY~U& zT;X5-!Aq4OQH+uGbJ7IE3J*&txMp+?kp86gfV0=`u@_wwS;nj!Ed}1nH5|Gq;SrpkaVmW;}CmTd9BxP80?X3quYG^hgSBNl704qwn?$xZIn*uK(_2QZH zncj;6A2fu%t(5pK7qW9r2j^S3b}2?#rK>Ww5XT3lMO#3{&SN_?S*yzWk3Gq#P-sCK;%&y_=!(J-0ub(`|lZS8P>d86M za6s@5UDv`lQs)J^ofqpi;jEOW7%^%=F{G3YwTZM9?hzOSeTV3SD;8S;`Pfd z&d;xLXW8Jvot5$;6P`=UTJI7@B8(|vdl<1BA`&F>s_}$HkvBa&2Coy3h&ar;t;rt4XrZXjGtuU_!2s1`R zOXn#b^zsnSyrLd_S)(GWOn8M2Ew3ZjmrtOPeckmouGb|qDw8oQdV%`6Pv_MWI)2lS z^KGBm03Dq>mm>0KmGLt-GhCk;BWp2cqF?FvsoqeHg=!3et_ziS=(W1PYFc-s#PJLk zH9pn+)aX?;4r||5Ze4WJ$y2C4L*Hlk6RT9dEL-Z$a++V65*A&92e(#;DdN$^^u?I7>5TAo@0+x4f;m&i=s_saWT-LJxf$)=hh zUv+`?H+9aT@m|Bgr^Fj3$SG0aoM=%V5Mz>x*29oPiQ-^F0#}GD3qu-y+btG2y>%Ol zlQa0xs^@@VUJu*!&{(WRE+!-rIEyEpq(~AoA_BTLAT%CvwD3kHVrKEF z+uS&_>{Pjx09af$IWM>k4u{AXqFBU(BMca245Ko63ybShwFoFM&5NTURGFzNp-agm z=zMLtO^s8WTjUTknzqB8TT9?;fVrrgBP?18nRC{5%Z5S@ZQFrkMBn$w#sQXSfqp+? zd3%Y_2HbtHLf;PXE+Kd)xqC68Wr^=<8;5=zv%(|B8^UTKm7gV0yxt=OP=Ie50jlQFEp{8Aqny z2J?VV{=NSc>+^HG^hciuv(E)o7@D^w=6oR?YRr=g|7HLY519u60Z7T=E3dqXU;UTA zgCG3ik703g3M^M5!i24bAq5?^4$k7NwE$IKQ_P!%PS!1R<>th-B6k^LyVfImjeoW$onjhxx^Tfv<^$oBaI1T5&=`jRR$cHaTrFtd9}w^ z9$#a%YO(5?9J1=zArWIh#26Xt-2tyYUgOdFfPPG9f`qv*L%^c(ShOC?HlS-9nxTi= z_Gp7c*Y2e=3z4=}tK+QmbA*$#6U1=D7mBLqzbxMgGrWb)JSP59TgWLM<7_0_hdqkTj=oTQY&L6EETn^P2rM)&_ z=-@5d8fY|1@%`hRDf)P?+YK-Xn0f&Cj;yqEkIfhJ1 zU@WB9Ighq&aO>7BoZY^QZh0cglDNk55G%p2 zu$l^<`s^%}RhA_=>@vfWun|?TiKK8IS6g&?55sAE3L$5KC^Y_S61y51B zS&M1`DYqoEynklKW;dW8|9{5b_1Cr~yAS$}s+x1Iwf6Ho?z?Z_zK-2)+&10DfyNkQ zgN2>Ma!`cEalk0Toe;}$jAPnux7&TY`*z>k z_q@;9d#}fwv#JIk#u!yK*WS0ox;l5S$DB2*MvWTphxQHk4#EBV2*$jMYgRRTv=~hctl1aIBdrWSNjPHChX^g z?UeBBW<>CWuYBPx{P^b{;_1^ZK6!er-hTomfE;TWIkZJuESwa40M4oMj7wNzWg%?{c7PoFN&5abH;Q^ z#Z}{;xP{A=a43YAKm7lA9ZON4{#%)6`Gh*Rh1jtWK~zbUQy+#ke)&K8kMTGE>R-j< z@BaYIf+GvYNNN}aNr*bho~{Cc*ds%Vu0@TaAV>Jxw?4-7cfX2X{fobhp|b**jo_?w zn2b4=X*a@8%Amuc&^s3by3>s+>A7CV>Rn0+fB50Y_`UB+OCu`AthyF50geG`JV3^$ zvYl(iK|l)QP?qb<8EMY{0q;o0jHsl%aex| zuaD2~trsod*Fz?7)@NJ$tsEoLbilZ~!S?DoUOjz+mroyK+-*SsR_h)?qtk>h$3`|| zrLU~H%HlQWoX~60xTFzv&N~%sv!vVQjO*Qm-67&+J>Y!RSHYP~2C01T@%0`jPp?)_-c=5+ZoO|oUa4Ape;E8Ofg}a6Rx%soF{CCfK4CJ2SPt3 z1aGN;f-ilLNJObOV;)#uoVmr;afK~FMIbMHp%SK}ojT%|Bs^)oUTZjdEa%HZlL`Sv6kf;(=<2_hvhb;BON-uAv#T;X4 zp%G}bE&JgPnp4VHJ9MiPT)zDoT)%jXmyaG{|H%&II&@(GsWHFMY{kvs8X3fP$?*7S zL)(_NHp{A{3vphMIBwWVJ66Hx0{$YH9G%iTU;IOUuPlx0MGc-EQ;-G8#2wpG)>21p zw_>?8^Q0?|VHq7#P`{a)TwVxVu~rK&6dowW-;{Ui__9Y-o+<@bjXyLeh${x0{AP1r zzbd`}hz4=@qJFyQ`Y z-p0fC-oqR3|0q_c=h$Dpz(;@lhj{huMJc|SGb1dlY)6cX7oQA34aPJpXbEC@m4nd& zk!~HLR>v!dc?1}0-c;nIqI?ABB&@gelvqPRI^FkIVt2STjGOKAn0 zbk1OOz4qz#T4fQ8Qe3blu8oLHO4ZE6C>7-yU# zo-IXz8fFL7gP|K%=(`oHgTbu|iOdX6Sqs}WIf}*loBiS`~K#yo28R!uV))*U!!bVERoBoNtASLSr)vsGMiIIr+t{a;E_^7uSnAe!h_4T zz%&`Lk#+A63G35K_|S=gfT-kXA~VDW!o@&i6q`H&Ny2WQUmq|>t-`KK2|*OBmj z*7*5f{AoDn@$~6SeCJ!A;G^$7!_((C;5mzTh9vqTX()VAnv94N!Lbnb;3Ws2P`#KX z#9Gg4&b6H(k+kKRqbVb@_zWO8r~%8`en7vrG{aVn&`&>@_hV7|H*=(5!XN!ac8_}jnz4QYoW74P&34RBSe5d)VB zN)6v&u5J1ZStODJRitY8#*!~pb-&Pcn*-NYEOsNa7BHMOZ`Z~%6eB9*x6cah2w5sQ zg+%1-+37+Ru8O?LzTb5!JD2 zNkbQf>%3JS_f<)6Lh3D?p41C(E#-WWmU5wAH~H`4fww|-zB6S>PiYC8Pim~Iec(C8 zLL=-ui?%bsSA~Y^_f(*=d^KoavA;%vNSW_O@ebsIU!}h`5-ORV#02_$6Zo_$8iR?Qp*Cu?Yd5fH_9o945?j!ue*v<=I9<$|W@}sbI{?53Eq)&2Glc zA)@yVL+7#T#Be=y9-DzM=2(ojsf0)?ULBpA5)A@I@w9@QgVtPZAB=3;R_fU&hNhQg z#Ay_Iq4jmLBVcygp~n|Plyd<-j3q+EB1XtLAX8}>+B~+>=!U11s8gdVWHW=bE@`wb z24S8icxTZziW`}=?|N;OSo6fW;BsXb<@DZq)icg$Qz-y~4?RvUUqin>#s20cu3kLD z_T@9ohZ#8&ybF+;M0yVUfMB$_{2$F{kr8CsRJM9Cv7!Xr#VsrAyL->;HRd?BwR1Cv zBP^+Z7h|>2mCgROa_`XVdOYn=~CA7m_USEga-fAQo(3$^$gs*{oJ!AEm6smJog?S5{?Dn^*Hp4$K1 zqB6}1?7hdy(Ba}_h0C)wPBy(n-iafK?%WNU; zD!h~pGa-)`b8Gljy}m(_#l`w}p`16eWA$n;?>7EmB6O|3eh0qVoCuoZ?b}}(Bs7bT z5-0^4a>n5>;n}lmTwm`c_bE#OCCja{Nm=ggYLL)`x88mS4_<#0oAV3w!x|yr4 z?dB!~4OFbK-qsGud1P{>#aSkUNs)l0VyYFsgQf?l62TR(U?|F8xni9r20X(a~Df!&K12|I&L0?jUx`FNX+(nGg3MtUmYn(xetKg;{ z(~I*{jTn%D`rxn{x}w-ugmG{_U_9)!nrv0nK~i@%PHN478Z3eXG$7k$LfRj|ECOs! zjQ!0Xhr=?7lc`HIOdEw>1URI!tl7{Y?E{N!$0~i9-RMU zeC6N#IfP+Q_#7>^OxNm^Ffh*&-rmp?!#v*w@YxCGtD91ED9;hU@&9}ipS;?m??Yi? zMe1E{NqIRU6zpMGp8x5>3 z&og6{3$;qR4PHzGoG~9py!_-bwl7}d-s=xAoSsXON^9RXjhOeA*WC1kC6YpK+5*&t z&?xcd`IEWv(OQg^wR_tNOahO33YO}VQX450N&V8im!gj$5>lD+*Fr zDD$KqqdcPY-7HEh0y&}#<>s|lbuSVVMc&T0XW^7K-) zEh5Jm^I?bWtLJ#}_y>6Y_z||(*I>@*yMV3>5{YC61U)0x<)wbMR#sekhj%Iic`wG^ zIVQjnLXd*5IVJ43dmQ#7dPlf8>2YzkE}m-J8`5#5zJqw*$HchWZSg_8#>J|~!%YXv z=zHt_3Ep}05^+x0?j{^&@t99B7kXlKOsu9zW=XM|V#3Wqc(e3emhGQo2E4}?zjVOK zd0HOI2E;|qRM;=cPovNj`dE)@OX4j}P2>PAu9q_?skfY{oE^hkr}&pz6p}wupxblI2JU{vJYD6`i4; znJUEEx|ZJaa%DqT?i4O7KKzhR+`b_!DzqC85JB^lD}E@+t`xh3Sl#B`)%7jcar@(9 z>PLbEQ0c{8%#2%k-!A9!qfLj8=2TVPGC}#T7>5K0oa#B&!pxCII|6X}Y^xJRdeH3r z6~mFmnRDfB?b1zIE+~Gq?s9Ri??vvYHO_#_EA3tt8LN>IBA@hKz`74OSr6D~ou$4D z@SPPh)!JMd-yc-ZczFzaW5*4iyxx2K#MufM4+y~{gn*lygND#+aa}XCXmsuAy$iha zh0o)SANvB{`pKU|*jxYrR_6~( z<_WgFA*%N*iv5`NMz0f`Z+=|+CI++17mrU8`NR8*l7PvXh>8mr9;8b=I(4If5T(1{rANDi7YkZA@eqYD8<;t?H3Ldpq;ITdEm0bodBAPd{K z4J{bK?OdubRzbjZcD5(vs-cFG6lroIwB37fjy`A(H$igOhM>%`a#*PV&qXjQ;Ve;# z3&F`4r7x^9S+ae~8RN|XV?3Z6I*hxBXHT~X-T_`Mz#6wb=M0cT-}}nUod^|X8WQWe z=Kh6%!z>x7tKN&J>o6k*kCa7`%~|@%I(F!^hkQ&Ky?3~G;?b}B#&c2$Z-xkR=`aaB z%emrG=HjBZl#F_$r0rOoXFR?-EOoi|#f;rU!LRhUwj|);eh8) zUgCS-eT)yk_ZY8U+#tT%gTY8SVM@}MdWsplSwi~9IjV9lUY?jTVk9`nh>WtI5)DY0 z=D9?I5VT@Dsh6C^@YMPGyZt-6_do()1o zb0Lp+rX*T0V4l1pEEL(G(n1G0j|o6VEf#l7xyu*?IRovXYz+rFBaS0>uddJyJyvJu z=++7G@PmObG^2lAUm&YFY~`YB0qa@~1+{{4rzfA17?Oc=+A!x(YBov__am}W5)#H3-S zN^8uco-`uIy5<~`DE4DaSgnSF8`ThMU)7R-OYigTh@*wku(HyMeFU`1Vam0$4sr%l zW4s`72Kf*aP8kUiM3YA8iP6ispa!u}JnL;}d?i#e52sOKH8kBV_;zCol9vy_aEAHS zWAJ=k1`>I7u8|?d(WKO?k>82{UB+${y;4gaVD=T z%s^qXCB%K9c~rfx=vw7GR@9T98l@U}p`)4pXEji4p36NGpjA;q@YnLzy^|u+LmzN5 zbU0lPSgnNqIqyKM5zuCkCQ>_#>S22RPlo&t_WyVL5%B;3AOJ~3K~x2v3(|S# z0M7`0hu80&7N;Boc8m*{3~7r}j#5s$Wj+L`C0GeA zNjOp$ER@+u0W}dcLY46!o&|i8wZ*q&Z=GGa@F5Jct>Ha|S0C zvmxgaGP9i{UhSjosUrkUcX0Y%dYwD9ra6SJ!{~a&Ibi5R5prU3a7hIAIWa;fi}K!K zju~BMJU9*LHUmn592f&-Bo1mtkHP>K7R6TfC1LnR){|7%WoA6RIvk74B@{PQme2gumfLuzz$`LMxfKBJI z={+Jb=9tiVk3*J-jm{I`7{QBhD8(AH5@o7KiUfz8bMTaqn5BK4p1qVLZ|VHOLln;n zju?Gmkirn#_a?MR4ipvwOhv#Y9^&?|`WR!uN6e<&PPgt^jD6=1$D_1gFC-2WAq)Uf zz)$_sui(-5KEiMP#y=ET<=RV>Aqv}+1jmR7r>lU6=PP{njSIYf{}lHwPq8^akv$+O z^2a$NAGX*%`3UO=Zz1&SrAN8Y0R{hlCq@&tpO1Kg@*m&#@T(QBuCDRxzxO8?6Bk1b zxaOl)xquBVYrzgPt}Xer&10HsvSV1nAXNb;nIf6xy#W~j$ia0TD0r|Im#oUWd1JE_cgiDj zYUb@UO2u3LxGOxR{bveHt7uoe)W1f%l^IRh+Jud}8h6=S7&piMR~W0svOP2@~T489=*gsuZX z*l!Pb`SKb!*E=L;IPY+Nw!yvo7dSoJfQWF|OBHUBbSsVZj*GpG!Ag&fZ_A#XZF;=( z);+9G)|g_#JV_C{%W=kTH{&qQ7{`clN|@(}Y0kxSo>E5Q>I@+g!|iU0xIRdWwqqLG zNOx7ZEc}mQ-pxW=7v!)iQe=Xv;hUXFGp<;^zm7qU(DegC*TaWS9VY^Z+<2^0oQo1) z6!s?UeG%#5B`m(Q8eXhNj0B{#*lP3?I1ovi$Gx{O-MqrQeU3D4wTPlRiIi760@%4C zpBi6W&J4U75jQSqTs&7;!FlH3vJQ0`FuncKYPb|hGNhg$Rsu66d zpmY0Nu6(~ZWNjN3%6d!Y>p5m_6?|5YJ{3cb$=o4G&5FMB2*G3BcUTP_LKmtct~=+w z6C-BBZ-E*Kn=^2-?n}*&#V#qo>OA46&w4!A3|Mb^a7@^$a-NkAJLBG3Q={uU+<)&K zJoxOpIJy5C&R&17j+_%-e)vtidiq!*p|~1kLj`OVbj%yN1bPE-L-gCyV_8r>0zOmS zyf)0CjGe1I*-AXNafS>_fwmTV@}5*^XePq-UkhaO!e#&`XBW8t`Wpzt0Pi|w_>$)r zrx9_QFi#`aCu{UWkL}G3&hA}eSZxqG4W;v;5P2i6w(gqaQz?KWAs891tsVeUs}f3< z1^^OEt@YI|2auKr+7{f<%SI*=&v~}{7$7*H^S~5AeTHKXb`0-5oMX(B6e1&JI7;Zc zP?T~b>fAos6!Of<;GspCf!&zuOGES?2oDxq06W=;u!Lq81Itb4q?KEOFCD${kg zzZIg+Nx17gO_-($u`m!(s=FLZ$iLiKEq$Ca;`IU3m?RuVQvkfi`bam1D%9sJVRwk2V~uLZ2h@Yw}` z@QDb8=`-iz@vr{9rJs+LNjU&M{dU)Cd&kywFjL{L=KEG)GkyP0_c9a8-I+ zpcldgkn`{k@bJpYbPlbeIB9;c0^Ly0T4s{ZK_#d%ZG>tAwJp|T=&)GG6#L+Do}l-_AYZ!?_c zI3dmljN5BmKYxs?r;qXI_j}koH0!k=4lpXkO(QE7Ccq?#b`vd zbJi#a!Aq@>Vd&8fjI@$AZgEanpUfD?8S@kor-*4vI7|uioJ!%iI48`hM)0JZ>Ru7x zeZcb7(%LFd7Cu~lL356Vg6 zPfetUD|lqz`x?#RyM+P|khFOdi+EAYxyYH&v^KzX1BT0o=uR&%@3$ClUShg_fjsTO zDZ+{-=46U{gaGO(p6d-U)4+O{SWEq^Fave}#Hy^v3g4mM}ZWbBspFM0NHTGws(EFy}V z#T;`Nl~5N^!na;*X;F-lmC}q+^fw#tj;*qLL8Pfz#-CW~(-7At7^Jfz=_~{QRuI(~ zxbf_q?fGTl^_f|+-SF3F>v*AD~>QP=PJYae=T}f zq;{P&U$?Ia*dPI9+VhYrkpF>oynDY z7P_Iw!}mUex4-at^y?K?r{}eXzq?lnF77`>w^}c}=QZp^6apgMsS;gVsfOjFJI?AO z(MqLo6=55p(Fd;uxsHXp<};%xPy~IS&ALaT3^(usOu&|qy-c0-`F4_f-t~kS6Jko( zPYIxm04dlKRMU5jCC*-%vxLWxdMsEh(aveexbw(SLa!27Ezv=&)i41hBlJBk&o}t! z@fExyoUFP#3d8|Ebn4+1Lq^IhNUoHnNl7W_CWn*3b40wBHa0OPcu!!>H%|bV&3nbL zaQs{}0U5Xuzeb)0BqxxaLt+)2RY!D0(q<+&%*kO+lG|?8+`TFf#Ef^|IFm}e(Jb03 zB*z4zjR@e*!3D3@J1rKM4G$~9DmbHFnP)c>=AzO1C|9`l0cyQ0-W&~bbjYuhBg4Fe!Q^q(&$$!!$$Kqir z$6j{EJ0a9lmLBpkX3PM3?{I$aep3sgGOYF#k*>W~@TN*L0JI^1t$=5YyuKRAwIJx? z*X4%>F1)yCDR3-beCyLvNI53NN3CsCJ?uB9_zQpKFXMmw&;D~v*ROE48E}5mW3}$J z-I3NWaFXt_9~sjeRYBLN5igNFUQ>$<2U48z;=A9%`8%J}(CaFVaAxtID;~obm`5pYDKm5LURtvzmfZ7C=7ACCc$3RnPV8fg2Vq?lqfmzVIp&LyPp7Jt5 zqcu7grl@D4JWr#BZVO^d6f(g#=TrrpR(gaAIod0pycaswD06X|Fz*kDW~?-Yj&%1; z5h+#I4VRmsN^XH4liF44JZnoaR0OR7Yv%B=q!IcZbcn&ax<6)2MmoM<> zqmS|Y*;C{=VYBWr3_XZgJnktk>3i{(o8p&iR2?sIrr;F=Avkosq(nV_`~t6D-hjdA zJLxrkc6Nf(i&KP7ilk15gD76AoEw!R#{im$G*k~*Ofm;WLCGVJn(Jj*wDLYEP` zfWGU+13M?gDPlE?M>fVRq3=<`>u1fGpXP*d5~KN)lJNavT%vOB+h{m3BI{Nk(L<91 z7c!<1f-)A0k(a>*{wZmy99ZNQ-H$XUX(g6LnVrY66h*bOOs$?)fY% z=$bprdKNg|Ji+vWx@mWIt~r`eeM>*&y5m{cgP3s~MYoVBj`)w!Pj1F(#HIz^U-E?d zD%_!!tsz03b)e9O{(wf zeznE{E}0uDW~n?V3b}WZ|2=dbpMCot-hcm1oU8}LX~LtY&oSqW_uqXT+vhuc{p;T= zscumL!z>phOYSIjK-zhmxhk05(!6@rV;p#ft1 z@@Amup=O~xr2x+zPN%AhPk5z&e zi@u~XWi`|g@aV-33=La?5>Q1@i+&lWh{IllH>Z26AQXdiHlc_0Y!MuJgua)&M>OY8 z&$0Ie9~}D5W3}n=_FF4B=kVnD0Utfy;c7o&j0wa*0wd`){=3-6j6O8& zi%_?8VH7i(2Jxww^nMok3A0G7lk zrcsDdBVEcQ*+jJEyhPBk&I@!47IB(!*zR%t;tG!*J;T`$&<#NqVpl4>dmprARL$#d z!_mnI8Uq%Yc3i+o=FohidN+9wR1(n002=KxCnTQqdsc}}y=*p54W}=Pug(+3S8Xp9 zpV$O;rN8yFU8+jEDhFtALv;G1aCuV*v3y^CYm|6-U)#$uIm8%oeRYLLKX`_ zgw-IabUDXTX&verH&3iY59Q)9UwY>nT+*%?R(LO`j91TJ;p%FO{b52MJXWg}PR>to zdUk@o>yV*}`7~jkqVUPGo3cgD($JJ{XO{XaNh=c-~(EFK#3vAcUqyj^wYS zvleO@F$9EJl=5kg==A+OCxny`VnPTB&P6eTO(=#Rn`3*5WExxr?j^-8yy^B`EseH4 zwYLP$Nmk$;vKmmPaYP6jA(3=}+7$gz0Flh8r)tS2oh zC-oB?k}C2PI{466grFUqPSp+h?7N#9x#mu#CZ~9 z&3M4L-(%cwF-;RvjF{q#)f^?V!Kvr3(D2(k(!}gk+Ty6%irYDcW!^Xb0SNeUD!;G zM>d1E`kKjP?Ff}`QI#o`HlA%dT%Ks#N+(5(hd$tZGho#Pvt!l25Ce5CjR9=$?17>K z9LA~CR5Tj@Xts^k2 zoOpKs0zdLEeF^<$BQ3aDx^Y}R`WWB-t-p_ceTv5){0YAQ$A5&Y7cUT}SsfEuqK@_x zLhCti_Sbmna-)mF(jdtKS-8rNTt6>fro5VfqjF>;1Jz5>Jg;S@b}h*@UWr_N@LdO_ z3RX}nl2qZ=VpU0cl41aS*CX@;Qa{6ofXQpv`+All1e+5HP4XR_Yl_1)5G*}vHHNt6 z*f$%lA>dHYb-le7Un7>BF|U@?MW_r{2$kS}YKVYd>d1kKm3UV;O2cCZ9wUg7Fa%a3 zfpc)k$l5Byk$9t1l!75`p&H5Y=2Ag1rBvojUM#oFq5J5#VxR zCgKQjNNTjMHueTbxqe&iM_eK+rb%-9NXH@~^qt2Lf_fyx3z2e$_a2>hxPRKATXjYH zuAz-ARq6d8IW`A_gOe6^B^83pnv3_4Oqj`da&>@WUg^7#< zUE<`YNebb6fasPRj098n}e0tk4vR?s)!{vKFjvxEC{w%)!cm5VE#A6{iKnzn1 zfKw_8n(d);R{2!~@Zco{9)$SNQ>6$4VAL({M3b%u4XhWx{N^NG-i@*P*ys6v{%^2q|TZhY>&c=o$9A9X1b6 zKr_H|r3=Q}0X>i2!E0Ez6(ue7+j)>D&5>5-(kQ+5o?tYF%3N$eTH6P+3GF7V*+HZt zOE71oDGF`0v+t_%TytFm$czk53jwJC3XZ^5_oNAL*WFbdTuRPt#hH{&G3wlSv1Z-9 zqO=1f)lHjm9S-{gUOs(}mrtK!o@Rk70f6NBn-XUs)j64h-nO)A)t#eP$s?4%ah~z= zs61_^HW@0o?}?`$SGl(MhRyhC+&>E(s{!*xTbrM85+4L;p)?z%bBq#8pFk# z!;C-r;4v;QPjPa70`lQDj*&xYvZKZgDBU1UDWhm}kw_>oFeWiT7tdbOvRLgLK|74@N$ak*%kvuj57}Vozg!qA>s3km?FAlboH1*O?2JJtJbPaAXF zEiu3H16qFBvf+An^S&BV7qY^!6~Fv3O4=e@`yd-?VXANbeIsQ2oZsWPPS`vL|C7np&Rgz+FzrNx83ko^qPn^jjJa|K9)@bzFcKa>-*WHD_K zf%cl?cEYxC70v8-F2E#`3VKqwrapt3V_^Lis{$oh;WUI9sn^;2NQeoHfw_5<2s8?5O z1e=Q`8w3%EysP0rq;Me*AOb0AUPOfr08o~&Ww7OXGB_jhY5J5dd1axP6rC#*)5H#Q1muj}& zOI7lR7d=8R_4BRmfeBFa#0cx5Cy58zCQ~^lZ=vZj9{A;bVA$Yv|_66R3=Mpcj_V~sJ z&++l&Es(i{yBEQcP07kgN!sWp9gi0ae^}kVT?; zyWc3neFL23dv2d*@9(!fBUQdFXnN^Fa6w?(T5;Kifo`pVKOjqHaa}x zAN=;$@b~}OcagH@nl}up6@_dU>b{}uwOQ=B-Jc?eT3k$7T`hK8zQOX{0)~9F1(mj& z4p73~7?@&{9?}SEL?-G<9-Jd-Ie6zwZ_h?wXvrH1q~{@HcNo!k9vOsGHxt~{DPTaV zg{O>}V`=wU9w!Gz4QgJ~8uV|FT;xD=O!^6&)2 z3G;rB7^BK5Qe{~9v(^iUwFOpL3o~vVeRPeVxZdOB{6sz8 zO>Kxm`qYySl2)gB_~mz@Nsc7yEar^s!;BZ(gXDr5LRN$*WMmm7)xyi%(r8P``gSgj=2d|0jFokz^TcsKw6R;x7%7vU<~IOY<~=TO_*l~DEesl}KDRV)&6 z(qerCSoefd8(|6}Pjx+f7~n#O620L(!XWZOTcj{&F$9Sb-OiDrshz(zT2KrF0tUNq zS?eUn8Kt&OfieT;v}yipS)x(BTXx+h zW$++0+@U>tRgSkqTKVEq(Kd40ND39EEzc@vpn2TU6(}-g^GxQ#uNShY{+3(l=>wRg z?Wm<{7ULG7I83}nTRC538Y`%1=eW($uL_OAKn-xmurSya64@AyT0U%Bk&_uOWl=e2 zbips^%5pEw=v8;Z6Tzu$Z&Axe$BV&%Di1e^4SiqMMF2LQ@YDBK*sMG_CX9!<@*_YU zm|Xe4Bdkw1nwG0)10)3;b4H$Lyn6ZsyI0qk=ShphB@l!!#5p1}Y7TmC7JaOE%QcP1 zn;Yb@jjCo5{aO*g1fmA~w#oL{>P=DeP$LG#%EHtZ;8diNFM`+bG8Gak)bx6%o-wPE zzM$g_Q@b)NflM=8@^HbycRdDUE!KO@*U8fFoFJjWedjTBUPHA#<|twL&N;kxF-W!LMWlj^ zm9hxQaXgfeNaHOfHKJi2M5NCq8USfl#=CPp)hnyL^{aErKwZt;4kmAB} zUXWYrG=x6rK3I6H{Ig!S#srFhRSv!g$Pe$I;=%n>?DjK0`0y1z`0zRA!z{KHKnv}O zAh(?)`hWpk?=gwo7PPdj7yy@-G%x;? z_do1a@$2>-m1&!>b*GF{j5b_vAqUqD`1~*ZyV$*YiKl<^O>nY4w?_9xu`DExZKXDxjvMlPk-;Xzk&HM;g|pQFJpDGsYXMf;EnBn&eHSzqaQrNuYL6o5C}M1 zd7O40qvbc-nyHNnI0kj~mbK~QEuJ|d1d^(-x56j6@}y>Sm$2vZzw*600!vhiFl|w` z=UgCG@WUWsN;-oO!Rl?lC4E$y&Fy~6d@Twsr!3tMVgmJDQIgC0+jSiA?#7l?cq|}7 z%{-@O8VxcMsj%ag-ghq*b$tkhe@Ux08HKcvTY*Fi6W4rh75E~AYE)1N+6t|DNSP%v z3o$kjWYmMJioD{X(;6OR9H}9X|jW;iFc5#B37;(;sQH(!YVpR4=zy}8jI~9J$ z@XF(6W{h*f&3?wK-Gu#=8%46kg;rj)>f@EB7i7@CCcB#K(^Bt3?-Z~Zgcr|VV(2CJ zeORq9tR+k}Gh@Hq%J;(xR`@W^li)Ykh(Yt9=NP5)LP}*WR`bAQNT(?$UMsq%oRH^9 z3;R;ZTle0BrT}T-X3Bcsv~klMb}vO_y|o5x|CM6Il{eP&SFx)^ofy4QSjYVyPCc2D zj+9HfMtzRrT%l#lvvGvk<-4WVdHJG7rmb6VJJ|~M&9ll4EiwPJZ_vmxHqP-Cd^F?Z z5$kn)bk(huu}!;1hnRuG#^XD0sMB2RV?zUP^QQ`5`)g-iJl3iokVV94Gz*#WfXh5> zXojSfRhMa)EGM&W?W=UgPQVP8C+^Vc;^@E%PC{%EX|{#DZ1C?{2HI2x(2X1 zEkSDdt&yE(v^E7lGh^r^6)CaEbYH$0unB}!=ds_7q7M;3#0Z3iat??dwA!qfIL7td z&Etrx7cVePV-v9=`!df_x@7Nm@kmvh{4<6_J0jSsUiwBbeFFHCr zN_2|?rh)-<6TI__B60FVrNT?0TEA=8VTE>5(!8Fmt!oJEr4`0-at06~P6zlP$|c(8 zl|9fRKT4R0P%ZR}qbG_V08uho^FPa}6U31EGvZCK^7|RkP+r-a&`FLV+a7QRWx1Ei zdMzhU5mE^oF#*9NA7(ftFmSl^83B!xW;hmVwtikD?~rGS~{p-YAJ49}vJI*8YP)dx&5gFP#O zmgt1b(_RW#@vG;}iDHN)K9!i2rCUq3}TFDq~8Zu!NbTc6@5fA!zT zKl$(fYur3}BwZJjZj#|M83V4KW(LD5!P>|-hZ#3xEJgiNX8fPO{{hCsh+p~npT_3m zOmJvPm}Tr7@#4h`{Pn-{TktvI?M;U-yncf01HS%r+swZabsFJd0Tv?dR#CZ+dDNv{ z3lIqCO2A18s;hg_2oX!TFTXKQyp3P1==!^JjS&K<32R)hwUBs#uyXARk0-&E@0w84 zD7S!AfzQlZU~vhU1;1{;JATCNRaf{lZ=6Ac}6}>(!1V!%(Hl`*^4)w zg3L9?h;g@-Vrv=-+zO^nDw|dhd)v0{4uQGI;w6oZ2x%G-(?L=h)Bunh13-=uInEm0*A!_rMZYm>QA=oH z>2~(q8j(}z-R;?;&>fYXjSkmmsDtc?i88Oa+u-uiRdR(l^BU}pl zy`(94*B4?stX8-@U18Osg!!96i5PI92eY&tn#Ku-!-#Q`Vkapk#FR_*$!dtwgRmcq z5@O12f`mnSLJbFJ4W%x|D4hct&Qn97Dkc!C@(2~a_5PF@LFEJo@uK%#&5;+2BVjd& z(3i{JHP%koX>9-tMRNMRlis_e3R!#Jh>&82C&H`4Bvp6qcyOurRuu*Pe6yRR=0KLJ z`%e4fS}%#>MYn^;k_X@QUBP=}@DgF6|4KzrTNgl1Jk^5#GImM{DQ0ZW*Z7f#5AdTu z@qRI&*~E!Z!d9O>dWk>z^?!;4R~NSsW{ow77o*`9iz7)IuDYNZ=1E@|3yu3$LQtP( z%z8;D%5{8veTzZMi}?7LWA5CHch@!bt+5bl=H#)ue2Aa?^M4Wl^l$ukm~L)LA8{!b zsqK8o1ST%+*@XEEJxL&3j}c?k!cz*%l!32)<0CxZ9`Nt{{Fm|i>kp)e*kTThtCz3v z-~QS^!uOxvAUL4&4sV_H*um94s``h@UCm4PAVZ9qwE$vWxfG=VI!EXop(B8tRDQMb zTA?E^o=}CAA{gpBQ9@CaA%hhl5hF<>6KoVuBx?*FeQ-D(0)`+FHGk@@O8`y}1r{&k zdy4{b&8`AMW268n6_~Un%0S5t-rSYzemw4RYMRYuiHcnBYpwwpq~2QL=`wOnk&w#n zA$Wukia|F7uU>gIz{}x83zz~|g|~&=+rcxj+U}A$9U1&l7FBo}0OVQ5nr%@az)6UI zzZ$SQIYGZU1$EtGuLuJF;61u7l#22>MQ{?jWqhoKQ7cr-n-;ovo&7qk7$ed)m3?56 z0*>p!s>VA^Ae(omh)W{4ALfMpoK-=$s1sm6Md6d zWaC4xY8(^8lEKRP4rz**;uYYV8cu0OnrEbW z5(PcQ5>0Bz)pAK9x7bsw`#`!)Wd~cj1KXqe`=^Dr)2-vu((a>c+wT`NjS9UHETY@@ zw+u$VxGPDC+ZoVu9%WtxpxW*hx|Te>l?~c4{3L!{$sv4SR4nM~3 z>KbvLO0BX2)Fd4hY}KJfgr#+)Za6FCmzI)>4CVJ`6NQg9;lB%sit2T?xsB3zN1=8( zuomK_-Vx!IR9cWNA5;%rEy#gp0bJs?&1-4xOcsSRas?ILsUyJV|wY${8IsMB4Nr7^1~F1Js0z0#nIz}B7G4C%0ryXOob>^nC-lK%-Fpmuz-s6)^g+CI zeL&YqSor4Ny~@-V+eQV}%d`-#c-o-BA_QCasq$_6Tw!-x#=XN!gDNAmW8Au*Z{J(J z6jaWuM3FI&7&IqLG?z1A5O<&wIv-SNH&1-%f)p6_8u`RjT3VvnpWCm7A2cVS4dW!p zI!QJg=ItRcT#A^t5%YeJv)3Hf{iR@6k#x=QpdMhI1FP`aSUH*p_(NOruv5471uIT7TiqS35>YfEh*k#7ee#SHt=9m!<6Pzb>!J`{`^uvJA zze4DH$vf{P-<(wr0%vr?suVQL%-}Ss?9vrOl0*_jIOVgMGpOmWo?R^;jkZ( zIiu?bM4n0%iiFCK(tq3sxX>X@(h|^z4!&DS1gQ7$-2mT7ot7LWwUd%6)>b6WKxvVB zdLp}i1Awr*eukJ1fYWuTcRr9mxbv9i8d+EhAnJl^N~k@KiXP@QiW7y00ovVKWHddKl2YsO-U;L3;ILT* zE%sbtYA+z_WD!AJ6EJ1s`j&cf!$YJub$OU!jHa5Xfek_F9i(~~5~LyGwp*40=ViOL$p z#vm|GNiEMA@Sc!~0pd~+f;fpcOrqt14gkEgAafmP?cu?a8%`Dyq=zrFv_%;c_G83h zoN*W@Oj>Bn5G-d#oF@d5%7tD-@6#;3UK6aRcF+(lQOI+OVtI{GnTiya>xTjN?w#Sq zxRW*s3OOTSJ`BHm9(Fb=L84o>l$N5CJ*j9xQJ@- zQIl9U;k_^hUQlsCVSS%X`4rM)gvzTGlA$?wUfBalmHL!3EPt)ab5w*x!!J$=u3M?0 zL*NCqAQP$(X$7C0PS86qk;Q7UcMv6{Vy_w`OmNnJ`$I%b8G{-oG8ir=&GBvzqlKme zCTnCRTS^HSzwmGT1ity5=L_MW zAv={3*-%7v4~+o>OC{X~(a$CKt@WmpA;WEjpk=a4j<@{kj-Qs#KBB>V=QYg}kMCJr zrYD>v;=}oXxBta|75f*@@xlN7e@VIsov zczkuhU;hXH48QsNAK;7czlHP7fDa!%$M1gY6CCDPj6(!q@KS$cJC0>P>fX~rFfhZA z(MR)w6B=b%)DEd#q4Nfbanhlt5Tz_Qn023JeY6n7Kvf|y0m0hEcr{)S5s(OPT&(aT z@7zPsHj$;6nqAZ2iwG2V`(FxAG6c4L%q$%u3Yxb0aE&m9#-ma$wKJ#BXwk>Us4RNP z>$&pyW*h3nnzK|!KMI*_d9^)Do@=6;n2Ph9fH`3_9zu0LNok7L9Ny4};)%CV`ckB; zNP{*{or!sCOb#i0yL$DEc7Pdh4*k%>IVU-}_aC&fXxT#|F-&G_T~=V$UcArq@sNn5W0Y_?-2R{{m^3^1`NZ1e!a#@^VdTst*laUAgr5#{3PFBLw4=3PvK@g1Zu63tmRiXszO`s@ zgbzoXTK9Xo`(?-Z)_v75=N8{q-fc#!mbQM%qnq{ASL>8$Pjr_!%>;%*_5rNx@*amF7^FUfRkGWE}rpaLMPcPNoS z+9ny$x>x!)NU7Z5BNyUnA_5yo13369FXwy=?!T-D(#G(u#A)86BYXC9pghCtXy zE?#p-Kz9EhWpDOt>5|$gnO53SCd;pZ6kJzoCR3%IsHv+huL{MU3X=5a#5 z+jGE4SCM#c`)QVRe5RdB#Wu;nsho7(mXwL6{GM=sV#;;E;;SX`kQgpy4Z4v9&RR4j zhME5_griE4fSl<8Mpi7fG)nE+XShWt7t>K(SQyDa^Lt8N+ zw=4d)sv34yNTfk~7h9JNCI-ooG!UtI;$(jyBZ-d!8Nr*S69gxUF^F^s8>fYb&IAU4EsG4^WNM+uZY5ylBFCjPU z0m>H&9`=^kTiD}Ie;qK^{Ook^7%G&Ex1F2iJfZkdjEUP8e)KEf!`tcZr&uCB5?AF0hWnQhQ~TZ!bCtVd&`M;-GR%5Na}85>Kj`;iE1onX(YLVwsjzZ zfH@GFx`K6C!&JE%h0e26PYfYZs*KEilC#JJtTG`zn;sJ=fyNzB%JNI4n__Jjq@~v` z=|+@hj*=8I9qhHL{OzKOx^YOeQnf~>C2Lk7UKiRMWdVT_Uc?~2^!%W_?M3<0?cF)@cUUX}CN387LV z)726Hl@j|fY3`QuX!4JX=WE*r>-8F8o^iL|v3}6Cu+Cu^7*sU%-u8sM?TE@%=#D#7 z*5)-ZoPp9fi{LB*BFHl>hp2xMUJ%}Q7q^(b$Ad?wSf8Gv5)fEh3E-k77|ShOeTe9X z8U235&`*r_BN5=HZDr5#Gwp^Mh2@MCv^iA%7d%Jh!BT%kn)OnjG?}l%B!DbfgUVS{ z#xUMbAdKSNh{W@<>T0aJ8cpM*GYLC|>bgSJG-%oyP1~Sbud&`7G0>cIoZ*JR26&7x zF`{a0qH~IoJHJTwp+?X(`WEIH^E{!dYIr|mo@dnF!xNW~)J@Ch&oh@fRE+@ENzHo2 z_387tgLB++t!g?(hL`cV8mt!wF9y2@X*#^OdL2CFv(i zDf|ELwHR3OpvBKiuByCQ^`YW861~k7Xqj@dHnOleyi!#0u_)IM-ViRulSaYPj1Du=GAaGR!XDJS>@lB{02 zzfo7NJ}D1W_5A#O=C(w@&z&}S&<1pkh4&f&Ak-BQqv6ijDjOqUL?5hb2Sktkb_?tb z%(X?`G-y^Gx|3tf(}Z!~bLLkWR1hpJh#p};ykoKlBpd68)RI{o6-$&C|3LFtD8h%H zoealQ@J>;*Qo2HMm)w&W$z!3{c9wg%>cumZg9y@6xlG16saD0`2T8S--{OK1nIr%c zTTg;9(?m(OL>Yuem8+BzX$>r#MB4L4U}hm`?urLt~Y zR8@_t<{sKr%|fECEAgbNF)qDg#b_?u=2!*05yL!3c`~?7Uc-nud+c|6?Cy3+s1O(= zE{1@47*Vx^s;*g3*A^yNL2GC9ZALof+H_;A0Gvdr+aSOi9Gz^WC!tAn!bYfpsW^fW zL*P_;t^F6L2RjD@JwMSW!E5WVNSH=mhgdUeI%ZB|vBfe+L9gf9PFlA6AX;pGfFom@ zuEz12z35$2Vbe9}x*By;qe*LH6VhwxMYY!Ar0Wxnk(6N=7{mbBdX?6}2;i1=EVcK;VVtp- z_8^59Bi%AdjN;95C~9D{+R)XEOEE`ES4uOa>sBZqC2DId_?0s%H+Z2P0W|;1$8WaCnyXXQaq2JmvfbSy_K84Fee~ zC6a7OLN3)RR1wlLjyz8~z%+LU^1H10OzoG9IEAYUP1m69Iy7yIcGaP28n~u{)l4r@ zrWjG)V;(0=;|M=9c$uHQ0AO)sPz}B$mlvv1$zOEnOMM_FzLS;8r2Omi5Wyo#{qrc- zqO^8adc9W(s7q_$IXYT3TC$@~a>+~!9%1HEqebzk?0ZJ`_PQKt9aKpyen{u2;h>+E z_QjH~mo@x#<ddNxVlEucJPrf-}Uh0gmqJ)GVC-qg7c#K z3Qw*XY(Obn6wG zZiPy~<*KR@1H~oz!unOfJdW_*!_PB9WI#HKA%VwLuEIP`xde=&qyg8cyAFPuaC>_L zC!mH-vKFmG*R#Pc8Hi1Xx?RD#h65i0JO|UV-Yn_wG0Xr7=v@rZV3ctc+I59ywZ`#- z#{g-M_ki8a8(d$!DtJrD`^|D`4x|DVE0y@d;&_wzu)<3ztx(!QTKbV?zTPQ)RImL4?!$LF`lN`YM_<@oa*E24EGG-0QPO#`Z{)i~@A*RI{$Rc@#}sl* zrSwuyU}2Z$6`W~?#T=S+Rvt5wY)Ng9i#zCiSgU+b^g%r z?`BNW`6Pyb(KAlgJWU7^#00oBCKVJ5rk9nJKSPE=;?hzQL^-AfQKYoe!cCICQu3nW zBI)e`!RqIv3>OPWI$^BvmU?X#x)79eo=i?TatpLtlm3isR9V0X24_hdF_U~GMWOT{ zYDDo7#zQtMQ^`=zn`=S*dPOBTF~}nkte~nBjHHG-Pz;GkN@XEGj4YIMc=+%XjW7<& z1ro0dO^9)yU?}H8EM?&QSv@mc|%^#yK1dg813-8s}$6 zI6XPS(eWB})1+2nO0y~v5+g%S5#}-Sn#Y`wqZ>^&4I96cBBhGLWUQjm^M#ET--_ho z=OO`Uv*>Cs1qv|Yz3q|QMbJ*WHy zxu3BXRb9h14wyuN6eB(D=YwZc=Nv(d0#(9EvNR;^&Q|P{P@}jM_)MFD`A1b3Tawbc z^5+cdu@KNgTRetz=)Kx=Do-jA-qSS-$(NiagauP8rXcf-L=Mg!{jmfD299H=_RkF z;+~1`%ZON<8Za;&V>7^Ti!xJ8Z#i5m@+t&^a|9=bQkf*qHf)i?NK$=dOl}hcf+xTt z3NInyC!D24WK!G4w3h*tnj)d>vcaI5F%l*pFwfizJAqvmR+trf)OjhXgs7;KDkh5~ z1X7w649JOdxr}TtjP*R`!+F$8C#9`8uc{o*9-QLA(>SNzw1IOD<1pg(ZjU!_ zZed~Y?9nN@RSO81k;*^-DLqv65@T|t-+~Y&ZM1@*$NPX6pS?je-^a(_7;yUV9L8Gs zX~y<;i;GuR_~a*-_~Dngxb0`OmTuvttRiuuYbnb$lC z)O!>lpK>}i%cop^0%Sl;YYx`HXcidrmDxw^MvtrAh|ey!=$Z;=#~mIVuW_`l0RsHw zG3E=~~oni>B+)b}KY(3y_2ASMxBy&l9GJjdLFY>bmC49`93xah^s= zhxhzc+S-grbTBsZK`qER%=3;NPE{k3bk_YCTyBps8RoSZ?Q2v`2jgnEriDWXZimbD z>Nd=xhiE!GiH^!aGixhQ#kKf(sR{;uxI9z_=@w%7E&D)?vAieLPSBHVv0hntA6_%t z8wNQTx3G=U@dOxqZ#*fR=RijDkdmR0&P&F<2sY+5S!z+iBNqJHWW6AZ?!yC1-5~!| z8oHU^m*Xn4F0+nm@|Q^lQOtHrdQuH!K%Du+&S^E!lm4V{w5rA#ZfWfdD$5vLAx1Lf`@Z4iJLF7V?BU{0rB@cg8Z5Ry`D@_-@{oDN-U&A};4Y6Pc;PuxM$h@8Xe z`7u_VBC`v}kw~{KJfj*7XYVK@<61Se3&T5siby*uE9urKh%Wj7B58Z3^CaF{t{eA= zKEN82k?%>tz__KFpJz~vsG24rm#Xk%13e(j?3raJLk;6>QcgHKfYA^a#)fsUwnmH| zei|_LJ%)aOpQeQ19s;4)G67K}=Up%D^ax=Nh=E`mhv+Jh)YHLm@`6UwG_j|y99F9e zj~^W4>Ely8esqen(<7|94s}x%M4D4-IMTv2Wx=!xo1@SK@MkG&P&|Yfr$q6pG60@&eR_`Lv!hgx8Htnl>!v~7R=`$TcG;ZXo&iY=QY0!F z(Rto4;Kz=aW!eVR7A(qZ{jR{`~9s`gi|2 ze(>9W58Uyhm>DA+UJS)K5cX5R?Bl)b7B@$d45c_JrbfRr23R*1kqADr6V7NIFYk@-O_(V2b_20v_LAqB-Lot$iA2L$1$_+h3E~Pz$OXrBr-y#h$vVl-n4j+8=L;TFY z_#GTQd<5&1zbQV8-tS_?Bgo_R?&it@f9){oiArywbm_q&k;OYDZ66)EY+X}U5!sFJ+& z#%3Lh_jb;bRL2MFka=s`B*S!V^il*r2fP_3yu984c#Tb4s!g*>MMBBf@?} zPXk~KY*nGID%5R@)n<+L(FW`F8kMwh^D$zYxC@S=t5b}O>Mogx^E4qsTDw`B^j7^n z#t1_M?;M=T0K&u96N#Jie-Kx$T>z!Po5?w&Ip^0Jo8fYNY!q zw{L?29T)Ohd03jVrEFM6Lh~juMeX`MAGfZUxAW}?gDfaQ0^_f(EdektU8ehw7#jvSyQwdt}wl8oNBJiYEoe*Pja zS!G~SU5u0?samAE5Z`YOtoxSsnK3K_t>Fyd##z+Pp{h8ev}$Tt1L=6cCk1U$NCr() z=jTb!yqsJjBzcZv?vw(xAZe){@tj!#o?$@kxZHFO%r|P{HrQmP9-b%}>DC&wox{n4 zHCAV9(2w6}qoaK17%|6~yWjXAo5XI35HqhC)DRzevnJMm>lphGpFC%TndB9xNsHO&? z$x&T4M%ieDr9`bpi`&cFWzs>EYf}?1iq@HJ;V@4rJ*SRjl6bc(Fb=}bs>b7Rm zvIel)e>EG{CINS8nmUU67s^j0gy`ksp3hG;%#a!mLC1z{?vzp~S5ad~*O@pqC2a=7 zX`<0ooboqQ}1Hc@;ZniV4V>r!hmg$9-rd*`6(VgKEv7R zG1`vn`5|+eIdY~GWkdjA;gVy-*xau^h_fU38T0Hhk29um!Z^)XnGsLkc`Da3i6+Uk zT=zKb5u<0*fJgvUj4Vwy)KqD;#v&LN@~iWQXdkpNB!Gh6BlsEKM_gZA06uW5Dj0;o zk;r4LKxOPp{}X)iMNz{lo|N4BLo#(W3gS*(yC*P#JEqfIZ^mX zgjH(Eq6&#A)o&ykE=H5d2Bk182VM&4Vo>t$QZO&)7sYSoebYatyl#GYV+ht&c>bMV z#ofi1`20`)Fb`Dc1V#{0E#??-I|lfed3UK(q@k1!hGLo%f0d8c7_90Ffiy*2=k`Du z(Q8q}>;*L&j7&}7$S4_tl~Sb&Mp~R%G&SRMsFMhYBGj{(Fn~lw4k;wh;Zp4cltrom z=_9A>*3q)eF?l~^yo*v!1ibYnH_0gRB9&#&E3vckS)P=gUYUfb_>NMYEfL}A(?|IE z@BT6#edS|z;1VGz+zaEppf6b;O*F~YODO|&4h@o%3##N)C>SzOs zY^>jIcNqE+&N@7Pc!uMXBN%5fj05IrLS1o+e~bj9QLn{V^0M)LjbxZo(N>VNMgjrb z+da0IcbEcaVH|Zecb6&F+lUifpGom?^=YkKPmKiTOA9WYRnUCIg5~Mn$p0a&=OM#S zds6tEu{Psu$ULjwX^lmc_LHiYCVmsS4eqv|@#4)6fAr%^oUU7Z@c0<-KR(6z=?YC< zA;Mr7CiKIE-EN2G>Y8g++lB$>s!Gb~gaU|D#^-5dc_;x8BV~n#NKn*$E)yg|pa@JO zn!1Joch<4ap{{F8(*QF`rchO(s+)`*`>J$=DLMzJGi<-)vP4a-lD2G zLe7Dkf&Zov6erBn2tSVtv9nx6-9u7Bfh?0$7B2iM#nP#YOU1X@W}(Hg<$52eB1>vA zZ#iE6Uy{zf=fLv#%troMXB>RD;HlZsTYgT5Elw-s;X>?}xyr1nXay~B{q7enQ-}L$M{qgN0%cwOV2usrd?tg zEV8(T4}$W3r()zeFV$obWs21y;ISESQUy4Y44O!24QC7i;-nMfUsL6e&N>{ObvS)` zhUlYYHF4Iu2CGxhN%c)bpb%hc8DWgbyPf5Hm2{?Z5mf0==9XvTEsD_r#grEP;tjop zsFuWArnZ-drila=zdK`5xoY8I%aQH^@I!?)yH#K$q8WXFpLU>WhBI6*T{kVN*rpo4 z7y=uN#vKTUtY9SZpc9qS{*aNbjeIR&9|<_dSq-~LnsUKZG;#xQ+ELx`vL)}a9B+h3 zsa%H4N>p?$G8}}nu|Nt*amd~_dA?L=CXbOK?`+UVKP6`b_kI^J6S;{omV0G}hh-t2Vr2tOCmM% z98h-^Xqw^si4o;}5Koo`+Ah&K*TT0rdwP!JvooAOd4$!`1|aE;EA3M#p-jrAvj#9+ zMxX}u)DIYkk~?!>@Aepm3FA0n7-r0K!0fq=UI+na8;5WG;^Rd3(My!T zHjIuQJji<|{rKGT>o!g7Bn1xoo$R<5$KZc^q(koGT{MiyffBuq7S99+$gFh<2y_N|JU@EW7M zMt5%!={EO;Uz$t9`~^jHJjtViEgaTgGk;jd^zyG+e5myLsj2HiZ$$aLQn^9-eVWEn z!oQ6H=YiiJqk(Hy_{P8ducLo+iL1|EEUr?PB@9!*?cgN?#iWwW#dO>sL7E5s(^q8; zR*i!%%1RU*j?&C2?~~tSL?jDmfLYoUh(9_#n~{{=R99YL8d%oCkuy8;8u0iiX@jb$ z=-Q|)mym7K!||CuX4*=;)|3{B@GEE!ZoOA&=*hLU0}18(rhAG3p(%z`JVUu|<@cO& z$9(>0fBt9j3*Y-5s$*L(c_4`1PE z)!?0n$N2c2b3A*n!O^-)e194S%;P96(;Qq~Gw57hV;Tk+B24250@t?A(}b$75p>@K z&Peq01kHE|bB?xKYcY)hL)gP^j$mLAVt|3cyx+r^0j{plbSv&qV8@i9SvNC6J)!m! zLe*ooH;e`^2D__U80S#ABUJ4MqQPz z-a*j^yn1zw{cgZ&-N0GG`KE(4miexa2$Sa$G6)Y+J3{ys>2Ep@2adh_FP`+q7`*2u z)REg`hc zDv+WRR+XGsJdh|PLC{~LA3^ao0OB?+b(4B*8ygU9NRfnvRDa8hJ;Q>k9fORY&k+o` zWW?(C)>^JX6lL+Ag#d{l!hm~l>HPaNS@(pPIT&X$lvELv$YDxNSHm1gEv-`BpAmr} ze`1_-4{`wrAxiB)H0@sRZ7ieTs>hc?gllR}o3w^KWmZAtwC5+MXW6Pk)wcQhh#eWO zYCr^Zt2F>t&YPyfX1&5BKturmyuq8R0jo_7KTHU7MD!8!#MuDRRxoV`1A|qw!h@4D ztWVC+u2xLz;xx#;O)1SY+iN_}5u6F&hY`cR$KA~xZmw>y-3^!}l|F=saq<}F03Wi4 zFOw#vwcPFrarUsaYGAyX-HH);`i!{xYaC3cwtL+SD41V&% zzl8g}-$mQDI667OYO?{r*bYxV_z)j_^V|5~@-_a+@Bb0D-~SPYIf9~3ec|V*h6^xx zU_S+1-VXTFPp|Bk}!VqAAUE`4R`x&w!0|==-eLnS=LX_4))q_nW_kKloq&2MpW0pOGNqk`QBjbrrcMG1M#IKRUW-(n zcHq1y_JZ&lO&=7-ocMH!psq$dD{dz3jl;D)6v@e%5DC#oyz{{`{QPhH2B)tk16=u? zjyUtba)165amX)M!&Mz%YxrTncyj~4-y!-Li5W=wm@x(vJwE%3zre-kuVAf32mwF- z^G|T{XFtNXe*IT)_TKxTkikHWF=#d$JlbsV=)({3jS$gq@9^@IPw~YkKf%QpuP_W# zqB>&=WgN(RGl|~3|I6)D&SwZggn7vXimfl}l2Y(hj`HrpqD>$4_d>bVFVy(Zv1^5$ zDW8SQ#)ycGs(HqK-{bbKM+gy{qct8pI7QdB@P5W_w+F?Du4%ZZyzowT3~@UzrVY;Q zQ=43AD6=@p`qQx^>FZo3C}j+G+Z~#QJKr>Ii>B@|&vVx8ti?Rfn5qh{s!-Pr zoU0J~0nr!?{T|(FEk^o?9$U1lm2|66$6!n?uBy65*R8m0Fb)`pJt|kDY8uo{%k-A| ztydgLZ&s+=HDDdr&<}fz`z?1iLYn+MS5UqsG8hH#S}b%vKJAl(HCM-1CWms57jgz~ zc^MoWoB6wn{Ol~cKQz$&>)yYQa)+#!l))4|LS=ACx%!OyhSGP13@ZOe8l^SqK5643 z>z+geXOMcLn_{Af%5i1P22O3s<0{QG$h?)9LosrTMd!FpVGvN+603*E6wl4HxZ4f5 zx!Yqmctm61!xet}cYlQIn?3g=SN?Am;M1b11!%I0QU;pGSgK~MYif3erte!kbTf`! zgozdr7L6eUsqQOF>`3^TtsEY{_W+v*Ct}|bhJH#waz+9{##m@;$S5gxyflhf4-V4G z^eWPQrHi!G-O6QAgT44J@jfb!T)rvQkW5^e+@xeEpDzohN=CT>^|umrkHA18PE)gi ztaQnrdOLaZOXO2L_iWHms)_S+K>y}VPII=5+G?Fev<|`g!suMGfTSZA3WG6Rt=L+2ZMw4)bQah~M7OS>K-Bf5-E7a2RD$X7zdaP@U=Z`mdbF;&@-3fl_ zyWhoke(5`S_WVP%t2Ogc1w-;4moGlS@BG8x!TT%8Ac0O<5#r9-Jnf`C`BMFmjvZF7X)} zpPRlm~>&q~7|X#qUG}TX%4)V=>J4 z=r1qOUtYiu!$M9ndbo5j0pZIZ{}n#@;ip)24JJQh*pJxu6JEdBqVInjzx-RjiOs`@ zX-s)%i;8G1)~9Fq=oilL(YL>iaks_GpL~iR{mGx<^5XS<;!Y7WO7onjouKMEfK+>_ zt$*|qBE*Xs=4%;UhupbsX_%u_j7{b(rcjpE5QnM}`B{SMIwG);xJ?NB-HAi_w<07b@=@!lZBSrk$v4ZK`=lb%rI6|{ta(>mu6 zF$V4&Qi)#1JX|`WKtY%_t3j_X^1x`ujDbelu>cP?*>FM*F7RBNJTTC5y%+L8bwwTWG%ol>1}X1R{bIYElzWrHgRz(S0;-c7jLPFM{)Y_4D7>60Tgj~>FT zPtZ0k0D}O_oe##5fp-l%F?Y9joUJI@o;wXas;UNR2BzEN4t3o~FssU<+8DU1fiVu-yBmz#TkLLb zP&ai-S58J_$vM+}W-gUvt6JZOuR;!&tnY1y<~A*Pq3#_Op8GqS6%W~>1!)~Bu35#YAoec`eu$J#tm5jIKXN%N!f~tsBBIJdaN67}TT(cHHw8KR!6?Q9zDhZ&DM$U;ydS)|F zfdSV9?=CJ8#u3p^IDYU9#vDUyyJM^lp77uk<+c;*4WVKO8AzqpK=tpJZbUjH>_>Qrc4tkp)I2_4LkWp)Cq{-L}Y_h+tg}SG5Q}U>bV#`#t*I z9=q)xyWJl9e!%Pl{2V|&;Il6RzW!eQkZ@XHNSM zfip{pd)`joW1KuF%xEf$*)wge+6wE&VVDDkIbezrh76BOx)juoH~Qt>gx3bxO#x>& zBaSx>&QChL^LT^RT6$nI$IOnr($tLc+G{T zt(><|d<*`Xl_vgs@{NBUAHDh#U;ObuMbowDHpgg=PC!+Qhu@6&jiYmP-5STo8=OCU zh@;a}G+oE-gd|;44KfHO1MbaMF{e6qYhi2!l+PFQvm0yi_=D&8xBlIK2jBhmU&Vj> zcm8|)gWvmOzyh@Za3;e?o_+EG+kVDoZBSR7;p3b*4;7S7JnIqCZ`Nh}5jEIypj!B{ z$p)S}bYkRs)U%_u@SZEyh+Io$UE$4-I_?Cfs)k6Gi3^J_$?if{tC24Bk$k1FE)$t!qHAJ+kvm=*Swh z$0vCHt#9J}pZz*6e)1{){2%`zUSGV9|)6Y=d_Om9|9aKA{jo02n{iY zkhNUKq<9mIyv(|ikF;o=B}C0mg@WvqwpCY2Y`GYAF}({JQLsLw%u8!w1M?2&3@DZc zJQnkR_>!%9@K?}e;t|4q4Y0C6O#yD~VRo-kVTT$k7*peVYf-Iu-6HXv&$Guo&oBV? z5?OD%j*;0-4o=l|gSKt4-EI**JKi^&HL9w{Jk8kN-Qno?m@_YAP04fHTB3--I&`ZQ zXFvKGRb3-`kA7e}LwfNW8Z@axVd_Ro7ZnJ?zcETJ;BM@S+TEFz9lUvi+d8_ z*uq#hx)%+niRZO1_1|IvmT%HNLt1g>qc-jD{Bx!gWt=LNvJ>i1H&}j37E9(C+q#I@=07cx50k5|+Zu^-tOex!hdB0_Qan)2f-!!Pj$?l0z)!eo)h>YI% zd+di1H@gPsryHCctx!2xe?_8~8$7H%9;^-XsQ|%Avy6ch0XWv}t>~%N8a#Uc9L>7r z=a$Ul;3F!>av{VV0767E?w3A9sXezywgC~O&6=!g;on=#KFMNbgFLTBNk~h@FQ0D; zB05ZE=fUb|Oj_iu0OQ^Tbz@k=eLod+E4@URFp!RlL8R7Oy6_qycFw{WN_BYT19q2h zF!w#?X~5az53o5s<7gz&;h?a1Xd*_loM%v!-kmB)VuaR@Cufy_u^0oXVJ_>k6xUzlSNmk94aUSzCqKu95eVL{hr(Qgq%{S5>Ax7D5>a9jq*e|+zy0@ zl0u-*q&+{m4=y9;yI8@xifi%>D;*5T#VtCVs{jEis_G8LI80;DZAbzu1>-zpKhE%x z;3@}85djPa_ox5w72ZGcc=KieV!+911K0||R0!iBbdYH&MWU@z-(k?pIkk^9(vO^?OYH9^-C{{q_#qn_KL*ceuOV z!EQNKva1}XD!_*vz3UoQvZgs;^b8Uf1EF@2Yk0s;0cU}$Ibye+;I^=2DOsd$jnf+%M^~j#c?`qQzLyq#EY@@BQ!dxk}G(nUKXx71u>6 zOyP1i*5GTu_BZhh-}^V=>Mmuz9FeL)bz} zvZQ5WnU!QsM#N1rOzFjlkSFmQIh*(13C|x%G5Yn zEK8o+EYFFg?1u1_Z+?Ua&%ct?)>77_rCWTL`MhcaNo}oKn05m)7GdlW#sSma4fdCp z=x=VBR~0xW##)e#(3XvtFFwb9H{$W*Q%=8jbKZkuO#bB$euC%U_#B&)GxV=tqh77h zo*uz<9SBp~COPd5a%X_0aZyCFOmPqSoDFi542TkZ(>aSrj~`;SS;IPu?QRD@&uHoj zC&x#qMZPHVeDE{+J%hw`s}-8A<=+V~W`;3HvQ=p(M}^rLJH?oABIdwK^5`RWbHo$~ zH3^PXT?13&+TR$48vC0m>W904i)3oxz*>E{URw} zX*i-cl~TT(vAjN%bP4AeoYnh?5F)oOlgwvJtlz%cPPn+6F!-RSrhh95q9(OSZt8tR zKYDC+jtp?(EKZNtSal5_8zVeLOq0jm%{6wrJx-1{INo$AO3fLj6~3~busK;_+U`+V z%iy%cPJ3+|Yl%P-{a>AQIC*vs>vE)B9rdmZXcLQ*w z9uh$p?wcoo^1|v07T>4E6^3^p%dtppFaI?eyhA;ny6Vbc32InpO4J^8JOL2kE1<3v z!F+im6=F$vQOu~_F&pRB@q`2gtdX>LfH3U#xcubDn8y)BU%|1pxtC)a+L9X+fH05n zVP-;(1QW%;vb-n;Rv~x+OQ|+qYZM>?zd&5cS0`eG0;HXn7cCY-su<%!{udh+GDoT; zImgj!z@!xCRC`@)R7TYXCKavD!A}#2fV$lzccL^l}?cG%uxe|wF)s|&n&`4U%`ukq^3ON0oFb3hDpihOa&H=(Km zs@Y?hxemFqKvy}`&cYKg2KIVSLFkEq@n*oqcEZK&h`;uY$5^jwR*FCgf!)AJx+6(H z^h|FF>!9$oD_tj!`cqzMTPQ;*_X`~yL`hC(^3_xI-n2}|JM@CHfGY*FUYN2lrR8^O zB&K@g(h%1!3+esxcaYY<3ZBGbD(L<*7SB@h&eWPwk2Sy)2`il_;W-9KJnNAAFV&B? zj6uOJ}v2MSPG@VVS~o6n=g_xxvFgtbS?L8S${9`ucl>9`I*Rr5oB4GemD2SAufB?8$CD9SmdUAGB zDQvTRF6FWj0k1Sxo}x4rBP$+VTjRrT|2#}`KvTYUaqn~!6-#M8@;MO>L>6YAc&yU| zKlB)GuF>DzVBGfrAQ@V@bV_N=PdzSPUcppc65*Uh(>7?^8Pntu17~VY!-P-%?1%XF zZ~Q98n;Q(bcNn)@)T|V=fu7RY^`Bxd>c2*f@^rjr3i5B(TDXcZPXlgu zJ-V*N$?*}Ix`uN~&jdeD82SNsw_EJ{5siS5HRyO|s!AOI2`ce2}>fVyI1?ORe6{ zL`VO>ic#uNGl}WgJq>IdoS>#S0i5bgg?B!Mlhe_q^t4n`37Hm=L{b|JIC4C zI_a1oLY!x8rwMmAx43W)-Fk(lX&5(#2qCbczFx0U*ENQI!0q)7HplE(GtRMYH!^>% zoI~4n7z1MnS<4-9f;dGXyd#EyX__#OBW|v*arOEd*VngLH;#4R#NtacSBx8nyhges z76vslRdYZG?BG!MpvK`UVUoK_(Lf=Sweo;4`MQGyNM4Ty^vbJR8>gdv0NcLPY7s(bh8m!4H8c8Z1 zMQ`9_DFa6avu9h()tce#aB(-`^XmaVP~uTU%x42Sv=J5?R-JED$h{GhToC0#m=oqxbfx>K5x$6_~69Wo^ZPC~{pl zOH0`dkp-Th3_=Vg-V~M}T*n~Sg%zSu7Yp(_Xr!oImvYlAOaM|aK9yft>9z{`CMos= zLYQY!_$l32y~jz}muI4QXvB+gV2}W7G}IGg1ZK~D;H3^p1u7d@kalApk)nW(2pT$Z zYqqLsFi#UeK;3NwoKEIc(j~RM7L0{KEc(zJOu^vI4!GM|taky=jKSu-!UL(BPth?I z(%{WF&mKcRVHjr&gU2*`5IA+mId%ka`mPw{6&vKP<}o*IgSP9?wA?PvRZ{ntlnW$g zo7PkeQ3Ho@yTj_i8dal__ZA_VlpO+PfJ*zqOpJOcD~I4C8UPfy#&aHaxO??^LW-@L z7InK4M@Y+vt+m6+gNJC^4(pQ>)NKbc7W;{f@F@hCNT{7fQ}N$iJDfRgk5yM}09DRl zlKR_m4s75@{yh1JVGj7=i)+l2$FKZz?_#~KWffT8Nc5i~=v;Geon{+o4W0@S6-b5R zbWgEEGJtfSjO9{^T7tyMMT+B8P$eUMVZG@oSqzr@8bWK?1Fm=w#lK>#roBfI zh#_^GSVq*}ZnS4!o%siV1kRPgl8_B2!_KUn*#V4U2SX9v>L@=S<)=KS8ULzQ7m&GC`!ti zNl^&z3DIQ4=CqWBF=bpfp0jK$1f1AxPC8nIKnSyEzOV8rU0;-bCp=#X>yU<%hL`0) znq2}bu<4w<#>vr8@EOHmdFTCSIDO~65|`nw(GUiv?m^2c#Xu5lLqev7-iJ=#^9es9_ut5uiEhvpDq09<}?foZ>k>pIN) z9uy*`?GC;l&>U~DdUy`obW55{&%^X->l)wu)nCE+lPCE7fABl#$4RmjDXq!d={CRN zE+tN~c=FG(%b+?*0>n%dgyJ4zj1>D1`VplrqqHbAV~i+=^1aGhWAO0dIhO!hm+aQ) zJ?44BcH3j<2QJGZpsAarsPplX!C?$u+)fzBfTI(Kx~)>AGZMjv8DlgU1*LdD6Z$b? z41|f>IV{J9^j6v{$s82VTj~BNrh4`v&sP$ACexwHP5>|wr6V-$lVY3b|I2&m*QVI_ zoYl3=C^FFK`jW4eenej8pKfTCpG9N~UWY-qY2ca~6bN5_dV^114!G(AzMKpuM%Kbz z@9~4-27mtLE!Oo5ym!9F$M2lu`O`BzkQQz*EHh_6W9$dk%c>f6%fNu%d3f*HNN;Kk z`yMw}9!JMV+}qh&1i>-@xCNUv7DK$m-49l2PHKjeQ|H8m{*tHO=I%<7RU3`y=~M;Y_t#~ z_eNO0OU`au9!2F*bnvr0<3bNg4}k<648lSGbxO6+i>pzwHwx6f(nc&ygo4-Qr(hDw zPHw2(VTdzsJm8JN)qcR`Z4Vz9tnQbdtzj#NKYKl34iV0>ZW)O%&k2A_jN6C-0t&0( z)kGME37>xP23=dDYa29ejjnO1Y=!6y%sk=p`VLpOdpvz~iihVXcz-ovwdoMX39hm* zfnXg{&@rmr6$!>!xTeD9!7*IrL??sjqETd=JaaH&+*(Nh=8OsBASIfHosrf+OjM{> zBN9m;bWwUrk9fJvB#MhJs>)`Af-#mn`yTCjgR`d}=4UE(ZDEKd&(Bo@jOtBAcR6U&2yQQu_Pq&+-pSHilVK=L&R-a zN~Kqsr8+qX5mDXRY5gf1OcJ5CX*>XomJRT=xqd$YK_XKEz7k2(`>jMw1(jS=-YX}m zFa~woVt;oB0^sTnfeegwjJjVnsOlMY&Fx~i_b{cg%|2p3dQ_VgzWLR6@XmuHth*X@ zWq>Gk_0h9(EA?TKBE0t)hY902bB|qPP&eGiozvAFqop<#nwC@5o3>2`dEK^fu1?Zm zv1XA|#7x?4;ysi7WF0^I)JLqrN^Q5P} zt!sn{Bm91ZC&EA)sb(df+qML(x(W{;o?yH0akCpS%%1Djgua@};$+?8Xx-xL&mZIT z>{yIhzRo;*Ow)wzZb09UxV+ini`QEW6AShimwWu)AAgDO{tNG-sVfwT$n}8F_Ov#V%{V?mryt*RTdc|!_HB(Lpeujp^M{;!A$IQP{*qR^C(t| z(kxdEEVV@{=px;u;QQPWi-o90?OiFGu{z31 z;chn~5@F~^Y+t{|gZDqgv}IIsYYl?;*uS~PczcKS{NA|+AuYQbQ z+pO^i|M369>&xpDy)Bk9={qQSi7K6r@lzHDr*oFtt?~~wHp{h6x-9gdyhTj@0g3ob zzP=I6jJ9nVkjq-Bgc9tS*<%_8?E4WgK(lILn-((x&1NNRO8J1us~FLbGunnr&!`-q z$kved3NS~B7+Ql`Qc~N>qOG_qg8^rWv<|4N3Y)G*Z3&IDaK@l^+_p?hj)>TBwTX|b zK8N&dx(76S?9i}T>`f9rt@>1I%+SLCO#K?5f9KUTgvLDIOnp_~^+A zK7MwFr{`EYTOtTk^C%`+-1`L6JpQah!homD!X@?5R252@$Ghb7CGMnX@%PIkudy{q4 zQd=l99L#dxl!Sn!X0yJv{3*%Bl025iZ{F)m^PKW;Br^cb}@`2LT-z_1^I7%>F4sir`f5aGc6)|E#@BJ74) zI=e91de>H1Hyi+}ti>?T_|c~qF!O|WK0ZUWYGC8c6JdEjS`s`bDcy|D!V%D}8&qwb zg2-e5vRvwF90%|qzCuR?#K<<0X0}Cuw4_#XJS<1qA!zW9j6~3v`c7KJg~3jTy8Bai z001BWNkl2tA>L_fIiArs@hvKG#|Vlx)?t3qgH z6x|pDTjg2?ijt0?^;O9j)+lkF14P1bx5c=-TW$`@>KLgqr}Gg7kr3WCV?T7YmT)*~q#_{is|f zYkX=ns4-o7mk7EMIfa9fwq*lzUL_o)MIPmLLDn)T5~RHd#Tiz5ro$T4Z6l6`3dYtj zWKmT$VhphJl)T#@Chi2L5+Y6?oZ>q_^C8Y3oSpRRdBbBpJZUn@wLe*4giW>5^>(F$o93?l>hnsSC1b|d$ou^bk@FFG_7rC}SMD_|= z=deCLO3G6@SDY`}pHr8#l8BCh82jSbG0rl|z104Pw9%ZDI6#0D1H2Cy#|hIkW4|9T zO%p0-(bU|{fJ7mS*1*ETS&OsdH6A}c$D?PD;3U1?&oicR!aRGf$x0l32IwG6w;AloFptGCSxEwbC-1$7|Ke}|EmRNRfvswB93ssxkzj{JcESb0 z5s5Kk*llt7<(Ig6`4X=$E^&473OBD`W9;{s`Vn)8Y5DcOWJIt_EtY|S4z~7K|LcE^7f+unx^VrO+sT?7!8dI&x`Es)-H5)Ht&1!b{XMrS%LZck=4_M# z+1L=nkIMK|A0RSkhwNYs31OZvPm{K31&)q301>7+Vn0sk=Lq-))VMrI=Lo)O5M#pQ z`^RX#D9;TTh*3)d6A%JA2T&tGa2xI3Fh_t?|5-Ioke0zjiuBds$N{qh*73m6@}(&BPuJJ`ERO>Ka(+p<{*5APhKb%Yd>I&5Z)AndPqxVpTS(z~v~#DXfl z*{ah9gmDE0td z>>_a8PuTSnVoLBt*t8y-*5l8g42S?uwrdO_B7yMaa)+aJi^q@dVRzkQf4Re3FLqh> zF$7F9B)~w$83OxdNbN2H;}o%Pf~2uKC!Jmhc>N4GIb8_`Z0EG`mg$xvrv+I(W%bc@ zP0rYrOzH@*mdO&sH9$%PFD51&Ik1(W==}xz1Q{8QlS3qiOO(N8n@mJS-^q(#(ua&F zZ4)>jj;AEeO}4Al=q~Tj!Ch3)F>)IwLvSy$uYd>;Di9XEgY!<2^SBu1 zF=YflQbwPR)=Jr9h*9Oc4py&mFxiEoYl^SfTm-21nOPJ!Gt!e9=?3}*jihq|$a5CR zIRcxkSEUJgDm76Vq{c1QSq@nO2QI1W`A`=wl?7cT$8w~Qkkjog6?Z`=Rhn%k7*$4O zo)OZkTGqx`wWVQOB$i9yb@JOepO$j+g0Yk;Iyq}v{$+iVa6lv}Dd zP)Y=Zmc$`6Pczs}Am__Di~$@;)<8=_3@LUTCrslgMs^5t2Au~%&?-AmI9fG$aK6PW z_fN6zT6nO4^u-wnGdvRfy2EBGZR5fmaA%sZyY6x4#TCxCD}40i67PI?iHCRA_{?i} zG^0Tsf9m8Cr9jupRT4o@sxi={%6w)Bi}P9wNd2Aa*Od=gw1bSKDX(i*5P_Qx7iD&J zR6ZNy##3}`i>S95#Bqu&>2KKfWlz7gyYa$Yi~VnUo|jQc&t zU5~LJ)j+q>D&eVK0jRup7zc@7L>9zfFeIIj2u;UWt%Yv7Iil6JHgTHKoE~HI;31rA zG~)_+A}K@=rF9Uh_O08#n1kee~jP%pMMj>SXv2MI<4(gF`mUK;e1ocT{Z2f z$jAC@6dyV*hH?8dl|3%EMdnin#){LnhRg|b2$)CV7hp!)c4)g63`XBe>hf+k;GK`J zaCWl6r(ZhFMwIaZngd=wZUrrz6VjZ7AEpG35i4e#cZA>_rpQ;p4WOBC8))_Gp*r|RN zq*CsYX#-+#iGy6$|K6Q5y!!fMbnOc7z4snI`tTEMJC862yx5I6_6~Pi#?~`D1NYVr zZ#-Dz!Al#w`y$|-4+b<2xO&m!vX7WT!Z9)Si81U%9}&EP26GZ4W8He39j&olwHT&= zAw+z5G2p!yJ^tVCeS$mN4zJxi!e?JP#mo1OalGl^oRsrS(~SLY59d9)Rf}mHF;5e^ z^;)wZ6Z)M*-j9!tFpLA-TFOU4j2ZZ<@m@OXs6!~ED6%-!I2b>K@9KLcBNV7xD`)w- zcoajQtJiL^cq=>M)~{WBEUOKb9z}=O-ZBr>%Cmh`s~t=A!w9R^L-fA|Z7zqnxX!-Q zL|JCn6^-XQVWWQ=RJq1+F=*{55lY}J%Ni5OmFz4=dOb#!PkO(|QfHk2gy=9NU_VZ{ z?nlY$bcAi|uxSXpX+{+Gf@c>yJiXk3AZ22!uEE`t4IZ8y;pprL>wZE|90Uo*0igoN zWm{((m+Ip*i$kDm96Il?Z3#d5cnjBc07t+(IFF)pvP92gVsO+>Ax`8)m}mI)N}}gF z;Sl9O5)_3DJ&&5M{aIGwE_iA`US-8CgXF&jvn3G+&^$xEHphhn_euV-DVC>eRf zYUMyBmQ5rN&c26b(7FDoQgqA3IiU+}D`?g=QPdA(u4eQIIy!?xDqwIG)_tCu8A^xi zL4@_u2}+-|`k~5jjEM78kjX(3MFfeFu2C^bDb*h9F@Y*jHFAY0*cCy}B;ZAjcPIcr zrN)EVK-xmyk7X*TEetBpWXj4KQg*xCjM8#x%K$0{No|zp)@oH$p9vXIgkuD#)J93` zB1;Wq^*qU@nODjTGUvS*nU2tIjwK=z62LJ#VjOAafzDe%#2mizl^?@qdj!J*AXbET zmB7w>FbTRW5ztTrv>lqRLkJO1pT0oDK(}hpwhatzpIMB+G|xyN%rPQRNms3soRySI zA8%V9Q9QU9e^hADYEuI-LO;PDwP@E{3^7VXL=DxXZKhmya|$iRkkG7JfMs2rZ$KQ? z2_j>QA)raz=n9WtJwr=UziUi4RZ-%U zq9AIT;3=~g!&#LB`|R?9gX3#Vj8wSReUVKdEqI#Unn7??8)dn9G30AjQIA#UlpQk~ z1y@5m#h?ayP-9$;^Lav;C&VxdB5$yWx<%3}gFht&)>9)~TO=O-h_P-4y3>vWjkM=k zcj!9lb=xXXqoqbRjhAT7Jfd4|u-=~NEG@0DnmkwYzoF!E_5Kh0o0s=kfZ_eH-wUmX z#}k;JeFEl$)xDP&3ig7XFKDCIOzQUu-S!v{j*ju*)z|RZFaI%1yZ&z?J!ui@jr_4jM zf}QKNZ&B=Z-5$LD8T`nXegfbA+BY(*AYg%q!&OsW@@3A2J}R1F6@<+BWpUhdHtKUM zoQgcpH>j%MHJVlo?S4NXG9>$}5$A`MnwcI&C~4)6 z6L_8>Fg+z3%=*B$j?j`r>lhwDU?8NFfjxz+WzEfLB@Ry6pTtbi4TI!l9GZ;CQvJ#2)5iTd8Y;cL>saYD% z+3W_%uNGM5%VnR?LnR7(fAgXTJ*AQ1yC*TPiDxp*v4`QmJhoRgBBOp;={gYK@(J+ zG$o0w^Ol#EhIXwQ+%g)zWqdau#*>#~(k5%=y|lb~!K-ZEa@{f-&h@nw@z+NMzyS|5 zLE9Y_#;{atx?}O&PFc zW~3AmH28M5UEyTi;sb*nqkOUbg`o3ubxv+jmHk>rxXY=^x>$A47VY;~ zJjG4pB!|DguKcR^$g`2LMMY`{FZz=&(@$>`hTj%*Y_EcUbP%p}mrn zg6hLom|Xdu#L{Ae6LN2PYw=X;w$6D)4h`Ba4PdQncMWnRlI!dM=PDXhB=@F8w?5YE zMDb2BEDRZoK!ySa~X`fG5>$h@5vAhlK4B;QR`4iW$M&qN0F! z8BJlyY1o;=3lc3r0xT8+Tw9-Zms1WIknDsYY1H6^u4~ZvBW$-ToSmQG(MxwRhajnl zkp1({nB zA{rbMBDjhgm-PjJRVwG@aQ*WQ4=F#tUFz9#6r7jQGp1^t?W46}MJP4u`2f{?Md{a! z=@_)WTn+9jQf`L%JWU8;LYM>MEWPW48SBxo6tts)Is-!p2%$E{)d`Tj&8VDetmjoC zn{Cr#)ro@Ev=UM8x(;n8M!NR`)Y)|#bZfy!C?r>9FjV(0>rlUk<=M-BFP)5a1R0sv z6r+7{{Xw|^6lib!_yaIGbZ2)_jX)na&uSUh(pHiysJc!{Nk0EGe+OUq+dq%1XCLDm z|L*tk$G`i#c=xS$!GHiXwGJ^x%qfXN5F)J3)jNs6b;LOX0u>K5{Dqv^Rb|oS^@SLI zYzk9ebGu9&U7K}>vj_K!%+smRjlHq;#$uhXKKc;XPo5(r*2sA=(m@6iH)9+|jMI#M zn$h=SpgT>~t&MZ%9HtO4#{?Rsq{eG`fLCBq!$5G3&}}zpRvpqjBaA(KN=O>P&qn#; z*&RIV`8E5Nk%LWN{Q19&_uu>ho<4b&NusVsHCiBb@JegYN~PAds@-=5tLY&`lG;t)98}0grG18Az^4k* zM2Cm(rpYE5iTSDD zYSK3wiJ(Jd^Dy+{v<*?^z3>VLQsZgKFY`Vuo)@M%cyaQoz0WejGB0Ew6SIIUh$3lfSCs>E&|=Lpc~% z;a-LKb9W}YC9C6*i>@L{LAjr;k`(#b*+VvKQr35X)v7_m2~#5UMj(YvLH{IE?w7r%lr=&OC6aSC`A}?K6obBZ6C9tkU00c%)72co?^l@ z#q1g96lJHJ$I3Mt;pALv$to!Y4OQwAlS{JKi4n~~ph|#6l=IrEGQdeuyPF29?WuqP zrJ$+pb2b3OJZle6seih6@2t?830rbVAb=Wa6Xvy6o}&VpC}YwH{KHpYMYrnk;*%$E zB*^V1yA4DtCN^zCmMWzsL*;U=%plLv9Z&)0VTmj__HgXL@L(qF_JpHz2D%2!N!ruJ zplHc*Un}8&vuqLj4rE?0P6!#5BY>LLwjVLhh=DUnfS@3Fg%(rvNL>Tobou-`ttABs z5YW-d7Mwzk*s?lJNEJEPc#viyaAM5Uh!}z>@#8FkJR&@K*5mwaEntg!W(^cA#f0R< zF_csN&4_>~z9~i=KFVoP-g3i8SLtgTtlwMs(SebUN^fKo@Oi{MjtJAN#<>{f^E6|cwe(;Xqdf$v4=rsED}0E`;g-j~SQi@`Foyt4fTICB z@6k3MZP!UAgmx+DG@`z0Jsb#k?!SU|eXMM!0yDF@9~$Nd!X)$1JdVTP`R4uf$3B}u z;wt0Zknf?tgBimIZ^Jb$+T)R06xV87b0k!%A8WtE+3V{0mzC`cK8^{a>cW4jVgH; zwcdQSYOy&x&-;@1p)jqy{>v`_(mdhC+wWo6_nLX62>gDQh;lyL0pmCctxf^^VFtj( zKzEk0A+_d#Wi7@jV7DK0d!5y)6`qz1OGX?-0Ld8{2a!3x(ey(t^)lc?mAg`;YW3SN zD?88ArtX^tU-{}U;P-y>e=Yplj6Es{pj;s3q?ycbYLPKc?&I5vnOVKACjnzdG5 z%atlquY(ASH6-CFRJ~WPSG|0tgGGH=m8QJVjcq(Y(>3^|U;Q=w{6G11bekE9lYs`I*Z~x|hk7w_GjA5LxI-3#p z0kaQSCx`WzkOHIgQtLlzvf-VR4lmz3#?z6+=+#hZx(<3cLM?>wd)3%K_u0#<_F4 z*Ido;(B)l5x{S@&2iydBE3);K!-8vhiOtW%sR`(?a9^6?Y!D(_YLB(y( zD5C_h)}pcM`7x$kPu^eeF%Ba@glUw_FUwH1T3$|Uc74XAv5sOnOB<{i1M)8sz)st& z8RIGY!Ha{ilrObXg&Zkd?3(WQ&4s@CcOe!N0@dczG6HEHY5U0s)DD+Q3{s;9q&2{b zU!Ux!3}#l?n0<9>cB0!AuY@~DP^{gj6#V9Da zdhfh>wGm*%SI@!TV?a_8HM*)}&*|re3XKwxNz77<&z9z@!`HM+uc*$B2t!KPT@HxM z@D6a4Kuv?Dp(_2jR>;ekopZTOmdp`A62;V`QIH|IW}!goTrJJrx1H4G&J$9c#bB8y z?Y}t*a;O@En{}sjC>zgeC_|&k*1tTZP$E{TfIg9CJ=}Tl0PFP{`^yXTeUB6p$b`RM zZ^pS1WgRau&^#hdAXoZz8mTC4U6guBX`h5k^dk_4fY_o^2=xqD*#wC~X3?#>zLFyz8%0LL4hS04#cu(LkX4-NL5pqqJ zQ(6IG-~U!n7~QUYA<$^?1?YnlN_UZ=Oc(>$uuxtP#JTJtdfJr z!U1@jkzNUEJMWBA`mtbul|aaXT9tzOyrMd!X zStIGgI7oDI90hN|qU5SfmNC@`w?>qCS?%`X4d+5!F7;`rzm3vmbmU(q!@Ak zlMitB<;Soz+iX17hoW*0ve~Ay-}H0(YEF`*3PAc z#>|ZCCm&(=;u7;HJL=kTN{xjvj^D%;lx<4*J!&Ai5b`X z0nR(DHye!oh^xzM^uvtxdWC!U&#_u}2=fduptz_MJ$<&gJ1EJY@4%qi=oNYT?Tn%`B-Q)T7gejElti*?3T77wK z=+!6r#u#zHM=HxLudAJr%-Zv3q+F=Hmq7U0uYMJO|JVLGrrmRV^2H-D*8l(@07*na zRQ_KfO}zro3Rt3RSJ<50$NJre({{+K_FR-8D;#|kXxEum5hb#QmM_2f*KYtf5pRMtkm(TH|k00Xo zmrk+n8Vs{I(#L*6oCCZQEFO@9ZyWU9W54eaf*9lpylBZ~^0JZyunaZ83^e0=w@NLP zgLCsiwr926K@s&?_8T2ogjDaFvpH}1id$6*x=ESY;N#}L6@5=4=kdX%z`lx+kx1WF=s$#`>=%L|yHDeksES)r=7 z)RY6A{Gs=yHrQ=>h!>YsdtP~?P#r)9%CB~W4x;EVA1W(Pz2%hFLKo_#Gv;12<|V_f zuc>n}D#Oi6p{t^W z%mu(pl}YnJW_8y&nFEQ@pS{sZ`<$vWkdm~_F*$07YI}Tww(T(Xy%^=gfT8bkz1!nz z*JD47YM?XP#-s5L(==n{8_7^mWzPvhoaWaHZ6&3HS{af^dIA!#IXcFAdxT-X!|ufk zO#L47Y^~BPC9u>GTJ}J$btlcNP{lOs2Ks#ol_9!de2i%Zrapi-!Za+c+bPIij8TP) ze5Ns^c9>%%ftq5(#u&gMh|%2m+}jo$k><2O-k0c>avM8$%BW;tlF$v$KvJhipS4YgvI1kf^c^WYdJ*H8N zb4gR5F;5ewX~Zy&nmRmbdV5+#ck0yI+|s9x$W=TmkFOlnTeAOk|Clq9e)LXi4d)r0 zB0hZgO`M$Ef%C21wd_fy4=tD_AMDR<8qmUkSH;a@f&StcCAPqfs z@4bobr`|wzhTcLSw<>D2VRYj`MM<>#kd&`{<)8gaeD`<$E#Cd}uLF=h@?OiF)Tt6e zgl`*|vv`^PkaF#Bp0_=x48lFbmVVnW#C*fBiqHP3x z&UuF}G2k59eGjjw{Ou~hwUQOJG}2vVtZSs7N@N{ol-eTMf-&P$pLrdZfAZ&=>9yQ! zA~DeO_c4m0XLQb-QzI$AUe%YX0LVzbHwcOrzh!;n7Q!Rbi=3AX7?Rec^El)3@)G@i zfNwn>KD>*~c7ti2(eL+ItvYPB(tRY4ohlYVR7k=2S)PmiYW$F}=^8vZJ;L4lXE;6G zqHBDnKQdk<&dY&R1LNxNa%T9( z@|B=Z{b^!kK5o%-Y1=Bg*YTZm{M}#vPe8=*?FuIk9%H=t1eYKD4N{yzuEoR8{UnZG zdIQ7$3NJo>54#snu)lZ)jx&zez_~lcvv2$s{_0QP#Rnf;BFqV&`k7zGDr&pM?wDyOupjjO@XR<~~a9m`xbctonf-U?%k?}h!#=9d> zq^vI%z982|3wBtodIFM@nTdFC+1VjSj}gI0kmm?i><(n$yC!d&F{8>zXOvCIMnlc` zY6`Z!U64dEwrkGEFjU9ld6D0%)T3&7vvQzHrprRkNW9*jW%^P+Z07y3`Dw94>784& z$U1Gx)}rlN>1kcvnhvOfA*nn_rA?02sTq)yCs8ycmE8$=8Z(HU8ttl7Rthx(n5P*} zpFBrD%owMLaSXWL4;cFyuJM>=XnMEyM%E?o7+AFqUVD)?jkKt9np)U29^6VqJD)`MWi|878qhMcyw)B)pC|INCZKs4l@#D&dy0BwOw`6 zUe1^LrIbnpHiQ}TsHxf0glQD!J@g|kFLv1P1WYQic=M-8Ga=Y#X39y|M5BnAXyw#r zda~Z#^i4prpaVWuy_qSM%e6KiLw#o_25%3> zlTSXz{k!kt^z43#s8V@es601}!NVOX3Re;0^0~6M_O}VHsys!FS>zgRGjdD1IG7PG zE--FBMt64irh&Q~+EU3{(8}T8w!;5olO-ku zZBq(I;3|b2MA}h9(qozB+Wj1h@IkMHJo!eJw4XUK*KNLa<%{<<#NbsboP7g%$A?F@p$my6rXKX+WW1OEP?8boSsz)t2ZaqG>ACr5_b*n$3yHe?ToZrY2M7N^wa?=+% z^Vt*=+OESd{>rc5?xRoVwF~_fx>bjVZ+rop(|c&Pr*Nw?1Z@GkIX(rYi1G3nc2_UZ zKOZrrXP7s8tR3*$r_R9ZJ9y(C{HJKvC;0fCw=ug8tCwCze|d=}4%oI1E+u^Y&PTZ0 zuCX~iMoNsXYjJvdq_yG>AAI;6czTJJfi)P{A!3*!0ux#XoNiWlIWj)F>M_LyXI`#t z_3Mk>gg^P4C-~DhpJ3B9`23?Y{LJSb;*Cdl(RK}nIiVkC4AYDl6_}Pyg(x~9Y#*wd zTX`er{Y1SH$YNNi#)DMUn!DA$Ha%%VPS6+`mcn)Wu;+RUUeh$T0h!r5MkaA z;Fxlawds-eJ%_7VzeWVyIo;ybyQlD;FouLrF83Jcn9F1B+68}Itcg5aweThf0pKrx zaD_(?H`0X!#mQj0gt;v;hAQd&9db`|h6FEI4Sl8@*UQ&isZNYsVFal6W1 zM=q@c1R7pykVzxI79j`agIXV?JfFNQ!pzJwv`D`+AS0LLyB3=-e{f3DcV6E}382Uz zmuz4;iVnR$0qEAp0+=<8(r?oY6dNU}+CYL*>oiND-|ey5Y~Y;qq^CH8F#zPHS8ls0 zz!pvnR~wy0sS^m$-n{604Ias$#7zz@kLY=Q)UhK8)yhJ+80!*j@J+ z#~E`7=x5o}RYRC!%&l2ig}5k6#lV6(6qfaaB9feM>LZ@%XlYPYEc}L*UbA;wV-_c&M8DtT!}s69$~9ngSQmio?WPj9@w z_?-`4ECj)MPm1wq!YPBRrP^pe0F4t*A^H#A0i1)^di13C`EU{e zpZ$Bk4CfvG=HLGT0AvT5^+RtUB}y{ILPv`qyRXSmO+n0=Ky_Fr%We5=*ECokZFP-e zQO>A1mlkr|m`Y+ySJxP>do8Ij<4e9KEg~|JgLgkf9VIpzaLxnH17v;H%RLIw7M+QzwIsV&b!DcNqC!+g2AB61^ky%xI7i`d z`Qi$@s~)~_I66JXR(o0x;|L(CmbHwTC3NZmMp6`J)pabK?G1|n~F|g}J zMr>9M?(!N>t_Fno!&8hGx}cKDZVdR7x1QqbZ#~6P=kdnF6a4sV_wgf-AL8NNQ;bu< zUeV)YOql06-$@)vF|!mgB3+hag|pe&C;`4hHfx_TdbLlMBXY}!Y*s4AvQC@tK-mt; z{MAIET|s$Nc?OlmahPxirlq4U+cEk7;`%Sl;&9;QyybZ>PNR;UI9GbX?5KLpZn^8? zj8_{@TJlIXr>N!7cAtd~QfOqDX7v4tc|U@+MAFWp&pfRTchs}zyrr8}i$`ZiXuLyY z#^r9nML!|lGLOa3^$$YLJ^2=$gYm65FY)y~a zuR~so5E5d7mJn;rx*F$ZgvV$>In|pZBZPzyfjK659~wco1|jyV7y~IS?K4bLing{=j0i6_Fj#eLg5n*JT89 zyD*;<`&d%avDRTIKmbnDj#EmA06Z$?)j3HuWMl)CE5*Ww^Zc^M)zyHgZ8mrkLvjuY z&M~5c)=EH$s#+5&$^|K-q$;voC|ha37GEQD4T$^^OViIArgVWhXR^0?<%#d>D9{wRGEEU1POgOIjj3q;V89 z?3l1QJ;&Q&nL!5%v%ZqoeTd#%I62o`xq91SeC&7^0 z6H84NfQdFzc;$iKkSUN8rfJ62^%Zs(PjPg74)U#nKbD%` zJiuzOw;Ab&v~9}3VqnJejS1K5F3hhO>Wk-6VgPlRT)+1N9KZUy7+dv1R-?I1A-FAC zS3X|Pv)scJqSyZRFTy#8@BYF6olBO23h#+}nQkicD%lq`PD&BZ65Vi_<}#@>14$jJ z`q8HKXjdy;4^2BROsZODUOt1-U%tRJ&X^}Hqf&so1X9FXl^y#1lV&%Cs1XL1RQJ3V zx-LnlOJF>?9Psk_I_n`~AQ56paLFO6Q)n0`kasyk(XJg%Uw$3CNdV(cjy9k)AzVKP zf+EN_O>W&u(J2bMhwHY8Zi7UP$m}p-eEu;`&d%_`J0F(T#YT`Sw@Y@J1Lru4EnAUg zlqbs>Ajs&1^0fu)B5y_h!u-Vtzm?|{6P`c40H=h_@fN3NCm`?8@AqH;tFFUl)k#T` zqiSEv8Bffh$T##Z+fzAT1dti$0#53ZbaYs6*6?0I{K&z3Y0YTmci;&@J5~@N@=!fI z!efOF8zhwmd!JuaU;$8dFxX1&JG z{n9_er@rtdbVsLZu$C5zQ%oQLk3RE7Jbmv?eDK!az@47p&b<@7^5_%}5z{y!Oab$> zN8k5|zC*j+Vzueev@Om~H#j<3<8mB9DyKX#)?kcb!pIJ29FEr=_G7^1FlSm=sJ`}} z86wr6#*?pxfIoZtIsWYJ=kV@(_|)BF{MhUF@%dNoV$(I4h8es4gkiQ6_fq~Rw_sRi zrfx{R)eF9v>M>R1xs=5f;TpXVRi$3#t@@>!lk@UFBblsM*Y7MHXr@CfE;!WGmS0p& zsOBEE%uy{u&q#R?S$3p31~|_%0gF=OTjiJC<3N`&Y$2z*G$1M;MU|^mc($#fQ{`X| z3A=rdFidbEU`&j_Km^d#Y8TAKQJfojB}f8e56_OU?iw%>hB@G)t3H=_9m?c-59_mB z-Bl3UvrZweedqlVkG}l^f5#I}PS$9 z&Q-L$`a3e_C;`jFKxB)cbJ@i5cX`g6Tq#BQIJ5C>swTf&IVzW`_et&}=$|M=Rw=(l zb`{hUyQpUuN4$&{VSAkU_{U7K&D@2eN3X}fGNA3ls(m9dC{RMMrj zuG;$yES4ZC-)iB36CtM|JIWvgW>7nF;3*WzNajF1Wurr{j?gd1OoJ6r&YJmpg{2+q!gb+sXWEOE*cGos&yB6K1 zL$}(ZXWj}>}=2(n)f&k!58d*40Tumu?|6;^TXKTgLpzI_y87=jB zVx&(~KzH2WMIZ3*|NXb|AHMs4Vz=vY)HM!{f*zkx4-i}B@Nm94R4X%#Xt} zWoNrmyV+hheXiD3mjN5QRUMHp%dW<`X6l8Q@bafWjnDn$&*1Wd?}3L)+jHK6($=m+yd5#LxcXFXFW?{TzI|(s3#-hK({s z9G&0C^~F;L&(eDe0&a7}~PzVIV>`O$s!7oT8%ae-mKN5AV4_Y=l`M)J}Y(>sUl zro++6F)pu0&^W+D@Q*xz4h+PADT-riyK1qY0_Io+oNSq^b5}ci`EbqjGchsVesYC( zo?PL#=`D1g(0YeCG5(9QyZCWV)x9fb399z#hd-)qKX{Ps^mH&1h1@lo&%u2#GavUVn4F49hh&EQ`}k2O>F# z&n^e_V}N08fN$Q(5iQoYMye>hi}N!PFb3ea|LhvqL%>gc@dWF2BfO|lK9xI;_)PaP z#D(FV1Ct4g(}Qdyfhec7Go-dXfe;;O{ke?KH6rJ{l3rArY>F|?S%Anu>fenCR?M(s zbcHCF+ndtlQ z4DTEDkk(V=#i0;k6k%4b$j}l+mq@yo4QBCnIVZ*rc~@G&)lqaW>C)a2Vn~?gh#1R0 zWTMRbM|tRuZRKUHtk#bl6(n#Qyds4XAkG3kG!jL&@rbw6YVDW`W378HONzS)f9t7E z21JJ9#K?@%7+<37Ft8L&Gu+8F(pMhhmFJWYP+0q-brnmbIz~x}q~t&v%^gC-I8In? z*66wwoNo~35f>l4i|eOPusS)%@!bbl-}@AZ8DZ=Z$7`f80URMs+F1M2r>qdvbZ@j^ zv@Wzu86}sQL5;MUplql$xqn#vxFVQybjBH#zMRo;73 zCQJ}5m3~s8UX+4bfC1UJt@p`am%pnrQk2Oj1pyq!0khwMy8!YHT+?bDuwT@s6P1YT zVj_9`)qrm~W0{8(fs``~78wi`z*>$}CFxKgX!`QgfAk^zW-BeA{-ck@pl-APE%Tto zl;s4?SIFmnHDkODt? z$u1&-?gLeHRqj$dKmcI4-eZ~qrdgb6A#sVI*Sn=Jg z^g-mwy7Q_a8SkvbvZfvT?FLt?bNqMz=6}Nvo?Lq7Cn&N zVR;RT95%kA&qgJQkipF)}bGNIItW9)sq-D*yl>07*naRJN#JOpJ{>98yYf zF(OqC^Jul`ku&cpQ96;=O$cbbL+c&d#=|>_MtPM-d8I3!PPIa5`bZX7T;^06VU^}u zt*K=a>OP?W!bO#{pZ(DKd1ye1J!v`65=^6MXW6 zzr@oYd>^m9@fctJ>OaDrS3U#Rw3#n~V-9Kn4$ifh!;J5L^K1CdxBe0zee@jnPS!X& zJ;(jmK96blGOnJyj~5@lhZq^t7(vs7aD4@APms95YPG`Ay2IJsGh99gXc&+n*=|Hq zAMUk-NZWWdqEiKKY9zI!Z9X9NS~p+5Ea$lojJ-zAStF6=kjfuisw`P&&aY9~&$74G zo6sOuH8{?9yZvDf;>EpgJ7-jnFDr6~lBn29W)3hatNB39&_85eRGquxOj-m3ifWNR zUgoF4t;0dxG96hX`||2KMm}4M=L5ZhRc1R4`hX$2tA_$AGOjcua>WUO6Z)7iM~2V( zMKzv0M&)D*)@=Ho_oW-mZkX`N^-y$?YG6iF2g|GP-Q3iSp9Rx_fRGsf?z;m%x=i@# zFRZa?3$UdlwVS-hdcA>fJiuP=*a%tGx8$dRGd%=BvjqV7Duu$O18_X{GNrBiiIko0|@bWR~WI3n-uw(h*4X1A>}kHlgtQhKLNsMy{XCMnnP}u|XbW49ftG7__9)d(s4IB!b zQ^v^FE7j3LNu6YNxs@D>R%shtYB_Wei3kqjkbu^5rx-<$!yzU}L@q@LqOnGpVpWr^ zPcbD-A(y$F7^H6V=HLq-66){yS0ktx3&r9EZwa@j1H@>wfR8l1&PLVkT z%>5o?oR4Y@GV}w*aPfz#Fcsg;eBX@nn)h4eT#fb8d%i@` z2@Ir&-G}dE`|#z3f_R`_RpY57T3-69mO3kUx2zu-jWIT-$N1D6kMZH(yos*$ShWtv z$LlOFGNy<9Z~>0AY!#?8l%WPu#nZ+3m62K0x>aW!+o8HeaVw$Ld^03Yn1%_{6fx@A zo$Cntfs@5fUNV{C1S18IR6f-zaw32!yNMa>q<=OuN{dEwaN1lPaPrz`@IU@fzk}Cb zKf&s(#UFqF1x{8CF7_i%J>kR?zVY36@QuHG2mkpmd>()Q=YLEx)Buq8`2DZ_HGbzC z-vdE-5STM&=m2pVU-vWC>&8T8-eYey?3H1c6^tzRGPf^uk{u%DOxH%pg1qv29?)N< zE5Z0Yv$mil9BnrWP6{~#shlrY(ItbkVzm@o!0%nclH)wpbc z-_eK@5*LNl=+Nj`&zAV=Y(+g{69qHJJ9zKVXr$fr9(&GoT8aC7T+1&D?p(jVd?qXw zyxKwmIE^_q)q9V7FTI50dylX^+QMT7!CIVpbZ4Ie{0e;W*Le8)7ch?l-u;WO;|JgT z29CBX{M@ho3#?D>%Xet`Si!`IS->%QTzv8#-hcB=eC{WH0xvzhkIN6<0RdPYouS)o z(KL-b1VVDqy=O8eS9^S`h)!@OMBM>KCKZ|g)0Pn`cs&g{ZG=Y4JRqN5u zv8KKQ+AD-cu>1)!s=oO!JgLKbkd-_Z9$)iXGsq4kUith&zqg&DO007}qlb3JVt6QJ z4dwpjshnH+qc~yh9M|7@@MSXnivGBMp=4K9Y6UY3K0#Jh4i~S`YvCrUJJ*b$i0?eC zTw=P|Dbhe&xqlH?rR}eS1|V3sPrGP%l{*CF0L`$UvF}H0)m8g62)L(TDie8txtDwO zKUHft&HafsY4!179ciZZj%+6a@*HJ_E;IH1B@X?Ea&p%$_?AYU| zBdj|@;{oR)E{74?;7IR5filqovL~d&nK%lDo6QP_gd(h&b=KUd*2(=B~gr}}2rHb%LQjH4&d0`CI zqUvo5fLB(IQSCwIniXS75?N2G6eW$&ixeorH6>Msw9e1gdY&c>!yvt&XGvqP+f5~w zc0FLpRA{_|Ya|U%>OmsLeUEX!2a!X&TA|x)(E1i0km%;_8co-sS#7b}9%Frciq)N0 z(5<&{zEMS&HSKyv3KQZyB20szoyQq*9+2h{tj2tahFP`+BNv_!ftn7vJ&>Zrx~4;z z6m%^K@X9=kfliJ<5jho83?|kF>WxTDvZ@J!tbQb(}cDY=im#g}l z2;h{Y_jTNZK=8^>(J(k!6ulsQvng#*(W#rri*ebPVIgB|ZCKl;<*2zSc_tH5Id7KU zo-DOJg`A~AVBqQ!({>Brtq!DIy|1|CowB|Qo!?$PcumsuNY8%6kN(_GgD*ZoSgl*H*=70}tA{kcM!@Rq47+~D zAHVrA-q}sqPvX?NoMpZjA>lzoIP(Nz;QQ}9#aAw`(6+78IN@vG`w%}EWo#Qtcx@wX zMu!9hW}F{&U~;)0Ge?JbuHQSl+4mB-Cm+gSCbg$A(^g506BCXI9jzB=71ESAa$xcs{GD< zk#o6{`B|vyWFiJ|ZtF^J3a-H*$e${fd{{wing zJ-CZkzwl$&Y}RnG2dL02wH|(bf^m0=cD=#HC-33SKl>xR{nvjDH}3KCzw%#Ub#yKm z7bz*<5!uf%Af+ID(lrQaz{l^th0lKJD|q#@U%;RK-v5E&`NudpKS$eb0PeuY0cQ^$ zA%%!AN6cfuFb0GvVE^J0_Z~jLdc6W%z)Sa!FXMI^b7jYd7H_FBX}4OO7riXMR-A(MaPkoC{`t7x zJYkE|$JGmT^CHuv>*>_gX@Aqf=d86a)TSx^^*YjA1ud()m*J>Gjh7h-Z2#Z3PWeTP zlrQ(9oJ|3912mv$XUEAW9XTyqkw=ILSGxgCj5u|SPi6u9l|8p{nd8OwvyA0%lyXlN z5Nu{#53^iL5R9#ZHNK7P7TZSo<5@m00s__QUF;IR_7}Z6lL<{rINr8+y=#Fv;@zVwJ8tp05IdKAAw$8cTV^jAT{bSCCmYsgJmKC$EyabrU78MJ=$rjMgu-H z(u>eB!Lyva8M;)xS`$>QnAED4{Vb7)O*pfrPLnEy=I@ew7}GA%?)tlp2=WBVhN;jn zr42w;D~yuPo~k2Og_(TYp%%ob2+jtd!i2<8(_AGTyA;rs;aKD^YJI7psWYJU=$az$ zREcE<9HDiT+oiH9vYsfHku!7dFUpVzi$z8c8B*R~MgcpBW#6*5Q<-EIrn*$b5}9#I zGpu!z1*P0&j#y}?C@Z$NS&;xlVRR$_VbvI9)KWLd(~Pn2vA^Eo`g)Jc%N?$Edko`* zIfT3`r7oHTHJHUXbh=)?5raJ%kXeivb~_Baovf?#XxD3W>kZc1BW$UG?*gWA5PEbT z+p}Xd-5S2>(5%)FrkcQU#@z2P?yoTIE-+rdz?3eOUd3b1aA4NP69ivz&; z<`##WofND|xq6JrgflCwQ%Ws{0Ts|9fT;k}T(lxN5JOPoSV06($P^nj-q=nnW<0R) zXN0UT1u@z+%)Rn zJY$}l@nzwcpvFv=!&pj5md@an?#i6p%VgXt>pJg9gH-!o?`NdY1UD0&+)3$`UNB7w z!L?tErAXed<)mv(0}Cnjbe0wm_2m78mdl5G74xc~R}WRGd#M_#atm*V!i`GC_~JQ+ z2M=qJM_w-MUEvb8h3}fK>lzs!H07WQobuf5!-shDJMZK6>o04YMj4w=8#2RjQ3I|w zPTSgf@omX#{g5pptK?im$B#F+`1+$?;l)=^vA-RWOA$|d9}&9_{m@~(UE{^mD;$n9 zj&sJ8r2tS-L6enVm?7P7A1i=IYG9`zb00`LHtc7m+Yk@ms&lPBl|NGTQUC~qaCVN* zzj}%(73{`bbM3S8_YA@pGcZKLYeT?p&UpU(1`jT^8g>D`xH{JS`5hBJJ}^Gm5VkSk zJQCh{xW&c!1~ICd(%8Mw#FKe8<8YH}iqWAelX!uE7T>A>c`wOw0+`YGic`%?Zr2zV z`dhR;rq@t2ZZ@jeu;#UgTcBhdri{asYPv#U@%nW!z#>9AHK;U)300Wb+^fu}kEotG zvix|eX$?ac5CNolR@C*Pd6UCXzk3>{xNpzB1I#;O+2WOJ-3KYI_pko#e~*iYkAdk5 zP!BfiI%M8s|K#V$+~et|AK{a~{1bfkt50!reS?4VKm0pfzWy${?PK&8Z(`m(N51~5 zrPruYpGyY1HTJt5`mV>ffBUC6+`PoguRg=YgL7QI@fKp=gEOHUR#=}u!1<$t7<-Qs zZg&%o;{nIr5#N0M0x<-fZ3k>O9lq*2%=3gH2CTb?R2Z|#jkzFn5tpk0(|kmWU(@vo zz%~X98rWC>jD<1krl~M|1*Qxr2xX+UjVYFC=P%@KoW%2^;5EeKy%s zS^o)psWhH#f^N@y$)Tk;F87@WjOW3&Ul~%ctg;rzvn{=rQANYW*efftJKn?J>xldq z>h(=IH@V8zrqWuL(CeW3M%P7j&=z7H07x-s6!DT@-A*WJ#)HV1=8UURih?$Sj6S1| z#qoQapNE02!C}hC`G{0X{k{CmaWyBVc{tsv7FJ;)GF#Ism(;+FhkzQ6XW+$kLZBIE zn;y?@cF0t4oEbwf9HAPOB!+dlh3Og+0Vba_sImc>r#$QT-aW_rZwzv;D78_*0bL7; zWA`UeEnX<8pWB=b7f(>Mkwd@H%(Cuxt)-z&uDXGsayb54KAk{cQxcce|{^I}s|8RS?7hV-Y4K;@Trj&x)gBZOIbH+GlOsQZl&|)_l zfu&1Hp@m9<#9*3qTtf`#dlq4(>$H2xjCGJ6?W+J>Y&wi{f+_yIKsXs=LcmyNJX}Y7 z*st*q&ySePa-A}O8xS6oR0Ypd!gL%_DBv(9Z2E|^KH^rrha&^K%sB6XRUeU3#?z|< zF3-;09zazrZ9L7B%g%AGD_J6brTP-aQ3v*T^L~ z#Z&H+O2o4#zs4{A^grO6ufD?WFyeQA@?$)D=UV_6{q_-vI^=ODJYNm@Wgd~!1kMS8 zBgXv=9>4o-#IDDuKl@AEKKTllj~`-nc8L}aFV75Jk72XL=JEpTm$%sMN0c$+$!A~V z;?37^cD6#Gh|RjkxZ`T{SQRPUHW!kZ+IdFb_gHlihgs)Fz*$H5!DWZH)`X6LROD|g zjL(mZuMQcr1N|LN6wIc9%) zmGNAsT`uNoq`2V&pM1ws?4agI_$OZ{*U-uPsVq~eh6%hT6Bx{#esFqU`wPa;q0v?l zV;KUWQ$A}>LoS5Fl(9RG7&v1U7+>xu9OqnR5TiMF_iux1n?<7z03@XEyS|)k&*{?AB{~b2oC;u_CE`G}fubz7qb8Uh~ zM5|?q)#^d0mG$lnq!L*ptP)z=6!SJ523%fk{o#UmGt9yz%hat_cLdhO9nCXpx!8_r z*HCn@x&kfaJp!bm#5%8{x$B&=3`#vJArQJgh-FKWEwd}aZfix2aMbjH(qPhrSn;4R zp!wd~_Zp(u6Lag4T-So#y6L^p!WCP-nSYL6Yg#V(kIX3W5%SBIfyk zk~6x#hlSLqlrW7mj^l)BZfiX!2^S7TQdKdiG5{$=1ZV`d78A4fMZ^|{M~IyXw9X#K z1!+Da%}4BSt^knp@B|He7vqbxnCTHa@j`_VL{SMrzIUDCGE3fGo^?Ftb+y7)j0bP5 zD^A+Fh7hnl+ajd|(oh?6TSHpu$o-{dod`3>-2tC}^$VmVt^Hyr!nlo3de$cCbzC$* zN^|Flxwb&F>bAC)62d6>-YI-jX6b#Li}tOD!c6xyOIQ$-Ml(Q}Y%l@Lkx;j%TCIa- z1VNE~n^M7XnsC@%V{`Fnxl@&+zG^4ii) zD{SbVT<`Cn?gbBKcP(%-&K7;JxaZ0J;7XCY4{6S*3P@d} zPRIba_G?T9Rp~l;!d)3=31_*rr)w=esTPBCUUSYxBAjXmfC7dZMN}CGrGR(02tzNq z@~BkrL>#J9TO4I2zV;jWY~ya{NI7!|0Vq9I7neAD{SDlF^F+hJ^*7$w;OKWd#{eYq z$U3PQeiWAUAj^}h0!oEP#&N&HpZxnj!Sfe85C!yo#AY*KwHYw1R~S}(Eg<=Zu363* z^PI6iPPn~2;^yXn+rx<4NS0!2amh&F4<=hcE0Q)K7aG1c5Q0jeQBqBV#+~OBE z8SiYOgyz~>o0lgNC`j^QH+$Fk*0)4 z7iV~9bAykjT-S9fZLM#|8NdGK2H$<>OuNT41R#g^4Hr$G(J^}&1Av9{x}9^cz@q$r;ng|quCJhUJLF*He- zyWb0PGoOF%0Js>UkCY%H^qn{*V%Ig2Xd029tCQL2QG)F^W;5$G1 z5z_8Cwr2x!5_!VLz+fN@n9_t#fAM#S>n+~>tsmj`>DTzd@BhBk;V21*=f9L9q2o@y z??uw#rX%t+qNEA2i2QK*+FN+}eaTDj*|g2R+_=Z`GOnm84l%3gt^b>mb$Qn& zL*qojbni_eT@LW{IQjoQky7VAQ2GIM*j0AtFG{b9mpJK%gZ z;C7ta{rwu5W4S8$VjySMXob2^vUdwf`)EneZDY~LN{G8x+7|En^oC?`BjLKx9^p+8(J-c1$BH^9V`}YLT$OWAvibBk4h}H@tIe6) zsYVXkk8Mt7v6B39fVAb9oC`GGMDd&=hj0&f= zK2+grKVya{gNh)ez0>O)yk`b7k3b|jCns?ucVGn@W6^eRT-T*yr#(v*Vyzk^f((fl zE@)1%LKLRma}nh|&2#fS<_sd~sZJFq7~>>i!|TlosMXd>g~cLQy|4=M_T9|F4c;ak z5L&2K)GF-NQl67O9+ za)c81yiQoH6(DrydcUda58A${A<3e&R?ls16PI<}+Xgk`cXN(6X60c}4afH= z<~Fpd@+y-v8n+Pa-NY9@^LmL-FlxW3N8DiBe#$6wLJ0v`f7aEpk=8ya5?-r&#~9k; zG2|9v!GBKaw0*X))D{+A;hawtb5nY~AP@o&3TS^oE*aGzWMJgR>=(4Q?$-rZaQx`L z^J)~05yS;u7xBjTehatHzG>*Bi(HM#HHC;P3~Cfo@qEtcuJJ|L%(mi%rFI18jF123 zBYg4o75XmX@q-l}zjlGkN9S0bZ_y0{LT?d4Ld!@EkYt71C}?i_h~w^vo2y%V`NdQG z>hq`g{OL7r50mEesdCR&^<4lm)%g&50(vms9SFz$9{>BV_xRS?fDhk1$9W9s!C(X} zv`Q%Rh{O@^zyA)tdGQapSVjC74qlH~A zq$s!JmOHh6;ycu6`71Abxv*Z@zlPAL`K)F*GTfcUgyV6nvQsIIcQ(mX-aB8jpyHkc zsnju_O3BIxtg8$fIasti^0P8JTn)1Z6K*LG_rgRkZ(jGfxR0%Y%uQRmh7RlP7L*PE z2h2z1vE=CKFyPrYUtqPpzz_cLU*g4T_HO_HAOJ~3K~&|JpJ0Bl#>L||z&RtAg!y=@ zHEFWqMUnb6(-HIWh%}ApGO&L1E#x%glfV8m+}>Ox#{ttg;^xVh*lgC|l90y(=Hmfr zo@=d^uJ6%xQe=<7*j?SCy!i;B>#$x87|zZxUR{CE(nOog#6T*wqBH>f?rQ`7yFYpZ zfBVG_zxd=9hpFH&m1=zJBk-Unj0G4+Np-mwdG&BnM+g~|7qrpiw)|HkJx&&JX`8VJ zhUGg%Y&|szta_AcQ_35=o>501i?*2~4=Y88IFwJm`SKZo;#J zbRr=exRc$;4ceBLjV__(@mGo(LX(N0>cfI;HhOYGPMqi>XUJW*fR|lQK4sdERSzov zoKiwRcX)8V!IWK5#fl#%$YfYYO&2>Y=v!$H#H3Idk{$>~K#(GFhDZyCvk4PQ(CQ;i z7}5Vu5$g`J>39Ucmf$sI%7}j@y{rOt<17F~e(Jjj*8bMsVqIb76-;)Uh#9P*xm?g* zilhr+ue32SOO9{9+PDR9g&DjOiZ%wTkSoz%-1?5&^GFnm7$Yca@i>C!2QnxUSo3ym z>4{{GGPn80*bEh+t{1iZ6?VjsQNzB416C|)t7bYLDbu#FjJlZ`BASt8A(+%>oxrrM zdR0oLy^0X-!eXE(+MXpu-_kB<+brp6zTatEs&SGk;kEy|O%li@<9M7fXljChT-U`B z%es*jq`r4>#qnZQX}vtk@Jj7`xbQj;&G!YztLksw3C6^XIb{*riEvDk+qzwKqCgc|ELMSp(@PqHD848Xf;%23++OeS&DSsS z+1D@e;O{@edq4Ow94IQ_+0AJ|;_2kOUo5Zv-f8QCiti2Yjoy^192W0M&$-n~uytZT z*rwFF%~u75(;?C;zsL_>Df9pincX$i_B#0=@yP@Hvvlq`B~X|FjX)`(<(N_|AdVo? z%I+qyEXLvZ%;NUk-kp&PW*Bq|c&Wyarl>EJbKAG%Xm$yRn87h3^L)D0%dz+|xn)}_ z>2}=cfzeaVSJNu;X&kY6^cd^&3zu_?x`}Ftz8VkNpR4b@9Fxfx%+&}h{aP7mnlXsx&N=~wuRzy2lu@{=dHnR2a{V&jZTm*?WWB~mcwCvRQg`>$>BfBfPZKK}VP z_^*HaO+4zPxE*P=DoRIWTH%eiUdQ|IUE}L-o?@CakP|M4fS5#aSZ!8#<8q51e()Ad z`4j~(;O#Tuy>GpPKmEIpvDQ617b!FsNCbrs-hPBQtiffj>n>r~g0~AXdqD$K&?s%+ zEVfs*vfYE|^?F`>Z*NN+YY4Nv*3K_bSZSHbSxc)RReHqCE?V)P8x!if8BH=Hd8>S7 zetY*b#}8WypLy@p&`rzG)=IlhXpe~>?OTh{v}5cb#wP4K9?d8B5gsOcrR$_cUEc-d zdD5kHj*n7M$_izk@xkx>0p{_5um168_~3ir2B%4Vq6K-LkmtG8!^l}$ZcZbn!yfbT zh#?nj-uNz_ef|lae*P&E1Jn=TbinTV1*Y9&a4DFNqM%RvJ?3cwXHl;EzLP?@M6$o9 zg!OubRo~(A@(fRJcc45Y63~&Q69_bO&b9spnDJ;GF|P*v&QG>@c3W`u@(AJ?`vfft zDQJBbflUCe)r)>Vu27Zp&jBa zk5|3CLCqnKdvH@a+fKN9M|#CE|Gr@VMiXcW@5b8Ygx4`W`0g)GDSJXGSl!eVLzNLJ z1e8=@jX$O_;rjZ3Edl3q!N-S5bP#g8uRep_^BbrvlBd-cS<)H{UuP_H%87YlDEDFw zvFJezBWtGoqS6%m-gHHSYa6Q{Noz9=9H$A}b;QH%8ZUMSkQ#iw*k)9(-a~Ou#x09k z+o-BxG_%$9Fh>O;^P=Q;yPy>H>x$6NnQA*;`FV;4^s)n4#L7k{26^utiS&mr_u zJ)9ZyG_|5TFlJh+qGObdK-lk&c>L%ROi^0U6xkrT7G7#f6zLk()@{X#-syKYCws2p z&>aEY?Wa0d=T)$G^R9T0gcYV?XundDA|27`FkYVlOGx@W%~fFJ(uj{dT8V{4VsJqK zBPYge#KUq%Lx5$85s5|9yy*qf9;qteI^l&;Lx=}DvO*(G(U3e;$z!u>?qD%Ml)^Yn z2}i5u9>j>ybp^3&{o)Bg0U>k=VM?GVjN!OD;^~tseDU>5eD=*Pe)V*R?YBR{zy3ET ztkEbp+*kj})3o3Ca%^|Ogqm_*y~&n?UYa*IYc9WqwE^CsqXcR(2BocP;WZ}E*c$oG zB5G=6REo*AdJR=L)%!3iZA;UH{na(b-H7+! zy2RP}3b_=d!w4Q{aGa`_JZRKf=%Q5H?xLpeM07*1X*^9~k6nk&gA087e2d3#zlQhz z`XBLs{l&-l^5tHta@)8`6f-W8S`~EMt1e*91p^WOn;*T7KmOz;{_g8r{FfIikfy_c zfRHn`aY6`$-~RBs*laiWi+}hvc89S#1m1Xfjt}2|8y|k_b-Z_pTH8hnoB@wlz_%Z5 z(f#Cy_~Pql`0|?)bMSptGEXHhuh{Io*wY^Gos`E-(5<`>?1rV+Ibqt@ z@vv&eP&k@mZVCaQ3Zy9vhSS~)<>p-Hy_|@Hp{+-g^-P{w>}$5(?TqcvV{?9q5NG6h zG)JQDrGlJh#NjdC`tFY~&m%tiv;Tlke)jkH;fLQBga8ZQN^QMBT4i}54U zdoyZ(_-cRDb>d2|m#_=u*4t=jCGToz%mufH85i3Dn?B;GosNvhi+-oiB5F~0P?epb zVf1Zag3lVARiv;tzz7lOtVDcMDxjOjh?oJU&1ShdxFU>K&OJ?TKW+av<>dtNxgook z9T}R(;;ZYrA66P{RmW@>SEYwtNQE&No3~T;{W0}6_rrh~yTw@A%jeUy-P91$tUYb@ z%~KZCV{G}!q7;fiBnuf@ft1AtvPY}JW$4F^F?#_|6wO9h3RAU6Rf}B37bTzuBUSc@ zthaPqLo0SsG+e*99MA=>aQjW01BR`_QN+g)-7p~bQ49~9kkY(R&g;Fb z7GMJln1Sb4H+bXq2UxEMh-F^J83Ir!Ad`B4vlf^uE|1>b3jv^VGWPnX_{6+WR zUDAv{W&~U80p=POo==qat@L$J0mcz$h(TmLjuPfh&^)111vB$XG<+eHl5m_Q_csu! zXG=r%i;)NQwz+i^7`mxDWhnp{f<$x>s2XONMX8^&6%`U3ivao{E%uJ7U_WOZw1C`{ z882={=;)&qAL=^^ckCiz7<#OxjBY<6gbw3463jIXYR2{P`&66rFJ6Q;w2i}L~N zO^+!_C~i`TgjF$@GPK$nFIb9AKTBI8?|f^}~xN^+lof>jsr;e&#J0hg<{@xyPufe5M4yIBp`3=thM z9&LL(pJc3ND5<+)A*k3oH3X@K5-(>I24a&JnhfO;X>p*+WQ*f<{r$D_%tcr~xUK6QrcrVFw06AP>Le9odRe8{6b-TBj;(QIiv zZ@aF}K;gewAGdUsgfcYUtl)b;{e7HWK0vj>yvlLO~w`hAv=;1kM>2vV3vYW4#)1yt%D& zHHCoz|M^$X@#4iSX)1TP zhOU-JGHy^_U=bT{LZxvPFDunt-rMeShllw~>An*u8^s;5=bsi+Be*Uy_1G!Hy*nST z2bdj??_Pe-%gG$~9+evz{b{IH+hZE%UOyguO@Mp*kk}Mxufl`2$d+9cDt=L+h+cs3F9%9WO;sy+oN4aXYj!V?l z^_pB$KDf@`h&MY$lhO4(f>Y2J(wE~%k{g@FD?kLI7Dj0m$_a3l;%!(3A$H&*#Xqc9 ztl+s?nDzff=(P$tC=3f1WtI&gY44gdM&1M5@{Up4naMbsiJ?@)k-TbwaBE#A&$P9w z%35yT=T~{qJ;sQVUaW4OhOtZdN1hYPIAS|&>#i)?lFO|6jFuZ+Ou}(^c)L5`t7lhu z?cq7Ln>D66DeML2R2YE^I!HcZAqlxEkk)KPDTXn7^Au;73o2u1h6xjH&E)w>=@JWv5mAs2kJ;&Ch$-D~c;gw^$(AVJQ+Sfu~?lnV}%R0p23VBz(C#?4{Y zC;|<|ClUp{k686mNHAD_Vi7pK`EZM&k6R zjSRC*0IY(#;YMi%<1AFU?UM@jyNtUsHT|ND*YZbc@zbRs)4nwt-_mT{rG5bPs#&|? zxN+7IaC>8tIsqXhaE@9aFM;MznKJ{Tpr|5e5)7RPb$s#;ZawZ>m3ChYPAZ>!#k}Np z-bcXz&I76pq$r!Gln|2CL1?WGPo;T_YFK~(-pJg*+qkIEb%rS#1wc-OJdPO7&(t6( zzo@zNm9`XZYX+s`EV=2nrd+B(Q|U6O^2JhE43hJVKmq5Q9w}#uYAIS-od6C5BvNTd zl_$;p4lyFkk{c`qFs0*z{K@Co^%Vjo7o1;i@rOTn8=wE#$C!#lip3CcaW>$MRgYW< zyD4GL3C}ViTu;~r#(5vGS#{VL;ZS~6L!-g?U^`;~;hUr6EpLVm0vM6RL;lvl*hauS zFF^$s)%djD2`f&%LJs}Y)7PNq2Rpwll8s} z)koo87_sZ{gFpDsk#3)(9B!3<=)TMad7eST84w5j@~{6CzyAB5;W#IJ?}PWjIUyaT z5NMt!lsr4bVM3avnA>r;!|wW4>2ZhM^$T1+ehokRgMWd~fAQD2efAvVal&D@$NuIT zF$5fUdyIQg(9<+wo@V4(dZ|Z}c6WUsOoyX5Pe=>~eHW0j81F^CFus7AiaB%)2L%R73NNIc`Va#YVVS~Yk3-+o9T;5f|~j}y+Q;Cf2f zC&4?iN!MBz)NTfe@CBB}4j*MZTY?Nf(U2a%TAxfQva;9Q}HY~MPH6N z$%#ZK5y=2RVN6rP*=E4d_1H~Q8;|jNlIVk)*YDP`8Wr3`QmyUL(uRo{T@`?o5H6MT z6U*rdb6A4d9XcVB0&oq1KSA>PY@L*ObiGB*5H%RlHifhbt2X(zpv7-$PoUxEUWea>734FVw*v0QNw0vo&xU@V@{ltvqOVRIT;y-R?s>aJGatzpkCS0rnsK!t*X zpHvMtFV*s#ZCWC! zQUJ;NcoznyDM@QN6)vjx+d|uI+zSOtiH-}2S42Z#>o?D0a3~Jns-V^sbW0)0+(O*J zXw`8`Q}n@%$B!6TO$TZ zMX>6z7Fu5zILrl867Sp4G0xUK&d&y{R#80dF{ojwAdP$Un=Smy=GOM}{X)en&$%0T zl30~;EZ5(JLEo3VxP7#E+$$gN8SUx2<5&y!ZntQ^H6?u^>pEtCI@|k19G~B2bo~x& zxS(Y5q=%fqDTp^cDS@I^Tu};83Nhl-sVF=>kMh;p;gxfzi05p*&fD=yk33*W`A*OR zi3KQ}K?sN`A;u1QJ}M0(_cI4m{eQWZyjY30V)n_RqtwWkr2SzZBUYO=9C2Fmrplur z_GVIXrfM>@UYKUT9ijt10}GeU2c>MV_BuUsC#HRcB4b~+cqcLdY7-ihKPjY(=R|}gc%$P z7vwo1=ZpvMe28aX{u-bE;%C@T39IcE=jUsrX_U}*HKrHs){(Wi?L3W`4oB>+Z?L=F zgJQ(()fG~R_~65zAm@xHpL~StmsbEYj{75yx3`Efs)BxK_tk=r#1dvaL_#EB+#fM( zJqv)bUiDx!2SXEt1p>Jg=`2HpJ`%Q@4(At_2wlY6KX?l?Pk8yOr^toy%a2~*`j~N> zT8V|_S~R2~(STqbal8_2L#VpSJvi#oc!7(*sW=E5UecXCu)xd3kJ>&x#TMO+i$k?V zunpd1Tv(c^{_=!Rn&fbIU&&4Ha+WGaI3|pWzFg%teP>=wyV($_&e3in0aD9!Slenv z3qwauQw+KnkK+ua8C@iNF(%Q=f(|6G7CF;7Yx=5>fX0C zlF^%LWSUuk=t8|ZrG)=E2vakfRB)PC+etC@xLQ0;&xjnXqgLJE@pizNQgtk$u7lCk zhNjJnF9#Vd)nHCmfKw)DY^#R2LxtZu_;%PWD4O7LLh$jwC%$zR?(bi z@!kaS_R9iu4bc=YCp$(cOE)R)Z9+coO+10NAfKS7!lUir@_|@+^xG5M@%LKCE3(^P-EAU7UiCs(5>kdQl5};ij0MhO1UZU-wWTV6)wbAtOly z0h81sFyfJ!TW{&i;7G1u+-W|P(O|}`VeX7b!r)_Qg=8w)t0HZRc`gziVun*9 zLLUfGpUeymTW`wtX~e;-_sk%?c|PFL#Y(F_H+oV#;c^omi3nW`=sW2JPi9n7SQKX5 zzI={H>+O=cEoWYpR!?B>yKeESim0(7yPDf3bjtdI-qgR!XTk6v>SEph@>YJmj$d(U zo5OPGKnvw-gEzWlw>=$DyL`dSV2Xs%OaP`t=NTmjP|`4I{o@*CL_h$f7+|OhLmO*p z_pS80EZ=>ed41QmYD!Pxi#*zR$uVa3^Ack!=ZqK!iBdX|km?XUk3&_t>aO#AtnxmE zk1*)~ZLW!wGU7C2IKQaN!5)`NgGC(=Q^h&|EFYmGmupygVN7$vIL>(ZXh7^c9LJ;7 zgkVYiDFIcXXZK$q7QPsO2m(`({^vz=C{qSFNhB3(v<*o_S4s)vamH(B1AhJu<2Wa* zyMPUVz6&@OM#|#F@44XjUcbOk-#o)H7j%6TdZ|HkwIhTxk`NJwj?imBh6T$RPtzLxZ?~5^+!PLRRM@=n&Rt09i&er{LQa%`{IC` zBjf-5$333zGY z&ju&k#mmj$_ose0CGE6z)}3#9?Q&b*8I(UIV{^36)LGj`C-)H#?vk%BSiK5bypRWs z4#_#v>++m%9B1^%xH<}d?V`}zqI{-Q8e>k@Hi2S~P?}IQ3b54Y8hDzD-lpPGZ*5*S zd*Cf*-x#LD7|jP#DmAJ+SbeX;=zz-q1#s-Fj^Kurd_wr$%LL6u(o+>8E2g^ZUC6Z_ zD~uW*AXW#~!c_9xKmfKHf?QNsu>EX8NHvcrsjVUHO99V*XH2pw=&d(;?du$Xe%069 zcVF$VPRsq4S;w#5a?+JG0%Z!hfGB`VuHJNJM$oov#d6QJpa3&tOj#`XK@_Q+Bxi_% z6s;*N-4FuID%M2OmM{PSAOJ~3K~%ue(g~V1nHgFftZi0ncLp-%+^8gx^a@_6Bd)j~ z7Hh#3SfT*wInP*C=p+C+WrR-h9@CsqNnKaLn zP%UCbaXLV9u7lW{)biX2+A{nWR;v%^XB%|G8jJ~{n?Yd~I0S9=69P~Qy1qwB2@L52 z-*op60Gq9o2ZY5%{2!us=d(AbsJpbapix2_h zWmRZDnNdMiN{ASx5JD;lU6HZnc`2Z27{RM67dNOhe$i-YTXWkN86^|)JY#+N(D7fc zo`5=jr+J!pqD8wc`K;~BHe*qw#^VGAV{^8~&DCCvZ46`*V*zsz9&9al^!Wu;d7!|` z@tGpgUpZxzl&g`ul!82Gj8nqHRfknjr5>`cdjQ-AX~8yUJU`4xV5~#H#n5ZyQ;VRf z&+|g5!P}U!(xSsSvtQd>3e0iM4w+D$Nhd_f4s;bc4|LfRkur zlt{kuIN^9aV!ho!$+Emc+tXgzU^gi9Tr!}MQyF8*5>;WH9$*StBh+LtJi!a2v*h65 zK~U9GM}zJ8VjvLQNb?b0N?^8Drpn*u8Qs|mw^z?m82IVG`mb=feu*zW`Urg>%*TT$ z=kqKDfYozu3i>#XINa{ByWJz_g3xyuch|Uh{3gczHNN`jXPBo6>&+I2>mA19jN@*P zE(VN;132Y26BS?x>P1vunZ|_O?Ew!SUkbQl#M$LJp1#~^^j?Dm03;SKDFIk@z|HlD z7ccf;0FesvID-r0dYABImvK8w(brS-s-LMTkHr*u^`gs1s%vjid!8qnK49o(@Bb7h z^4sW?-ri-guV%Un8h!e@v!~o4I=O&(VQgUI1!z&lcQJH%-x|?!Vw|t!$mx`B@gQ|}tMlA*hjlwO?c*sTMU1FivT_8*)W116UkhWljAaX4LOQSWJwgFT=TXU)c zi{#Ug{3?7col1_(qc}jC0XPKt+yS^;MLgbg`1RGX%D6Ud%f+{Ju+tQT8d<1gs$!K} zPm?qP&|jUrI*M5Ij@RBgG2f zF)^O)=L+LUgoj&*LWzJ36(Y3wP@pzxE~xM|rp~ZBHRdTcVyJ=*RU1_kE-TV=-Q0pN zMU{2u3qOG#U`5Td|ko+}fnbj6ruDx#Dc-LlQ2*9C}W_?ss$ zadUgX>u)^5g9qmrqU2EKoB;~;ex!zty00{BERf`-&smHCxh#viofdfWUh?W`HzC*d z220Dlx>wxs`k?^Zvn>Ge_Q!5O?2`P&gxD3Fot*(Jm6-uxo@aD1$XX!4M4uX^0brx; zAxN*V$FXkLrU;m$M+pX13{hO-S_dF$sQaw2FgS>DLVl2Q^S&RFRBhk%9WDn^%4I)m zWq*4H32Dp>MBDFZhNYT@VQa7S002Jw>?{2EUl8t8Q8IW}iP;!~!?RNp{wrRF<3`VH ze>FO4drUYbh-&uuY57IP>RxA zRnjS?Dx8(H?0;?*T`7d+ENpKW9F2(if^beTx7>5K@8&&s>te93t88=%1Y&JbScGPm zl0kDq9D1ZOOO%rPSv9n}74Y{qI%z`4DSW*#T%vXoG7*ODMvLDyekJc3DWo3j7Oh~s zSH}}nEatjuRY@fx%(>uj7%?3uoIkq6*PlN}N(D32gU*o9c_aCxIoB-FUuJt%hdKb% z=%JLddJd%)K-M;Q)0{D-jN_C5NX}g@thwlf9s%o4j@^z4*T;nZj6|9Wt(J*5gr7#E zn0KVA1qK@;@VZA16Ic~=2wNs6`8oM zJseN8Q$Ausju}01`vLC$^?6*8&oJ8a6H&C6G{U}BoK$*v+9jt7tt^GzDiH~q`qT^k z-5)1>@%2kk*W1{sGEk|4x^PCgrX~uXQvA;cF+#i7uu>xT}?y)()#M57Ygx$**!W+*wxcLT{#tFy$ zQL3!Zb4@!VHKH0F30kN%YTj>}6NWx2pAXnM17u$%}&j+kl9d4da z`1*?*Ts~f7`{o70Y6NyW>5mmeT}ExmIx*eV5A1lQohLlfUQ`jG zKG29(-8&$-)x9S!?38tq<>=e#ZxQafa044rtcMuEvoHc8Xvkf_!}Ap`H$CPgdAvzOj18=!1Zo>M6&NgE(Lx?eff9A7GO9$9 zn_?;`V??LQ(NzJ8WEbjhYhegkjH0HbCZu@KH6w>zRP&*7lJMjp#iaUS1+erquh$sN zRneK|gq+Kwg&#SX+M`Qh?5_8cvy~Hu%^Is=kal2Ea?~vps8)670#b!Q#wqJ3in_p` zK@y^!Td2F(D0HnEs-QbOwSC3r5n>0QwmA*sx~@ZvohUa$!C=OKEDG_YJx_CLA-$ms zO-NDWi7~TkxUprlXHgTlTUJmD>GZTAG1tnI=2d4m!P=?~wpWW5s4AF?;BSZ#?>*X} zSAo@xbfvK7dwTrQkRT$pyiyH|VrEcLk4-@JvZF9Q{p43}HU{ZNI{nAR=ljl|zV73; zCPXjZ8~<%Z&5X`Cj^pKkJJ03i=Q~oyKks!KH9(6KO#wI!Aw3o1{TRIQ!Dy>jMvRAxn#8Wkn+PbR1ru!qfLFU3Zj57}V z1J2L4Se>nL_4FEvNW$B><)0G@YTZd9P?q{HrPz77FKgB7lrrWyOV3U(S=8SR5 z*iT7}c)6epQaBPSK=qNZ=_ShOvzJFaT6ZE0l_Ft(#nlNZ1zZ9+DF3D+?boU#OKsgD zLRx&h0-hJ}I3vrbF;>NGev#nj)$L>mGj^c~h0k1@XdO8S^5kqgp1V;*M&y2XQwOFVq@ z9sK%l{|uk}{2u@m&w1l0;QLdj8Qj(en(>UX>KVrW-Vj3rePP!fps}1Jyh^N2$ z7{_r!zgnY=N1!m$G~;l4Ko_kI9n}KAlHSMIZU@8=aDBC}MyQe!R$WBO5*f1^BpS4) zsj=+4cOMS;@a+x0_xcLw>kc2heTK`kPUTGC<-Xv2dyWtX@HYt~6FOp?1t1r~%!~=5 zRC}0KK4KfCF%ri|M21v0-?Rxu+WXlr-~Wx4N9dkwmV3!Rv(f2AMzZZ!y~1SWdisuP zaL`m^Fl0ZQ3e&CROK+9V>~xN97o%ZFy(@Oc(%vPjIL{5 zaFcHSIvK%>XLheZKx&BI)zYKb#Vp}utU{Cs za#VAAne^S1pA!v;Ygl7bz>5mU%f7Pr|1~~O=!T&!tecyMMLQ)*c_`uqXH^zh?^U>H z4t>kN3_(5S6d;~|QOdI^pCsO;vvr4u+YUK1rp%a9!Di52!vZh_;s!SzH8HDK-n_($ z0JiSd?x%XPJG}FK2*G^d2)G}Vpek({s$3k|jp=Y&ffadUOVJ`U(tE5uHUiv>o_Uj~t;3~=*W z2^tGQP=RI6GI%NWpoWnE33)FqFRUr)DkPAQmX>p9`%unRB@T?P@02(;reQ>;?>nse z0cDoLcQr@GP*V*wl}ND^KPp!HK<^cB5^lvN%t&6m)fXuBc%u=-%>t_+ss;|J>drO# zV9pGR0go=Wc(ff5pw-@Uu3_*gwK@x)HC2ygXb~M2<-s7WB;07gaW44g`WtYX?|Nq) zg>p7q#ZT`~At%w^FDm#uI!Yj)j3b$1>DLY)u@D1{ zS)a`0RJds@<`s{y?_Odl43LJNmjKEV;$DI%>xI;-PDPZ+5EKqZJ3LKp-g7vG96s;d zDeeaMIyOJZd!?fWpURYT0pdXmu8HE*PhT+v^>+n-v~huJQSoFED|C4xkuB5DEY?1aI}8 zOax@}G6EE39;FndIU&tiLfo@@8_E974iVgGO&b;?9|h%y z+PoC3ImZkEh~*3zF|7inLVLN1Dm_|?Xtdyca@en(`*%W*amrWgPI0u}y_(O0>svL# zQ$-~e)~W6nd+zz=Iab@D;;wl#K?0XKNlL>pF*rnwdBW%4T;a)!9WKw-xHwE`0EZk`L*H< zIq}vJd;4rt^k_%~D?{QQDIB4oL96a)w^!@6v>+P|CVqYd_0$3;8rtPq0aR5dpwc%A z8mSxttiX`=pu&2y#<1!zPg%m%bsnTCow3T`Ht5DP&A72p&^;{KuW#dJj83r>|V{2%xGb*7XIK2 zXsz&*{`taG07Ss1fXoGf%~Hb)rObzov04?Yx4e2c1*4cvf#W88=m?BC0JK0$zXAY4 zKpa+8xLI;wnFm8XA30UPQWWJ&Le)b<5{S1!aK3;zG!IfKVi_%5d(Il{Y|$eTC~Ae- zK46Fu90GCzB%iwFgu7_HN^we z5wO7i5}2e^X)-t5sC!w3Q7VM4TUF(}qJw(mQpz|SN68~cTbo+_oUG7-oU;7E!oX)= zUSXay#zNShZ?V2O!>}GO^u26Smg@S!HV>l~f6FQ;i{S%6DTvD9O)>SA%nk5XX_H7p zdlVlDLO`S#P7}hqpkX)+y!QB^2+1YOTtdJw3>BB>PAVqHAQhP{y`hE=0?14nk|_D! zb1}T<1yLA8}d+l@k)$6WCI*-MPa1J>KKHbXNX*9kBhVj7;d`z=}W32#|735eDQbr~MvcT1QbnE&# zMGcS?Cak*3vjR&LJ+ZXh$@iJ2$+$Vq86!U0OBs`5xM zg|YJPio)z}!}WIlJG+Da>7Fy*IZ-cY`?!jy)Xr_sHz+*R%J%IgMwxleI2jZe)3KUIU!|Y z_*^VPg_D4^@mbjQXvdg=*mZd8y>DUv>`TnY1B#}$rIe7S8EHzmeESWgG~;Lg=|AG? zGp6H+X&f<+s-Vva^PHr3+hN2si9stAV81(}gaJ1%zCl97Z~gQSaQpNt zeEj?+QpyM*Ofg9DR-#%TqU(EHT%Ms@_1GVP!X5fyK;K710&b2oUS981z5tN26rSCz z@VoC`;NSl1_wmj<589rcrEmN3<{DRj{=ebk?boqd6@2(x5Ao4o>@jh{gAVxKMTe&& z<0diob3vCG0}-aeI4~g-Ar}pKCe)(8cM#EV(CFhSYh8qRyqfdz;#6ajclp=Jb@zNW z8r^sUu+W}#FW57E_k+cK$k^c02_V1adU@TB1_RIRm!qnmO-Bi!<_*`&O!haT?bGOt z&$jz>bGqnAHTzC*2CPww3}~y$*hLKM0bGvaIahov0UG7h__wDUt)(rsv_~`;Rd^U$ zh+; zZc4U=TA7Wj=Ev1>$c45CESF4;9fDXIj$I0)5Rik0_L#8ZHjsJNO_{5C=I{zRw;Ym6 zxR>(`0SGZ-SZ}ak2+I`&m?Z=%&p?qrlQC*rFD>{MYU?M0bo`OxVu1)$s1}1W&Lm;V z5qX}g;vS>sjxbfiSL*l~g+sMoi6yI9aeN^-8@E~DszM%3F%QjqP6Ub~KocPOfD1(i zZQP71m|5TVdY!|qx=tn#NZftJD`?ne><7$KYMWCxYfc%{G-H1l{Yumosz|Pa6`*<0 zB)Bz?37bCPtPh}cK)9YzjsxcP263}N=(`&JWx1eMLx4(=;{aMwK?mbV;uThJb1tn) zyOVo#J%a5lshl2B_Z9T|NWk`Njjoe^(x!NjKF@N|097WyjgVFEl7y~OVc0|V86sHP zfNWegkABiT~FOJMZ^3vi-*oq04NYveZ<4n8rxNmzK`fbK-3&~WFQtPLc$?{ zs9-MAVyDw8A5AeNc!aJ+;yhwA)jrYFT<~&t#LdeWSf8Cc4(O&a@f|Rc@o&>b;3`pu%_pXFEG2da85Zl&{sGRRXCf_#^&+0 z=hpRVI35MmGrFh~Lt86o!|iIRZOi++sspkJWivtIQiganFG5F`ad5E|Rl)9(6v+&0Tq zr5-Y~s@6WY0cl6yKHDr)t12t=OaIYTkB3Js9#E_KwhG9`sf1i-&}Mj{;s>>h*mxDs z!@i@+8o?(byCqs`uAp05%`MqCTaSwTbT^VF>5_BcN$A%?;}5;N#$Rh0VBdkup3UFo z-wHj0>#GUpo~!LPHe}gNz%0bHZrrjuK8A06g%;QKOFk!uDu-W$5 z_fszNHfl=4s79QE_l#D>U=%eqP6{kr>WfWhz28Vhfjw8jY`2~<&sBA-{j27hb)&G3 z3*KYwcjzvjqERn?iU~<`$x})=|H9Ys&o@zC43-!;hVpT(|Zr_^8FuSzujVr3{P4NGdi%B=M7DR z^~tf;$S_(b_|RanYys@B=|;3ydpPHCc6NeC-+m9j`FsBWZ@>Ev+TAbUuYRm}hp>M5 z1;lQT{`v)meTR!@7vTLRUOnAlvzzed=kDO{X29y@9xilvu$%CB7x8>M;bss;9T1$c zT(=0p;c7o(GbAnQ%z$<`B8?g?i*&eZ^{bY-13H z`v5*4{Bn>ZU*WxKNB}Hamh$-~kMi+UopA6BHHIv6rV6xeYt9dFID)D$nryDRi&xgp zYUPZfkx3-ZRs!H0j*gF!;)pm#3v3flx~E(a&@Pk8rK;=CVOZw2wzQQYp(ysqu*}Xi zxe!R4T>{tT0LxLYWx3$J>IZ%9!!eZhYh^v0>R_vu07P7Gc6fQy;mLI``>&GsHGa%D z&KJ~&H=x0yFHDiqD$_HM`^mEm*Fs#`ykZjKG{sb^hm)M|P?vMg3x(--K!E#p{tcThxMgIrrRpeOtJCicttKCQ(+5C@ud>*Mq#DQAzQ<8S%4( z3o^kwu^f2~cTCls%$SRgk4VDUgZ^_`IL+nC?vx4DxPyh}8_*CTry+ZZHLOt!H>n_* zff@r0wZfvi*ou=eC$#NqE_C%?DM`zo?QV}@j5$Pvm22fnjVUP;<9ea7@RB>SY`jDW zkQQo75vkuG4LhK1;oBBy7D%C0MH@0^0$dVB-HM~l+os86krU7vG6+!bNwSu0Rdr@m z&xva9vh1H_+p3{w0$4(MQ=EiBYEFIKTia{ZVVgJchM~}pN1hvtrm!itWwL8!UIJSy zrMu8}bZ+O+X<8}AQAi$t~Rk)>`qtBxBp087Z<}CWGRz;ONo>Bxw52h%U z-IezP$VygzCgtx+d^ybBLfWlbd)-pA9$)cR~Zv}deS zO0sv_y;27N03ZNKL_t)*_7PC3)3S*W{h)4-BFAm6)!;A=0DLws%imHcgxce9xu3>l(u3o&v*&7e>@ZB%s#fLw`)bDV7dV*(< zUul6lmNq@i2*G2yUcqbeWZ^ODFi0ZTBTMVX$iT1v)^Fn1{@!on?BUxW=aHrkPyfZg zMT`;0r)!*j{o6SD&VL7Klh^@hFm9h?|NbB0)z$xkupGq5;uGAW#o1kkUwBY6N{U*F zh)G&T1_IJB;$*$XQRA^66PCeenvz;ZP7Gq%2yVj1BAAq4!+7T5`c@xkZiFg<;`K4F z5#N}fmv2a@b3^nNh6@hHkq3EO3fIO!!*j(bNBOClM@+%#w?gafqFl5f^CCn;>zHSP!2=u zEJmKQU=`(j&>qLkQt-u-JeU-zklZmxfOis}qqSwSzFP#8C@rS9Ng<33kKnv2=!ubZ zky8dQkZ@`RfkiR3+_~bZ%GT6MuoXb3N3#4)EXqb`+Pp`K?5ij%u@)bTAg$z=rii4< zh=sZ*qHOUY=Q2JahR~#?(;I#DHsMWn2RC7?%{~AY#mk$mqDBrBZT$OWk!kv;sL!7x@sn~vR6mG4bj;nILweu69xz)Edm8sK)>iSxoT_yuhl#n&FVe+F`=6xKKR9l_~s9O08=z) zg3tJX0fm|5p9?t3{{t}J9rM@0sP0h%qMC-Zn>2{omsUF&{fxUaMETAT%A+VoJ~)@9I0#(;+@T*R_JlWb1bMbY#Ii* z(9Uw{Z6295@l%$H_(VN?91~pA%=CHhr82e; z(qr2BfY2<^v`dlMBppIR)57tX4SrU<(zXRKU;nHq!eoIQQ{YOGGZo3$k2C(2_jKm{ zROrKGa$Y@BKxwy>h@uc0ELLlPbp5qhZv}+Ft0SyWPI34C1AK0?#r9@{{ceZNW`~Q5 zE4;eA!PU(kn{AJNirV5!47*bjt$-ly!5Z(-1a%mw3^`gYl!vkc;JFbj&kOUx*vjuf zVS_UkZ_lsT(B^g=25fGwar)*tQg>bCZj6XiLRfh0Zmux&JACU&&$@=K&RVST(7b<>QGBr>pR8gW`B zQH;p;P>hI43N>DKBfk0l@8KW(C;t)N`RX^}Lz7qAHA|el^B%5#`~>@bhdc2CH-G*= z;O6N|96fj!>qp-J`4jk)JMeez;pXR0aPz9eem`OuBA9^S3G3G3bm_4fWd1!7dJXhz zK$ys3*?JtW+Kj<6ADIq?A<7zBeDJ{<&E8jGAGJbX3%$&Bxmx#3}4n7S>7?KP%;L`w3T=@~Y^!c!d@l1Qgb&*&3p zo>V_qs-EAB1-8oBfTL4ok--v#Ob7%WqeTZ)a!GlI4UI^Qf#$GeT{Gvzx#}HB7m~!V z!rF2zhmJj-To2fEG1E^?R7;qsVgtmOodATzxW=@EchH=XCG20A;?0KlaYrKFA=#ra$XCaN2dmi+8L@-Z?T`xK8Q3gf|3Tm*h%&S6h^e{nI`nIaArZx;wSJzC)WXo1spi{&yP z1c#@uI*bYEhY8@6!-4A1)Uq0d4mmk7J}_X$pOhHge!yxKly0m3=h_l47tP8vh^i2W z+^?S!hAH9WPd*jKXk7iZuUh)mUso45?F;45dHCe~H+ySB-GKBw)#KnCo{yqHjrj~7 z$m+S>fM;*={+jpfu0PQ1D?T`mL0KSDJqFviH4m+(X*Qe8;<@9L6>?4v9Hl=xCk1V` zDXAE2W{UYiXuEktVbJ4X?u~b40OxKGt_J%>s465Vt`C%cGZknsxm5wmidE)ZTQZPH zHirfvAxfp)L%kGn97RE&&9BK`&T~SUrVB5H$`)U(kxXN4ERYbwt8N4$W8KO=UMw59 z#$(fs==u?Z_gJ!rkBs1XUXP@zWm4zVTiCMYolkMX5EEWrcQ|SsPFs%z=`}q>#>isu z&)pzEIl3q@aM_Lc-#)m+58pY#qZ2}`$_y-Fn1GRj)YmBEE4(MmdY0%XNn0qjX-Jng z8b(l0fkX{BoS#3y$=L%Oo!rIh&KXw6r)bwlfb+1hUD%v>pMfNE!r1Mwzq!KA^%X8( zJj3PlXPCOZk`(E>mfex#S%xScX3azn_|qZ#`g9vK^~R=ygJx{Dmc=&96@CFk?(cU!jvu^(tBdD32VJ@nOqlk2>~F5{&R4#UM_>CE ze)K2*2QDveaB}QQzw=?lI9MpVD9ytZF-=;eO|gboY}@U7oIQ9GFF*V#c9$4eB{FnH_@BSmSs}qn9Gr9tKoPOzt@aY=Q z|KgAEi$DH17$UIWk60}J0(b8J??@4N@qCM$t36)6>JT?Q`uzwq5C$T&L^$$t#O#=df6}=vmvNQsEg+Ymaa$sjn$BDplZ9%(6W5=UW8LC`mE%m&vJGY}>y&$NMuC z=vx=0*BoV^UD_0iFk^jnyPNEW>Y^cdELy3Pk(kj9Bl=Nv zTo@*&0KYiGKn=viT$Z=gMk;GxM<5IDW;h#og#iF*e<~0|#+MifT|Y@~jVeIdYFmNy z+e}WCb0_^4S#zQ-j6rhJS&GFawQj&d2DJSHX}%v=t!jm?bG1GQVKi)E1~R6^COEK-x&iWnNwMtltZpv5(`~f&opasm%qOxH<;*uI|-wKBRf zA2J1)kkb`p|46|?Bn1qUw5PMsbQ^~idF!WyZcNyX61fp$!lSz@eDjOvI6aoMkEFBK zwjR?U=^C7hJ-Zb4pxL8U#^M7&?LaPJKSZ2P5te4*oP)WyoO4o<*%TJ_L?n&mQHsER zh?o-NlaD@~?eEthyBgc+I5~rR`!SoWYH9b^$!#1QXMlh{<7ZSLVm8d%7d#w7HSk+Q zp?pjs_xSF#nr`BdE^IepA%sjcOv~J3JjM64c1OTWm(`CFu z&$TdjTYsA6p4)?!b;@g&1u|!avYx*=2CG7UZ8ehYvl1LUpEF0yt7F?V7&^;i zt7Q@A2m@0bGo9-r5>Qnqu86q;R|bsC%Tmm(B4i0Hh7oeO?mHv^D+GkbA+!N!t;ZN6 z`auAcUC=v1%Joz#L{J;olcgd_ipfns;rZ1b4#0z>7RxrEQP0dcC2WU??I;E0to@V8 z@QJ0^W1oOO`S==NJ|FSr`)esaH%SY(<+4T7Civ**T}K>gVOq)n5zJb#U7m?VU}gGJ z%K#i0C-?8;?Qee<5B}Cy5tc`oh93Q9gWb&yE*?Kazw0n|J<>SBIfteR2+IW)>ory< z$7t7UERIib`o(YJF%jpvdPW#(!CmDCLe;I!B*l6s6MkYgQ(gY!X)ehI(MJ4Pd4Y`^=^pjj-z z0FDyploUP~XG+?EK>z|$iV}gCA}l&4Wm%7zu_e>{!HZ|_s=5OepUUF~RdY_ccv50U zSfA!-K*<4@2*GLGBMv=2_noif`qgv1|5rakH$`~Y>hIz;AI1se7**azOp_EyWT;%z z0+~ZU;QY-uKt#Cw^dt0rF9nJnNv9lJb3G57kfxZKa!R87zq;6BJ4F2MKmDh8@3(#j zez8JM&8T><#hol4eIMsjLbo50BI9^>f#Kpq+&sI$ZZqO~H{$AMK-VXH?yXa-meOL2 zq!<#eFZcN9qZ@quY>!J?;`IJKxW-`|C+zkkt~Ncoae_CVNkS*`2(^JRFGeMcD&xM& zD9Spcn!Qb)9?0%24X7w;^*xLPx%zDMB2|P6k1q=ST#6bdVAS%n5(CUxAK@8A7I_Bc z|MQ(Xf0eNKa(%-ROv>BY@UA_WDcJd=;(5K7<^PlDakFs|ARMsfBSLe!3OaWsRVE<- z%ex588a!@*G$O_*o_C9KW>LN!fRP!@5utTh_y$u%i7JVPwTpu>Cl}?4^kQU`->Djn z3{`CWgy4WiJ99*m@OF?mkJ?5f!#t@|RdknOoG?rgObp*R?R4ZpzCj2}Bm_`O@Xi2+`fCHwa{LmJg2%+o8vVwW_tM`Ul$Ta(!h=i2IA|ck7$Z9=T zD|(iBfc8)oa3p!z><9(`slC%^%%1fC4Jrx9-=%K#?Aq& zg-7t>Vah6iaeh#V1YiRLWe!PcF#rN?jcqUhN{E!uPlWv-pdzSp9GnQ%N!>n_H*}d& zF=`a%PP&hRckrQ+0y>iiL%l9ezF)1DXqyJ(IH2!(0iIa_B5;Hhh+|<&vL6ZEn9ymF zno$e;O$m6m9Wf-SDUqtR1O&J2C#kxdOyN+*AGDWaWkaj&V1JQ1fIuy^Ize2y;qFt>qlg5Yatccc3I{+#W zVY$BMfvR}|A6)0NUaG9YgbXs)%zXLwz+N}l|4*;O9X{uQ<%+eiou6=!&#m9tOd0s# z{A_l$x=O1lry73D2G*rAHzlp;o+6NhH?kULIB&)(&pd~=%WlX+J5ajqp7tSoQ)hgS z=FeA$8Q2E3JsYL4UDipcTz)n`^UJG3ZJVJ|)bk|PQ>zMUOgR+Vj8FyG6>7*{af3`; zt}|O(%XtT7uab9!<-+4)N4Op)IPZW!Xd#~Rr3+Xzz&J+9Bc3LyX6^*ogvP@|X_yL_ zvf4D8e#FIgz^m1M#2$1NVL8yqbgtdCk8En6%XLHMQjaGqwxE;C>@B^~ROHc9=ofHY?MQNnVOYnnNnjFfBApm)$>-z_&}K3p0uchJvPkIv)^D z-oc%3y^A}Lr-HRA$2;RQ=VvMQCba%2Fl|MN}o#VHjX)L5nkRnt*8lr5+Rq zAWblJj35Q9!J2FB80%#~(=N2L4={`o<0$D-Ih|SOs>Y7CB8QF-!=kI!Vc}IKCDMxX z(gn)}(ScG*7^3XY7!yDa$$2q4xE9_u0Gx!)n+%3{+=-|t)POn{4ws3_8tL3peoHx1 z!%|+n;S~UZ4yhn(EJo}qtc zL6n6C7FyH3|y=IgM+v(YG_P;797RVziyn8jijW73Mp zhs;zyC;fuCY`hxxo1MeCqO2R4B?BAK-0lPnu}Bijb0M%6-=RE@o(K~&?%g?oZyNA4 z!TAQhY0)sjyMQJ%Xo5$-@4#_HuVKJsMY#;D_@jwPbw9;jVZBQm(*(OLjaNVKp!W$g!M)5`U&f0lW8_aHS(Ye zvsL4lDeZ6s7YXbfc7udS-fXtGc=Zx*JX+`Vy}g(9^K1H@o4}%sY~^q6yUf+~ZfUsl zmnrr}+4=gY>5enq^6Z!L&0lke>S1nwyv@I;@WA>IE_aqKHlLG9LgbTJ6={Mmiclp_ zY@&ol&0r~&i5+?Ag`U)GCSg{{d;2g=#Ee}w_q8%mjnb4y6L>~oEx^i{fP*^gjDR!sB;S!fuS%jbfz!zfU(A3w*{@fvp?p5gT2eVo4a22LKnf%UxySe)Gl z#R;pEQ+)C3?;(y8y4?=lZiDN~m$lr?P#MR1uj*Tt52*yROIT^b`w6czk&+pxqm`65f|I zm!Fw2jS-t&2Q1h4hkx+j;@w~QK3oVo7b(*Sa|FjI4v=P%qaSAT%>WjsXx{uD+Vd~t ze7S~S-2*h5QUOyI#jgQ8VZXV;=H)Y7U%bF_d4c6ZjA*B) z>pYIS7EMK|x*uOJ-*UuLg<;LnLAMsvu3PAUoZJ?L|Fam3h1EEfUmqXx%5fFSxE z=eefZhRyj4t91+L zeS+yPJYPrDDZ?nZSMW%o1hVJ{Ju0cPVf)c}k5Ds4d+Jh6S1*6q1BhmSG8n00q|=9h zqe3L=?KOoxF)-;9OJTVKW!(T0Nq#~u@S>%xTx0}gh{>!wku?{%tZMCf$O~NkwV5qB z6Xqdw@QbB}nwR5l0os%bGE_w_RZ6>5G*3A!OmgdMFIweYCkw%5!18pIDFx>cob;D0 zYLr=(WbC^!p^pRlNi15+#^nNkM&XGq#7{zbgfOBqrZR6iw_l&zrf`@fq{Wj1Cz7}o z4WqK0amy)_D&tZofOMgQ_wZ_c(kaU?M-I!?(M-^qV3@{9i?0#7Va$qCt}3C=cxXH@ z15@h>-Wl)&obyQDWu`c*wLrGXWdrg-F(=c_EQcq>gn>0L%-{gCR?~+Xoa}ipiyR?x zaNwNA0hYeNjUyZ%tpQGOs$8ROB}52}afpcHDBkma$T?jVr3x5GkPtvfWvZE+7~auzO9Swjm`dCkS@dzs=y z<(%sO*;`)?qy7v64#DT^U*#Cn|6VsPe$AL?z&@YP6(Gi~{hEI=de#eNpE|3eTNQQ! zLwRGx_tc}#NsT&IO|%kNmWOWhXI?j|Om(Mi+N#ED&ORrC5)Q8J_S|d^N9NBz1 zYq;w2yxW`CDLXdF^g_(`_B?2qPS> z_Gi7HGnr)6P)IyqfU^D31RPHhL+aqY$K(dMzK0Kcgb)y#Mm+0H0~Z>2FX>p;j!-&t zNZNsERyid80CoapPfEXF?a<={sM;owXpoBDZC;GtshSH|#6*3U1C^d@nOV&hGp25j z%|%3`UN-qBsZ`C;F`D%nPyY1(#xPBAO@l>X48vZ+^J7x4`9XMlG_{emV5S2*!Nu1v zo@2dkaQ^6B+`_~XyHO5_g7q%mGc-iyN9WrxQ3xR$i4v>6OJ!<^%mG>q^4V~2$GGx&iYc#$tyOR}bt<>6czs1p`CS2D zb8^J|Qgf*3AYOIvign*wwVASzlH{%DO3#pxF-;4T&>#|06{2xkEmoLj37;+@kacL2 zftF%{sW+KfS9Q^uK@`z07MfdC9a~OS%g~_h=Bc{agU>pa+auLM)$qdTv$>eFwIxGrx z$^~33w^uyP+ER;wyC-WL9j~!;PI59CTIIMf6lUa{dkfWf-ob~EJ?GiG1!O=#C?51o zN4h5CC{}7~QDW@U3=c&)FF?`AngFyx*wvIcSL&7Q49czUgx2IbF%=_4wgK2*l+U&} zi3l;3Tq)VKa{=KXZGp;J;ypL7w3%IO%e76=5X?!!h9H8r-|w-xzQ%sv>;H3VP5m-ua`s*IuX@!$;?~gqrdM_FA*h*2|N5R; zQJfuJ=(gfPhhs7QJ)h5I{=p3P2B8?mtZ#c&3Y1v>IXfr(0#VWx%tE9W=6atCMPzg| z<0bhm<#n>(OPKq?yk$Og@U<$tL}G^o1CgY&hFw!+g{x1R%@o^rZ1Zqini&7ji;&Y{ z^6cqxDs#B{R;P%oXK)TkQ!#GkwE}WWCSpl>S}i=zk6S#x>M*2)MUvKs^|KQpE4tok zF;Y*;BTJf@$zw}zBa*7z%Qj%O3}{-9#Uh|>8>~)`@bGJ2$JyWdGEUxn3x2soY+$E~ZMH!@& z$y*$)aq{pX?tbBmSe)I%iw}N|Pk;FVo_z8c5edUIq8oZ(1a5X)TwLAY(VJ&znz0Q2D;Pan9#gBjTAvV_?#!2$dbN>05a(H`GWx@ks z@6>T2tMJi>kMY)*K94Vb>j&6fJj1ZP!Rq)(S!U^efs~My1e26Jyr{d?V*u zm!Cxd8ZR}U+CT^)A-D<0OEC(2U&ahnVea}SvAJ#K9;4>5CwL?dNbm?QV7XkN4UI$+ zKpja&--`9K(Xu>l;iVOwng^W~U(^zxb>S=`x|ZQtS=V`D2)-7h0&7~Zd>?YIciudd zvF9yepc7Jx{>&gqA;K9zF-AOxBt$@9(p+8*fmiQ(R3R!tP{MGhX%f(;g=rjVxIz>r z7tNAyrjtDO60(kp&<+J2=ifMoQ!EpcWA695)dp&bjC zAI1sJ5%zsQ%llxZ-wNd-D@xV)+cso?5ZRuW^O_Q>f@&Z%z)V5U3Okz-r=on_pjH6J zXv&yY;A%cAKreWN^L8QKKt>vE+aSdV*8H(I$pR4JY&cwa)>1XRj=)Ig4iatjJhVgMrDbC;VAjs-+_Q^M7D#7#fq(Sy4ax z_~3O5u^x)~13~^;xz3+`eLJEObeum|v|Q6cH8j?D2X^v9U2t}hJUi6{aow$AMlAY! zb^ZY~s%}%11~cFnIblXr3nw;#jSRf)cc_;qkra!g=u}Zx9;YTh+14d>Ng20YZoX$K z`33u2DXv*jpG{!p-9J#&^K&VXC+kO3&G&75Mg{#GyvkH_^~ZP?vfMI$Mj8fd#~v#3 zHMyE)-#DjDv)!W9O_(d+ZSXi*O8U*NAF&J$K1nnaTmck7F+w{9R|fWsAJ)cp*5iF} z;xTU>ykof5;mg1Cck$?ZzXtLFeYe5I^-Dba#bZ2s_7pdp8w^8_6i1;W2Q(odga+%? z3didcoZdOZ$;lnuJ%0zsrw>6G5LQck;k~cp^WXRy{?kAB&+w=J{9oXo{g3|)SI;lA zM+6|W4hZDXcwp%rR^DON5RMv;d-qQ9=35Uj_4|w!s0nCKkMZ7r@E;?r?x1_|A-anf z7`I#WyFJF;4nx;r8b?ry2%&**Tfh<8KY&Y@?*UC*ME-ZFE8=(>IPGs zaJ+7D|Lzfn8;=+xy2#jdJ)XV1!5jCFp-o4O?DL||xD%V#%Dy$PQ$+))ypeQ3A5^YS zu7J>KoG`=*A$T#4crTr4d;rG?=e-t^8!--gOlZ)w3p9%bd=T%tb5cmvxuAOzpY1`V zI;XV6XO>74+Xp7+U%$y_e6?(|>KnGHx^;Tugy+v*;@?SK3a@y>hS5jLA90EETaBarhLw-*2seA8wbYgEFDT_w$E zLW-iCr*S~LIx5QZtp0}`E2)|Q!v~LH*Q4Wv<;h(vR>w%wfH;my7d>2PGTx(%Ee|K& z3@Ek=H51OnQPH@5Iyfxv0Ggkbf2_RChw`*0k*pMBPDjRXYlM*ZSw&I@r)Dvjq@+N; z7FYj_!84Gfj|<}miqIoNO*7dm_bI&H1T-^50d-k&XRHKhkzhz}IF*wDPSQ8r#%Obz zIO}eO_tb`D*+Vuv1eEAhoutG-oERN|Z6%Y*S-Wn+{UeXJ&lYGF0Zp(}Mwbh(niC8x zdPz)--4L-GBckTH=T0h30H^^&CO_$DON4Q?j%4$sPhd_bE^FnjlhjmPZmfWWbRCN9 zHL5^$9WDjYx#+#54@CroT<^xf?~I@n5bA=Pb)_aaeOLW|CN@yOkA|Td5urS&O+b?c zz7{`IrG3+lSZ{V%t{BNTU=I)_xJa11hT3VNwHTENaRqoP&_gKThjoz*@YwMd>MZ%& zRalmezutIO;LSO&1bY|glXl%Wl6#|t)I2sYteX|FGHn2 z7or2#V!z$v`uYarG$AD|-ZT?_bxR~+>{3WASxvrL zk2%=A#d}9o*0i4zK6tUklUIapin;CITc-kz4iGw z5Ed=s&?AncC`8IHwojjdA^E>Hzpn9UPL2?cR!HhCoQ46ruERJC*gt)S-ENP~W{0cm zEpE1ZY`Y#~lsYbsfHY2caPJgvy>pJ6XIB_5ZZML=X5ZsZ*J8D5=0LnM&Ip(+-{lgr zhCvPpf)5-enfCHunvroz5kuD_dNHtjO;58Nbn;QV!iaL7ywus5#sNdOmzpV!~8M-njD&NhOFRHeDq4Djm!_`fX z2j_31ySS{BRL1URgWc67KL53^;r^q~;a~sJ|0>m=hlu^Im!hySl@MF)`EFsr6EkR( zeHkZ<1dUi9-@)_ue}uT-B1P@uLJpKB!4fedMK4`ehKR5J`mf@v|K4xOnByc1=N!7r zPciK`;^kf*DIXQh&@YZbE@0SQ3Vv1PJWT`Q(1TMH9L5m87|Sdn(C9N4Lra`ngOxw}tSbLF zA*aFGfQ_~p5Iq9M8#qUSAwQ-m?>26c&oN1=V`7)DVY)_UK_=sg^7`e6vgan%pA5^} z?d|@?XSjMg7Ukaq7?LF4MyA{`N#snC(^l&&MPOpW1i~=Mv*#`V`JX)twLlgb)jZHrL-E}-2eIulO;EB1-> zLFe4xUNsQlavkG=wfExSIDn+Iy>keTksw6^VoG?q>2Ne9ESC$c+g6l6vhZs{jEreY za7-Z7ZM@3l&VY@6ww5ll@64h?kUWL?PMy8Pvy<}kmHClt&O#P6+)FH65uA`c>NXDy zLelWVx?dxh5eQfZLhGF>)y1e{;Mlf$HKlMcYm68{ta@nc32l%NL@QVpv~Rt068`A5 z1%dbS86;uOeY9d0NflYI;UOt|nTZ0je*4|6oQwW&lnX9&IMhWbFnCH`w5{b?FKE>-WZ(mB`XfXI>vr1DG(_EkDt6i znnt+L%$_O}%PnR3HkZ2fV&j9AM11Y>6)dQ?<{VMxXR*WU?LWI`&5{pa2Q(#@Dxk)A zLph`jD6hledgS4A9%jZ?)vVb5qKZ-`Cv*X4Twn&h1K-;(6P3P1<`^BSflYCFX2(w*@NeS9RW~Wsv?e zuTh~TH5_XMNPR59c$XFnvf=0J0=40at8q~I+1|;TCWiM8O9CFAF7f*ZZM-To9GJ$WDdVGHNQn7v#y z@WBJDUJ;fyQl25jwBm&AeuI6#!{zl$oL!vZ{QN%7@4bn8_a9-gJVp~%*ljMbJUhl$ zzVaq^&o7j2Wt_oDYgda%gMzfXZ@wXOHjdJZJ4VDPkvwr2rLXrmYL)IOhwu*lh+!1( zY2OdnZ1>pid+hrG-7reHv!($sP$IQRqU*YDz{x7${u^g_`Qi#wOhA~>_Y;=OW;UNT zqj_tjIj1gkSN3tWg>SuTOkMVn9;%UYQvI7{UndFo_I`p79;}t!lb2#~&U=Y^^4g|t z9N@=Z(h@ZMJ+upiriJrO&I2Za{y1jYnVlDy}YG;qv(_kaO5gjIJB7Shia2J(fttR64bY zzaqi8n2QrWxPOl2dWly*`vv-8L~it)adesc1YmXd6yN#n-$BzZGzBhZycKUQ004`V zb0Dfi!#T7^XIPxQgEZ_hY+n^cdmIqQ9Y>hCd*g z)%n3Dgld88oUD~2%^mde*N%5pUZHd4Z?+^uH(&yYtg^Rkz+p=8ETN93sDqGOktD5{ znDe|c5|~qp2rZeH(5|3;vod2zNeZqwA`Ii0y>m8yRIP8OrpiFWV0c$CwF-C7*3yK6 z@*XMR!PPpI@T^(whMF8I=24U^$~sBj=%^TG#gyy5pCH0=wNy|p5d`Bn!iNS&M*-6` zYG~yEf_NdVr3#Z-Ks`tmbss#ObC|{`%s>ZP&s$`cO7qpr_I=%5O1x20c<-on!bp@+ zC#B_F(O2&ff>(wsOrNVr7qJE>i@?ic>xYCfmU)R;SwU93a_T^(u*Jw(FJflAy12&m z#Rcv@csOTL`F%~3hbl<5&K2#{X*+Y?$p@b+TF<}Le4>711cc0MYvF&(j&N|BLqSoW zJr8NG0BWr?=0D}0%zUd(sDX}}d&yo@iZ4VxqwBIkfD&>;n)0JP(Jjr#JSTu2S9Rz> zm0w-0f0k!v_^cIoQ_d^7Q`1eRA1a_H+Y>5Tk_`@&|5N~DE&d>bS@Ug!K}O^$P83h3(Z1KKJc!fP4Tz7f zq@=x|buE%cKHYu$?fiQ(kKrVhxZ^Nj=zGL*!Z=7<%f9Qe-}mUc4%=Oa?Y>7hjOew6 zrKOui<^!sr!p9t8bG^gK`VKxq*g<-)Q$Ce258lZ3k0|5EgDe$w@KjP?Ug?`^-8Y2R6mC7kNvM8rFBu zBo!pZJU&sHBNnIU8kr>W*1^FwOK_afT|Gq{J8+y3#{qHdFm-!OLxZvO6BhoY$Z+jF4J*w9|jssGR*t~jywr$a_)^JYtviAW|3mzH|vmA6}9Hf(q^84#3 zwIWN|J9AQ%ujdTeRxY>VoeNR(c$OVf#&UREiP*|}BTJ&{c19wcRbABK=oR8oc|x$( zhQ_l+L{_+=!aP~ZlDdyrBXCjDHcj!ZWpoy~;9JVAK@!1Xy62O$gytw|My8OPf!LI2 zkhCAO&E%ZaYyb#Wyr~YGHx(f7JzcPR-IAUo=~CsH6Qgu|D$7>kbTuX`)(MO*(HG22yTHGIJaiX z3c4}o`n_!!-34ZG;p#6~1W{tfV$q^qtY(8P8xDG1t=b)<=2Xre_29V+$jSxaxZ2)| zNkIj?nO4LsVR(rMqdrTFKyXs=I}oy0-Mp5%EU2qrtHDh}x9bq-S|L{>lY&%fk0(kG zrHB}T#2&2q_Hs=IQ_=zxTBJ`c&O{JTnJVH`&B=^T9HCjR;6p&1`s_W=edY-mr_xW+ z)`GIquS-jXp&6|O@33g+)~?cTw#>0{D$3knxJIt(2oxoRN{~uSgqQ@y<{sg;Co))8 zqeyMBHNafGYDV6)jWBm2$?5X}ahfppom#X;03IB*c{*u{;VoWt%fg*Q$#)K46ztW zQ6TYZ1+8D5M)9=Alq4Tk&oH4tdL2{rrKOVm){WDQ%DQ31i|5ZoK|g%aXMT9iakgGY z$+gJ+>t3(FZdST760sBveC9rxUjSJdJ7lOi-J|-+ght_w$N~)2Zze(WQ}XQ6x-~2` z3?Ro~cE}nlK_#nG1-}v;s0XD2RM)X|vyd=it7l+}c^*T-NHb79SI7?m_kn_*75XB> zaCi+=;E(}!38cB8Y7<8~Q0&Vr+2a*pKT{Yg8D$mFvr#chZ*DlQjuryHFZ*Z#X#Jwj?{Cl#9ma9MICdDP z0lEEl6Ra+EuFl>Ji0VJIxNELsEyk};(#7ItBBT|fFxb|Y?ahkIpeSixdQwRt?WQ9F6 z4LAnGagcu8p@DB2QPzD?)Cm$Xk@uJWwOKLTnk!PFe$ay#BV(%>lFO4YKbV>E^63j) zzIl#uiXubxT;~YqZ$HBIi|5$9cnKzl^E=1rE-odceTta0CQ{Tc2X#jr1MF6>C&h%m z8*%;gF}i*P1&`o8Hdh-=N!ss5;%uWleQ=J?fA?2~PR9<0HPSR<8agab&f$oV;wbyx z5mF@VU;F|LLL7RjZ4*btalka}F?KtoY0{L122;01fAth`8j!|8ja6edS|vNT?=bay z#GymK-Qw8?Kf{|}`U(huCyCCC5rxkKg}&I<^?=7!udF|C;cCUvVarx6-r@RN$0Pt2 zoj2Pvhv)MA>)GY1?VDw$erFzHW@M*C*`QijO^&&~e{LS=HMID&DCa1X0c50>5 zz%Uy!zpo8S%#v1HbAwc;n=*@W9A=16uXIXqq@$X!2bL`jE;1DN|fualH1OyTyDfp^r*wO&AZbgN5xuORXBb-)^IZIDu@>1B17=anl5&B7rM7DKed)`N7%nVyNx&C&D1-R*Pk3W5i zFTeNA*UtALU4G`PKJGyKt+UXwRMfY%a+Q~6_69{yJQ&J>=$OAMz%aW%ADqL5;%pf9 zD4Dlc#F+V5=9lF`4eS7#OXZ~g0;sgb%M6A^NjGpNrxjyhrdAduQ7XDq-oR35l28V1 zH7_b<(+=13N{5K~ceT=8Tbao|AO23|;>_}#a1JhN&OB5}n%$#1-*{pLJd3hcW^}H+ zD=%~6!9Ao&<|+k;T$W{diJcZBCCc?J3q)=g}Zm(z{&C5OutfmE@pY2;)H1$(DyyM{T93379W1_A#QFqxVpT?<@F6N zueV5J#M(O?pCufh9HBir0!L~4MP*X5l0NnW7Rv>i#d4;+=gQUU=}f|ywNTfDX_~ax zwdS8|NV8!H!#49hR6wWk=`l)}``cgm0CL)lRsIAa8m_mclh^JhX z^rEn*X#$PCRD=(Wc6-r2>dET*)Q?(YQL9&yQsLrV9Bs`D)Wp$^3i{*HA~*b&V(zhgX)`sM~&-EHKe)Iaqb;+yY4iEr>!$ ziqj4Il0|`MydNhCF|Qz20gH9S7OLkWQbQZ(=VX(&_4-u%&fe7yLmPwfOp74NLLLx4 z%_V=|Jo-ZQr4vw0(z38<%zSH&<`8rKy8~u2ywMt4(=cWJa;TV>r&7LBU!O|4phX6Y z>0ibiTFppL`JR*&S0iYyChgX%5*+q2M(NyKSlF}I1ZazvpF$_%P+50+j)WI8#u#zE z>j7r81S|>g$zdev)oh_fDGF2LB;Us*CHSW($Be3wTNsiRSc{4Axrc-%%+mDjY39H- zB`GMQRoiPJS%bw)5Lsx~)Gb$zgzl^;}tgT6M9`(2i&(+mb zH`&c5E!q^ViLhwe0wkC=V0eN-*$eNq@X8A>y)z7GZ-1x>(#4zt{+W>x@x@5V{ANlp4Wy!F zE)qsds4W-6shou~oMQ-UP(ef7^Ies&DFD$>YD<&Ay&TV0Pd>>6A$Dm`ra~`L?u{EG zAxu(GN0P5fg&`5GY-SFNsxXctf`W6cS}H)@$B6O@Gtg7ad$~?9z_Q_dR!z-Nr8{2- z8KfuAhi)2HK9v{gP53feW!VCOH=yRa&&N`plbPClv_NU9v4(TDA;32xq);FGIJUxkJK4%Hid zgmD($3;QQZ=>T3@CjnV8)U~UnOmRpWV??w@>I4zGF~Bq`L<@ zXjw4@ZxT!XHBUOq_wuLaca{o6){2VX^4xN+v6e07kr09}(sQ`wWXYG6KdEdjz2`>8 zu7-=WPCDJ*AdC~-!X=?lZtJN z9%DbkM~|kmoO%WUX|fMjx6kpHe)B&CIg3C0qyG)hKK}$mw}&xYh|Voqyz$o85i~?L zc!U_TCp$*|Tk^hxwDSty!;9DY&~-TM57_Mv*zFJ4A9@@PJ%(Yz=zW@F2Vis-V?Tn{ zYrOTXZ)3gMfIz647OrkF?6-w{a{xtH0@sR(T6joh5RcPnD?rl1rR-tXUe_wOw9TMy zwX`t^n71E50+-%L+<*No9G<>FG#0f1+P0d}N4_3%Eeg@mRG~CD+A1n&Z{Q(mI0gAD z7gfWJ0`zDJ&Js*C$!lgK?@{hlV_~g0Qw-N_F@g85pFC_e7X8yJ1Yg0rN+LHZDL_}j zJMQ{oT@B|f{5VR=U*5|l*hmDP9^%?m-SCI%A{p4|epUWR0Qzad$3J(s*uax*N!;*eTQN6c<1Zi#P;z+>>gdA zT{f_lL!3N_xYp9<))`)X`)xK{NgLZ30>U_8>h@Tk-vz~q4NGb~l*mB}fm`SKoJSs} z31ff2c-Wy`tr4dIG#=nZr)5vO?APQu=L+p%95D?Y#=`;K)fM{f7W>OfeEOqz@%r0u z!w)^e#OufWjh$v0X!E+6qd5X{3gFSAU8CVVu>~y%QLE}*a`kI^qM5%3!AdVF31slNgu* zk)@n^Dn4ADA@bT8Aj?F(DN9q!!Yl_Q38DN@ z1k4JXWM@TIZg~E)B#J^fK{k#7gVJ3$;?o#0^dr^{EBaFin0({{a}*I|@g@Q8qmLMZ ze$TDl)be71R0(_8wy=^fHyeDhc+6k}Lf}Ff(U>IQv+!4Nk%cJICv(|J={U_XT?VKU{xlxT#_pAxpFs9)r$-kh@^68zE%i9a$6ugSXKN?v-&}qlkW@{ z#M6`k292gHc);VgdBd0O)Y9IF1O!4T6mK1Sv^M1#&Q)|-J7LH+v$3QcmGhxAL4;H{ zfTY4I3saB2>u@-9aCL>YZLr@T5GZnWT`9z-Eh*H)38K{QPdyVBA}HjUjqYjLe;L53 zQo-|UQzd3X?Wt)2rB^8q|c7M<;ECjxJa_V8&yn>gjUk%_nfz8tObmf!l2q>(y|v<_Mm#P!Z>m`s`v1b)1|DnFwUVm>=C9B(=fogD^R?G zpQbbyNqLa@<|vdSa-qb!vochygGwk6gHmHGs)i$YR_g`MZ=IqaMqFL)adp+fdXL&U zSZ81(Tc;`hLKE-(kBuV1F2-@LFI)iPCAoSqX+)mJJi8al+M$7aV##j&N0l#n~-{ zalo+Oqg`(h#sTZ~231uF&(A%db(}FopmLI%9#KYjg^)exY2RQzw=-5@vH}V*Zn>ty z#l;pMfBXmo5jM_Zv8eOD)zh;ImUl(LD9SX5tZ$fE(b_~v$-dB7L7jQ(2wX*qiz}u7Z(UpZ^l}SAm@1^y!G|3pjoaY zvV(!MA4mB9fH;k)>IQM*G?JO#O=4`4{BZ`{6Q*Inu-{?WZP6~5@cmA}yXs#-&dIsw zUcBdF95MABhW!@Z_6ps8kN(i%=_e0ydg~l@Q*&kbBro&2D4`vh%8^`xvZWR9nB&PS zUj@Iuu4m5=N$-#3?(Dspi@h9S#%pF{9t`UtrDe3xGoc%C7KbQxz+!P@ z8EfeoFWWdLo+|sPqDb z&=^r%L?S6Da7KZ2DN=H!`I6!@<7e(e#=ujNOQjbAGkB&+zHfv{A&Q*Kq>PgdEiSd- z5CuYeq099H@!E|cve(XXPgn(hAu3;riS`2losW_plf)=Kee@ZKw5uoY#TgiT=__$0 zdEKBOCaFgGh%|wDCTAeCyxcK6Ex%IwIj+=Jj4q8q?pF%C+254;lPa#Im7K$RaRk)0 z>w-o<2uNqQ8uMDAx2T2xWa2qTtx(F4cEL>UsFWZAw;PKD6QlHtP4ICJ>{VIOS_h{5 z&3UlKRa}6oW+mFT3)s4WYZfq7%|O{YuI?|#@j228%IRl(90Tn7NFmhqIa(A`#%dJL zkRKq^hI*4`vOtzpTpdK50uY8C!|oD?i>Ej|dyK=gCpbKRg58T3=noyphFnF~P%+2M zoRZz*h>p?_WXv%VY>cp`Le&DB24NU<)aHTn(`bh`Ci4gY}{B(H%PM_iUK#2kzvd z3Z~{yCvS&5K_IS;F^m(oR~MN25wH&M6VDSkEO@`&VR>?jbu2tZ>eUYlz?nChfRu-x zzKfi5%%0Vlf}?H*g_+N@&qDWXMa+#7Z&-S_= zmvkwU)rx{XOGgT68_weTNi0HB4LC}V0r}hkVToX)1zD*;Op;2)`4F;Kg|>}BbWy6{ z1Ku+bZI=rK*}JZ)cwb9877^uA*rFJg5r~vP!+f@r+`{qabp1G!m1G!$x^`H=VDte` zuMSw)CDzE`YWre~<@p&Ny#9cVM;BW(ZG-+WVDb`FY;tswwF;c_+7Tf|Z%zc0!fWEVM@YSyXKu!akMuefm)E!VY%$vwh1s#w?1&U!QctowMFb){I z0}k6Q_7^X3diO5E(4}+|_MY?mAbM_)5ce?Y`5lJC0sVfD;c(!#d;p$5{1oT+@4ycO zqD0AQRH(5>(MARD$$W{f5#mo3)ukN0CVO%1Rps^OILVQrR#C@x!`qaT(!X^_tdMk4GA9#YH; z>oKMni_#9#zE+=bl898y72${{6ud?a;FNWg64zCgD=)_sVNACDgOX!Fk7IRtPLQz} zqcZsFo!9Tk0%{Du{FdC(AOO!t-Q-BU!=os73VM^`S3DlloMk024}{Wyb?W$fS#iuB zeYQ%Zo_G3F2rtQ2gq3G6+lWhaZwBU(FouXR@b4)o*y4*=1FRM;_k+~Yl>ku2PehWB zw zD`~mrtbq%Z!ZkP_*yLWfCWq;3m=#4rH0(`g!<$hGhFZ%LC@=zok2b(@Xvt!IA_6&Y zpk#R`0qDi1gwCm4BIBSexOJn%7%`5Xd$~pq$8$D^^QR~RT{~;wNPvVgTJ3`#)q9)` zQA4zdqcHG2Wh+Jw|Xx-|J=P+amFrYYGMx;~-pnULBCKEt0>p zwK*F)5>PMsc=5Mh$0SKC!d^mrOqBkex`sw3gE+iBc_5IMd_G3VXCi;tlU@|Dw1$Cn z)9_E-z%?zZ#S(70hHF=FizQsUglk*aW&zhOVe1yAsu*lrhupeoHc7L2E?4(PkTqK~ zUFoBo-r1UDId}bP`pHc+Hvilh3sYIxsz$v&!O4R+k&Lz>AdDUQs|#$OJ;ql*`2_F( z(eLB4_uhvehk}>uRcU@3MSRSiq`;u8zh|Y)RSr$l;N4AgnJy1}hGw{d#!9x^d1eMLl);+9G~LN`%7(^>$NLvy15 zdNl&65otbi1eW)Q$>T7L*z^N-PcH!&#Ng2`m%P=3$2bM7PEK(4&NqOn67rV9b_#;z z2c_}A2LveyHc6{2^`I+XO|m^1a5@3eUECbd$&Z+bf*kTFbW20DMM2N5oWu z)pTFpp2hKI#$V=Cr{@>p+njhuw`jfTj^sEFz)6}pA zs9UaqGWmecIxL+7`UxOl94Cxjk5|6%W&Gp^KL8@(WV6J++hYuzqGPRviJGF8Z~qg!`x;nsr(T*D!FkoOW@)4>lt+VuvYAX|x_KSl;t z8mb^k&^J@zjyu)DbAitI-KUE2+61%3^0X9L=VsXJgg958hqrk*Rv1B9z* z&#+iZ+uWupXfq1}o_@+}o0s^SI82Ao(Fd}D44L_HX{P5N>arU%yTFY%h%u8$`FSDX zXYwNN`I}z}AC)>aSfBT*ql2A{kuq-}gXAqw_d&)|g;N%q=R^u(BS45Lw0b6sE$5dj zzDk~Xa3RJrik1t;5iB^BkzmBws*@!;o6WM0@0YO*Z|1o?OwnA(^UO{?{oxS>q9PAJ z&n0htlXOPbO>K(S1yO3X88u`;fqk;NV#Q%3U7!!m=?!63+FP}RDi0Xy(#=kHU%Zcx1g7_27C=`^QPf`t^~5C@Ji=rj>LuI zxTiVbjsTUH`3weP{T85Z0OvV(UE8i1v2<9dC5$&U9Fk{QqZw2#rXoAIfx#A!sB>do zg=VqjFi*bP3Qv>`tCM%E1S@lyCJvLU0wFj97b*32HzNG3F{#gS9xKh3 z1Yo9SVL*-qd;rlK5T;o%Io-i&SqU?b)_m29S&>caB>!BCt2K)Sx);YTU z0pl>j7;brI$Yc+tF)4Syt}OtIK+=-sNW;s4RidWb%qS8w1=9LBliSVdl}2SUGK*2t zJwo7cbws4la}ASB9`$mMigM#D@5Nm=!8auI$lhA^kh90!E1xo4vHdUxu3KSp>Q2`U zc=GvUymfk>pS)aL71%SuE$@&1R2rQ94G|pW-Yvh5H`C~B=}o3Tn8HAZ`Sj>}y5Ykt zxb$9>_-X=25{8yNV_Fz1d(;_hlbbXbreM&H(Yvoi$mar^bx zaP{mn91d6TCgNmtIDh>u+5GVMi)1)Rt)#f`c?^O1t`vm} z-edA!a?kTVnY|1!^Gv5n1YnJL$T`n@dvOVh5fAR2;LX?0QzTm{N6IBiMn>q~Ea|FH z!U3pvuH2JpAL>z=?Vva^J$KqRkz1;oC?W0&LM_Ww4K1~nlBbk;8_O+6*_+A{2my|` zm-;kvnuGTq#u~H+s6_|kF&DBvjk1^-()BN;o0+W(3G*SL@$5L_bC!z+ZX`VArCgSL+E=hXA^;CRbia=Qpbbk;e$6HpsE`QZ5QL!IKU4Bf}c>eZPqcP z=BH~kNa^_=G4>t${Q=!>huy^`_E%de{5IrV^#sxjU_VXi_aq>H?0fi;E4)+W6r26_ zfEQ1mqgga)Px20kMB+pfP$bcz<@P8j_vV+;<-X3dl`du=vG^`YhP1b`I4EgEWv4kh zv%D4&B>IFuP#P+sG|L^`j5&od0;$rt-ZU9ih;?xd2iGTM)q*k(utn6T%4of}jE%tU zYsusS-K-Drvw6i*kz|ib9kLKHO#xM91u*kD!4n(|2TU43opWiNG3QY0IRr`5D8{Fl zNU-YJJHYEvRxI z+0ZcffWzeR=7V#%I(yJ(FHsUekr`Huuo5zBMev$Zv(naMBK(c!OwQ!$oJ*wV5zCqu z+zRrnobS${#29cfIPrX2NdATa90`z@9qP1&8c8%nG>AqFErvs}rWnL(%eh!iyzR!a zH{OQ;YaO7Q-*SaV8#(kfN91A{OGY+E`9HAR3?K%`*fBsyW2EazGnoMaw*_*~z zjQM3RWnp#22BJk(VK5!K!+|Sl4jkg%v@N!mSJ-ZM9M&#pa)G~`s^P4I0U>y1woGLP z$=M_Ki^43_BCB#kjg4x}L?j%B3G3FSR()1zqXMCu2reo2B%$arJ(&ekjyyy`H=s1t z)>>2me8}}ChACq36F-l$shv-h{W?wogV!1p0o~xSu8MFeVjlAF;iq`(Yj5jf<_Rw) zcUoUrJO%Gbid;Jw$4h+Ehg5!6%4{H2H$BeXzv&`0f0KE$jJIIf$VO4jyyNOcPr#fw zcRBIt$Ss1R05s*{nQ^j$Ss5TWgIICOkrrYp|2GDxnhN!1jcU0>wOPZhH?WHZY}>*% zHB8;WR1VPG>_TDVT)uP*q~w!4!bLilSe?nTVMJHHj6U=7RFT= zhXd;6GU*vPLPJx&imK_PbxZ=ZI2#vV6Zs9wEf!^rc|B4b4=ZILjNT)Jh;j0G@$3?Q z3Ro>_)NKRr#e=?DvUhwKKtL*_6{PNmmttB3zzaATNB)^6zP`3xHL?f<=5@)F1LRh^ z#-MTz)>%vvM*QsA6~6g1U%;2X`X<6OVSBa3^XHf74!vfXBwl8~I?|j&6h@YUx9D$5 zRr_gX^-1(n(4dMu?*lF`4{()5Rk`HtGDdA}96e*KD!N=K&I)ffHm4pLo9|1+z<-)N z=k^<=(OI;&PSJHEhK^GuKL7B?@Z$tni?))A_5FkjMp}%?#K!AUUA&HRC+{)z1KPHR zb6ig*#E63rSO`nIeeVu?!(&KbdKv~yy+qKtO2Bz2(lm;ka{=emFl6uf)fT&}9foe; z@l2!iXVo5-72i-#2_kyD%c2_&B;u7_Goulfwy4ftsPATtL zFDe0DTHiu6zwDK-bA$XWHU-HCdVQt^jc}abJB$D9B`sT-^1+$D37Re@#U+!GEX(6E zVoyjjW!`bLtn6vQR%*c4sG1Be=ON!wPBPJ^fvYS@Vq7LPSB5VzQzT4YqKZRAWwaCNg#!gWa|7v6j;`Hh)B z@OMElrAxqE7cwQBCakD)QiAehARmeI&?{@;^}!T`n@q2o2BAb;@@-Sx7lP$ZAT6{*ZN(9S=8&*7@Nyz2ZVWANjU#%V320;yErRY4e~P(vzmR@!+f zjW=;2DxV|2w17nExg-IzL=28K7u^|?`>0D{IT9m;6QIuEltZ}#3D_qEsKgdNP!h;i zh;ocTV+pW86fdnR#@31lf|yB%6epAkpK0Huh=+EumWqoC$|avq>4qd!8Zs`J8IkK` z&n2r$-S8Yi^NCBih}^5PQXIN|JUgTtZ6*bjMBr63@Jbq1An z={hM*B@ZY)TP#K=q?-1S(%tB#`$5d<5UEgMxt}Sg&uHBW>ljQ$l46RokBI>591Cz> zYVN&kxX9dg3_|+tpJl4iy;jgqo{0Hg%!s92 zSELAl87&rXRFO>6EOc@$)bHA0j$Xys3^ET(U&(*U4|K07fzE(=!GCif-hzjVH&Fi$ zAs?f2X@y5PL#Ulas2$phl@MFksPElDwOXM)J41bT3b$Uvwu=P7%LhvNZk#hRQ?jkK zfU98~pceBOBTNj4ft3aeWF+(w14^2mYizt+Q<4wtr)BiWfgUqyFx_0x=>1dc) z;hD)Mlf^(uj^$qx{pio|!{7ZLKK%ZlVC)B02rchJ zt{I@i%lk52H$(;_F(NiK%rv1j7D1~u6L(nI4+q#0n1&HU-@~*u?tk$Op~ZOtw(LPy z1GWH=!1PD@lSH$V!pOtSK5KNA7{$Uv}d8$7$%qZ=k{+6wKm1yRI1-*_8;ldr2D{~VrKk9K#J%DNg^02kwQ=zF{HfB3E%$aCl4Yy)qor3iNmG#D2I0rZ=~Z?(V>Hs_}(tFMP~gdYa@e&DV<)^cr!P#C!MSn-}u!+^2x z(H}Z=y94&yJ^KAY4D)6lIU+_XHCA~A_?%)b@fh z4tGRn8l_~w9jBt`bE;CrNHC7FJW{<$o{9}`1Tq$;DBhaMC5p~XNj4-yJd|h4??P@S z(kI;yCS6nYRvA^UtptwdFhzcbMhM1$SrH-)K{v$8K{}4W1&T?oo1&g5?MmGa`W(6^ zyi}oA_fC?HYH*PAVrlHiMUk>d(62G=}XgXkhpEpgx`i>q#0Ri`|o-2e3#$y5I zQ<%Ea%@Hx`_XHH4{S0g{8!J+nL|UujdCHJ5qu18SFBm{10vX`Wt&_P>E1xwfzuIDr zU>x`IcFxIW&Kw|x@Cvb-q-E3W(uB-N%H3m(SZW-5txJJZDh5O>2#h=fgK^1WA_3zD z5Nrg5kUXy08wzRtVp6_GWDef!9?iAnp$mlk(BA9S2^Fa zYhHUP?d0rKIvQ^h*ea+CKB!8srVc4T_FfBOv4z~rXI_C)!ON}TR*uW2!D_X{?c1lg zbLR}}Tc@Ct6`K2RpsFg4_^=#iW~K@7Q=ZCVzH`NO3#|%mt%I!^xQc6mSl0lvqJoq{ zRC%(ZGOinE>>W^ZTYRLY^Oyv*eezf@nM*(GN} zY-VIga?d!t_Ri1Z)wjQe=Rf%|{-1yN5Ag6u??KsF>G7BiGJVf-cp5#(I6U~$8@T=I zt6U&eqNNOgM^~StUA}^=r!Ua;BUbm$VU2|vScr~)7|^K4JO<87PhC7>%_x}S#@39{`7$Qu4$NkL53Ddv; zWb8-ockVs9j;qR#qlCAMTuN-*=&YGk&m&E$HGmc{G~o7d{RHPMrrP1-k3I)Q!q>j_ zH4Oa$4?p<~``rP{)dE%RFpg7J{ECH5prc&u{LL{%&5qG|D$URoBgh(zKH|xX4rB;z z<*=w77Hx&5uFy6Wn#OT^Gzr0WkpVi(%FxVG$pj%a~nNd)kqcICoj4iuRRLm z4Jm+7eJ}CRBBZw9-Q{!?+&3SqzlpfA|9Xwp$tl)nw{UXzRV+?!!#anlKVa;(n1&9~ zkMQFFKTUY@!AJPP@BI8svTMK`sD&8hf;hg&5h?z$Ibu5|SRK5z{ze><0{8 zkN&{me78Mdnmn9yya$6%g^%OJVe5WU@A<_0VHgCUbNUBII+z5|73y&naS1_&>Pr!D zBq?sJKe#H(s8akYU7IvlnMN}n$*BV6b}Pe&OLbh7L(bC|$JH@kCRva2jubhHwJ;&e z7yPV>aSXCN%XCUfchYNReNi<2qN+Mbi=vri)S2r8dOjsqpKy{svB`7F`zD(xhzi|- zvU5_!T@>5^!2mvR7bx9Rkr$FDGDYSf1LuSpjmUSd4Kzu#OlDIB50~Fg7K`i8*p&O8 zbK6at4+Z9>5dwl=bbizm9!c+8&s-`@Rwzqp!H$$v-Sm*BOShKGS!Zx^c7nO5yBL_B7YV_0eqQA&21rG9KDA^f zaBfTr#Y7MmP=Z!n2c3I^wBhTz!fH`t9ND`(^NOYC$t)#>z(uv>Mc4?*OV{FPKr~=a zrpYbHoHNN=pJ_$}39%8t1y&OcxG)`WMnXW2q=+fhT$oOJ-aPJl)nIdeTaAjzjqr zq*qS7=}v(|VazB#Pu55(=SyhkTCD1fG>fTCD-Qr@+J=iXP9u!9SZy{K`woZw9?hZw zMZ)Ft3tVmYfVF6(>bn|RU?A(v?1!!4G4(FbKYU-^SCI-Mk&e@-g&J@KOo3^OEB2bA z9tD9S1Nh2_U=R;FBpLzW+&(LlrG-dJP@`Mh2&D_ z*Iwl+*I{xzbj@K9Tr`$Tjt!$h*zTQnELNdwo9J!0-Hn{}CVk>HjD5&nZonvuUqd*@uOmg7f=#@%r0eL)|W5s~UcYu*7u;tTDLQ z@9@YrSTzoppIyP8ZRBLuinClVJm?C{V<^CSNOee5{VdaAjzK!97Ob>J9Hzb9b~wA$ zU^{X>5AwjKZtz$Ct$!QKdvDJpX$;61{?K&I~*oDai@VVE!sBgSFGFmlw6 z_W{~6)=GjWp~yW1C7Nf&QGSPjVF>8Ekt=xnfWt6hSy#Ay81cb-AK}x_A0q^yX=?0- zJwTD=k+o>+dS*zukxWeixsze|B`-o&DD{FO(DtLpVGO7&u&f>0roy7OXytudJ2Z8L zx^}4R3YBwkl@-IkO%YRi-54W+Cye6+?*nS<5G4h{`@nhmMd}Ubz%xVVjt~OaQSi8O zA}DFB>9>BBbP*{1uuQ7k7R&Vpi}f1qY7OTcfB<7_EKbhRZqB5WN{?wcAWj2TC+AqK zSNPN4`F%Y3T zNA!UsVI~h(smGne+fx+DG_f&Y7}K5z(oY=%tgSVG)K!QO9a98QqSsOvRvi=B=!&#r za}Iceq)vLuak9s?lk+yGk3`uvJLQczAQy943M|648u>2@;));94#y7|n;MudSVe>FZx>|O2=6Pft zJsTHPzaeqT>7Gk?R%E=c1$)u+bv05`#dLc9JRG$pr1jPASJr66Cd;}E$f>|(00n&> zc{btwnl_l$O1$_QC2f!~ggTK*Sw4f8i7uI!tFuCL@HPD>kwwxEOZ`nBT=zxEb_uOS z7p8h;0IDoh@5bduGK@6j~9z;e-GxoA*VPIwESV|-xCKLF!A<+_hBeK{CJ8z_<;OZ5Ku2y_?7?gH}S?F{@-}^!Fve9fG`bGP|Cv(BO7)Nr%bi$6<+(=SFpKr z2d-+^cI3)eQ+DA%^JSjVfD&e=$<{r!$0~% zZ0_9##u0vhK)>tI^#l5TL_bW@SKXtZ0xP~r5i_Y)N2(uS%H1s6QTE2V8X{F7_j=;i$8=vS>v{whaUIMO&e5Ycw@GEGqDRPtiM` z`SdVMAR<&XgK$4h2*CrWlJN$T=En2KQ4~@13)S&-a#i%I9+;oq%;%`o8x7#93QfC! zV>d3weh-QP?y!Zc8`SLz^|!*&bf*r0ND zzJZ~LX}e1xqs$%F6(Gtfm2K^C=X{N+AF$tdSS=O_q?ZMlb#H1uxgYokCrD`{+D?tb z)F=39WMJKO=(`@>{(#-p9{XK~Y2*UOvF3Ems;$x3G?{G=nzA5K%YL3h@@Uxu0xeP z$dQWY$@{^u5)UH6J3sRseDgcMfZzMxKgEY1yq5tgvSS8<(@d4;HHx=f_ZRD`JQtiB zUqM<8yDj3oV{V4B9ilZ0_G!lV7l1Wz5kbR!Oa3n-4_){9A zm&UpT&`m)bl!;9Z6G_d7(4x)7rZw##2gC6qs65EE(eksC0cvZ}2-8ljDFIYAfop*^ z7Mc0!z~yd65MNfHXTOSfb7hv~BdwP0;L->aFjoPcE|o#MTHDK4)Ac9ywHdm^?-)k~K*oo#Qa_83U8&QDa9i;A)3J0_h4IGU1mD zmB$l_^F!otsRAD*H%B~lL0cx>AQ)x7tubhqt3(4K_+-Ed!Hd!#;6p&FkZF*Zg3=WX z5_2TV1=^b0@mfU%J4n^Xon=pXQ#-5{6;1@KcfChHdQqYx`Z1s~4D{cTq5{@tBXtY{fKtCMC~m4u1D}* z!ulyR-+NNSpne-}7eaEHi zg{vx5Rn3tnRmCB%RR!lNsn5ah8K^55cd787DZJ|Jf#=WC_r?hvGO3tc1{KAmAB&@6 zey+c+f1V6W#i=)+eZ!||C|X~l+}qa#XYt3&uT_4)k2sIs$Y0a7zY}?+d+T2W>neQt z7yos<{mXwHh=i%%!H)x`ZjaC(Fdla3t}Za{F0ee=z}2-FUZ9N^Dn;x)C+7sd=GZq z!wdsl@G#>Dj3Z({!VlbDEqamFlJ{Gx38^q#R%WCEJ$v)Vi2?q8^myJ+m;l^9UE#|Q zZo^oIXP0|iZ1LsitL%~5!LZT zF|n27`%fc?ILgco1IGG*s&3%w232(h*EFb_CI2i|a8-kPxk0^HV|j8Lw_p1LK7H>8 zc>nu<4Duds(V)I}3y=B%VH}}`hHGssMP~?+;Dg5}KY5H{3RtgNXj|jDu5dW?*pD7# z-($I6u?KyW5O)c6*S!?I=Rx5S;Q#<207*naR20FosN2AK<3rcuu-jv|-D9`!FiN{t z3oi8KC8RxgDU7K5a2zp8ak;)5FbpHN7B)x@o`elVpSA#u<2nVUL0bJ|+JacYrZU(B zeAB;7*d=ExGlEJT*XUl5@45I`rh1jVrMS>*r1Oq=z0y~t0;9+Ys>Xlqn?H}g{BQmS zKL7M1{I7rizfaGR`4RBNuYCi*_8b2(zW)cmgMaqF|095aS6+V|f9LQ1*Z9NV{b%?m z|M2fa`=G0AljNOL_1#!-I;oJjc2Syzd8+|}6l3xG*WUU9e(6{K8s7WipW(v~-e)~q z_E97$Sw+Q8O4tPOA;LLX$Ku}q+28%Iu-=^F$M60b{_+3(KP5iRCyLH3MVY_z-Cx9i z@|(X25b*c@yZ;tHdiUL=^Qd;DtyPneQTaMa=2l^dNSGo4U;f6LtWhT%13=ZvD7tGY z)3d%+d?>}{k_Z>8M~N>1Znehg53(+WSt`dDq|?RN!bdv8PNx`1Iu|*vBS8w#<-v?D zj21PataN8hB@;P}`b!J-g3=*JN`D?y0tFDuL#2yd^v{k2O9WK&u#MzhKT=HizABPgg#Mkd#OOh||RR_gd^oR-~$H*vbJg2-Aod z1GJa3K0pdbRquHLw225!Tj6xmVi+6-DRS2O3eyx)yO+sFj3E>~!?PtWJz?=ntK9>Nhcsx z054M@n0bK}JV7{__9*W_S^K8ae(;G9(z6@!%sOHKTe&D;z2>mPDT+5SU>H0OLqP1g zl6WOWa-21Ab%n*I&0~<=tkyzP%%_q>`6{D0)Y=9RhqzB3LwA7p9?R7VewuJ`^#a4_ zvD~atS<5X>#LHw1WDRYSVC;wp!n29Jm$r~lh03P+;R@i(bI)5}KF7J=OiV@mg~9G5bj*e8m6C zeO2uHnfF}0Fe$9vbELyC`V_J|jvhn?tJMOVRf|nqW4WjWl-H=L3RT14ylHB*O^tTZ zV!2$PX&OF8jwGIZf)X+%1iU-3es)yy(#9UF#O4!CEF*i@3+~6 zUf%*Y9RLFM?>ZbFKgRCSr?`0Z2#4(+`$LDZ9}$KT zhknFv^cX{gk5Y$2lwAc}1cMN{XkI5C^L`5GgH#fB4!6%vuvyfoDu>H$2OlH4VMIT9 zJl-8(;)Ju4C2Yk;fZzj0Yv61RXB|$@HhBK*3J9UF?#VQmpGtLeL~_h~2)sUq(9{;o z*5YJYBgKaNS5;p01LK_gd6r%u1@q&d}GIxG%n(KMTFP#-4psp&wv7QsdgfUDo zBX;hygZrwh^>STrO6^Z9Rr!dYl_j9*W1UC}k$1&xf^ZC+BO+bDxX&-*%cDP!>Ivc21{#nb$cvuVL zT$*`P=(d{fskM$!@Fl%eGFB&DN<+%cOw>|w`#ANpZ$ej#vlLw|0Vk<%kjEtar@3aELZESSBZ>>MPwo4 z0O4pU;FlyyNOH5ur((`rh%V=eUQDA4BeTt6pq!Ibw~I7Vr29}( zx*+3l&LM!SkVdgcLZ{!^1kPD$7!mw5>kq2l1SFzKNM}Y6RnuZ~a)P!UF%1*OiCes= zVm*u=Q_$Qv&b1!3Jxy^P^(Y!>sC%(oY3@a_Bn9z&ZX{_%7rAgmKT4l+@MbfDHBy_V z7(vm(lvT0Qj1mYIi`7Xk45Yc|k&8)awdo*&n!%$*09PtCi7qsssmv__>dL@}2wU`` z)#47Ocs2|6E|X(RXH`YCHDMJw+-{lzx-sC;PuTYp_Co+gE_hY94Q@5QAbEXIO2TEP zC7D8hGI?4`rWuI~x(!1I0%5US!25vxc85s7=5)h=bKp?3X&Cw5rCYYNYRff^6t1D8 zJ#hSrGmG>50V06WM;r!^wkmp0%YPIJjV%~oVjeN)YZ{Z*$%!dbd$%I8&=GqDGe5`1 zmSGC;q($k(%3JUOB5;VEhFAeJ1EK-pgAYE&U--^<#TZhU`t&hx`hDXpDQ_t}nMrUU ztwYKy(yjo=pYhMNjgj9{Ik56=R&)}3LMEWZ5=BAK(7IF*PFfs|BmYcOKn#Rs%b;rA z)>tiSEZPQ5Tcc@e)J=`HY0xfO`B|WCTQqIUz`SWPFcgMZ~ zU^{8E#icT>P?jyJIyN64OojgW=ZIr33N)t&br+8jr%~EDGA)}T?ShE#;@LAi`}`Rm zKfi=qIxO!jLF)>^0NeeD?bUN^Hm8y|sePO$gdkzKe#A5loGUvH@SZ_{fz+*=*J+!fqHQR85WH z5K@SJNj)#2JSICT{LM$;US?5%}^%3`%3*5hR3N5Y{ zLcj;l_vm_$bp-lDmwTB{?8Vkd6F*JTPAza~{5Wyd`Jv~$a|v(n`++^@kd8yfa5Pnj znED>UujcL4q+0thj2NU?Vi0G5LT^w(Lh313JSbfYGHar=uX7GChrX7k)@$H9z0B-g zN$WY+T6vwB9hpc(uNr}9k=u7cRdSZ4M37u&(MW`}RBu%M#vtp+1mLgz&3_N?|BLVA z>gpoVV4_20dL#pU_UTXX-~5;VIYzGz3P{UR0d!DmEruo#+E-t$s`2fA<(Kij-~O$%a6~cHZGGjH2l&>vznu&T znq#iDPO?5lIkdf?0S4(z8O-bQdge50UXY}J5pwjk0b*pMsg2xmKnu^!EI>(bHIULd zS=TD&Gu>=h)oR+t*%W#d#nPQDD+2O$%NWYf zt8>EulF+U;xck})ej3qjw>a!}$$RP>&P(sd9P-{&27@tE~ zj6;h)!mcMLgekxacOlc{{+It+BBVu#n2n0g)=C$c7{8jzn0jS~Tq<7Yriy zu7p%*imOU{9}=@ss>q>GeBn4-Z2rPpX@3%Pev2^@nq63vw7no?vs$5ZYYpemS`KmF ztZE4b4mk84hhah>>Di6KTB#!~_KZN%neu#W)GAp()3737Vc>&DzuzNB&OQ-g?0Zb( zh;Dz7{bK-Q5lyZh%-cimEa@w$sEAHe=Ka}7U^0`NffHik5h9l<@FZ5rbO=vCJ$ft` zl%i9FI|5Kc9y1CjT?2x&)=P?&@>Ds_8jHH(=h1?2%o9XGmwYiIV2m`gnmS`rFJfa1 z9zA@NgkI(gd7saIzZ9GwzcgK-1fBUgp~d=)Ng;o>omU9ztVB}&;Q9&I|Dv0}yLpH=9dpybier!GqZqqBE7MKPGF1r3EKh;p5r!VX zgsI%Q^zdNB z@CJDI@dbYPqxbOYSH6K~SAU2H=dZ%Rz%5sJ^5KsW0|_11lBQ9^xsPG&A4~cMN55GD zPS4gjJ>TH1FTa@#%YGbj*zIxo;sRHfTU=c3@Z|XwF18(4?k;o}o_;Zur3&>N=G{*o z`*FgHenL|@Jm2+LFKaB9EzV9hVxX_(cn>pi@9ZfOYR9eJN^tYC*RgR}>B0aY!$x&7 zY>0h&)x%IkTUY$kxYVJ6bI>cCu3Ef$?+n8faOg)|?s`1A*yHKt0T+i67l#SU#$nY2 zw7tiEKcK$qP}dHtWrNkSMcr`Tx-k~M_6WgoOC;e9F>oYBkoQqK0jZK)dJvWRsoWDF z5EZG98c|7ny$}M+ek)EDZFxk*wGbwc$qWM2T}sA3w)_ z47l137<|OT%O0OxNQ+xzP|G6uNEia44-udH=V;dp{LB|$L0wn)=+OoKf}RN`oyvmO=wVSx`&bf3)vfKmd28Ds|mP#@f7E`@8aM1cm5;%FaN{eo9R^P zIU&v_GN_gyJKA!c4tGu zz0T0n$B(euoZ!2^^egz@Z~s=x7boPk{wu%wtFXr6-5>q{Z-4zAG2Ezg$A~k=;VWNz z8+Y#B!EU?7kKcQj4I+_Xq*l>lxyGG)_i=go0)8Cu<+s0qah&k}5B?M+wB{`E`kPh?m7$hE9snXGMJ#~_!-WQ* zL`IO-E^@_$ata0vq|Ka+1}Ff$jGe#Bp}KHD)3zd%bvKv0QHW1Gevvre8iB*st+rZ| zzQBkfRV1HLl_6r(%6{7S=k77U|f{P3SiGZiO5&I$FFnWC9?g>s-HN275 zOtCP`D1jndD3|L^ng`y945hT^tQN5HlEbFCXcin2owy&a^I$`q8{)Yq1QbMRe!8;% zL}N;qGUhTbDizZM1FKd-;YZ(M-v>-`4QmX%g3<)0{(sKiJl?vbtnd9+t!WQude1xe zJP$OZP16Vnh{zxp5tV?m7q~%9yvdEZ8T=&IxtmXI1LE1i1g8vO&EG~wi_b5eqmB%P7oE&t;C-^n-+=Le0qGtxtJxQiI?i5v%> z*z?kek}UMImp@)I%-&aVCpaPxjKb8{K(-!vy7daDQkwD7m_eQ~_ED|nr4cL3%Pg-f zGhSL^I2w}=1|Hb019=MoZ=pUs)RA{eTbCuII!4=jb~@$``+VN<^~L8ECK6jY@8fvg z`_U!)%k^#PjwiZH&e`W|x8G-bkKX6y_Fi4}zS{rJdxm%E_wLfq+~Ti2L+EzB(1+~N zF2z)Ol-qO&O@*yXn(3~5?!>d7_-runeA_yjy26D{8w%3#faiVZt64gDgr_wX7fzqx zU;XTxv8v_j%P(Uv7>J&0ET%OyrlvJDt!r_KCCN0I%1AOBWlw4>ZKFsM<7ckLSW9a} zfoqMFcvY>90IFqeIKMUL(CUaZGu-p>_fhWbaA@TSqrniBC=Oh84UgROSuUR2#Hoa$ z$i)#AN;N{)6*}j%X{E%cZCaYP^;ixKl?Re5>xQ~+$do0M=D-W}kH%RVE2U^nYp9IW zq|aN!cGZw+DPhaggyr#&C*OK4>jzh({A=n4npT_)Ny4mZNObD;t)9T$!@lBqz^!1JxS<_(JTI8SaBvH+0=tPqhImSU@9IbKW#%IP&XH$u_O_xm&bY-~bQy=3wFMJ8t+;}UGJn$ts&WHJRlJHG0d@&a zbvNJ2%Gx@oPdvu2{OlJ2SYA88Ykv4gx$K%7BhAgG6W;aPZ{wc7xm&PPwBwEc@F%Fs zId^~j!@T4buO`bff+O(H|M=Z};v*l5^OYnCuYC1uc+NL{i%&t9>z+M(n%{csTR3<2 z40)y(bh1dUVV(mGc$z6v%^+1iGtANY)P2#><>Yj*v?ldnrloBvOw;%p(4NBNl|>y| z-g$RXFyaH#!!1Un9K?EY=eh`HXl^h1Y^N11rfYUvFQhMrNN$MsYmZE59Wmuy7=?ER zgwN@}dP;FHpgc!+3h|aJUo-AeJ)s+C^r1N?b-mtO>0)}8cvoXjDl5V~)CUKYLFbJN ztm)E!{35zA9zP$}I$R6YykzS_MKK;T7>&sWLzV|4#%t>|RY^IUGM`MD@9t90X3Wcy zycR)Nx01%%hSYNxl-Pyj&^Y&jYKX*T-leYZPT`dG!2*S=DmG(G?D^ z4j6>~$svu>Pqipq;^Y~Qmt>lHh`!bdSX>8W)yBv@D4zoDd1&yQBT@fOF8io=s^T#r z#ce+!5L(Xljdth%UQA0O(y_F>Q5dIaeFeVSk3FEO&Ni2QZm zOYYGb_CKmSIF=_xWv6FUc*CM?45l$;S<1L5DAJVixZuFr3Tp>eSy^3Uyex)!Rt$Wr zv!uh?P(DSs58@Uak1-nF%|jf0q$72S0Uo~Z8|UHq!*g`TdB>kRn%T$T-ZO!2@z(;c z_*-9lj_J#-cy-rZxxc>_?&iMcNWTsZ?ET#B`{$+iy5vfoe2%iO*HI;8a(ScOs*HMe z5o@GZwMsHnn)*x?i?eOS78s026oY~^5xQ7jTV*g_LZc{(F_&F^BR}@WALi44^ATpV zhdFd`nIbR9(oCX|N}=I12YmKFC3}w||RmHq%C>zOQn#>v|^M-lV zGOt_8+Au9!vNYj_YYubgQ?6w)-C^T=360^pD;mhA66u0r9DMn)^USBy zh))ySp|velSw;+`wyt|E)#gkmGiI|nm3I(0&zr64dO$lIvso$Eu~ym%mKEi!qN*EA z&+-V-&#(bPCZLkELjf@h^Vq8|k7>f*38JH}-YZRX#A~ZyDEm6K@NZXg?9cP>0f(Z~ zIF;}8AkTLRWMYVztF9bRqW_Y87Pe5>6Tx-}>m)jy3bBz$Uw`@gZ|Cp-v!CXrul`;h z`tlc;O(#({JAbb8`gJsWdiv3DxWpU&(Z3`~QvT?--^y1WzMs{#bzb?JAK=?x`$KGR zUgX|;K8*vO`=XcezkT=j@yJ8>^S(d*eYUr^xc;Um@g1-GL4NF?{%d~jr~Yp?E^c;D z?fQDC}W(4IEfM!0*57T@*#`d8n+Ob8zgk%lMc7 z&%dFnD&F!-zsOe}d5EJ&kMTV}@I$=rhu;LY<-X5+av|&WY0r8tk3RHese9kq!2x-m z^ZFnE7pxpu=l6d5H@WZL&vWq5VZQH&-@qGw9^m> zw|)C}@%{h%-{%+q!@rH~;Y`nI5n65wZ}R#+LSsvLO6t24IoqTEp6--ZWhv=8S;3$f zfcMOqy4VMEng9SG07*naR1~C0BdNu~YqF4TNY6-*sd63hDF=7~)$OOCLM#qwL2>fb zHbPMD==!qysAlZF=pQz|5*-O8@RyLX5WF4Ec4>b2T4$-fDd_+SdXyc6B@nlMjYu z!y$Q|OMQAiV6<|8rYf0FcA0E%Gu_=~KAoYu!8{ zyY*|~w8FNAL@Pnl4c_nG%UH)!kx14B;$X0T?oA}aMGZF8MeE)s34|BtCOQg&LZjkl z4D=k*mBYI4eFa9jK>9e(G~}4jhq$h5jB^4^lceHAYa3>h2_Ois&NT!f>8$Y{OHWVM z`AjqUK1mf;OU+sT@q>^Hj*7mp2y|})Z33-@sxcHvFAX3>81QJtt)vVpPd8z16_EP* z=>x)P)$2zYjaKm};?wF{YcN*P#O9=;U??T^aAG%hNpM0p&R<*RVtZ#wIo%~&E8;o? zo^Z)Rss11P91|aXv3`!gD7B4p7kNp) z=ecPOX__(^7Oaeh967Si>VZ|3S5_D=uP|I%CNGAP=Id+9V-2|4#{gI1dAlcwd_DZ% zqmMu<@teNk-k*Dds?{0feJjJU|9dn({oj|qdXCxN#o`()ko}&U_0Qk;`YzhweU#z- zj&;4?Uu!Iv+}thPebH&N4^P|sikVqaR$HQDC!(rL`gvn5P1BHibbbKaw$b~gl#qn1r?!p#H4#jvxGoJvKBrVWs#hYu`~=!Cj# z_{!F4Xj(GoD28K_q7Z)BG}MzRrfRwT@~gP&>Z>{R_zAYQChY8#%;q&sWg<#mI#k^{$8cFpZ=Ly{&yo7WXc}b8N&P6^Q_mVf_n$~b`Yfjx7X|1Le zkV!rKFlSJtv7?FBn${ZHQZn3FrmdJ z*3)qh_XdSae1zR;uNGQ~SUX4Cwq#jK?j4tDDwzx8)m2oQlH~Q>`JENM-L8*n7YQ`8W+9R)vF1u(8K&UIm(escCUkTYG zf$tb&C4&y{=;-ma&h5I$NC=J$ThDRTIfLovP4UCqSnC$LE{_?Enz5r_s zcYW{!yy8{g;b})6+d9YJ``+&-&kKIx=YEzif8jn*aN*o}{?otzY5w!C{2H(Pd*9C& zKKnN~XQHF+s}JAL+y2YXEd&6c{eo}h(9vW3`5*o+pZM?xnN^l^XV3ArxBeDg`StW_q z-fp#|yBixMnE(K#c|lePGG&?<;%RK9or5vbej$1)l>&4G08nUeG%qqm*Dge@}u#wpFTCC4T5tVcB4eoIfm2+>Za({DlDNn>6fk9xQz_v9P9({;nyh1*b ze&`FYo>CM0MmQ&R=>FLjd&>JUnGUI5B6wZOL-a*BCq}KeoC7dIRhC>le;#9%2W`qp zvz%gBkPimrgP|C5X-YO6GgKPV45t$5Yg|nu3c4U~>c|HJTwjb5yWV*GL|H`9$b4$q z(1=i}jiYKU)7-FCwrrOT_nz2fr>wdBfV2S!A4w|-U zqay)7pFtUtmJ^|7)YsSBMWI||I`&gcv_#US4`Of>ct#n7hH|ksuZyUw1?EejeNQ_< zcp9(xMD%n23{ikZ+UwEvf*ew)E+I_XHh84lG%ZNdG@}2{r!&tKGi=kKlp;@4sj;yZ z(gc)_^`c?zunrw+`sj@(>(Hq#xmt<>AYy;@I993h4euWeSCjp}4#dzir=-D_?ECU;_jpfYAGc2tg zjAL1N^%Yy!`)uEryY$O2Fr_4-9F&<5MUTMdEGaN6G4TjQQD9yZKzNd~{?=ulS!Lu-dy&Ouf zQ(fuLZqIr9y)OO2Eqvy$+q=j9m)PgK z-UD=s<0S*{8CGu3{PaHmI=AmXhof`cbWR*!{^a|Ro2C&(BpX0Ip`OpBK0D7vPWOB! z&WTfS_24=;-f|DuUnu_h69nN3a zWOsYU#)VzlM(|;jH_X<@W0uy|(OHhGD>l!Z=7|Ts%yc@VZ7nP7>ttzxt#_pExNc}0 z8~3$xf?|wY1Rr&A9aNNCl7eq3TS;M`RSmmU%RH9mD2iO8(}YkdC?s=@~z+W zG_=-YAhj({NjcEGteDR#=4Hj!&WxGQ7${xC`Z(|L*x>M3+-HlwJ34e~Po&Yy!Ifdg zI3KdUGGKLS!16d}Fv!W$lvu47BC^hT%os`gpI4IhpQH&{o{?ozXFgaNabRtUD=t66 zd|ok`&N+W^ms1zEIkz=sHYv%yfnQ_|!&$=a&YbMx4r!J$7!{0%f|F4U3txI824|4( z0dpgQ$@!?RwGPu-v@$sBaTRRH>Jvp;x(w)8Y7~A#Ai!vi(QPzVwbl%WLlUjgC?-3* zg2#X(O*P9&&M23Xi^hmTo_k%(dYKh66kDI+DEe*3^F+^ZJo>~r4y=wuKWe2G-&sdF zol}=3C`H>y1bsf8G2NXpotCloJm|dG1k%K}x)XYx%}QpI8EKkG1iloMc;g&Si;gax zpM2CDFOyWjSOJ{H85Lzu5=#;Lcs0R}*h7b2|A;z?^8pV+Rk}!uj_UyU!g^z#ee{kC~p2bt2`HkHB>5ud9 zmp;F6&Av2`!}NiqTc7d_th3zr*}J11;egGJ3;gN3-w~ZcH{SL%iekV=KJY%OvW)xQ zIrz*cKgO$H`-42?>9@x@iiVTFVKEqR+f$#;qhI+7PdxURZ=)uMJ@Vj}u@0`j?q)vq z(GN@KoOqeOlN-`B#Q~rE=m)v>rdxQ%ozLSVA9x=Y$NKsqZo2g;eB$FDXLDQzuXIh0lN9vlB&v4p;IT&@jOTv!kq3PXPA>q9eEQ~SS^U06V$D?@kD~~XlOt|spTcWcFU^1C->cry28zr})a6%>N_geop@r!a)?B#}U) zLFrQi@pG}DL@BvLsFxzt@OUO?U1u;kuf<9W5fjscM9)u9&e2pQRn;>0SOHn)L7RLV z5CNu3QAvVBVXR@+7-qF$R!OhfEKwdv!K33Q($8Ca@2GRouYHXh(h;NYtrrS5eC8bM z#&V>!%xcS|YT4SIvpX$G5^=pGi6Zs)9i*CLM-P(bIZe~_oEkpO-CA1Hp@ljto^Ipo z&z07+ZR1NWddjBpwekwGM8~K~Xyv7yq;**(*b3Gc6gky%8d+%ftfBS_i|WxA-uOpr zT>93mjDf)h){3=@ncD{kaMJFhrX>{-||mJJ$7v?O!L1L-~)QVb=fpYm8!ns(QTC z`K%QIgVW^WAV1Cc!}ckXeUEj$$9D^3-0!paXq z+xwi|zkS)Y&phlihP`9$+L1bcydY!k-I8EQvkX&Lr~n9#TXJ<-P*0|P0xe!vHm4X*O|C<@Et>dg^=geu& zo_LIWI3z1_%Bo^_XPde)43>vX%8K1-$!;l*(8T`$-T^9;uf0BE95KbwT1RUwjkU~M zOVt{TkD8@v!g!c4%v17Iq9$pQ@bsIn;3>CV%dsQt7-J}X^s;GM%Gn&J6!Uq__C%25 zCvyRY6}c4vKs9~6spCz7hxcV$e}i<)ChXOfQO+}NI3lU*Sulc?@3!N7%coGrqe+!Q z6vNS3vhJ~cxr&1?xeG0lU(tAB*JV?Y`#m{2OyH|kv z(e;>FLU4GBVQ-A|Y)`bGVoXnX{rX)&>k#2leWNRoV6SBcjaEQu^`K)9Y7#6Fq_WFvQ$#stHx(A${q^(iHb&gFs3v~lEk?S`eL}Q=*cXU9E6CW(u>k7 zkYe{qa47YHHD1rqo*$}sPSC=7qJ|F8EoA8Fo{VLVYF&aeXq594s0K6#>N0QzUPj?<@3a@~zLQw)d9eP%=_A`}PK51|vyWtU&Ue|Ym- z;@-~ll+jaOEp{0L)RaL@utlHq_aef}OM+uPjnjnC(;P17i-N(R%WUCjdBj(V* zAqC|$#Xp2?ajitwO)G}Gan38EAzBo?xUxyLpGbVP(gkBD5~_;=B0St8f^Q%SuYh|- z5WFSPdrUVwogyF7o%a~(p%p;CPn}iJ8ZMkT!NoIYx%TPL;P6$~lMRa>If>HP zw!tFp=bENLCED*JOO~aWx|YajXlJ4{PHU8Ji<4-H&bM^~SoWg0i-PU_*4{|&3&K9V z_t$w=8|GE(=T=2Vgp+8yAn(hyBC5J`7;EA>;UnQbcSan1i53SC-FgO4mqbC9YIf_! zf8IqI6h58Q1_zU8^hgvvQ7YEaojQ5iE2OGtDJ?ovE`5FN?_+%yAydE`wz^9N48S_E z_jiwm{H(^iMEzN=*ti4juH_8za|ks)dzAbhFTWaA;rgMw?Xy^5=@yPoB>b@IW8 zB+GiK>`5H&;;LUd)=U2Hy>$j?pFg@ir^=CT;s4%#*u!6XNAy14!-skTw>xQ{YwTlO zUvkvK^SC{ye7*bmak1z1cNs@dS=c+4z0cl@A?-6C3m?YkyCizvrxPm%dehXgON26t z4bn_@w$Hfn?IpyJ zvR%z@0Ddz~%WOUXqd;80XFih_QS-81p2BE}EnejFzyj7A4t7iDsCk;;c@(boe6G96Pwebypwdnrn`;yfUV(Tgth#nrrHo z`CMv(CzCl<-B7ni9N;^1>Q)?YSt>1R7lqtjesyVvN~ELSX`PDV$WqN{R759X*Q&{( zEjZtz%4;v^MEO!9p^-F88GtWg>jCREEzNF2l1OAd_n>^mC}+Gh-xWneOYU=gG2MoY@S4SI#=0ZIub%y?;ug9i_wtYfO@)Qyqa z^G5U?L2^%`F&=bR?G09?#5m792%i|h@-r9~Y?n1l3fj8$WvF7HPdB$&K9or2N7GRI zQiy=(AbdSw(5U0vF$&6g<=05s_)3&gfwNugS`m6=Mc~lr=rFz$kMB~TtaRZC zd?p^}90JZP4hZKADo#en--s>PdX(*t3$5J5J=h%)(#Nsj5w?~?wWets`lWXvh@?=lrKC7Th}~KUV-E7iiW4T$X`KH)XUy^(9BgiGaQ~OSNTL;4 znlKz>(da#Y_Dshr!uF5Z$$mP07DjCw{^pY(<%KVK1=rnl3txHgL2iHc^EiM0EMNZO zeE>cKqg%`*6<}FwZ3JKod%+_Js(j_G|p5a&z&ZSI?ZW{5Fdf}U9DT$BNN(yx*$h~Qb z$_k0x`KY>S1CnHmGsK9IQraU;yO;_e6$uy2ZLe;qV0?Fr(5a~1;)O5!-j4;j6e3uT z*cwhLU!U89(C$)O!dL(&wM9viFqzDF;Nu@>wz7dP1OkUZJuiK zRL6*Uq7Xhs%5<$4I-{s_h(sns#}r)H zV}UZAi_faOr%asfj=Cjo@>I#atrf-}%M^kj@rrQtr*;0CZW@-VRRM}b zCpha!vozL;MNckDKw7l!=3h$&2ARV)4Xtk{?WyR6VMmNao9Bc1A;@`;pE24&T>VyK(eFq=#PNYa$S zXh=RBG8`6+m&P19euP_E!+bVpYioz|8@rr3yUE#$+gzO16scypNXhGj*}P(VXUh2t z+YAR8%S$7cmLxkuWTFKU-=;0;40B(T9`rP03`rtr%3`F2eIje9jln35);1!!N0+G|@7@r|vtV4wsc7d-c70VBl*CE0TdM-xH_Hg|`9b!~l#8{;hb-_Vo`?Ty8 zm7q6zD+twP+%ND|7q8(lFr2SNcdmE5!YB5{k|5=D*Lu3Qg@QBU!|(qKZhOWZJo7m( zq^c^}>n`x&MaM%>zqYrxSYJPcN>Yr+VhYA}zlH4P#zg=Q9y$_rpiXos4jw*AU6o9x zlQ4^Mj;(X-Z0~?lT)c3ecl_qBlO~!`p0Tzvj50!dTHNb=h+-w^UryHYlOO$Sp8w*P zbH{UDK%Ng+SzY5V-t+t3ChF!WWKV2uZegwE=&@sRKX2taf6Sr7M*w^ax{esad|LNb0 z{_N-AnRh-{c%q*G;RQnL5q!~g`>(HY&T7HkS}qisRwRk=+C(RytprTl;AvK%U3X#C zdN357(A1hVtC4P^wz=|2 zPhqsS?hi6xeZ9Eq5OJ;PNB_cbB(25yn*^p3yvwckE(g^2VDwnysOy^P?kpnB_l@AR z_iTZ24zMevq9`RbE6Z!EaovJ~C=As{(|ua5F{03!rj6H;RCjs) zL~H7{jrBzxLbj6BvK|d7q;x{srS%Q=j>(7dCf;yVR-DBx4r9dF10(&rEi|_C!X*ly z2I;(_25DF7-(zH9o;rp}SVbpY1VSwn&c!~hN_#~p(O@lASqkW$U;i`_P#dvc!L$x% z@HO~0I&{KZM_b&_oAuFW6*pVA5Bqkzq!tmuV0t!!c%zl{OYf0>H1=$WIO$+ds?NQk zJDvalAOJ~3K~&iH6VwTQ7e~-%s#2p5)~c9wA-aZ%&l#Nu5EW>xHP*q|a~H6tB}sES zco};4`}!Y!-B&MSF7qJ#CDx%UwEz~Um6TmvYX5n9?iPq(g!Sh&41bYd29LUADy4bO z`r0ZtTz@UcufC4uwF6yk@It@xMWvjH2&opIsf1{XIs+1T1)cRHhP+8$pNKF}JUirAaNAme~&@QOpaml@}u zKhv5kj~?W?cRq`oZ+#ML*W8FoasZSwxHKml4jEe81KVn8b%Sea30Pm2RL$gjrH{vhNB_YSm`lcN&70(O61%$;sDs4 z%-P?8Uss--qS)pVS)<|P<2%38!#;7D*dZBh7iY8@2hUOIf5G8oF71$>OQZJA9bRPz~GF`yU@ zNsEF!%NZOx!201sTKbDIC*A+a~F0vzcWW`EotzDWDV}_&ZS>_kuw?< zj7I~8qXD7ohZe2b8|)yV3`xLl$E~lIlo*MUgWc4_R7SVrg}i;nFe;$80|M5Y|n7G&5 z*fFGSrQTkpHujj8z32CbGd;t}%bsX!xwzjW#RjOSK7D&W=R6}1k!w#zXginVW98 zmCLWVic_af#BY-{K@zM00EXzsq zLJ)s50fI@A44ql2SC58zBlXw8a~8mpv<8(D(r$EA9y+Bt5`%IJ4;ln zZb!5lRaZL}q0_z99z2)IMOma=*JG&>s`TzT^?95{9yQ&)oGZrffel;7Nr zSfd_1nW6-RAE_;?s)n*`C4H?H^y?5UXpBUd4~%n$dE&>X7J7nqr0x-9l>(={p)S$J zgUbcRj+obmN!hSFZ=|hB)d)IkqR6sDjPt~iwTd*6^!GH;WU2fF!$>K79k=pEuL7jr zIXE5Yrn_^1_+jUR0mX1cP{z7BveEO~hT1XH)sA(}8{Y@rUs7vDYo)eB0ZE>bBq~N! z0+9zq(Xh#aEw6RwAr6j@;Oq%DMS>Ee(h{8!&Uueq>zTCbIZagO@eHNt!7CR4H#++4 zQ>>%N(y*0rPLy0R_N3)X;&e=33x=!mwPXUwCg;neilQsVu{b;Wx_hiEQv$fw2d0T` zi>S|qy(r)6q*pdVr$hs^HcEw#sRkkDkF`$vm$L^vQiQ3E0$jY&8o>>a+RoG~duebK zIH+4IjJBtx1_9hU$o<&PUD%?W%^9zRPx`N(3h=*TnD<{%Zpj7+0CBnp01{}di?lD& zYMlE$Mqv=ZegDNGEje%0cgFm1JmQAyujTSQ2uV}6?f$hoXGBaT-}jn}u9bzku$RthoP|r~pf`X0&*FT@Io1Y*>aLrJb;kGimcHI~ zU3+X0D}aon0cm5l$FGvR?vcZ^iv*Ep6 zxaB5}9z4MI`7<=-jP+}7B40iPT9XV$43^h0tpQzwl5QB*w@i&BZ7o$*Gp}muMr3mY z8g;>8E6UlZ$XHz&v9>a1Wp%{zcp&Y^hC@;GO)KqEH@Br_X4^8^-i;utvsuaRbWUq5 zyR(XoNy)5gnbj>-+j{=0u*OGQ6D5<8I7WF&NXum5_a$W2d&#USKw94hxvip1O1189 zU;0tHP`0z^eAJOAh1O-URy~4d`UtyElTLF@=IcWPsAb!>%qP33>6A3f$OZ-Za6~>B zlCLbYw6e_6%Z_ndRWX~)ICJJak3VsSQ|GtY*eP)eMtR1tNU5rp-Q5|9@7X>a=8VTf zR#wI=FONx6NuQNyzW@Sjk6a(xgvQ`Y2p}kh(IKLlc1~p_!L2mUDaIqlWr;P0s%nHc ztI(nq23f+$rV%90c-n5Qz=s#9q9}5T(SX5dNH!diL2?qs0#3;P|I^q5FJttr5+X%MSp}o-_ z11GYBMOTTzv7Yf3t(c%Us2G6g*k#~tU1@7{{Nwc`!kT$!d0##SH-L+yS=2wANC}6F z^005vLBL-k?wP=wx?{TQKlYV}`1oJHpXa{lWt|S?=QJLxK(b}wL+^htw?F%NeAoBB zp11$%FLL(ONrvMwuYTPRaq#F-KK9`c;GAQ7dy9|#^#^#~i(bNOe&F@|*&n=E^r9u}G0GU*&D|$I@*!@y?WtUS-3{Dx_b1q$OuQpY(GLX3 zj4Iyq$A8Gb{MY}6ANxoDn791WFL37cX+}#+y#9@E;=uYr-v5{Hp)RYymi!!dYaX(6 zKm1qk<>_}kn{R*Z4>Fm}IeXV9K`Cx~@>6)jn|_qfe)?~C_wT-=r>Ba%=;+c%)cv)s zb!=R?z+|$^4L9A&ZBKm$_kHejtgNo`vR8aN*WYxDFI7l=tIHnGjSkJut_TWQC}~ze zWk5GDEEGv9SR}?8aF$f{>j8QiZSVp)9}yL0+oBMIPS3?q&$Cp}#6$XfUPyF3k$QEV z=HN{9P+HUA+7@S91ntpw#&BTv8Wah^SrC+*P`9EM9#Y5eqmmdNUUkGkf5Y?)lFryy zaq)v_(;kS8ObN=pN4wwJ+~)qfKh4oAk24sg*s8+WhO!iIc-yqJjq&y0hO%y@KWo)c zRtuvVnx<}J7OzrBIxz^owCThtVYMbz#A|^VL75GTgzh%2c&t$pwQ-Rgadc7i zL@Ua=<;;nbT>qq1x+C^^g^%}xAm961xQxt&?2pA>;r;saexyAp#Qn9wAJf;6<8$?R zLfBUekKw^?k|g2qp>+-)JI-ijjjR|fM9vqUtG6$@NUQBBM1gY5r5`OA_~AVszTdcd_YLzzx9=`_{xH6UCEI(w zz32AFu+KQ0>wV=TLm`^eGcKYL)N`1JHd9S2QOvroW8G+`rG4lOO;*lG)0DPpP)$pc zXECEH&|*EGp_C#YuaJ*dNb>@0L$Z9Brka4YBw2>3r!?h^!SWibhYeS>wUo!TEp1g& zl@(jN6Lu#vrt^}`ohjS9GbZzj-MKgrs-_jg+)2b82glY{dHO9k^0Zs8<=EjvXe|-Y z*<=^{$d@>D!;>ghj-s-Z(UHq(syR%>N!(N=^ZAU~WXfzZWjZY>O99$))-fnD#!Ev1 zIm=UuLRyWDh6SVXkkrqIN>Ut3jLe-KX7erb(HNbkGzPY}b}45iI!)Q#o-i$IL3^)T zHm4vc@FcG%e1=FIs`PMq1`{KhV=u?+K+EY-|Z&F-`$-JFo; zTMP#|OXC6Kr6Gf1K~WT>zKt6osqWS;1X}=%HE5$SO2FcT{yUI9orrEcTw0=STAZ8F zwr0U0F7KgkUq#@-V5nQAu}YDoDS1&)eoxLv$f0e$_U#^ zI5tf*Hcc=}f*-EO?mMN(%VzDd3~(gznSve_5B9p5!x>A0ufGlfsMgTbEoCJw8Fgb9 zy772+X*OOr=mj{UxKWXYx(I9Ex$JRmI(8ZPwX=)*S-(^! zbg2nE*oeZ{!(a;foyc1ouj8W83h@5F_+xH;>Nj{`H=m@U`}-=~({bk13Eue|Z{d62 z@MHY5fBW;yCR2u^5da_g!2jT`54Q4Si)jW}7U*m^f|3-fP&A-fa zvdd^ZMr+Mq|IZKb{`da51jza?2T}8pCE?te)BMg`f0^%j{g3d5fACNE?jM}u91I2n zo_PE*{`>#?mvU@xJzHbrUc^bKDvNI^-B{|T=3VdjEq>^YZ{iJa`te9J8yg#Z{_~&X zwkJQ8@yY=v^D36<_V;#}C(qg-&S3XEWeXcKi&g@r?W_W)NPB#o;KWkiBN()Y(DI?L z=o;f_OhZ{WB(pN2IA(c9mKWrMg1i`#6@@U{B9qHm!(KFaNf9@m`FTUc8^^)dq7_nm z+w0pJJ!w7y9t{0%3h1_WFn)Ry6m_!R1a#@qgvk)&FHK@iP?l%xZtrsbiBmLnB~gI7 z=FEi&=eK86vHnKhYtyCpXIhaZnj)2-bdZuQn{R9oJV}*p>7P5S;OX}WOKI?heF+oqLn5TsV2`7@-!i{ilI`B zvYafF)&gm&d-dl1)a{Ug>p$@Z{lTM01@ysoh@SziS5nA)w7_R0D63FTj7QUWA?L(% z+ju4(yl6$1kmu4qBzmyC5hI@o9}gZl<-{A>1|!4B9*7-e{I3W`rXWJWd1cplZ*OZo zO1kp3=uS4A*4_&oqW=D(jv!N<7lv}LJeSCB7v<_a&`ODN&>DmB!civ)SQCLN0wYxr z9a<8sNPHAs>a2+ASRkI}z^CHwSlBR8$@6qK$P=2zV7#Ij(;mI^rL~4UO>y|>ec;f- zf1+*>>d~C)7^hNQdZl*WBTh(P>xL!$?d9{b@pItspY*g%0R)lEO|2X!PoCh0+n&@j zoEDhD;>&&QufmrKC0RbMZ+LgYdoj|~8SM+Npn(UXbK&}n=9{7uP7Azj!DtiZcDOX; z*zsd5t*w(41Ck^|C7q)H`t^RYxEC3=7(_CQn+jB1h{4Th+9U zCCPJ=yz%YSM0Y56wkTE(kPVkevVv@+7$3NtrktXagwgs{wDp8?`#fz`qLLh)Xxe&C zTbGR6hUIdO^W#w7C^2nKTU7)wxvFj{tD4qYRz@SnqY-&gP|a)Vru5}PvbE}_BAwOB`%{AOS^M6w+qSS(>VbBn72$rV#_Osi|kB z$QwTo);i9e-Jq#zbhe37nx<{p-kz|%J0sDWN!hSHl~SdtZ<$sb<9p)@t)z)>VWlMc znq?{YT1b@i)m(R2OR_XZ)|=MQ>}*r&32By*4+dm|0ZCpk9xpLoUg6MX$GNVq zna^fyZESP$^hF+h;tc0ECbXs{OA_)_Q&%msY02jHge*-dij1Z4fR*JDODju^mxknd z0m?_zeBi)(@U56ett8D|WT}lhSCY#3hD&3~w3wH;ux@noV?BX}c}$hYpm0i~lN5*c z?duG=H4?#83Y2E$$}2I(vi0~A*m))B?TG@NppdezG!b3exIJ~+5ZhY@l~?;fi%YbZ z&%&#EcC`EoC7r%>Kcob=jbUCkOv{EmPf@g(rj2sZdVN@G!-G;mug7`c72s*b^RJF} zTm&HQlolCF*aC|V0bf@xm49eF&|A=}oQvnU{{15F^}3j%ixdar&>!&FBMi_)?enY|LT3*^rR;<7>u}Z?kx9w=2OfjlWwm% z#}_{LStdKXeC3fxx=a8I|LxEJj8A?1X?dCR=g#uckKDz91MA#;%dMO|c`CMi3%j}>WD0geq@}=<<3d7X zLRq=OY0n43!K%OFehUOnAJeH-zh|HR+1)_XDlrb**Le!*5)q8wd7gGp_LI?qRI0lw#Z1ejvy5-EEZiGF8K)t zwnT74%In@&e2i{gBb!LHmYR9*0Tl+O;&f;)L}CiRlL&PL+wvQ+X$_M}#re%C=QgKo z&no7#hD0|E@{D2Oa4I1mr7SP6Fd7!*S?bfAWG(US(L#+@Fi3;falE?f>lHl%w1QG@ zjSr` zIcZp+6sJy}k!$ujXQy)V|L+yzRV*6kJ>@F`XYPMi?-M%k8AXhkFBo=VP3gH*dIp_y zmV<{6a`4D8iqR5@2l(s&;d+nk&+V7$bOyRzFvu7F5BzmOq3OO`9FHIKfL6= zjGYDBU3YP~mwwkboO{>p#?+rX)!l#3dypIbdo13E_vee^OHO+kHbq@g>+rF>`N&rg*FGlz@&UrvPaWt1@&B;^eDeJ~N z;5Ci4Y)>mTCxXsiHimiAVjVqae%B5&IP4YPDVn8dtZ&OBEdJ=)m?BGvYC~U@gBTTe zE_}Sm@An=T9O(gxJ)G?&R>Mg2^W*M*i0k6~eVtr}zgs@8v@nN0d!Uqf;$F zbU3h^-bhC&pRMMRvg-!4ICL_ft-5~gwWNcB3lBa*J)JS1 zm83=C<+Sgj<1{25D|x1_8M z1M3*1mQih@qzb&zIsxoc{ps98kU?(?ds_J+2Iq}*gX-bhs69N8kS!TNAYF8ZI6v zxA??e9~52O_4XNx-JM-N^1;7~`$D!vCPt1`2ydRmNHz027p7iLR> zfPsISe4~*MGy@E_4|wEYv0RMmp6Q<1KT}`1NmphhP2XcmCOK@%1;~;OqbGe^p*6>-p{ZYkd37*M;xFXzxmg ztHi!L=X74JZb$%m*CoV&jEE-a!><7os@b+7lFkFKYAOlg(E7%t?T)4y<22)VJRyF# zN7JaXzS*GPY^4B5+XLNzR`YDLE9#4S)%71k%TY@kDNq0-z;f3`*!Yeqz{p2h!iz1Cw*!9iC!dS4p{l&@p@dv1O%@8s<<4bvB0&lTPNNhIN)jbus}W+vQ0JfPKg(T`bckGq)j)(o zAoYGq_*Q`U_EnKyj$JhLQtxP{x>C4iv6!FO!yZshl{P-t0+`T~4cB-5k z_=WQsK#Sa1!7%+>l)a*`%Xg(gOx-j%Vi-fM{z8 zH+t5JI@j;@9G4M9NPsA=(~N|GbUI_6X7odk7|4~;@pJ;h1Ny#4+jodfi<}as%S8-+ zvBBf_-(maeM_9%Swl97p%5hHUcDIsF#tFmW78Dw!c|q(CNcqPf-){f_AOJ~3K~%kq zkD=WFAf(FzrVi8q;0enz1A!5{4hRiEgr?czGD;Ll(+$X(FkMc-c*2G{P}5*czFbv3D18cJj05MvcS^{(Q6gSUD-)zK@ zMFDwPJY>GcX6DrhfmC)2=Cw7Hl)nXOv9@N(4ZfR~udw;a84thuEofTMW7dLGI%NSc zb=uSXYQD=Vv*!h&Y5aRu{3#2qGEFPN8Xq#uG|vgg%ZxvMkVw+*G-209#KYOW)vOqW z6N4Lgnw5})%%?dsq{Iztv0TM%1d!%#TL~${GX^6}zL-}xhjI*zegR}inuXD_I0;Nq zE}mm3-UaFPR=)#;a5aX)gDWMXDB!f_*9vK>luzx5;K~Dhj6v&6WoC^8DEr6O(ebTa z*Y2aoxpATFeps=z%wnX-DA5kapwymG74I~?tHMxT&#SN!JHFP3-0^FX5UQ+Sqbc)C z*Lr9Lgyh?b4oduw)X$LC$BKD##>|A2wOYJ_XnRCPSuP)^eW*bq)pxP=5u+Q`C)?O7 zXBV;P2sI8Sl48Gvo^M2^;GkYhStkq6qE&Bf*;Hb5c=75EKmU2gJk2;BFZghO!u$Ip9-c0E z^ZGq5$1`s44!F6y#o_J_``a4~>a7a|fHTrOB3+J1lXxsbqeaXt7m`a`HL3n7MPh6) z45+ugFdp$jW-K{*HE<%J>lz#mTd`7RE9z2hy-LxsD1wyM^Rj5q(m9EuJ}n93Y@weS z%c2H_lrbY9vE-@E%(y_TVvP!HvtG}tYzB`&q1C$j79vL9H7fjap$m^u%w?ZxnDoMh zdaA%eJzPPzBQ^eLm3Fzmg=G~z(G~jYSTiDxQ)z?O1SvEan&1~8(o;h501+ZV&!4ju+z_En!Gse7bxTDE!=D-W`kU{Oa}q;JwP$|tRdetE z=8MXIrl@-gih9sPDHvDZ!WKn5OFEAx1W`V_V6qb(Ez7?^z^7k)icdcK0^P9l{^mY| z&O@#ga8EbVVq!V3kE{OHJZVkGKcKt=&eNRdIZ&+5^L<`qii1hO7pp#RwNzKU)^h=` zKxt9Hxm>g6+2Gaq%B|PWTK_HbqR_VOnU5P7aCM!$9>X&^T#p^qILme1psO;(!a3!< zs@sUtO)>had{faEAcnYAVBq2HTeNK>)w3ypnhu-YPLyReOm^EX9^ZTqBCP|{@9_BU4d(HTwjUrK2;uvu zhbQec(|b{=)5AT+^9lWCi+LO|o=@PkVEc3i6Jfrb@$~S7e&{idBM5|LoV4Hr;D^N&1{7$#Yj7A|K}w!rj#*ifA@NuGPo47f)*(y@h1k2 zy6f7g^3#fnGKMySQ%2iHOmmVJazFhb+tACsZ9G*5_GNk{l`g%ZjHN z?OPtF$p_nq7A0oRf#4UX>OQ0fhIK(QP${Tt11s#Y$TiZQ&`=x-iY^~BGqM&tr1M$w zs$)dc^=O9;ntnjn4fyo)AK}voQeGzuJA-1R=!XCB-5M(DX{Hgl>f< z$=5;*Bt>Id*HMzcrJjyzL?tz-(nUS3uaeCs`l>BbYhpeJYh-OSS`noGv18>^Fx^Xk ziN3tLZ%MGTMP73X023NHzqrKhVGzi*eBV4M8_TWyRSxlLusVgV>_WY8MBavBo+g}6 zXT%Tph)qP>b?7%+47(kM?GEi`FG^)zM8TUU^~fd}GqZYT)hkB<6eB>fJP*{HbOj!3 z)I zL<&^vV(US051kXEZB!qRJ(WJP5h9f^G$KMn;>ERAJUM0TZ}#}nr=m#D^Md>PBi_G1 z;^}zA>3G7s*Ke`EIpD>sm$-TP61&?w^xFes)5yJ+30Ovu6<%@RDB+chwpGh1V_uR7 zJ7aikieB}+u(oSifm*;}*JHQc_`I0)w-oi@LbEI(&vVM!_C$;lU@;h6#u-nSMT+Q+ ziyWsF_9MjV)%86xNc!RGwFwfM6GK3b0gQy11;jO~Fp4*$gh~|80Z=hh6w)iKN5h58xT9kl7x4yJNI&5A`Vum$ z0*kUKn{p3{#3waqNL!<1bT4AW*{?BAX@4X6^tJ`Lex{Eo-OOrD2IISTA23f7Vr;QK z?3xAp^nd*O`VcB-TUa7|U)Ap=gt62#pdtutrkN|lL4~&cp~`w#H;x*)v|W!+KmRdy zH@DKiI#fbWd5F_orHp6IKQ`}<6+X$i@}B2h(W}u|ElkVx%YI`&#(@L$9FKBAIgbli zLVc{C5C6_7^y<5hD$zQ==SsWDxU%ooMb;_`Sv`AMkHTNp$F6_(PxUhT7;^pmTq!|Z z=E&}2a|Hibp3Om{hp1jh5ny$`?eWT9WTHchKP{jb@$Tt@{ybv4>CrS%>X0;14a5TC zB4;#Bi_7VPWm%L@C4?9;O|$SfJZegob>LuZHXBeNjN>ePKSXd!Xqt%ISFiAgfB7d6 z5q39s7|$1^dBQwiFi(?q`vCf3P#~Fcd^+NMJfR;3OydQY%Lst6KO7N=a5;~-e|W-f zx54pr0RW8Sj2H-;O^=i^o=z8>$5{%E^(UOh8LuBsIFE}cFMy`_i3f5@b&*Sh>hk{( zls}Uw;-vk@#Go6zIBc|@*aSe^&@xLsn8acP=-LK<{gYSN4Q=6A$|g)+KIc|C5;g^T z&F!3J>9?$WRXkv<^;8;HHtN=P9O0w8tk?M?rwLuyF1{p-=gn3QOIM|B6}jaVw5(; z%o1|Ggn(t90bbOTYi(@F74#4zGMRG5jzOKrX3dLc>CQ6jw)o_;PjER;csNbCEF;F0 z@#(%tuc>Y>oon7Lnk!Ofyt_Z)uw?Xon3A-LJ154NWSzRMMN|WH zj07~ziZ=`GB;iR^DOHu?%gmM!r?gl=vX5H{*hGL7BA&!LT% z3Z5s`i>y_hsA1X_h>KFJc9EiolFd?KBE|Vs&l(ULi;AYgOW-6`*1EE07SWh1d{$lr zDozH&Q(U;H!cjGD%N2voypGe0NE>e?LLVdACZZuAgMb`Rc8xz^LA8zn03W2cMerI~ zYmibiY7c`%bs?L0XUjscDJ9I)jLY$ahj;JLv@M3s2Alm3!)`D6>ze~OC*);Bo<^i) zmSS^SGy_;999RbG`Rf!K4WZQvdkTDwfPCUBK&_fCs(FWd!;DdaKv^uN21socYU{2k zynyCV2Y?Z)`P0gpE3l{2dhxh%=sj$8xl%q;Z@QucN?gknHxn;`jOL+=}hnZ0G3g-c7m zxLAzmS=xYHrUj4Z3Fph~eQ{6Yg2!>e(CWzZqp$#@a3B)ynVVz zXg5Sz&kS@8#Cl6sah`!#gLcbjV*iWGXj|KwWsNJ=;Y1l@z%sLMa-(C{S#n|40BgIG zI%>w=md}}Wtks=OG#V8(df<4`R!mKUK!kY~aBAV4nSnkuE2T<`9ZF@HSTQd1C>wpd z=U=v)8wCOdgqYDVuqf-Z5H2l#seFcXubH#z!AH~wMY1u7x$l*%o6EkNqAeRQ10JF3AlfX!})SD$`{uHPWU#s%U^X|5IX zY=7&boq2uS>YM`biUNMExE5tMUm1$(b4+=xWy-A+>T{&x0LT@%U%g#N8w8wI z7;Z#2s;cSR#>zPZG2lEi?mrySHD`2vgRX7Rck-`kB4X2M(b5^?I3uVRvS}Mk(~P!> z$Pk5k7+Qo7q@`MBq-h2P!trzwP`F44?{2@rJkLleVc72Q?#(-`j4cMotOjG!f~jWY zJ)K8P^NglxFwF~2XXzPzIF3j;W1JQ|oi5lsopHX*$Y6}qf)EIsuEmrx&f|>pERj<& z1l*q|JdLx1QUl>WPmuX+f*HF5mZX4O74TLK6Xq?pJadF~p;)=NdZAfBGZAp;JN)I3 zU*T@o3qM;g*?I+QwuRaNBR}}MD-DF|Y%4^T?WiPlB!z1uVx#iQQv2BY0oxu~%cj*J z4Yd2)8gk43-IJvcXwi@M%(gEnvV&sV0|1ao3=j<9wd*?)@YB{w)r> z4GxE`v~SyOFl;)st+eU2dPX5Opbj2IwNL=&8LSo7Ey^m!V10Ap%9uWH&KW_CJM2ax zsS9!Y$x9sXACU6{&eMXYamHm@a2Q(b+kie4?9G{x7BMQFriAyG1rJlgFfRDXVZgSR z`U6Q7v}wsWEeVfv#&Ooj(HPLg4nrSs2;v=#O)Qac1Pop4sfbn-(D0=3Crh^xY$}v! zHu}Q$D&Cu&P%8Q1l;KLLcxuIwrtUO}La^%@ldE~DexEa|SGg#-+2~vEK~;M~dlnn3 z)kd<*JJyAaKL;OnnFqrzRHqiM`SH37k?t|OhTY5MRyogp^P+?RGACDvr5+V~#E&_I zEN#ce!Qjf6p}K>9mT+@JD0+OZ6lyAF0-4id#4{rWsWK82{N>ExKyIJ2>ypn=c}7(9 z(#5C+k+FKYov#e3jMWadac0wdbsQ)WthPJ3;%{cWB&gq4uUzw8t1ZIzD*;_A`SA@g zG7ENXa!!7;x=j{PKY&eW39WR%V8`j*0{}Fn1QH9tkS8x->I%paBkw98BM+(cu5D{aP{J0n$pr@G8G!dKK2AndcX~y|7 z;ds2@{BV!c!vo%Z^9{B)H`w3a;)|buq0FNSpUsl{Zq>upl3@@r&xsQRo%fN5HAK96`hjnW!Ka|53)Qp}|#36a?i9lm&VgO@iO-0TJn z4n}2rE-B;H?GE36IO4ne6W%?JQuHThsd^uU=8`k+vcH5us=x?A7*t?1ZE5r3sTLNu zX-q+xo9!PkKo$xH^ODqQ3nsL3rIQziYox`{9>b`Zyk0}opOBdF=4nEcGj4hb&FT9V zeH$?`Fiy!qSqPG&Y79jLR0+wlJ!Z8Nti7IlY>oSn>?zxu!NVN2lL1+H7A#dxLjoCX zEKt-^J(iU5&DVd#XFvU^3%DPA(X%)IjROmluMK{+!X85Lq8oo;U)-xp@|7U4HK!7) zMHNrx4BWlE!|vt|vF)U?whw)+oR=0tT0=uU=yhwMb>Hl3W&Qt$qVBY3zt!i#Wkaoe z*9tMSDVrZV-h^tcw3qX3Is7^(1ih9+)!eLrRRPBJ`PT|~`M4g3-TQhR<=p!BE5iV6 zpZ_q4+5P=1yM~Rk9CZcts_WG<-}NC{8M0Gmga~~4*$e#Vf4axCj2IeGHixdkri*Br zMv9@SH`vA>8^Ho8W%PZE(>PqtebeYh`27mR% zOWba|H91`I4CiOh_}U7ZUVT#hqx`vPg33~*aZu#}6oUn6L14oZIcHGH>Pcs(I;Ue} zVLG3|~OO|zulqT?C|5Cet{qV?8o?rf3x8J{Re#Y)i?O{Z-0+3zy2OiPiHhl=-MDDoaYH| z-#s9 zF7q1+{dSAnPhQ}3x?o9Cb7D@6x5p8WO;ja7E;ub!8ee8i6wr2rOUn55{fHq>Qd5W- zQMDmT5LBR_M09&vnRHsP7pm-XK-Qdf!;1{^c4!vS0w$k-^V%lG^S0Lo z`$)xb_mPpVkA`t)mBqaJXORx(!7qE$J?H*hr1YxTj=c8`Ea1R!4*9+W;Jx3AtRihO zSsS2@;agN=&hSe9f#Kb!2(cJGfYmkDcH%V;l%beX?4~`0NZ53ZM`M&cc4*Fg&5PKd zGwM1ps=W2cdmxnl?bWN6h1UjjzYgFIm`HBnT(s~?u?zYbKdC#V1s*04O| z#Ds(}FPO#==hF$z{XN>QMK^4;*xUx)W{-AvBi{5`751vooLo!7csxwTs>3V5B^3Z( zWX)xSoJ$rqPxh^9OcX&;2vQ~28l(aRH0%FJHE%D}=1Ma>6vF00b~7VZo6MDU4-YCz z0I7GjE(&IZ<927)UdTh?9pGhNjfa#;q$MFCVWnJXen+%$%ACRaeb;xmx!ED5jBylY z{rLVhmdg`<{3oBg#oZp(Dha0~9(t=JTzj}sc~lKVIG`q=A#F?7HX4?fFwaTy2QMSe z=Mnc$XFQ!IT*d{{ykMLcjI*%CZ5uIkEpGQ)-0ph3xY=O8+o10owAyCR2qR?)(Mn4~ zM8Mtc26s1G{3SC^ml^LLPWbli6W$+3T$WTSz$^0)%0!S#_52WQF9NL=Z>$4(Oc1O$ zR@tjmDKCK1WICyO63uzB$?xXS}&Ej&sIML%8iD_Cvyptr#vM z1li z0l0hh3EFOuYTK1Wb!E5mom5aHe=~|gBN_pYoYk;qJ@_knJ2d~J3D>^cuRX(qeD*vl$ zQmn>yB}e@YRmaxkQW+@J=!NU^D=SbX?(`R`#WYN0*fYNR(F^?9kMHq+|K@vX#mVf| z#rsZLaTdBJ2OuGccQD*=LwrGB8DwKJRETvrGVP9BvX6 zG;M=!*vP-#9^H12&%XE^pa1Nq_=o@bAMkj8k1v1oCH|lP`Xzq*_4j!9a707Eri*A3 zV;m>kKb+8fr@hwq8yxmq?6w28n;w1FNHM~;@#mPP38jvaKEGo^<(WZp+*68TkT)ex z_hD!vZeG5?)BPhZTRf*DvxHA;yV$-7=$Zz* zO^3tH1}|US;_j1IxOs7h-OVjFy94^ofL4o=0zg_8Jbicz=CiL=&OlB{jMP>ru7a%v z>l!8i93ka`Ppnm+@orO`?Oe_*IrkZ!?qk-g43-ELs?N1q9ZEZSCD#V4%h!lTEtMO6sOO1*5u;J_C_DZD6iZ=(SK}RZSn2%!3*_%xK`LtUgw`ZU%ca z0uxKRCbL9->Kv>TbFL%2D$Y^yqih}?l|L3S(ZnDcw@z+mE%2zG`wZ5lDbdUB8Z}u) z)je&S=&ja;zNN*nq)D?MTfa)Z0KIf|ZNr}h8^Yy|$xK7v{^T{})&l0%9?m`aROYkb zH`()T)UHK=fFK4^c+Ryc02Rpfh2%m6KBSLLR0X)j;IPsVV2HP_$hN7>vyEyxbc2~epjd!ZapnL--DFi*DSZ^g z)?`P8f^1{?0Xhzou$7RrXR$DABi3NluXAD5-fg{O6wi9pKA>5_f6f_Ez3aQ(fSiGL zyAx(?YoV9Ts+d~^aLaXZgNhS`(gd?*EWoJVTKk=zE_hg^H}3Ix!SOs{o)+XqLf9{} z7#g~+!Hb(6?hc|{-`(uc53S~ot=HM7SLZqe1`v@O0f$K|@&+c{>;~K(2K?;v7dTyJ ze0V(L^@k%~Kb&!%7A%XjeONN1i@^ntrBAet6ez0ci&ldW5Pc1-oyq8j;;n_yrv|Ev z_sOi05>DgwBA5&PqX27XMWpT1662g0b51xX!iPCydrA2I6tV9D4sDc>9RilHfcj4Q zRKjRi`@)mtJ}oK1Yq{z(lpLL0Jy>D*fh3fEh=iLVB4^-tkCPYVu%c>AK+1#|G~Z0; zE;I1$x8D_zSnr?f7hnJMkz>ko72#6tuR5$fDBtnC@S2xWnFAF~E}ZR4lZ9OKBIj2? z+qKx=+-O@hZK-BIb5WRAN_ei7^U^-bcu(z7udBTCssecah(cb4%2)p~S4zDBZSb{iaq4&U9M5QEeJc~nnz z8>GmY%Li3bK_%C^ZyUUS8gZUxQRWXDq{kCZTHV|XZEXyAIL#g^+NgItDP1I^XOvc% zU`D(I@sO*BuoQHXXBm^^jgCn=#EfZydE`r5St|89Jka9+03ZNKL_t(Kblg^W6exLw zWZ~$jRF#N<1&i}RC4U)==<}C&t7cn zE$@8aQhc7js2s3{Z8fRscf39;XC$p+W`;&1iNw%WR|!^dR%CIz;twl@-7ie5`_vWU z7=JnJE`KAcI|qfx)`zaf*=K(7-(#qNxH+NWx?t35tq{u;lq10ZHI2V z#jro1-yLxG;uf#|?Z3vq`q%#>p6>7Q^&h^$fBEO%;CH|OBi_D$0OyQt*Pu@s)3o6J z@dOGV(Dx1Y+X1(SEe^W@+f66+24aH{tD?aA%u$sa&Qh3G+74%gWf5ZtY2GU{aux$g zH*E0Ylb3jWJV|j{R{5&N2>^&u3_^KISn?vZBZ71fXmlNla>r<+)SK9DI=p!G0xw?O z;r7KH4li!8ySc-#J)qxg5!)W51|3VMo5mB45AXHaNP9+WD0P(mYoY7OXoUjE6mtzJ z=M1MGlLMJa6=68vuB)L_gmm38V+@4uim|xxcq`Or=UUetOSg2}k1M|HL?!HTjm@*k zGktD`dFf?tqeV#gvlJd)%N$Z9B*-y#VwT0DFe)fiDov5)o)`X>n zb}};(#PYVJ1iFj}$AG4JMBDf1hXMUYda-t!4chH3LbyXt3-WZqGMUK+HT$*@`=q(0teivvFG}yM>@B5n1~u)bpLW5TXG&D&X0|KcX__*hCPbGOXmS z+afb|H@C2g-e%Rx8rHsO+catIARYv>BRHet0$x|`<^VJ?BIS(Ve)SzLmq|V3$@7Q~ zLx<0Qbcfr!Jzl;zV7uut44nv)ic*U$Vht*CbuXjU5CXcEkgH0@DXI525cazshrKB4 zmr+{Qz4>s&>&G)5&NHSZd8m(FH->|<>$S@|Tv$3`eR)EUEkN$NUgw4=ggSqj8kHK7zu$E^by!M0e3s#M_nt|vGrtj zugH>;8U(n6_r&0W(!42*Rg}Mjw8tr7$Uxta3xXPUvhKAdGa6#u7a}Zv|NC!XN>jOV zVYchP)g(Oo4j=iwe75|Y+38gZiCHs?_rV!$;&_C z6?N`;rI=?c5@(StnwOr6V(!ZIN`bEw^IUpwvx4`P63@Ioz5+GIlgjS~$|?ojWDpC( zb!FOQ64&ynQv6X*B-d}tr%IVy9m(~vt@s0l4M@F^0$S|U zvV|2OtVzjfXhk=)9&YV5UwQBfF)FahNKK2TYw_}CgZIY^-k&54wr`~~$GBvSl)VzT zv8Vt@bWI@KpC;XR!tcI&e{`k17#>9)nKQuY*q%LzanGs>8;>^Q`pn`Tgvn912qp$d za@D&~ASR(IUdWUHKx|nH<5+PrqazZm6N5&i*&-_c z$SkRmW^gP&u`4P;!~7{k!~leB-2@6>s4drP;F|1}Ev_&R?jBaSf7q25% z>Zp=>n~6LXk8}tDv1!1a(9}FHSe6;%IO23XBD{U;VerFlk70MfcDKhb{{HXq*MIvr zxSTI|{oQN)>Q}$RKmY1WeE0f2LSE1}5nV$VFB9f*#{K;fZ5uHRJ$9Q8+o8qKN(4$r z1d0h@Z6&O9n^Fdagunp{7K9jueuMEv25Xwh_He-Nu*Z2?ROU;>WpKR1O4o#W5u;a9 z8fb~oS>C+TP6z?pU58ITd4ZRoe~QEH9X9(t+O7wMh?Hh5^8^MVawC2rnZS#<-}%&`vn z3Lu~XLJqD(N;rlrObjL{voo-2a`mmYrGp(?HkSjMnkMYH%6ni}wPVckOezFow1Pp5 zs78Z!7)s?^mh^*VS+sh4lH6kx;$_t3{uM1)0TSUA0=T9*;r-(YLmP2-*x==h18#2j z*lY*1ZG*1s&@|e<23*#a**CELC6a3DktK{0OGYU(Ql6hd3ecn=jYSf$Rt4pp!NeGb z4xbM#KL7L<6tl5!UV`dEc|*-M#MAPF7nn+Bh@0f~Y0obWUyT;_y}S~`yl@L^1N zV#13%sfFOyR+4!$Aq{23K|_*kc3F3ag{wKMAZR!x@cx|8%^5?K(5wcfrHoZc70L;i z6C;MK1)K=4U%v&X1k$#D<%zHV)*rbd%xfyWevvPb>|inenfH91hkkuK<-1(&QvQ~M z>(fZrb9XqP+icxi0;6$M1>RO6?y7jFwFlj*xtpP_6p|~7dmY_VcV?(P@5RtnE9d2S zr(55PwL)Hxzk2Wcb-h+a{-8WNYH)GAM%DKpTZWIlDs=zRYx;t$zg`*Jf8gcb3MvOG zt|`ah>ODRGMb1|F6UG|{?C2<!CE8#zm3&y2Xz^WsmY*J2>$chl?dWEXBLgBY|R7JOhvRCS{*RNqapzT`ZENO0L zc&jgvQ_|%LD`j0ADH5${-E5@p86$IzUEuq(rn&WaEUHi|NE3v&Xzgk59AY@NPO(5) z3*#kq0Xz0EWaUEvRT_@u@uF*$A44b;3QqZ^^2K3t-^j(9U_E8_l8Ta>sU;0kc?6w;TiQn%w z7&bi+Vkx{ugdAk<8rJctYmT#YmkA`f^!vLT9M5Oza-*B6(2U^ACMqtdutG|VL>X-- zN_rrmZKW`9HweiS)C{+&hRl4EnB88bkcC*EizGe8zjZ$^^q=kPI9P9yE} z>SKm^OQk?=02LnW7*wKByb`?qk1Y?KmENg1G+}d7ZAtykpfaF_2$^(Onr$C1dHpQ% z9B{+uN`7)N78QA2ah-~v1PVn@aQ0*T9XdX_K7mSF6pN!KMyrGYO?@r=T~c$|$Lf{x zNura^nvT@AlHL~sFee|S^GxTdis_1D)Q%!Acr3@W?={_VE<4OH0wQ%T$~*^sCefaA z!Lc=lVAi@;nuCrA;*4g|oGc$)sKPPpr!m051vjij162=g=ossT@QsDqy8%cjYPo>y z-AeFP=&2rSz4@R-lV=Gbrpt))QCeZd*q|Q<4EsGc`vZpE9!HZREe;VGiIp_no?E; z#KHh0C^q0li^D;~$(9AHMhwM3rCScb`d;;-iS>^lVlrU>`*d;S!)QFg>{Ax-v??K1q z1|i$e*%WhfKxs4#WJHqtXJ%ZI-{Rj=HcenJsU7?!dw-7OGP>7 z%1i!{F!%Ca3M+{sUzGEllSYjcCES$xoRfsgC8b>pUv#il$$|>Z7y;G_I9JD%Lu#9N zjTB7&)c}H@9agU%gQe!i)%=%rs3M>~MiYMDVqyO%A=RRdpMAZ4w?JMpd343MY`&fL%{W;BzCc+jp<8Y=uP8wj3og&9X?*~RqP}P`I6{fkb7O^t zvvWoa;ypL|YogRT5d)#gVtIxo3y>5xCo+6WX86jWK;C_1Xd{{su-|R5X#Rm^qOCYQ)I$}N4^pM%gI3oy z<-ATW@;PKpgEi%&Qn>8KtGr`VP;!Hu5?XG+y?BGA;Ova~VZ`a-0grFrpxyS>Hs z?j?rp9zXl@Kf{lI{xkf;|8$Sn-+qhV{N^kC(|`R6U%z<(F-z?RjVw8jgeFdCpU!AM z95M8r7Mk0kAEes6bV(5*XO-JUi6%`2kv-G44Ys>2_WM2NDIw)i_MPn^oet|55WK{W z@eJKV>hK96qKOR}&6!`8gt*M05YVDUh%G<>tD|L}XHVzyh$`hIDT_?VU{ETB%yMS1 z(in#Tf)-we?Z3kFOL#eX%A{Z@jSko~&gChAel;D(NXmDO+20trjuir6>_h0^67`xK1(z)?%)6f0- zRGu|ut93;hW}ekZQ^{PExwpwFhGb_quvW*l#Ph9pWn{E2Qq~zPvqVvv*z|}5ZRJ*{ zv>5#wTnua>|8h>!l%RQD#1kC?ww*X=k~;-ty@*`;t&G%$F9;=%99(d=nRDgXf{)ko z*ctFg$8FdL05*M#u5A#^@W>I(qEtwFVajlj9Q;D&y|wrH5OyM0e^CQyyH<@k$d!kEf?cc1IRVNw*(YetT-oPBH&o72p?ex}e0)UHzD74}u-PB5Iox2g+oS0=i2V-O zztpPmXQb&Y%DRHoloFO{*3i^OEQ5{yb>N%8d68UqD^7>;f*IX3%)6c-`@c|lqhb5>=g z2>~~4#La%d&py8cLQ^SHWqnZX4Vz;JS+Gerp=AOCWh}b6VvyXQKqhKtA`a0`-P#LZ76!>>P^s0`c zYIy!ECU@k^%(CW0grRE`l=;JJ4ykyZZ-*9#zCqdnV`d!ZgmaQsO_R1Bn=QJcTtbv% zl)^#2x(+Vkm4BHTOj7&Bl~e{6&Z?yA_=u2+5CUU%BXKFrR?juD=0YZ^p^`KeiGo$Y z&Pa2{;#h?M&bUk^3aX7#*?UeIfdUTO0h_)-porbjp%D~XWN4B;;}l9NHtCwzw3Qi{ zmxR-_pl^axsD-Y&LSI1#LWL14xnx~pD7kZL85785X@@g;t?huF(539q?4M{g}Eq6QdrpVs$x1=_`9X?iE(G8 z#2aQ~21sibsSDF0^VqMGy`GK90aM=VNEg(~vYwknYg~n*CuV&%LnQFN=vFJkIC*V^ z4))pjT7~8P`_=t*v|K{qSs1Y33!O6wK+KMDN`ykePJTZsVd*As3F2Y)vE+<-Hpgu( zIjF*ivX9o$m->Zqq>qRkU*Rrt<>sSn9^_6*j-}T;yHHGdr&DDXKR_0 z&_Rd_=YRM!pKw$^`dClR<^$(20&Z283Q3^^qU^=`P9WK3w6cVvkE2lJ!LF1Gb5sG z!opW8uL3i2nNSc(#o-tNLZy(X%$9$uhpb+VT@;eEAQGi~ zaWI~)KATtFmGG1_^5HtPy@V*b;*4U%D*Ia3d6fcWGrImiR_F3+-K(Gdd|G{aK9}nc z1=QQ0b-+XcF168U)vAx4AGyA1byqHYyWH^kIV;j!onM`zPg}Qt`GFBsuUal&lcT&5 zj}AL)vQW&h)+Y5DTnT8|Yh55T9pM0|V$PToV`j$0S`aNIj43-N2>}(Dmo*OR0ryA+ zW-uqm9jw^J=_ruqgo^RX0HBRIDGxD^6%ipV<}o8JS|q7U$b=~^-acnZ#i(h9&rR2& zi-a~tgs#KTcR1_@bZw&sS_Y?#WuB3dkdvk-krctJ*T3p=v|6dmjN@g-?WWVIE~cuIo=2_5m09RZFHoL8^?idK#0_a*#C*f&r!SHC*2KPSZBJWrEFcSmd~2 zH{q8m)46dOpE+YQ^wPR*Nm!Nz^EBfA^%)Ou-k=?NNwwVV(QS6vY&ZC;|KacO7k~G+ z_+O4ke0ci~Uw{2a{PVBA!mq#j4sV{$hy-l=7Td1DrfqOKPq@E7qVFEi4?T9f0sH+1 z{ia9PbyE9Bl^hUsjUxKK$7VNRNg0e$Qq&X-uwwnV5Q0vfM0ptv7Oao~E#NE0*9Jgd z62?5C?|bCTmg zBI`BMq6&x4EJn2~V4={c(t;_$#_N3?T=1S53^KD0Nm}9-C|_)2WShxcDjC@HjTUE= z2n%GOAu{EvS_v-0EJdi+vwppx6|4ZLOs)}G&@cu+$m1I-=->kyXygF@3$^t?ISoX zfB{^XK+?HU@J&JfF=y$?p0nn-SK0uZB)x{?wGhG;_|kPT!DXMTIiuA-AnJx=jw^4L z4Z}dzbBnRAwQbI7Fm5b^FhPW%N|>&NUqcosG#x;MoW-KLOcR!Q!MrTKF|vg>>E?F< zS&t3Il;ock76TC;?jNu$3%b5X+e=7T)3l(_0u({qN{EX86XgObbew*h2GknEOj5K# zTTi+2XN=KStZC4e#;cyUmlC7wC=-eX#8f~ALK7Ph2>oVLc{K|VagLWu-iw6@Nr<1# zyU>oT@ip)VR+Pl6E2D{on{9{NZRa#$cQ<0mtbmY9K2T6V0F<1|P|<8?0%pC2fe6c& zTM5<*NST210w=b=u-+{c2o!_#Csm2UEY|;IV^oDDXD(s?WVvZ2)YY$APnW;AI*P8o z`}j+uePqP$IoHBUX5g!Hwd|T7yW%s^q4Qe|dm`|fu0z*vihwY%!4}3|Lfa+u(8AU$ zued7blFqRx@LaTzWA$Asih13;-l9W*DtFLA4}q18u`yPks)xP$ji1eeaLSL6w+qs0 zZh3vkv-ftmQJQ0pdYP|Ipl3f^(Ft82_v}VjvheygAA5IoHy?t$@oKqO(`At1<1}ls zypq$;j*$E1EWL7PFWe))MJmx)jv=_1FpMWyK5`djG*NZxYQ)corhM>;?bTP{PGox>!gdvj{FB?@R zW03I4HcD}y=zBY8u`x+kqADETu!(V3m1tln|6*Sa*a>SIlRfoxo{(?1g$Qg8u3xo` zvM-b;OpAnRQwaFcCkMQEc>{_i!ppFo(Tu>3j6{r(GAIP8ZXcq^J_VztU24UrjYxH_ zS#bkH6+^?4M2Jm*6q+qcn=2^}el5MRU_0X%OG*-&Eg9>+k11$0FEk2sg==&SRdk?% za{zAGtpE9MI`=j2Grl-YQef`>bOOJAjo373+7?aMOWNhlEk6Ir7x?tYU*K>5`(NPg z>(}_|%dhdD|K&^k{=0Yh=HZMs5O#fop@~9k@r1UC*bE(Z+aBBPfML_izoD1VcK}1* zqwhQPU59y)D3F{|m7^~-7pDa=1V?Uc5E*A#4(NTja*@>T-7%qlw5c=rwZF#Q)Qg6y=pXOv}ln5 z@}2NCRlKcZO@)z-w-maCVDWLHV0s{mmC`{GRMn=oE8w0 zTSl^aYi;#JVQ)cgqXSA}j&|nH)ijsDO0MSEg%Rug1*fHz5^T%E6@}Nzx>))HnizdU z=d|`HSW$!enq~nvX5y_{YC&oDS866@SoUyaZC7$enk5|UGLFa@E)*rFD=8C!L~|G& zFg(Vk2tp|)5dz`vc85re^V5@5TMYsIFrXU-bbXK5H0rgC2*EVzjKEU#kJ2Jcm|4;l z08k9ti#LL~l{wRVTlQYj%BYjfPSB8?*akFhTL6m|fh&8t>>Z;W6PRh41&pMmN_OFD zPWEm(uHjpGXI5Y}n|Q_Dh#tI#gsEf35zFb z``}8i9T z2nl115D<}r2-!uI)!N&)LbM-!T`MsB{5OAJ_LUjVtVo>ofAxIH>swr3)`z$L(Rr#4 zrR}6Z5KO?E;BY}*E9Vj^QmVISMC|@4K0caDF@W~+SiJ+U)vPyBB9;8QSMv)r8RW` zxC;5e>Hwv1A76RW^=uU>NUKMs>U#AYempj#%+2a?D+pj!$L?FNcQwbx z-z+aRR5Dz6Y{5gBB@f+lVEw52ef_RlaOrQIwO}9N?skh$ULDX4ofcvD>YjhQRWs)aZ)+}U=W|ppkj)T-9;l41WJSw1qJwhEtgg%P#;pq zQ4G|Iq&T<(A&}<7o6HJjXVfp_%f6R_(Q%PaY`oRwID3A()!gX17TY~EVlZJGCybX1 zF2^HI_xBjyzmqWd!wuSQz^9*mird=*e*V)>@%r2E@%qhseD&>neDmf3Z;vCGfxeB{ zwh_n6jEAQ)`nJK)x7ciY?6(6py8*lHfc<`pwiVpd_AT0!Fi-M4QUP9+#b_NxDn7_Q z-%4{vKTEh z_2e=|bOi5>&Lw)oD65XTja0~AGyt+(}=?EYNjSP{)vX>u-0*lW|c%ynHER{%!mK?@+lX^zpi z4H_$qr}Ctkl57N9A~NOJCb$}iF)3Bwm4He?fZDsk^>?hS)rgL{2rZO3u8o}O_3`a87!fMIvQ=5Rp2 z-J{*?(QNh-_C8;br%|fG=LN{AQkq4POG&Ebi{Or+ru9YUoFv%6K`gJTG+x1R7jdqn z=rbFkF}QG30G>}t7D`t(52=+uFi=_^=^8oFu`@6ivMQkJyjmM=)*@i;DO3R*+ZM|# z{mAEW#57G(i8cl_u|Y~_%!`12@eZ?Y=%QTMy^V?4#%!91yW1@`yBG6m6CoBp6JAu8Ghu`1!gl$$8 zUd~zy2LwTw{G5Pc)8lagfN8~lhy;*^KwAG4h*Usu(pDaYiBP_PnlN+x3XCMIGc^6m?V1&6A$i%DEMVQ}6k*%vh3k zSuiC%EtQ9?6o<TGzRJ^xV8a^T`uIJR1(OQ>bHQ=haTu=Me8dQp%?HMN@<1hNV z7<$O%%CnaVBPT5Fg5lt=pg{WA1?Z!1VGCK{8n3>$;$F4+hWuV1A8avTt%rU+9G~}! z{);E_`Pe;`f<-A_QpRF@j&+}_$5=*JfSGeR3jr*ZX4g-qAA--z)li%lLMnm-h#{hl z5q;AjBI0R$68^*@@1pX~CF@gE#UTjAs9^b}L)T#FTKA+&N>A``PEtd`Di_njrgd+Z z2P=3)91QFRR*y2^HJ*cEhZQ<13uX~V=Sd>FN>NXCx?o#ZUpbKl^O7*mvY!u!4SxQ! zPqEQ3d0EF))}I-9(d^1lI!`!uGi^b6{sI6ggD7bV521-sjMO@KS6XtB5q2;0N?E%k z2@R!c8=J8J;2;G6EwsMO9=Q=FhJegjTa)P?V*-2OTCH1;4SBo(yQ~Fm7U5j{(^3Hd?@H#(0@}2(&1_F>F<2C#ZOAbIL^~q=b1%V9bb76!ef~UDC3EC?F9bL{aLS zR?-5pYHB%4jUrqBT1gG+5zmm&a$5~^3b>~o=4F?4Vx{G**xs!8#2K0Ec4(rU%hJ|i z;;7^qym%UC;alz@*ZDDTv_6u{+LSBoT9H=HVu-XF4Q8&kG1)T}rM-G4ldX^_Bjd65 z5;`-iCXutN^w&z#cxsZ-I92tBs_jtogG%5TB)xjo2A(443!Ia&N8?#8cX=hJR&cKx zN8d;*XAq(5S~RWf_2W3JK2px(>aWRaf^?fYT^QTGLEpBR=Gjwf>+V#}QJ7&73T7c; zR7F>P-^Dg2OyB@C$->Y?iURp4qBk`ao5!17U@OQKxY70H?ac&+?7h|CglAqGIX z$8;HSd3wUr`!{I&0sVH1&EXFHZjW|zi)KsUJR^-4ESD$nJR)$?y;2x?N(p2|$cQ`) z-YAPWd+0oJ2AQSJ2)#m9Tz_EzG?eX8j1df0^~98S$0!xpAoUU$dDhCN5ZhW1l~Awj z5eqghqF@anfDq99zkOXo%*e=yFV5WU`ERYEt_#-6AV1}dGJwlv!F8<`Vb(qfn`1Wy zY-|cB*y!XVY7WP}9HG`wO2&RSp|#FYo~2>ATyQ;|L5XYUrrnHrw@2B{DAO$GQgaPD zO+d1ye=Az8{8(vj$HIxb)TVi2u+TJx*c}*LTON6l`H+qFWSg`%nJa))3S99!kV)ck zQwN30N(BR5>oCcm*Ckr4sgnea#K4pR*Oh69a|UCq7+JuxFTZ- z!a)-e;gPuW@p-AxGjNlvGb=gR@ivgVD69MbsOI3!Lwdt;zXP4CrL1-UbpRz1*3R5t z2*yKN?x?3EDZe`tZ=bcn%P+p7I-srLCPFAWvq&Nfl=3s<-RBvM8QtF^M`@5#gVdAD z-!HozM=W$svPbQBwV_e&CMQ*B9eS)U-$u>-|00eZFoc@Kw=A3T|k; zy^d+&x?pQeha0}MP*HP37$M#2Cj~7pEcQ!(4$54i&-Q{ik8lHeKEkc5I{v8RzP;ZI z-yQLqm=>*YtX#>8SeFxEnQz@8Awgy>g6Fm>uMgfuj z41{+C;srbt8bH3pVgdgummBC)ImmP*Tx!L&Hq0eC1PHp)Gw(P`dA_bVT`Su8jH#~p z{6P+F-WFBo|yuuDV!b*G+iPo&=lu!yoTdP|a zeQ9i``b`O$GRt%^kPQC;p((EGT#(o8k`R<5?(8V{j&Hkrc)-KsE4=>p8~pma z@9=xUqyK*Q4nO?(6aMseZX>FFeP9=739l`^mIXbPbekfurIhf9&mTZ_3Crs z{wE-=gq`*~&}jjN8i4?$8D#337R|I=TgSRol!;58>dGaGrErN}24kUGE0;?QAoYx8 zUCbC$c+dwhS{I{cK)Z@_a6^td9>hj+<63oX4D3g#`7vUg87S{v8s>?Coj{=h87#$F zRKX_8qmN*0ckh%=fMwuWv|Z#}A8yzKj;(Yb3QICJvefD*)$}?*@}AA1)da(Mpi#!U zaU`+K*K_X8J~LkCZ^d#t-AA#O+}>kZa^QQDzXJ$q*QRxb&LM1ysGa@jS8P6yuUl>R zc(=!HDtv6G%)j@6)3V}vt-u%(ifJfy;4x6*k z1D2k~?ifIG7>u~m#LsL~vo!-{#=v1WvGk!~r+1WPT~SK5`cc=P&w)Wy5EK@RgpoJc zMJ_cXT7i`c*Z{0-pyc;7Z$o_gaHV1TpsB}qTTh{kJ4`9cJ!~9+GV92|CRHPNjF_I% zow!xhb-^N$^`{T-G4J-6k9XbxWPgX1UP%mv;$wIw|d&Gi@mw`ocd%#l&A8RRa=IQNnoi*H9S;)@#~nvX z8!O?~J9~|L!fu|>yQF5W4eRxS%lQo86Y^9r@Ao(ykC^v+PK8eiDNUd!r_o6RHSQCj4Y*uEN9E4zlQCrlEFEQ$4(`KrH1oe^knZ@1tC#;?Wz`g!Q|{o;$lc;iDikNjUua?2a>F)v)h2;}yQ z;WK*SvH>+rHe;diyUhq!HEgC@wJLVI(Zu{GBzQ)_1-&tMZ z7TZzqDGxg~&AxE6?VMg=&c-vkPY7xxmnm;?2$8lheTHQcdCjG7`-FMsEC4mo&4F#t z5h@8$qDVDu&xT@*5b{1_yqmA)F(d7Mmt za4I~RId(4khD$ z&KM(OtrbtFEAoeok~8j)JKWzLa5&5;nXyGFSsZTebZfmM52jC(078?L_FlP6qPB(( zU@Dc5)&n;VUDt*Tpw^Bu@zJ|$s*Xps&UtunuP>Elu&>~|AhKi=c%bg@9wWv%#f=E(P)2@fUXv{Y0LINLa-48TS~miaS4 zxULn{JLZz4@t=IAjy;m=24G=L5?mDwRNXHkC1jez>dW;W0sY9D43lApU6H1!1Bp2B Z_+RVuN=kdO^hW>y002ovPDHLkV1napF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H1AOJ~3 zK~#90oW1F@Y{_xh_sgo&-FJJ-yoVVK7LuR|DoC27f;7E;u&w`GAEdAqTqKI7gCZ>$ z!ZL#y%=+Hly8E0;f5^Bvv;G1ii2ApR(0~TgKo(#@WCodm87)8s3Y51u z)c@{}dH>h{p7U4VL>Ev55kVCYMM~-4_31c#)t{+XS0G9|KBC8y!M7ABg$dz&nyq1p zMd%o>FVA5)mW$L2q)ebQGQrD#^~c=(-A_6F;!7w3r68q36~~Pl8l&sx0zK6UcECU!wZ0dE^V}z^l+>_U=zQK3<6ZfItoaU^gDw< z&Oj>$I||xnBfL(;W6=sood&(@g0^N;t59yPC_4aqe!f4!yo_}OJUgkzzO?59=AyPB zX=5#kbP1}~)w&&rjfAI!u(XbWheQBAFV)R+8=S;%Ptdh_rj)YzT}CU1zc}J-D;L{K zRBMo6Z%fwoXViDL8vP(Xzu36ZvVcse9Dp4v1+)SaNJV5xbDx~|G#|70{H$N?L=(#i zD6}-T^ylog0B6vKGCSX?Ad}B6c;^xHWPO#L4>N<#pbw~?Kz2xZjg%XkYs^I#&>3Ym zex_$&LgXbPdz7>HJ)=B=K7gK3RqInG8>`QCarhG4--dDFVSD@J-_{lERR(W06dDem z(hETZj18;?e-U6p)o93gO?BK9kR6>CWdin2H-ff?@&J0Yb%^6lAAu9X+4su<<$&-K z)rJU^-6P27hL5%wU8$|1^J$9FT`8SR2cI@tY|CQ2)?o-C`i6|m{9Hr+jxIWXmEc#X z!;=1Y#m8bS=d*&2K8QgL-pzS)DK2YQI)S>XpdsRrQfL~|R8SOMW`jjyA>#Zsct{b9 zCKAt3Y_~`fC${ey`&f3s3y@d95%kk|Do?cY@+=x8WUX{A`God#HNHCgGx%=hP@j31 zw;SYbT8{4vrM%{F@nbG8e@KyQia_&a)MD)VbZm&sJl_8UQoqk``hccKmiZm6{S4YW z%JfHo(&m2z`3^`!moI%^pPjZBm(gN-R$c--iaa9R`3xr%rHbhoEd+>Y$EB=vi?Kg5 z9V?CE{M!0WbT(Q(19_M8nh7`bg@lbhg+%jxeB($W1u12%S(n<-bO3n^w;~joD5WCB=)BJ<_@_W90HJ>M zA)fTO8gTHq4glG-7bvE43|&x7j9ye@!xhS9HC5!~{KwS*nToaD1;cP!4V|VrtQKHa zqzW<#R9jcsRb*d~T|pNy-EmoH=LTno`GV;YJE82$5G#29bEBOUJ*z#ZYU1^5IHCee zgIXy2((Mn5^R@+Qt(@;?xX-dmu*PaIs;-9>FlPvA13%jF@EjNDR3Ee$QB~NK_O`p1co8}^Uz{E$^J=$7Y2*2FXW+v;kZD%E` ze%BCuW~IMj=@Kx5zSp15SvFJDzK-n-#(2V{j(HL3MqdC_+m;DH-^C#yeR7g;F!)iT zcEt>yFi^XqsHksBRVUT}ybdF!?k__cUkzx zz_NKRxQD2sqL@|gN?03$q5b+E{`QVnfAPO^`}cpz<1c^3aCqoYEPB5QX6kIOSo?N- zK+m%&fJG?No^o-ZJv_P~Xs#7`S6x9Pq$5wgEP_b2u@;!#Uche0{Mol1=EeXQL<_Ao zV-)+z@c2Z_@v&PHq$(T1vH>N|#Hyfk8~U@9r<+PZXBRNV6~5NI@A2LG8R`3ACEUXn z64nZXs5?(|Jhx>~0_+u**^KCgL9YRm_*Z-mEq;^kSfVwg?kRggilR->Wr6d8&Wq1K z<~tOEF)#J+WzZCgPO*OjE!w+MHRHh;zM7&@gs^Xelx(eQC8rPHm2Ub*54&0e&e@@$ zTL3I{01ut2#)wYXj~V}^P~xiNGAck6=y;38sqrKm3)eBW%HbNRy1a1 zYgi4H=kNqZ(L_hTLwK<=*j96w^ z2-xw=OY&+rYcT{Oa>ca&5m#5g!+!sviP6QzIG(NPZU^%M=VODim~qZWl=7N+{*1QV zqwO=`h?L)_Ek6hS0_7#>m(XsFC+P`vrmspBr6RIJ%8|l*#QCbxz)TU>$$|zo9G%Np zQ>K?r-qH=sQtE)AzZ(WJeG9KBWaS7dbb4^uuT-4mfafEnhim8(g>WXb(j${R(&6Z#HJUbe`uOTJfl|wWaqm_K>{@ePU^+&v zg;FP{tx_lh1HIy)`xiy7Wktgj0}YQc2>HVpM*9xXk&jZ6jbS4&+V&_S&hn5u(H!g(Z}8e@~K z#$NNf{9B?Z@1xJVbL?8S@myJi{}zQ-jtL=-e3X{2{Tr zE#qE?@%#AeHm(@wy{~EB9TY;3KV$_Z`c4r$o0b78oO;11zy(3594vPkdLF`5`GpZ*? z-~lt@FF^K`as_gLFpPP`qQc2A@2@cE7E~5f3iQ1_!{SYYxCf6jf}VU0psctSnTJMrC2$dVj&KZNfX|3W_%#@l2xffDAbW2MB4<+& z#j+GsuR!lXADl&+hNjGjo>8i=(cc+Dri#uYz9&|4q)(P#3g25@TM{`&MK`?E9SJ`PD|GPfVd3>ck!%Q+%oqHuIjusaJbbgvTW7? ztKR0oZvQ)6UH>kJi;t-yv)4#&NvZYrF77aUE&>`{};=!ETQ8Nv=&Bop3vAJ+Et3Q67_j@zwx@i zzS0OcM*lrk4O4VNsIJyx&ovJ;MATE$oWz|BMoQrj@XQ5mw6@SZd#MyN%1f;#&pV6h zk&p3yB{S8Xsj}W@iW}t-FzKAZ^~^-u1+)yO4+S$;OR>nkg6t}C5c5?p4ZZg@?gVyX z?7L$6-vXy^Pw-$7YnecIogh=O=zAFZis^7oky724>^f7t zN`bx8h#U3ow4^Lir-cbiWkHd-QEr6#!3FzLSl*q{qtfmdmWKshmTo$=MUe_}E%2b` zbC-gI!aRG!eSw4NjqUwHeZ6DaPn5;oL2K3c*ngAT>@>xjtY?5b$r z&>m3gPl?lB*N=ScZrqdNFl!zV{PKzXkad&%v;++~p@noYR7!s&XB|HY&gu5Umj8#& zKi1PzH$u10^0oK5;p1J-B~OEl-uq}uPnhVoOP;4N0(l8m6SbIP;tfai8p6Y?F`zgX z3ue@HrMz)t(jK!~nj4?qv;n1cChPex4lr9(j~4jGuhWit@sgYdIueBUPdOR_I z`D^suuf4yRTtWB9e^;{AHi?uI%P;-|!k=^f=YK)DyyEsh z{$J=k8^KozDFde&Edslm6fy>^r6BtQyH~FrCe<7p4{HUa&sfCu{eZK7Cm6NVfQup% zOdr4I@t;1o?^l_|YXVhur$Q)q*@dTABpi%M%1~bhh!Y%lrKhZmN1HVqKR&c-b0>qE z@!pk$LJyXy41uU^rC1I*8Yz+Kr&UAq{(j@n{#6Y=!fuC=%Wtn@B2ndj(_rFmHdf3-3N zCZSwZ%3(4O?)`$!inyoQrsT}C!*t7{+q&P_OSXg5H^&C=-Gd(2&T;R zBPKG9_K{*q@iBeE?H1+aFcjZ3J1io9w(*B%vle!p{__4y^gVaQycIWx=T_uDH;_HGe$2(??{RhY19peK`Lz`0GaOF~wFvV(v&=^n*zK-3pB6L3 z+Gm_kKL_4Yr&l!nh0(Eo3YF8m7Th=o5#tAqPPRmZFGpdU zSmu?AIdde8#;hlHjw&5*QVK#+uf=8T8i>x<>2hrNrqw^Y0jnE#fIux3k>JPa2cM&5 zs(Ey@JB95(ISVA?JAx+NA+4j|)!Z}cqvMt8Wc`>U$@JfdnY0eG*h3DbZjc+SIxoR= z1#Jt9r_$HyV5#h4V-W1SZ|yR82LZ=M&Y;bXHe4ojL!+~5PrvuB)E&5EOOy_$GMiD# zz90vOM{%5nk9Q}?u9(_wnJA56$zx?wIw+yJ*3b=E-f^mf-Hn_Az+BI-TB zl8^A_=x!n?xd=7V`S85Zj?JR+XSJlU!$hg#I+#*lPUZ-ByJKH0rM^8j$_#vcqCGa4 zT|bFqql@QpgpvFR`lz(Y=CHg!({_#BM?02x3+?OK;ak@G!x7STCz0-(=zDHWpe~Q- z!K|FQ0lruI|C|iMsTVX8dzs*kZufO&o=0B`f#1Y2pNb0WX9VVwfs!3?c?_Z3KRWU$ z`+RfH>)EN>8)+s1$4>9#C|J)DelmOSZS^rTy3G>D+0#{nNy<>(R=N++&sApqste1Q zkETg_YFk3I(vZ2hPGAu`+l0ZeFvBzn;uX>arfG-lF8eb>()uQAN;}Ogw|BI!zCa$n zrNr4ol1T5yVFrS)y`y+Mw}R#h37*n`U^`VXL&Bp-;zqgxde8iezowo3TQ2|nk17At z74QG@Z_xR)j#PsgT*ot73+#r|1QE)9&;ElC%)>aJ(Pc(Y=fs>gOM;%tJS34dD2Iu1 zc}csqOo@6mQTCUdKl^qF7TJ(WrY%*5_bOm(8=9$fG)aFhO|Yc&^~D)vcwqZ+gw6P> z#*h;;4Z+&yGMB%=6uH!hlQQI&kTG*Lb0_oEO@%z$E7V z#nZRW#-K~1N7`j+tkbTZvS1sgJmpWTh@uM+RV)IUm|+0lCHYESPwYV@esTWP-^VQC zyjesi#*D(FtlFHdxf&(T_5Dn`_K3M)5vqfIr)HdYbtj$!Oi^!)<2(KtLE8h}P3}g& z$ZL=*pihIlL8G>Yd&Fs2D)td%aawm{w2u?Q%z0NZY=Q!&IzU%k(r@TmR>UMa z8q)%Urzd<%?ymnykyc{4u^-MTw-kAcIf_1KL@k0&w#W!sl%}|no57>jtbZlHZxO5!RS)gZ`d<@TH&{cU zhzwLG$AXco5OqlK%!$}54%&Ug2->AQ;T>j=a|S`_$t|TTv%y+6GHr#k6@&KAs|Pj<=o3k8T;G;0YF9mk&au*3QhyBk z&0qB4v%aEhGqFFKHdB|{q<%KzrQf7{_qSBrm}CgZ%*e;XoA1IXNIN3~#^9L*<_oVtFt_tDcnN2-!3zYD@*0|Vd7>lGYZ1-Zwucjku#RXhs z@*;lG5X_ylQJtJ~*Wx~_+H_wL_r#*XN!P5I*qPnAbc7p0H7ltGB0cI?deOO6y8Mc2vwV0)4rr1Z{pZM!9LQf4@KvX~4wTF@S)EfJ z0B?OQO(O%K3%3r>QEMf#V-o(Br5ncfSaIXrb+stQ>HiazQRFt@+6&GFK3pH`$Gdz! z8gOW|X2=(o=fpL6qt(BU{`b!E;ZsPjHqnlDOul)#g05>%gmX_XBZit zVZ3UC+N}7mRG(XG=&`Z9o6T6iJ6rz^II0=)uFFPbU0Z`H)DL#lHy7yLVn%*sczRL6 zUfeBj_E>LY;4b!GC)B(d_^-agX%$YV&LI-hOd`m;d`1uG^1UVMP-HlK%8 zUuEYZ(hVbEL>v=u>j--i+1q^ASDU8n2-)o}*k8P%-29Nzqv#gdY!8pL+i&6SJu;tA zH{6F8C^P4grrHI3smRM$)Hfedu5P@FF4p($d)gPDq7Uz}s>9(5Y%Y{qK#G3AAdGZb zK<4BlaG*>e`)lfN|B&+IH@y3szhVByin0Zr4kjHQU!`7NGrhP(ilsH_GIM@+N4q^T z?dmYleR|zP*ugm%>eU~-Mb8t*pTC2}&)#0)$5e}H4%P9WsV(=}#KGCR0O-igq_pN; z*0d$(1NfQpC#f4_&asKNk~BMfveGT|s_@ZnYuAnLb6Rf}s@_1=&W~pSFr{{JR(@50 zFB*1B8C1>rv)DM|h1}vCxb5T9Mj*u689c+QlbSKyQkxMS>Zesy=#|NxakDIbW_=BV z5X=K+4maPc!(KH3lQX8H@FR*BS8+wLR?1#z4`&M%dB36L+p+6{%rcDk4o_WC!eER! zMVR1;n}%x;^4#ywx>Uod6GA+A+xVQ>u|tN~SWy_r7;@d>2D}{y~P+)R&!pjLp*|FLL(hF>ag7iyDs1pbAPg5)*#*p0lH>LkK2;>M<{>x z^=90(C!a@a@O4)@Wz+&dc20LQ<1BterxNoYbQ^Jqu$KsfpFJWwv&GIU{{>DC!yBrd77qlC1N+nAuS5CFdFA zco3^Bx8g=cH@sLM#{pPcqZDyxz=*KN@2#~I0kou=EIwLOGthg#jckw%G>$%pvp}59 z8c&XX*U9eVud+v(5P4T`ek%F&GtX(z)PDn6dB?tMlS9Ef6X21hmh;H2ZoU=u6owkycX%JgzF{Uq5L;#JKfbsg*(rh@Dy zWLJl3??vHO`i!qlgZC~Cot5@*V*ch4JuTx1WyMind!qmVAOJ~3K~x+7u0KjGsb81t zr6RkDa|rZzgkjdnNF9=rg>qO^yF zc3!NlOSYcXR+Rd7PknQVJ~rB&XBjSxEYfr9b(=bY=JWKxx(K5;>dM|mw@{wlV@6lu zFwTPwS>E}kZk}Uk1i$I^bjWbj<#}gmw4zjRFP(+a+ax{4`x|4eI)8Q+dDN#<9N9ik zbQpc+kv^}aUwNY`nC_}#yFm988P^(%5uR86+EZO^Y))32ZYXAsoW6(z7`1Vx=>krV zEZ=;>QZ7LYoM$*b!s*c~r^mduicAJz{N^OFtJIHw#O}?9mNHXnS`%=6Lwos_^Ur^R zzWb7Kj=`0uo^PXFAg&;<;*7F&24Ype@6hwlm<|iC{D(aZ$x?=80z-FIOhWtr3)Y1c)D^V_J5 zPXXCuXZtHE7g#Fr+54WLMAktlS&BJMCZt?~&WL`CmKP|Os8p0&q)cWENke$__BSr) zZc#ZW1Ju?s;scVub|WXEX2I8{$&by-p6hdqi(QZYbq@9u52z+nWRW zeEZ&b8r@iLJzrZmhRQYj{qJ&h^J5PCx0E8B&jyNlR*DGo+1T&t+&DjeNo!}?@{Uqo zv$U@eUV)xaj^i{UI7K3L+W3DMZn3H& zQG39Re8-7KeHKrp79XS^e26|8)D^zVkijyr9>#ede+6IvO@LBOjufeDUe^uWlwImrLA%BGRP3^tk*pn*{avEz9`&cox}J`XI_xCDVUy`cb0fK}RJu6Z zU+QEq$i>f`|JhO1hAvBTjA){V0k6JpfHDD%MQ7SFdmS8c8DGeHnPqx-%@U^(EhalT zSuG-$y9n`mlSg}<+>a)*>!2MtFSB4(Dkpu3-Rm9 zbY55<&MdcQ+QXUU-O1iRF6eo&0&tkIU#3bJnQJ?R6}#5{+3CFqQ=y@^SO&c;P92({I&T0WY%$&bCB9l<(f;2&U1@|HE zmM<3OuWy+?+EZRl=-G~e>TFrSG8w%t_X~PX#5Akb6N*6Ipk9V&W$f3E`x3;cV_Qj< z39iHGHbX28(RG;gWp>aFK|Z!){?6ZQ{JOcDm~DEX3~nxTp|#SLf>*i@(tioPCoLw_ zlr?{ewFMof?6d89H-R3J?A(;GChvN(^DrJ24$pnAF0g{OFEFg21hg@DG|hl@@V5*o z9nW{UAI!nNuDd-|Dzr25@RdjC#H&J9MExG>1n_YlC@GteKHCPA?|hf(&0D)>!S5o6 zQN39O%GH704}Xv2PfqZ799_lySL>89brnS1YuOf1i%JW|$n=vV^V=_&{`88QfAtqU z{)hj>@mHVIZf7{pmR1c&-7&qortECq+8XV2V!3-<3x|@Bt9XD;S9DP>CiWk`;Qk-K zb?NBoDW#b)R}--~Q`lhF*5MIjDHG-LnsT*A&nHj8Qidu3Qtb|PmWD2~8A5fk6mPEz zZXU~2)TJ#R1qhOoL05_uGwY~L!qIKdUf3-dX;g&|LJr4-s?D#YbLOkayVFdLdQDFI zvCOOtUI87jE{% z;kt5=`pr@)?Ny@5<+=KQ7=Am0tN?;)?9PN48AJ(tHgLiu#%t1Ai@6GoiW= zoq_wMAKzGs7-gNo+`*Bc(0N*BtYzSW5iJ;f%YZ@D+7SG@ltJ%9XxTHmLe|3C0{}#g zk3J9n8LwdM8!cjE436*pZ*n-89_k8?@3kW7NR75sd@Iq&Dxx*u_s^a46FkIkn!Z>W znOnIMMR4*uB>_Jv2fbL)ktozBJ#v19UCVVG<7mS|DB|zW*!6P<;}z`=%NRNU*Qnn6 zwwv9MID#Bdtq30gzkW*VkwTo81l@Vb3a-ZI#Q9LLmq=e#7!mVsNCjfsI(BUOVM^;f1kW>DnWcK z=bhms?&Fr8wP5|kbJ4<%C0J1|aT;yJ@swJuBK_D)Ld-sRf;ojP!@$%q?~~vY;%V?h zPOCPSd-ao=;-wYV;D)sWfbaOy1F4(=iLH8Hb7uU#PLas5nq>)+Jkmhw_=9%)r z!EQ@BF0}iF`PV0t$0yLGbp9ucGJkS}=|s8NA^XzTsdpfgQm*~jZnwRZ_R!#tu8Veh z*1X`@)RNjbd}1GL0i$dE>8WavGF_sHe^E4L)``t?6(HKM<*kMmZpAE|R>N*Xt zOw3$++im@Zl`!vxi1XU?N!#_~QMQ$I72(bIwHIdy1uPcSy?uFOZxo~z z;1WX*ASC5!CDk+VOj=scoQ`gU7uN5XU&Fxh?G6*8 zQCauzMe&G8cdQ{`wLh?X`LfpySl%5y|5LiBIB=xZ=|!QZt(VllI3*e^=*`Y*`+h36u(8Rjbej@vhoaHiY0XrZHQ;JdDd?S2Tc*6kWsm9 zPDS2yG$K6SW@uMWgiY_GclAWlt>+#*x<^jNnuksrqvSP;IjNeW%RCeh$H(fpO&;(6 z*K7NnJpc6*p`X6n@FU51cI1lBb{zrs>>cy?*k?I(B_kqrRzqY$**WYQk@9X=-kqRa zqOwCdqwS8!Dx&Nu^#bI8F1HAuLh2z7rz8Vv=eYtd}ghn6O{wrY|OYvBN8!@5O z2WSVyl~n^owGATE&k-#-3{<&E3?JK7(!^&&=N(IsWR7`Kw2kd%t=( zZC_i8bQQyJkO;*clySXn=vRYP1z$<>s@Db>-2@2B&UM>fNnfeE%5q*{s?>`M%8Qpw zAH1SmUsA6Qmf$6e9|c@MPxgLU(Bo{8@b?SzXAkIur?khlY(YmTa#bl;mU7>Z8`h3I zWG_(gfFHDnMvDl0=y+K@$tjXL)-!IS(Jm&((FyM)MUmG?TmN0@VJjngs{=jP&vP%QWZVH z{CDqY@BcHq|NfDy|M8EgFJ5r_@BS8jd_?vK^D63M5fe3|WV*hF8xy8&UXaH}GrU#| zOjmSA5%g41&W4|+Ln+zf6x?u5UnXj-*DtyF@FUuC;{5(S?f%h}uZ9)Z%LE-7K$W4O zxq;j7H5dHcv~=1-CNI9hN+HxZ&Y-MFauD~R2TL^`Ol+0j?S(pQd_PB8XEd&!%D@wW zX>u5|?!QZ}r@{k3N?~_%Lnt~@K&EPISBLZB%ujqy;V27(UxHCMjDin}AXg|=U{(hKs%dL&Yc)UVLf)flJ2j)7%y*Dc$ju3=-!r|Ewa+oDwM6N2RJ!+f z)yZ!v8A{@>0nkp|dCx@WW3FRQt%+=VhIC9U=4vYS8j;F~qBhGO5iuUoi-m?@^XQjH z8@lsGo8*auNyD1H9SW=T>1BuwKCWw?9=pzPB)R8k3Ua|T z{fOQE583ZOG`pcn4@}KxIGyf*9d?c1gxzud$oc$^wtPlgeu?TGN}oOR+Zwk`ET9jT zi6G6_e1RG5UPGeIj{gPI^PN|eU8TO*Q(st?p`9xqV@PYRHwtZT%wIon{M9YzFCJO$ z=Mkg`z7WDHM26#D2L*bwtd}H`$-3f-+s2$z`wq%#mFBafRUo4G+62yxdA^7D_Z)xu zE2I?4{(|!2n*DcPQ(nHHzPRxloQ}xyfb1S&J~QoSrq>hmHz&@&c%*$385cgUhF#;f zo2fSwWj~qdYS13k?sY#J7MDfsKKh*?R~2c^Sl_wzm|{49P0YHi72DUMab>J@T5d}t zV&J1-<&ZHeSuh0D_+kyVA={Jp?OA=TKbJBPyYap0V)YuhANoSxsT=+uI)>Y~adKmb zaRb&`%t@cOK-}`Wo}UJfk-<(-;<(*p{6buiMTxzwk);KpKa8k}+eS(zV zre0p+A?m@i5F^S3+QX6d?YBe$qA))4h#D|OjFI*VnGINsptU06=g4$MrUr9i`N;$N z{^#ufXE^-H@38yuE${yI|H*uN1gt0=ez&J;F~`PY=a|b>C|4Jpk0;hh$eY1axkb#` zuyY}L9?BoRQgeC*F@=CDuzUHI{i_dX?a2A|9n0PQ@YV+NT1il~zS}Z7>zNq?W*u}r z)iY8U2f22llinn)aXs~o6dw(u|Hy?FpiI6w_8=3gN6@xTJB=d{%bfN?Sr5^*1nG2C zFRzekLYt-cs|e+CGH+^AOEKz-XE8cy%Yb8K*!bQXO2lTt0jnrrBbWoBf!+5!rM8A^ zbw(SD)LH#(lp+_?C`cFU4Pnp?T?Us*`%XHX6K@CuU0q_jK<_mto}@92BM$v=y5a=| zqiaQv=aIQJ70T5_c~OwLT9)W(F@s$@drxEJbZL*Uu9V<}*Z=CP$1wb3BGT<%U_&!$ zE>Fhl%Ek~Pt74{sn?BK$YTp^}yxAL}O+?#9q_By2G@VKuWm&1~(i5%M)7(nG07G8Z zW{q2j$|~$+ZS7N}scVmLbh_$%K20$CbGRoF?dx$-+0T6edW*0}W{GQQ7-; zJE77LF8v()9U^X|*FCB(FLgG4QYKWdk@6nA0{?)%(?NW@qKCor)<5PrLtijGin?kp zUIZ|nOL&y{&j8RT*@{TkKJ5pEH=M|p+t z3FsptXQP!YN<}(LwUp^mryz^g?F~Gm(s}Gl^+@P=P}R?;qkfBp_M|iQK9JJUAJ>Hy zHzrMK&vd**-kS2v%`7`JOA#jCS}4EpY3N>}*p^HS*-x&*zfvp&`3uj_!S19F|r z#SHrv#S1sgR7| z@(5!mBAHfYJ&b)Rlh4!JEHmfj?ANme9tV?tUX4oo6-nv&fx96$G~!Z=lKrLZ#BZ{+ z2s#sX7JD&{CB;(S>#H5*asoXP+abBKsZF%NzC| zy`g^al5+DA>=oJxmV4^eiSp*m@~a2VpFYs;&M*}V`kV^wU8CKfDOa;Oy!Msd4=&Le z+Wj1-y;$xS+WW=OdytzCX zAY%PtgX4eJD`imU?VNDfmzZSV)0d7v0#OJ!Xh}k+OHVX~2OCk$q|Is0kVqN`1QnSqH?cUFZQW&eX0T>r_BdHAQF^7zwV z+u8C8GAUEpbEr4SaY4_sr35bu%?w`?o}S(w(ezQuk)gCWX1Yh!epd>}43|6VtGCqa z*ObErGVSd=wi>~=hX>{_K1aX38%SA6%z#5npHsTKxf7B8S%KM7AM4q?kHsPa<<$k# z|L|LsfAKN%?ZW$i{Z}mS-XptWX)|%XL{m44J?*f-@teDTZoLyzH;(An(`jp5{OF3u z|Mx3PYsqWLmCC!aHDI`Z^Bty}8`|lS`TmaO;SQZ$Necx!+Q+#Sgnm{fNU9Vo2vP=N zqGHz(34>`KPoscbfG#uLyrDWt>hr(%cDnx2nY75xiv$*5%L#3>R}_uD3GF9wTuEd% z1fPhlbN}iCE8MZn)}PDo`Rk)cmsv;l5me7mJwnpSI{Nncv}XGvq7qYe0iEWWneH~# zz0GtdNrzwalr%M59O}T4((6YEtYIsTI~ROqS55g*XiKxXMhf-p83IMjaF+eJ+7KOM zOrWz>wU_;HYOv2xV6&Q>BzbS*+MfyPqvJtTV%PcbXO#ksp;Uq0tq( z=x4N8NrIu*ZHY1)h-t(p0M3Pg`nZ{q2Z5}B@DxcQ05stch7*c#R)`T@skZ)AQKX@? zNg^EE_E{d}H4K3~KqjlX3~{49kXiRgT-PRFA-r1|OeRhPHhJzo`BZ;nymSpG zd~bo#y7R4VhAoI*`V_=Wgsp6relQ1`d0qH8c}1?YuK=yxFtl^W zIh~d@qB^eJY!c5LOHj)oiFvQU6!QvF>G0iQk?KoCK1SpPs$U>-f$#zJajiOf)EE(& zsM8BX4t=eq?r81Aez&8P$~-H}GE++9@%|@FyARP;QBJhwOVE2Gz4j&W1*#{SzQU}P z*NA+D6|}n_OYo~&bD^)!NPv;*o_66zam~uHDqitBr*6VXLCt%Ep=b2}8ZB6b{*aHh zhoaz|ozwP;8!{sNJ$+n<2{c%>;irlf=-pnI)=5njCC;D6bmLku%PiEs5*>zEzHK0~ zD|`laU6*~%hEq4{{g$4=E!{i~-rHf|zk02N-cO?Km{a^{chR?wM|J*Q;~w`?J?`b# z1@~ijX7rnp?-BDXGsCEN9c5Y0EX|9)ZH*!V<=ZsGz~6WksXeQ&XKeL)wo3TotY{jR zWl`vr-DPsUZgNBaqEfF4a$yl?(*@~upn5UjBIp9AFYY=1@|M$=kK=mYEq}~GLYvHL z$r?D3{$VXw(Jn^&o`|jY1ZD}Gis>(t2cd*fC!i^$W*9T zm+U@zMSc64>Gez49e^_|4{*L``Ral5C%3dm%VO1snRc`YdAYV!_j*0C`_2V&wS%+L z9%h^336`&BmiOnrKs_~gEcj%4c_^P>Wxy|P-U*y!RUvq=28}t?bZNTrYcr1^8fhfo=OoZt)Nnc#A19vj;1A65ZKmvYWmLMIma@Q2Sr zZtLfKGE+%JAMMjMNv5>dettwxXUgu%H{OC2xcZ~-aro^Y@cys=Bj+#g?R-Rq%iSyF zT;Oy~SR4Zs0Ri<#+WXhOh7i@m+u(!!d(b-ae4|~e)VCl?MizYriBIo+_ zxfLeW!O=wz$Z&SJIt8+L8#6Lg7NnfaSTAaGc=?L`AAUgn+wT^C#6e#-x)6ENezMWHAS!20B z)9%x;1QB-@6wotTqDbJjZ)ZRA0*`09kzH+0hEt#C$}3t&+j*u}e-{Tz_aA9;H0Wrf zj1$!4-{yl-Fpv zws!i66<@mX<-Y@tmg-&(phuJg)JyEhP%{B01(7h~e?=5<8Z~5e@YjfF2QZ(b;bba= z09in$ze3)YPzZ}F?ie3Uk)`1T83sk5=E)Uj_;>0&z0b|}!^*iClQWn#Z7!Y+xJ&bh ztPj@wSXJ-ynOY4&Gt!MNtF&$-<+N&h8(>WU03ZNKL_t*gb#86-^yo8KnRV&eaVj7$ z5cv@z7r;A&mmqsY_LOpMj#?^G_QYA|){cl&O5G7!+%)Z&yVJEXpMOTFuThRH^AWom z?Mp=70KY)>D^$<4HUT%F2SiT5$^R;5l*c|BG>hY9YlM$gC%(lvPpyuBLH%knS+(o; z+)Io#=pn`B4JXAS$LiNnnV1;!8wT>A3nlz}v2REFrb;QL-;++Hvop3v&{EtOlefc~ zCK4@b8b$J&GL87N!AJXc3y8aOL0~Ox;%MM{9uUU{bU-fA`EV{SeGd*p--^FQ#z3Op zzJ3!U;dpYxJn_FsvlAwyG?q5A%%`LZ>R3-FCUq| zKEcU!EREyv-AS*$HG*;mF=a=vbl8UOlH^C1L2C!f01BQ>XMk8W+3K9ZyjJ+nG`$%h z_~Ob7@Eac4R*%b{vgmuVhjjBc^^?V|uG?8xAs^R04g~-o zyilBtzA@5!)yj#u7HykgxfboQiK@4Zv**#Lq<>i;*(XauP0@3j<9e}w9!>96^O;RR zml>TZOnbP#VfWkLVfQazvAn$E_TT&!=P$k_uGY|~qOJC~Ae`@xwA0Bv(bGgZ94Py} zo&7#8EcZurK5_X6-{ts=Z!IGsh*dEIXrA3rPq-H-mp2?f`UojAx-=et{Uv(xl=`l? z1=IFp07X2an>@7X>~YWCcKYboX%vU4U`F3;sr-f-cP4C+x7IB(GW|PQ|JE4|K4+(s zrbwCGNH6_4)ib)B228x5pj~6;k>NfU@udm%>YB3OBPF%Lgls#VY480gMArd)Aq}*g z=~c|5-!3@BqS6ni@txS6p#AE+fOjyC-8uxLw+3*+V!x3b6(K+5YDgm^k)7~|-Mw=Uc4u&V3Jt=`52blpDpJagLP`UWt z4bre%6W%v?v_7JKMiN0QdU{4j9?%kpdH!PKB-$GHLrVLz9i&4@jqk$C<^Qt6{iIsm zxXx$HB^ID#7Ns)1`H0;I-(h+G4f8i&dh}S~?9Qj^8&l1Q7`mfHpzYX2EO7AUA!LU@ z)go3aAZm3)^?Wg&ZdJ!y$CtwJR_l!F2`goL8cIjkm3CZhYNGhuHzuBk&$e1KtB>q%&Qh^ z-O!C&FiMGP+phF9yaGSt))W|(vl)@?Jc*%$t6yQ6e#1{>E9tqBZP%K5g>RRlp6Xb< zZHo$OK?pHm|2(3vv0973hgn`$N=!Hddh*6*&&Oegv9^M0LF5vPreA@)V5-04<5z0E zLCV4D+6<4@&c@T~1?ulrpva!K+|$~(sNSLNJ*B*5S-wPBD00Nk*feOLqRj3$slW?c zmz)sJzD}>E9!hTK%PE~XJ4g}>4t^y_zh_%R8^_YeOVGdLvTxV8MoY)%=qnR~Kk%ynY=k)7`q@Qf&?g1U0)%92g-ZM|_M!CdCUt)Vg zGOMd5lYX(@W73cLg)>Q{xUSPy$1u7-+ov||DoZcq>^hn6yUZHnG+!>b7S|Elc!6){ zgO>+(AHHS!@D1hW(%^D@g!2O|C)&fAc5i_@x!fVuue?1g^S5Vci(T!0U723*(I$3Q z{o6C`Xa$J%vC$sXuFp-;^0=`ei&4$GNYHcAha}P2&|NnAoYP+4gRG?AQ&p#T_#57) zeMO?}?C|ZKJtupE24lXf=VBmDFxaq#O}o)b)5o#i@tnPxg88g~DfpQXC&sBzE-tzF z!SC_-^PjN1`)0IX3Hr`qM#MK84On`Ph!w7C_b2ZE;TOF4^WW#<_rA~ZKYzx)9^g3l z%FHXp-MMV9H8E zXWHq+eE$wTMIjm!#E0MhfcwAyFRVO7E14F8!3A6?>|VbD7TUS793MwTb7T-dGM;t8 zyk(aCl{0evOWV?j;PJT#?<;A)78&o9?gpAN!|4* zxyXd<{hX=JXkvKec$G15)Jn~PWr2^Ba5Y>)l}hqKz{vJWQ~~I ze?;r6UB4z(p&Zcj=_%t2-ja`KWW<`b)CX2=oZdaMdv&1gKt7zPyNUMI896odp&{W= z9N_J2EojJlTak8G?)tcz#&_i)&rzSkr7Kw5epBVtvF=b_N_s?A4|fMohxHn-^H;w{ zA0F6$@3+~1{6prizhrs5Gsno?J3C4txRa+^){HYBi8(3sqKP!@wu=dinn%_2V&6wm zQVj(?R@fN&R75;4(7FTNp;TIX0DVBYg?5YTqZNDeGm#OAHx}(YvLkEohhA1Cvx=f# zjPr!(of~ymAbZONEPi*oUZHw#W6Bw1f_6g60@Dq;ya)DJxMBy*3z4Pq4R1-a$>EgP zSF1fEj%uObUmow>0Y1*OrM>!;71E6_O)R@N8>zqR?>C};qsa8{`?PZ;Q&&rQvbHDR zMYP!Qw}OqV!4ooI%idz|#&=OLR4QP+Ko2DqNl6tFYV!8Jr;8@Jph&OA9>1wX3j2ni1l=LdlA2{jhF&59{i?Bb#JLoq z)Jo~&mqC}#3v?Oj=!4#*lYmo5(#LWNZN7y^2A_@zsIa;UNed>U!Sc2Z=HeCVX<<}5 z`tq>=6brzVq(6?IECXLGGLA|=7ez14|?hLw6_Z6fveRz#76Z$x_ynoO9)roRhX~%`~Vq*IE%5L9zSZEK+ z|Hs#RHA}K2iFuz#WT_+jcJ~!CvkD8by95bgAYn8b9|+*5@|Eu}qZwcLKm~vbq!BP; zXLqoBXRdB>R8?h0I3L_SBC`5|W!8PpsmjWX@Ng}uA7}KWFsql@Dilkh7tbs)l63Cm zc-ZJqoR_yw-_qchdL+A{_xbyCq#E(l$|NKyJy~H;DYT-5^~8s&P*< z?rU}9eAqbZijKM6L^Jbuj~xH~ckKVhACSI3!-J)>N>wvtDt2wu47Pgm7*XPpoKWf_ z1-=oZwlfMa+5bZ{HpWoUYfihdy^Iug;qVzf)1J~oPnPNjtj0{F3){H1!LNGrI6Z=IEJBwCi{+u23X~CUnD^`o)iA7RR6+H5^r#Irl5j7(b> zG$GmOjCFPFx&~LAv!~P5flSBim3}cg4jFhFu51jvNofjr|BfGED|ax06EP*{{M+9!y?V{| z7r$hqUy`;vbXhom^EJy)-+A3;hK=_OD2Cscn#-*)(2GIqxu2m8L3{n;fDH(%?&&kZ81U!D(wDV`%hzC3GxhZyp z;?orh8E^#OWqY2N^n^ht!#&NBJvwOzC~C;fc<7}f<9ln4(*CSfy3UG)g)!cvUFzr6 zm!%i9G{icC&H^~j3%X-%P>&swWoSd4HE*f}SbmBdRAv zwp2ZW{tnd-r1YmK-+-QdmCvMHLEoD}kKsMC0NJC)mNlnTZ^{-6bOR^6+YPp3%Jm4t zpl=I%)W&}yf)X8#j4swCiF5=K+I>>;$hq|ETb=Xj%>8Tv9h`T?bQrCUVcwNI#--UY z_k3sxey0pZVw`=C#`jciMWWY$@5E3x4eJue*TAjVac$2)#WPK^>5(GNf}~}lsfHdo z@=zLVR~_C1D^*>`>2e|r!IY+<+`#!-1Ve!6e-QUqhhr!9i7=mAjd|?X7m`vCo_`Pe z&w-wsgT!en8gkaqdxQL|wlfRXWR4g0B)`-m;E`}Dhh(YMC^`$w)n}k*(l(n6UX;_< zkDR_eq6?JMFamZNc*p?y0dw6*cN-uwA&1xKr(yhh+-|sM8%H)?Fx;TAX~$nvkc~2ZzD4J1k@X6Cb{sz`dRA*P ze6HRE(Cr=da0&?NNUCFK?xY>{YLO6!Vk@$8$m$ee`>2buDn;H@aGCr{B z!aC@v{w&86)p1>;JQwF9ofp{pT*eMr7d=&QSYd*R7|A5YY{};Nn(jBqR>+5p?2W0U z^kj+#(q--n^TmwwQaYoQ;WK|IX@Pm?jC$et=iiW3kQei^NkkdlI5%V5T}e<)+L_ZqlXCnyb=W1Yluag{;06XS627&E0KB8D;M*N&a>v07VWG6m5Y z>k7QE{N{*0zp(jdf6U=O{xcr`)&JSf-*gT|Dc(@cn}&r!5e?1|R14eRd&|qe{kom~ z>Sw$rECn?S`TmWKbfZugo8etg=Yi?de%C1G4M7;GX_3k!c!aZ`g>}6YTB8Yp6?60N zSj0!^4a)@CZ+$IsDB=e2xFP8ctW>SuxU5fb^=gFdN}zfcN3skAEqyk-opWdrF5IKm zaX=J(F<59#s6>sv3*FW{FBA*4D4ry1n5Y{|b#H5v^|`f#1sB9EKPtB9@Gf)*OxtTH z8`9v@ooS&A3|~;pQ=Rjgo@Km%_8qMe!HT{58s?D`yOK6G5ggzzn~6HxSVHSaZ)0TG zOt6$SEJg=I@Ez|UOAXo**h2{t}uBZR#cEV`CKw?x#uMRjUL z<;jfhWVOEyT{R)e`LU7s@(R@h$_?-VUEbNX4VTw&?XY)# zphm;%F7zIGQZweH@$Vg$`L(gn(zV0$?DV_Aw9E%&``Xf>!?BPyz%}T57YT7T(ChO9 zVTOZdhys6-=IahVNf($CbR<2RS-Wyz9Cq+Vj8SRq`K?6!;(2RXIZDq_iR!#t93v~S zFO5gIY#s2m@wdLF{*;SXTs!idXeR32tJSlEf+aM?nu?XI{XW8t8Rzv(WkKr;uu$p` zsD4D`H6n>pzDM;ZQu=~g9}y<1{s3J2f}T)4g1$!N1o|ztz6>et-hV(gL|Geyac(eZ=T6+?#$8yxbrO9wkhLr5!p;0o~mOkoS?Y4HV@tMEbYe~m1be@a^Er*U0_%iur+URQC zaL@W+M7Bcb($d&ykJOJcbjbXWV7HbYFOo=k>dvp0R*>6S*sJ#MqQuxVYt&}vQOlW9 zimQ3z>tFM@!Tf8V$KO5p5kwojq>F!Tx~h<};X@eZRjtc?%Gsj2lUONb0=c%-c8a2> zicHyNpYJS<-NptBr{A4;`SfZcZ%H{*7thuT-E|BE2%R_h_Oz;JWYv!Q!T
^(pENqz9mm(Ao3LSH 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

S5OS=xgFkp{2(MxM~QNIFzY`NpqM^pxyYt05V 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

CtIx0TR%!FgvThs#=$`%^<+ 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%0DrH{8GE_EE>p z+s8Ds1FF3vp2Zbo<5~NPIG(c_dV&g#PgG7BqwwG|apw?{2kjy!D$Hks^CtSFNokvm zj}xd9ViIa~RJFsmvUS!MVD8C#65H1%8f4ykijn3l`li zFW%+w^;6#c*7vBJ(M*wv=B%tgQ@;N{!;K%^=XQOc)-OOW(B&o44alMaT_9V4Y1q0FFR$zwa8Wm7ecU0+zFWX|HQOAEPlvRpXYVC*yY)Ar6~U{IsQ7< z%pEL(@){NIxXAmOc-uK{I@ptBNfS|bO0RA4N9`QV48&WoO_LInuw23aap!IR?tl32 z8E>8tKL}j@@xSKu*N$-aPI&y!|5tOWJGQ~j(wn-?V+VHLvtP8(u%)a6+rB7=mFPGE znj-PSSW+5G&bj16i?u5|L&;K+Bo$G(ml35o%*i?CTVXd_i}D5R;QZ}J3pjrngl@}? z*$ZW@dMSszfcIS|)h@mM6|6c%=%?>0js)^pEc$A@@99g^NXl1~b}uR06E1xvicgsq zuQ&l-`gsL6?||^)fD_rF!tXp+FTGMi{nJa^i!ZqklTTOk7wGmF>o$i}9u0A7K#R`j zg;+7l)~?5ACwFao-(>(yEx?q>KQ(4+v>{CfXfv%?X1ne3O3P;hV0h6{eQ8F0V~^p( z6>bx#g0oUtNREJ*cv2|~qj{m$T=K(c@pgYHnm5)!dMO}bK=-9C%U&{@XIZq(PTt8xfzH>rI4DGvU4G?oGDqpm`#rnRYy^v*AhvNww!r?n4{)h z?)U6~5HUcV2c8tMl(->W|HxFUOCLw8!|L6O?A2VL!GX+BX$k2*ju-f}w)RPxHcpMo zf>Li)wL?=+5#dv9NT~<_THSNY`%c!rS_~3Xdp8B>8d78J5hJ*iSq%YP%tOFx@ro<7 zNo@LNN|{cEQMnFlNx@kjeaXqs!h6F7tPI>t339I2Ld)*uKp+iJy<_%}h z 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

)bxz1o{EUnQ2$EB_`hkW{}addJhA$Bfss>`1X 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

S5OS=xgFkp{2(MxM~QNIFzY`NpqM^pxyYt05V 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

CtIx0TR%!FgvThs#=$`%^<+ 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%0DrH{8GE_EE>p z+s8Ds1FF3vp2Zbo<5~NPIG(c_dV&g#PgG7BqwwG|apw?{2kjy!D$Hks^CtSFNokvm zj}xd9ViIa~RJFsmvUS!MVD8C#65H1%8f4ykijn3l`li zFW%+w^;6#c*7vBJ(M*wv=B%tgQ@;N{!;K%^=XQOc)-OOW(B&o44alMaT_9V4Y1q0FFR$zwa8Wm7ecU0+zFWX|HQOAEPlvRpXYVC*yY)Ar6~U{IsQ7< z%pEL(@){NIxXAmOc-uK{I@ptBNfS|bO0RA4N9`QV48&WoO_LInuw23aap!IR?tl32 z8E>8tKL}j@@xSKu*N$-aPI&y!|5tOWJGQ~j(wn-?V+VHLvtP8(u%)a6+rB7=mFPGE znj-PSSW+5G&bj16i?u5|L&;K+Bo$G(ml35o%*i?CTVXd_i}D5R;QZ}J3pjrngl@}? z*$ZW@dMSszfcIS|)h@mM6|6c%=%?>0js)^pEc$A@@99g^NXl1~b}uR06E1xvicgsq zuQ&l-`gsL6?||^)fD_rF!tXp+FTGMi{nJa^i!ZqklTTOk7wGmF>o$i}9u0A7K#R`j zg;+7l)~?5ACwFao-(>(yEx?q>KQ(4+v>{CfXfv%?X1ne3O3P;hV0h6{eQ8F0V~^p( z6>bx#g0oUtNREJ*cv2|~qj{m$T=K(c@pgYHnm5)!dMO}bK=-9C%U&{@XIZq(PTt8xfzH>rI4DGvU4G?oGDqpm`#rnRYy^v*AhvNww!r?n4{)h z?)U6~5HUcV2c8tMl(->W|HxFUOCLw8!|L6O?A2VL!GX+BX$k2*ju-f}w)RPxHcpMo zf>Li)wL?=+5#dv9NT~<_THSNY`%c!rS_~3Xdp8B>8d78J5hJ*iSq%YP%tOFx@ro<7 zNo@LNN|{cEQMnFlNx@kjeaXqs!h6F7tPI>t339I2Ld)*uKp+iJy<_%}h z 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

)bxz1o{EUnQ2$EB_`hkW{}addJhA$Bfss>`1X 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

HuG3w+N!*@O-+LEw{%+!@o@48QJ@WNij31d2 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 literal 694426 zcmV)aK&roqP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H1AOJ~3 zK~#90jJ;WtBsr4j_fr67euYP5K+|6NtLZSNC0}AuNx*x@5bWu_5WHhM2F5Wk4uK$!^q4rkJCkBEI%?*y4czZX z_TxbCLU4i;Ap;MhJcx3cBc#md&yM`;<#YDqh^B0P1~eNF)Q3{W1t>;eRQYh8`0DK= z-+nj~VB_u$C){iY4x{I8KXTlUxZn{HYS)cdY_99v)W;A4fA(MhTYmo6 z|C-&+E$xP2Z9qqXW&8kIm`^FMSy9cTl$bAPKD>RyKmEf$@PGcNzvIn!?-&P92#(+# z{ty_R5A5!D9B+2q9QNGa+_K&67={t=gb&|-&+q^Cx4ix8Ex~)cw<=Dx^=s)1WnJ35 zXjvbWb)n_8(y`JI0m({CnTILz)td)?`~3qkXM7MgLD&zD-Qd{;TO*snvmHFcP}Y-k zBT+H@T=Evc>Q=LE98&XzKu{TL6CkrZLHlq*7+5&XBYyz-G=?mmgDW7 z!_AJ}e#^MoFl+|GFyNd6agDE1O2lO2Fqx2uF%hG!={QHGX=b`arYUl{Or$wM&TK}{ z&3?mvw_&^8;Jib;L(4i%DHBs>nj+`(#OXY9dYpJXT{xX4rYVwBHl8T*+j+-0c*fB) zcyFIMOx~qza@z^p!L#24HiIXK;00VG4CJiLQ{r?U%vqPLioJX9)Ifs<~E;p0b7p+SG$ld$)%F@^NiJH9EBISgxZIpSM zc=z46eEpl>@$3KlSG@V=dvY#PsOWHC=)Lj67#!X?#0lbrq%bFCs&m=hyY@rM`;?Wa zUH_WC&zQ>XrE(pkHhGY;GApEz-WAzibgg!>m%@+Z;PD$z(#+#L@&5759AnXCMSja7s0{1W@d-(l zlxg^-D)@P0xO&L)oIAJpe4u=gl#~rt~I}V2} z`@!>>gU`LNize^BeRtuHZ%_RG?U{F%Oah$uD9SuV&QomoF;$)p9=8q1=omfx;&#hl ze|E=@p53q;JzfNIBE>|CnK?%0+4?yrltQB^+s(UBkj{1a|pJ!7-q zl2hXQufFB`@7{7!LAP55r-U?-a%7qkr*q`P!_4Ei7cTE7ayFixQ|9*WhJW*~|Aa4p z@g;}bTf_xKT#<`aFD+|OQB))I^p3~rJ(rYB4pccR3*RarPCy*adz|<9Fc8AX5JrZu zWgNGR{uw|w&QhTuJO%sf6``0mXE9=O>KgmJ^+aNu}6Al^5c<|1p8D&ic&eq=n}a6X;* z<8OY)G|l9!JU&clhMVokVLRZ1V~&~R9rJGBl9kJ4CSGRJ6q(L5@sgOPh~}aTonsgS zhy9MjeuDy+^M&~`q1c$R6ULhjezzfsl5--bM4A(6N`wS@Ntp7ct^bO5>l(}jN5-Nb zo%0|Nv*DBN0Q=3rW;>YO7>{v~}x8R2)8dg7<7T8+OMd`{ON}{lWOnxwbB-a#a^u zRP}_t+CZ%xnKLAlj-M_(45Jd%d3(_8rIV$@483R7d^;ab+P@etKZbF8j1+5 z|6;)Gc0X`4c-*5R8E`h4zJVNT)B$^hjd#4c%s4NI8}Qx~1vxXiYOoh&EJERj}7b1h=PjvNmk~LNI}f^F%QNJq1q^n`j+3#fWf# zBDx4OQ7ypls&mz8P?dZE|I+4gna3(=?HjeDDSuyeSARz(2-V4Dsc4o{MolnL$2Hk;{4Fe3_Z2XvVo_fm}c@E z5rqBCjxYpM<|3qI1}l{JQ?lM>B}W6kIp-#?oHGYr@QxsEk>$l;bWU(u4Dpo7b29!7 zt{Ah$=_W!Vquw!iWp<9>OumN#FhZ5XP11Giu%o%C8tAFQ=ZXup08pTNr5X6wd@H(E z7Ei9!c8R^IMu_VA>S~19`!b5AX!;hVm*&Qzy1rE}2dhAkD?XIknpAtX0~j-y>1=CWmn(W5*f*wy4h>^;{id~9s9)AsuWLF$(E3{G z>kzaU@y^+L?De!OfeCTutTQ7SayAEtG~KGL?+U0h@->=Y%>})zynZaoz3BGtvvniw z?`7$T85)B(nI01oGvbmtD$2E974M3JcMNPd7H9~;69$iWWrm%s=}FJmdi}+s`s>&+ z=j|yeNnt;Z9CjPL6G(~FwW!6}W6s_M%!A>So8yL8pB~vBM`D_}yq`?IOJ=;;kY?qq z%AA#XHpk*QCJX*-1G03 zz4D%z1J8-Gk>*HBX6UDU<}yDJE*plhVI24E8HNo`d@+!_waC)P${SkouL>&0=ThXZ zh%^Vf^;L1%=B4UxQE<4z_ZI9E5i>4*orC3uPE5av^B|7>vzH8i@n5ky9Qf+*{|oP5 zzb2p0IJJ3KAd7Zbtn@q6oN8I^9_kAplr;&NoD*IZDHD)1p~(Vj`@!+-xHWtZhF!hs zNr$l8@3^~v#%{kaI;#W}a*+llV5H^+L{lUL&++!aAAa`@sxWRmlFgR#-jJggL6fq* zn3FtA%G-Ar=F3cqW-NOI7i`QvcpG1wnJ$=9J7=SbLI@63CB8e8K1}#czzv0Gri`By zNebe~k{bbYTXPQQ)P$2LgEy=9i0!%YWTwF_MDsh=M0;j zVMpoKCRJxI^s{zzx3)T-Z9UK;6BnmA#X(YWOh$28$YOS%%NZp@hhdxSTN&(E@>H)h z|5Hl1f-)e~#x|ql?q=k;3ye7Q5*Ofm1y}{^*8$;|&vyJ@Z{huA27z%1IA=p5DTDWH z2FDZ~E($~N1mN;u*E{bB0!}iqcz-DZc%}Tx!fy+>ex?g(s6=;SLLuk%uopd31Xw{` zRhiXAQlqN1RhePX0sw`gAgu$Qg*m!V2~q)04(1IXLmfNTR}%EXvCUn1T+ zQ{Mtk%%cN#y)O#eJHb0w4BHZw$rhEc@szP)im=ktjC^~|D$RpLWBA(5O7M=5PcjxO zfLImUV(1zHL^A^k?-Z|@AepU$AO!c}AItb2O(w zH1GI4*?lZ>?ra_kI2gS%#aANCmF5luN**j??pY$uSXA9)jVbKh1ax_3@X!o~u|`IV z)1;#|Z3ZgeH7BQB&CFWl)N7^V2widc@|%TSwB!6Ax=IQkEWEd7xboW8v|fGR1C7#R zSw`*3Hn2sZwU4TBD2%97fNGJ3^_`^2@&1n0V5!~f@4vVN%Wtln7}w*i{p#gc|GvsQ ztxnAfB+IC3%enhW-%g{LUdf^IURHVsnt@gRsK0MAwe?9`n@_|oO6$27!Ifew*=RJX zSN9;R(_m_D0A-C8S~nC_dfw}`-*W#ec+&2+81aj4sIsl;{9suf%|KUhF*C=Eq)e6) z2^2wc?VmIUWG-t-rAf!eTZRJ`z0zUnD|J_>(_y84&fBM68qTxGQz~*Zwe{~*@!qis zp4}MOjRRu{W_*YNc+uQwQ}O7^;Zf&67J65m-quVLQzW# ze`E;7LF~+`Z2B>`c`Om&W~7&P+J%ZrDwsJFHInm%Ii0x79~h@C<9HwpJBBb4{D|{` zW-W_3jF2UAUtbsJmo!;#c&g_W+Gk7jU)xxv(9Jsotg;N>zV}kHaV*#+;u((jjKBOh z?4Q5lyI=nU-~Q7-^5NU>V4l%j^d2DOrjNuGXRRt;ge+z5JCAmp&6^-tfXU@#23xY| z^8M|W-DvoA&dO#CjNY-|Z@9lb^8D3HhH->Aqb2LiFrySlK;<_@V?-}!+%T})Z@InO z@%10y5`yPuw__a4c>$)g2k!~vfExw^j(Lh@Y!OmI)v}wtm%{f&e&^g|x^r08KsFh% z83L%`(R{Xuw-ld}R;P(9y2VR2+144(bk$#kO{=`hckq%&?4%<&%rclR&3 zd;Ws$@eUt`%KRwVoEoyoof?L<%#2)Qmd&TxIaJ_SR7wdV^!ljEfr2ej<2@9d0n3&p zkkbs_A$}-wA}_Ls9xh0)$hwvN@uR;YfO&V0`;oi-z%F>?eS)kw@9-jcR~LS?j2c8d3YymMn_DZ{WdT1w?Cr;Y3r*P|%aX810EJ$EB+Lc0C6pr{7+>%AIMDY3?q9wWn= zjMZCdVrKyW*Th~ah&EaFk)t>&_8Yc08|I|Mlo-!5;vi)M+=5zKj?{GJC2hINUGtiX zr3ncw*SDrzS31^oZZ8WouAoAdmZq6?5tuzdt>k%%#Tw8m_cfre1TrI$;4_<$*@)uE zI7$l4>B5KCGe;fpabz23L>$Kre0J-INr=ZSs>+-!V({)U^36l!?Kv~Y5|N{)$GV@@ z+g@Rbbn|cx)Yh|j^{G5{rL>m{G_~+(Q&1fUSVess5Hs(kOQ7e(bdF5p+!U@}5~puI z@c7LmE0?zG7J*6&JQ|Dku@bm(*0JW}t^4_~3A%7^zOs;Ls9Hci!R0 zfC~X9W~2k)9Nv3WIt6b;D>UnS*~9I^$5(=G1!#J&9?QHo)1xi$C&<+9QGZv!@Zbq! zU>E~_@c6K#5N1`TY36d7m@X4@Tt~?-mzg<6Qc2UVM*3Xd$Jt&}%#Ank!Z3JlZui_i zzu|CuU{@mcP8@Tx^vjep^IW3v=h^Nx8|ZCYce?FKqjwhFuAm7TICTOZDJkLEfta zF6f;#O=k7|z51K0doGzA9a~+AifTw83t!cXt0ZX4wt|W7Mm?>bTG{PB{rErna-q+< z^&f6jmY($=tnb$u#@ACQEIOp!M)_zUm0V3K);3obIBn*Zm*T*?YOD3_qv6##*M)zc z5csahmKr6m_j(FgwQV$2hS&DHd#Ze*DK%ZsMHQfN>vYoBUqPksW2quRp;521$ z-Xhb?LW~*Iwp>8n*73B)uD4&dJN%G#*Y&zvQKQQkt7}3l4;f%|P6${ApM9LGR~3ig zf@ix4mg+hNh9YOR$P$r~=_Aq^S1tFX$tJm)^%Y+fx$O&0tL)M0J^H~lw0^IuOmpJh z!$4HC-cOpGTznC->ROI7 z>HJ`L*M-uq8MIoX&(MtMzC9yBMskUcHvOtVMs;RRN}eJ|O)Y@;qt7|WuG#b7U=!1FTP8YzvO6 zVfE~7&1lXoEx*pDRvvB>Y;xMR{L=1e^S%TbU0Ii!mF@1p-K$TzdH#xFy9ehR&$noK zmKKj%%dndLYQasl{kX*`P&ushRjbTf^7WRyz2eMtVwnuk0&Q*WDCF53EfR*-R(mKb zJ=s?53d8;&7$rC->^B3?_9OezGen5z)KXxYKx~?}F5u#=%EBSR_N=fOn568(%h?RY z&T}yY&#SvFpT4-`aM&?!2XKxl&deW_(T^PWj{PS)UOdix|J4KE{O-Mh&Q1wdh1cn_ z#stl4rv~&FfFO(3kS_hYAJ@VHZJ3qbk{7Sm^25auklJLh`o8uv1L9qA8g!tL(r543 z-E0ZZZkSW%a+we(#FR=3tVP(G!Y#_mFB01p3^b3N6yvxNX~kTNqN~GSY#ePMe7&gh zMRQl?C8ezGbtC$cJDl!GKjKQs7LJmHFmvV??~6v>(CoXC$EMum+jwT*|};K;$E zv=Cx>TLDnBLCV)l3}GFI>p^sz^6D(= zryp6RZd0QwvN#ax9?ZqjQu+}U&PqH*F5_f^an78+Kk@kWBb+n)&0va-Rp(Z~w&Ki1 zNz#-}>t_=pYx4B-EMktlF$fNe%nrpsuVbju3@y$a@q!G+qw9i2w`(-VdrL>FywzdC zHFcNQ>Y=sqRB%<(B((t5Ov;pKZrKw>2O8^bv@;IGA~?Cuy%dOE$CGnYOetCVx`^=o~{^^U|W`mMvh>bB{&K>po$NoYyp4 zo8!7YSXD?#NpnJz8oy#Gw$fbHm}kDt^NQhYZRkhry1bJPtk$`z93hJV^U*`rZ{_K) zuKEMltu-KU-OiQ%U9}@0e_s`ORX^_PzJ15^sxOtV+j`JGvUfco<;h3Ug-<@N<;AM0 zt3G~oO*b+9FzS?bYpj3NHMu}8Y2$2-G`XN%UogPF;J#JwM1ELHR@Z9^}6>`oGCJ^eW4aX zZ$w(arK~7nbC6__mrXui&zf}ft^E}(n4`;Rs1MzE<7#dS8YCyUoMv*I@I$a# zJKlqMBzV->-#r#;c&B@+W@@%FQnKbM4V-{vvdmmk!siJe1Ct*JenTF1433t{ZO*6M zHBQTHTRGvI7?H*|ChKUR()r<#eSO!X<%9k1(MgP@nf^&r7j?MPK@#T;C^p}6Z z`)|JD%^!Zxhi|{;^6)@9pCQdugH8Y`x!S5yY9}oLv21%|(Ug#!P2Z=;v*VWSb|45y zPE3~x9Ua@zBO4EzmpT$oz?X=!){11h;qs(=;&z&x_{=(iCmWr}yT#@aD+! z+YQ5R3x#gSR{nwTp#bM?>;}CfH>1RCu@fYll&k*O)w$HobR;$@kw*mB6R@Lh0sCM|E z6Y~yQU6kwW-b#{dG|)6e5e?1@xsov3o^$|>(Z<>$>Gg-L^9vZL-&Y>~7xZ@641v3w z(TZebWqLQ`)r@Z`3ZaHul_d?dE+{90%kbg*6Yp~7?!|%Ken4F@M8(<(-gEnW!;fDb z*&a3!ggIr>Y=srxeR$yg>B1ZnAvm_TBR_k2!;8<3{L|ll&BKSO5wj`_^E^sRnGju+ ztx>o6s8^4Q9s50b4Nzzm-h2dHnv#>Mv@IpHO|ls16xKv!7jg*r4(96d)(^Ua&3a|j5lIKO(%Qqu2-AZ0&K-BM7; zC5VT^ZsbQV20pt_{HI^P<=YRI65cWkR_7^1Xibq!jIyDF){qzt7H+b~+XeoC3(9dk@e3VXDDd|4L* zyc+8P`OA31P zz>Ab+r;FTRSxZ$`x3vmOo^$D9lNL1;$u)S8_Is@g>uMZ}nbLjM1BRZMJVEbX@9FjT zJ!PMefgd?Td%dIAz3SRo)9PAw=~M5ei#T5O?D|pVx^^GbEo&_*Qe>8+bKpOTolL$~ z%%zy4*|p2h>gv(DzJRPTy^6~(t0qD%X2y*Bx2-=&n%4C8KKgB9pg)v_F@7#G+lix^{YHjv9f&ley?0{N)Nd`d ze_RM`{E^M>hQsq8@#5!yMm&As^zIGkcW-$3?lm92`HFlwm1(d7ohc<;G-aoABwsFe zmtvfsr-=`bGrRr3?ahYm7@DqCt(<0iu&p?zAkGTrx)MyVG;1jVJY%{{byzsOIMjRQ zd145GSFer;gJrm73#j^W#P4>-)1|)C=sj^9(5wXKcsxmQ42%`r>n*z5JAMzo*t;XjvcH zZ}|{Jvt{T>E_Aw*P1j05X#4wJ=Ui2^?KkhGn4%@Hw&+o<>z*nnDi2~=glctrBr6h% zk)FFwNRu2*j`V3<*BZS35srtE!#3bi&L0wbPV6@W!)RX2AVy)0iKiabGn!R-_%L%m zz2ojUa(}mDw;34sfwc9!cy-TDzW9VVeL#g03AX6cbg3XWSpfkNLbB?cFMoW`?ahwA z|C`@&et+rv-pOZEW`3>fSJyZ-he6gpk%0zqnt@rBUI!vY`^j4bfEBVR@2gViI#>at zbf2})`+0-n84rxx4M{FmVZKws(p|qq52;wO^}wf-!e0V1V*k zE9jH8qyTk5QJ1QW7Ok}X^34!QnM+JurpS4=NaM}M;We@wh2T7jGXbc@qh%O_!8;B< zAOomXAuB>d3UC4uXA45ia32QG;jm%99SI@w@|zQH9%C!;@iAOnKPnle4BBI1|WWK}&+{nTQVr)`)u7hDe6lMJX zGn6)t;^lNwPHNB+p{*&0<@!>WK}ARfduRnb!Q;dcN;OX_5VwGx<^EdHXeHhl`i3y>J{^6k<Uu71@o$7ah^K`cv3bWOpp`b<^^#d3?L;;IAniIJ@PxMYGXO)VX{#xhSm zwEf=;n-0!&^k`Wp6_{4}Q-0pBk!8X5M5;2lr&ISiYrWc&w2AFbcy(%=!a1w4xrzm@ zh)}!KuCKsO>hDVSS7Gp;l6{1T(w#owyHIZZnRZ_qi9Vj+72Qz_P`U~-x;?y0E335* zQu=3id?FBSGP_}q?#>-BUG35C^+vr_neEDbS&CGm0@%HUEeD~oS-d^5u&X<Yx09XD zoX=-Y4`*|Z$IK~Z4*P*mp6wV%k1IOeWBcKwrKm9M_H1vCt!|BXp6qgwi?%J*#_CY9 z!g=aVHVq-Lx!E&KGY|6vs>*I-1%oB4&FOYyQ8_I|&9F?Gs?RqY+xl=i39)3`)u(f| zMIZ}^y0XW*a^PCVqlK4?EC?mgQtg5{Wdujm-0C`1;U;3(ce~s0$&Y`;r$6}#H_u<- z{LtpJ&)~gws#l(#Xg#CssY-xElzipxQZQcJ~|h&yU>S-*7zc8H0xemk(#oZy&k5 zeIQM9(}7hYFPO`UC`=z_##!;IOu!{3!nk1=9jEv2aAG7fqdXCF2Vj%hQEM@i1~|UF z;}?Ie{NvyJ7GiD-S}2OIfKL@|LvvR^LS0d~=2&XSw^fEySfa&7`j3i;Nf}@BY(pvd zQ3OE;eX3Dk1%Gc;NC7IX-7=P3qiZRfM<(Zz8e0^98E{KKPu7cE`&7o1F=s`h6n-d7 zP+6;whNo;*EgSPH<#;PIPGU*FP367qp^bL@TTDzbl_TMzy+$+Ia{(>4`++$o-2Qr&A)liEKurun&&yZe(}Z5=KX!W=02tK%5-M zU9dElHuEdp))Y1U_Z@(*bEo}}bh);@yVj%qLrU~qg?7q-Ufrz}n`mh`vKZX5EGE*d za4FjxVkvszN-G_Iue&21Ap4>2)&<&bpWgHA{>aVo!2YmjyWQf0 zw>0@|&p9r~v(0mA`{+UeQiBr)ad=gN+TJ>+MZU>GK?6s|qh9J>uv&MdR*Wu=q*66H zs}Qp?&zZ|)$E?LUwRsRs?xeCeec6lF@lywwpVUs}<0eDfY%j98vB$^1T(QtKD=jIW z#V~v7M;*`g$fQcmCyl078FIOzrD9i}sFxK0Q0*$K^T89XcQotdmg>@*>vjFHY%3$x z?j|4oKzW)Ft3j}uxK25)6T{0TT@%$cN%pqFL3`q}^2+^VzhRp*Xxyhl?D}ev}@|$b=~Qrf3L;#GNYaR(!S4&lRc|#%c<+G z5>Rx_)%916Cu?7Hq2X#9+!M4k{oHMHL|Z@B3|J6QH#tsW1MJFHo9e9)z)Lw=bT<-i zcKH1W;{YL$gCilN7$I48pH#-Z6ti18*&ISW>$dKd=%5zoN#Wm0$9A=IHa|6UNL+D# zXqm>vkQWg<`tcOm#LRX#;-o|;b3HUn5$6bDU>MX2xM2l7bIjy(w7si687qw{80k2p zji_6SRfZ!D7dCi5GHedy9L+eN&!qXxJe`Sgvgak@{KX0ljsrdnNC=1zm?sx-zR2!O z$4<7--ftM)2FZ{llbwQC(L(P%qZ=6VfMbIW1DOlSZ`lrep546Q-G|rw@%S0OYVJjx-%BfA#0(4dU zw^IkY?By{yG%J&oww-N@BnUURM}GA4pYh30zGU3)8*pq!Ib~ZdR%6TR3zdEOnw#^} zrc;bY70;Exh;!0TfNCqJ$%rNmnvk;g?e|i!tERGsOZb0ftZQ}5(gcyNp3x+sEQYx0 z#F|B<)FPZ!woC2g@*x0W^i~w;JSTMT(48j^%Ip*!Ji}qfI1C&=eTFE+hYN3h^EK~& z{~el=DWrOn+I}t`BoTaq@e+Ce<^x}U^DSR|@hQ{kkzCR&EZuX7EZJw4{%O&fL{|9h zi&vcAo%rS-zip|@b#J5*xfn#%U0PDNTblUSkG56MjH?U1YBufC z9=i0}r(wgwxQijbfVTR5O{cj`maaO-SR!Vrou_Uol%;=pG0bz(O=xBv*h0 zZIA0TM@|Qafqy-YB!Bbw60rGjeg73*YVNivyYZ= z<%RCMzUbTP!rrK_w7a^dPqT)_2w3ECAH5Z-Q@H)vwbq<(+JR%OGOEaS7G1R-RNqd0 zT_|wf^IkagnLpZ(v+pQBNYOU%C+umi=cYRAR;#|#Q_I#g?fTQX!249i%2fH|(LMF3 zJzw%2);zZieJzum2%kI~_{C=f4%?MNhQ7o^4&%aTV?;|9KI% z!E-wXJ1Q+WbarSo`9Ev|!(ofxZ*aQ}j04$wvbSsAB4-V(Gl+hsgNu!e%!zZbwA0G;V74p&4Ew1W0y{v}z_@ zBI%q~sldJd>FPSJ$9TX%0|)YD9g(SkqoOe$xhyJ0|w zfFDLk$wDV3b4qO^Gn;VWINT%W$mRR*n9uJ>`+&PUz|E210%IDHS;?0RIbO(VCgliZ z#?6lV@EOCfVUXYP{pk%qe)Utn{PHi^-#o`VOUK^r4jgXo`2NFpoLo8jYlYRM(MF{1 zmNSgvOWF73dLyu5gIwmWwpnDcD#LEit3UfUgzXMoU^w3M`q%%+{2%@|%Lo%o8TSt2 zCNK`dX0W3G_xpkE;Luni$;pmO9rjyZeeorm{ek)NNIX42@~BIA=g3}6%!{`3$(wOk zu|AX(ZRPgGJ*S5U-hKCm+vAa87)etu+ZJ5OBDSpxDP_F3`Y(B~Kta@{*xTit+EH_= z=1lTg+Bx4U+8mCq9G8cd$Z}rfN3%DoK+5Jw*#wUOo6&Rs=_mZ?XFuoo>J!8dSYfg(T=P9x2GM{w|Q-f*+1FqylsW;H?W3NthDSfE@ z%sDSO{K{CjXURMk!I8){FxA$sVJbx0_Hii|blo0ZF>QT>;NToHm!vpv(UDY(7^PIa zmDZ38j{S=*hi6ANyA9v`Jh9mfq%?Ax&&}b`=BLv9sYhod)UnGIHQmC=O)*v;m(`U^TgzS<7U6#d^coPA zrJu_r$g+?`mpw^sZS|o4hac^V)}JNXQz2S?)aX__x}^xl27s%eD}u%866x<>t&e7; zM+KKNE+t6Ol#%l!rDV!TJEG`ml+}sRic;%*bU?U>)up0xO&?#;qI#1{rV83+*w8%g zR;}FXwb)!5ZEBW|rp%lbNegd@&>R#}6-`~2MX6d{3SEj0miyM?QoH?z=Pzz~c7Mb1 zc;Il@v)OG4KA;riJX>}6I2*9C=)DbeGXyrl+Zn>%4E2x|ofGrfir1x-naeyb>9;ld zvh4d?wstOn8!>NxPL|ewnIh+N4iO>p|8vUcnAk zmG^t{*O#_&R)Y1a|Kq7_kG^OmB5kDosHEuR>Ua|oe)3}E-~V^7xc|u=IcI+Hci-|q z{Exrq`_p=!dpuOB)u)|TGyR8nzZ*`&H8r?k_$ZUIl)aoZ9F=mm$gC;4BEoLx(MQ$E`U%V`9EUV%Z}db|b@fgWHTq zc@hFqK<9{?BdGykItOo0v9%QFG{@?DMOrXHOHCWsba8P!ONpMl`d-$~maE%NQ{wb~ z!tKut#aJsd!d&F84*~BzDO;*^o)hUblP;-n!#V?Xp{IPrBg<>o8AoT(*B}+3f`~`d z6a0V-8#GR&cqYyli>9ZUI4ANPiPJ<5o)m)B0GPKB4-8u?fVCfw+-+asFT%q&U-ABr zzvXgzfWa}myv6@m@V5t4BYB!FmEVqhK{ORiYL)x<`&&K}_;ma!_n&;pZhvP+n`TrK z>R@xY<(VpSe#hi|*@M3PGhSPWqF~oJOLI58Rx3jo{;!0#)l-g1EIb`#;O?`Za`W;> z)IHLh?T&Z9`ddD{eoYPoqXfd^360UtB6k)o-UZjr5Z~-~3<8(=j4MY42JcXBTQ^9S z6=Dm*wo>G>zUw?Dr8&E(xN@4=-W+-U=_?*SJdkp>qil0Pf*rSJaez{=(pjHy!Z-wL z<1&%6Lk3Tt9J3~>flkf@@9jhgg^V*NQ!#6NNxhe1W0^frf}bV2ZF0hbrN_G?uYUS7 zo`3!&TR^(V ztA@~Em_V>;I!IBS@V*mSkfPITh~PgIE$X!)>Buo(qg33bdGg4Tw>-N zQ(=a(x373z>z;y|)<7}dhavFEFTW&DGq3;YYb$yth3%bicemxspS|S8iyO9^fjCFr zUMAjOW*$#xj@tp}JgTVy{~D#%0&*7v-J;6ddFHU+^T|(N@YUb_k%G9p{oxhBXfq%x zLaHjL?p??wx-LbzEt6Q$SBbutu(=9Un0-8j=Ry3 zyyv@%GR?{<&RpUnr_0yey*_h%e#>URL!2<5CeH64m>*7TC35?0$FK>^SnAOnZJ~&> zqrl9Gvn{uRdD9}PEWo9G-vOW6rjy<%TAmG@w(r^u zR~Xd#ynbB45?S^OE~GGLQqQVQi9KORG;r*!PiAn+RiCA$0cAC#tyMga33YY`XR1Zq zQsu7>j{&{k5gjG*^VHo2i2Cgymx3lUs!tTt=Xz)*N&R)gMO*hKCM!xyJ!1*wdU5h zT0O3=YrpM&u^5!)3SIM4-)?PAyY*7X)No<94q>56Co$0KV6Imb2Xhr4RmVX!c$fRH z$11hUZOv18zZzHc?XBB+^6@Wy*;%94Dsa^|?LLzyIinvzyYY2Rg4RY|W}P0d;_ABX z>rvK7Z1soMYAeg{mYH$_fBMCi`=8yjeR+rG%xCk=&tHARZ{AGHm7Pwh^7s1wANeC$ zYT48dRL3Wnah}UI#7riMLt--gQ=N`lYF;G63e^MA8xv}0Z>t&0KTv>53Qk;PE&9q3hlXW;TU6W(2L+WwVBDg4 zCdHXKPRy}nZdPOcbY^l7xbZ#1ZpYoTPq=;gR}5@9z5OE(Z@wX>3+f@w6Y;BW(ODTj zAK-9nME4FaBP6v`kmlL8zm=@4&(#1EYan|?UB#_)t~d~r$5J!yGH-48Fj^o zRl8rxxnyb>j%vZkvd&$RfmsS>RpXzUQBWUV!~!ox7gVRC1yvVWU!piBU&?)?7}=JA zl8a32wVKZ|4^qz13>FX9v4PN;2XV3Y!|Mm->zq)1IY#7GT0Grx*!7-P; zlCtA+xiI@=6@$I)sfcND2E>$GrR4MF!ge$A;`0}L_v_biNz3s+z2MRX#4S}-*D$0p zR*NuHK&9<_J4VXR<=pK?_Ind<8mok$?R#G-^D89L@TrvjGfUyjMNt>aZ@x^N-hSZW zJoE5);q*9hIor_)_DsZ>Yn`UDIHWC_mfo)xJ;@oOCWu;$`dkWmbad;C6QiA-eT=t= zxL-xqq!p5Ku52HuV=PV`t%Y3FK*Q-0`OQCn&$m8tyL0^H^CQ8*x8FXnA05YSAUe;7 zl$oZ?6cg_sCZ;L!`t=9k_oZ665o-vJyM5sBa))!pfiNfXoNzAi$%}h_{6YBY-J=OD z*MV)VZj{BitTWgDeWmf~9Vx3hgZY=d{)~a=4?Q6p2^~n0kZglqjEF8 ztI}*ByLv8rc;A6mqoo-*s(YH_NipSJU}4nURk=xBRG=>6wLFmLW;ULG{Y@ zC#}i)qcT@1X`?*~8uQ|Sy1u_Gce)<-;*_V!>-Is{iFzcW&AFnf781*)((`hMtd>!; z+Db!-=F3%4(Y{YB@!DK-3+*eP>M|c|N&3WlS;i$I_~04Ffz9B_p+uF(L<%0+jkxWI z-;DTiurzDukQhsVC^N@sTcUJL)1@yxuh$Q?@j$QaEHYMQo~-&==cbRGTSfMAZWPNJ zG5TXXLEB$aDyGyl`f>|Y|os~0FXd$zaYpa zFg|;R+w2;{)HLTBQB_eGY`cLzK0vtF)N-}}03ZNKL_t&o=bPRd{lI3}65~Yj71MXw zV6N)jg(ejU)kv<0wrtvEyR1ce5n+40=V$-ze@~8){qs-BDRO@Qj`Q2^*xu}T@uz=< z!|}WS@;A)!fmfe>&QJdG-{C`GIz3V|GSYNL%2opJJ?cF%#lmCK0v|aml&sfQ%b+-h zb*Gy=@dy==JbWVg65-Iv6^R!?x@1&%Y z+ZL7V%>Zw;DwI;wOG{BXyKX!l_~~E%6`%gepV>AEEErR_`FXK+&A@i3t7pJ>W0iW8 zbIo|bBKpNqt+hhDlNLNSZmHXVZ8_9b_Uag@LAQ3YSizXu($>K+X>OI>n{i%@^8Phd zV?EW+iUXp^AQ3Cl4K>qQsaYAKmgxaY7G>Eh+7+a+frMCugsW*XjY+%EeXg7I%i%+_ zvtmgpadM7nbZl<7eDU&zpa1eD``aBp4CP1$^TK%V*o+$xA*I9|tf<7CGM718deEGh zT_%>|LROe8F~!LFGI5z_wwsZ=Pma9%%^O>EwZG-L?1?YJdR6467lL#kX%TF;7effa zv)K;p_Zu_NcSAAID`F~&x)YGskF`;^WC>UlT~|L7RW6sAw{zt2GIKi3TrP8~5^Xf8 zF!6~oHAABufgldAR&}~Ekw~e`SOmmLoT0QSuEm(BZlAUvV%I zW5!1-05}hc?cI*MyDifcIi1dgokzEharE4e0r!v?2FKwrvfmE~VktJ|*aznw+fCqh z7uaqbnj%xm#LI*#Jpbe~o`3$5FMjfYzx{{b@OS_G2hQ`Q=6x{555}L&>3=a?I))xlghsJ9_>c`wX6S^H$N0b`r*f#mtcu3Re@On zlGZI6u)0BYf7CRqR1NePQ6DTFY_-v`>s)6ExBfO{xawXpLi+pKwJ|BNRvwj70amKw zEooe`%zp(n(#=PGZ;2sV3fe7EXS&z=MwO*_NqI`weW5E#Ss27&nK^fN2k!1}*zax6 zc?iMQPKwNz3+MBN)9J+HV!G} zzl6Q#vn)w=AND($Syk<>d1l<2Szw6;u!0c;xd0`F#9%P=7weP65Bi`8Mkqvyq(UJA z#3FWQ9cJdubN6;vRhpv@=bX%}zIUjexvyPyR+{5&hFe!)brM!rNUX!G3`2$199ngnc`4e)6JiQDt-6yn!dzH6^DzMEf0hvsu?3ars?G4mz5$os&(V z^ZRQ(jr!Z`wNXnw;_i1(p1GUXmY9P9{N1l-{NxvJ@FGT(nDNWMeTQFs9ov1B2{cu1 zJ7rV;9GWjzXhVZdw)2HX^Qe;XB+AO>RuL7I;1HU!R*h$_$x7QzZ%b{wj?qm2cC*f? z%WY5Uv(W=Z3fA=&{Uh(-rvQ!w8Us)Y+%!mQs7Vxa7XsiN3PXwpry`DtHA%ZmPoms) z%V^lOWeCr*bW_sMjLGQF+t#Ygz&z-32z{-A#wR>U@w&Ja;JXEI4kH0Pc@!e7DS@KY z6k0Ab<_|OG_bbwppUkrk-xECBVA}e}>%a8O>$U`)r<|sP191ki1Ho$~oTfr>!T#=Z zoL>DD>G1(?e*1sp;p5kcdBw25!TswWf|)U2-eXM{&=@d=1Hw2Vr-+XqzePz49vv94sh^b@yAM$Q2;b}@WTRLE^u0C zZ5&42-+Y461w6d@JuY0}hOsKdu4?Do{j8PARVfyDwo2-vWDx=6h3~s*hx;%7pz`mW zBEI<3Kf@4!!`&;~efcvKE(n3}{57OR zn&#+9Qeq?}%QtT{iIcddB`fB#G9^zyscFZJlbScY7UG5y_QHTF;9_joYwBDXC1>3a ztBY1@_`2y))oadH*t{v`6*pCP2BanhR2D4|aW z6wNA#%f8j>;cHA-mKEa=aQEpQ9)I@%(tEUpXlg-4|6!hY4(rIrk4oSNFO4{@Kqf<~Q!&Gym(gRr$HQQ~TGTypqNZ zA>zVX{k-)6wmhRu64r*CK`DVk>e{jZ%-3OOn`u48)$0e@3|k0xW({!%RquiCirH1; zqYm!+@f7d-2xC#=ul9vo7l-X;$bcqHL$9?6Bnz=J?;AN_93*vS7zXK&>x8kTn6NCW zkY6tHe4eq)E6$e{oPn2jM|}GF4)^!BIGs+|?e6T76dg;L6i-dtXtypU<+Q#4zMlaVn>SAh1to%k5^_(k))yqs6?SX)w zd8KF83+5H(zXw;ZA6K{NjWipkQeQRT>}knn$POf|0Oxk7rrPvIpX=6Y4L2KIGMa0T z>)MfR3#sKrcl)xP!c&6@y8YYGuKxL%M^E$Wvo4^TDs{6e?d@;dt?$VOY!vWk2t&Vq zs?4l?@eByiX8h(|#Q*d!zs9HcZ;%S`%db~_nDb_D``@%Bx5XM< z)m(mRif=zR;|*Q~Xi2~6yDR7(D$R0s$OQ2S62OkCK<%&Onl7(@wkBFv{!v>cZRYo}F`|hhKuMIbIUz?Fyu3rn3rdODz4#Qv;e=Qgtnq?yIN|>8HHQ5OA?y$zKO%o!z{>|Qq>LWy z37Hd0C|Wp{kPAs)`y&Uw&4$SI=4gp#rp{d1yn6FhP$@JwLuL{3U#TnZZ9Tr`Tnk>u|? z01*;;?LDOaMb>m%R#R`C|T!Q3JMB>4=66fWuadsTm1#` zgiF*2SBDBapcK+%ctU35ro3r|TfO2?MV}>Po)xb9uyz3IjA$Y2&4VuMLn%`8qAKDU z<}A*=f^G_YrwRYs!8#o#jDtr>2{7QZ5E@umU8gt|-WU^1NUB~(-PckW znHi28ZpH~Orya_n;N!y?m&ZrMbHw~^#d16&$TkduE~dl4WlRO?}UD&jhBEr!MC3$^$femfae}28TL1{1KcbQT<=d> zgi)0=qYJhkhA83H@+2Rczy@M)&OppypWt1nf&;9-{PxzHsXm!hzaiZPBAj#uRiJy$ zLj0+S!MBE>>$RoQ0j@O9aibsCo;gw?S`{nqo)y1^ncBHFgC8^3s?idrimH(3l99Cl zob+3bm@f++&u2V7T=4KH%K0*{D4B78D`D|3U)|&G_73~Q9z&2Yw-h6?MmnXO5wm!2 zQYlgZ)WTprKwa+m^;XMY+f#z9%{xK};{Au_nOg;2?}f$;!D9%nwytZiY}Dggfx0^2 z@A1@L<4XVDj4RLmrjp_Bc`&z`$^YAq0FBx9F!%I6wu-6*v?1FkD!{1yw*8hGIiYS& zbiFs-m{s^t8ng9E^JcatihtjnuOF3PJ|z$T(TBTQo85?XtS7YX>i%_4I=Ts9tzVTe?)Du}Aqw@(z>IG`Cj9Pw1XyZp$aktd_F&x+>J7B>_upS{ z0gXbgJdl7|5664b{?y&?4W>G{U^R>trQO%gm*+Nz^tZNuR85%Gqz3c$iJ?#Sz80$^ z@g}3Y7csD=gvbSvfJB5c2<>o#haU%cZSlnGRLGs5rh!bi}xcuff`1qS&A+8Hb0OG(1F9|yza6Fu_ANBwWxMaln5lgyYe|HBC zgF3COijeKC!HNfOh?~K+?6}p4@_J2Ss;#!1!nhkJgkcc*f~BI`biBoQI6*?BB}}_y ziTY&k;e!;2%RbZ)_uw3|69*bJ4M`jhfG?=8Ed*PPEn;vV#vRhSV4W|Rb~`z9=RhTc zQ$bv#7|a~NP{UU)C`n|E5@n7<&?@g%fgHle**Qsd1=Y4?#d%4QO9^4O!yo-` z%#yL8Q3kB_vs!dDA&4c90Z)=sQ->DMXIvwevf!Jq-{N;)zr*{770v_qH#>a(`iPfz z2kdqO#^CYzc){EE7c5Cam3?p;{wTz43<1+LVZY1R=K|jCF^&U{hhw!;q@2}@9y?2| zY>M>Wj+ned*bhics>)7%7=!H@Jlnx{c-fIhr;OMsaysvD(7f}T(;oNtN8H}*5qL!` zqQJ|2WDE-v>FMPa?bKd{zNzloEpm4vTl>reab1V~tTB6ThM?^-uoVM4p#q(UtsAS}{mK&2QXIJp z<>cBTgc)#7-b0C;Hx(hnPNxDK&=!kA_QOAI~#EIANPCN z8@aFL6GtM@I+E11pb;u=qoA`?fF`bWC7|J`L;$H*+vqz3o80;>*D;x<@s|F@W@)IeD7&&Pt8>M#+LU){ZjaF6VS$R&k zZOs^d&Hpys8AR>udVG*GX$EvSdeU2avtxRGOve8R@tmaq+&O^;NhszugXe;><~r}* zszyCfK0_CKq@fBp_PVXO&Kp##nLCwv1pkyqRcryk1ul#LF-l1y^9&Ql-5qu>KEd?j zHKHpB*~XW1t&-oX9g6|yT>#*Fdi7H-^$Vw5u|Gu)a{qQl?=Rv&Q5kGNdk zV!C|+A11isKoQ96iuvsuy!+)pVE*nOC1)KB+7B3xH#i+`u-hMXuM0|9r6T?1qohqJ z|6-_u*HauaieX^g>V24pwSl)>E484Lplz-JWa zLEghVQP`b#DBg*zs~$g-qs?<5^t+Gd5~Gsgz%UMoCCM6+c5ZM4S6YGZoEe34mou$7 z*#v~(rM5`{auEZ8=n%fEbz%CEwtG#4)7?G(@}K<+oL+w>bJ8$Ly9NXrFcDA15^NPAgXk3-Ik;2f-NtVJ6VT1^7dO>)YRHp;mwxF(p9D&%smMT`Kd zkXw3KDOnVD=Bk{VA}&$m(h58m+dnn`X-;|HnWLwfm85W!Goiiaxmtncf>KH~Bh`HL z4)=q2x-{>=we|$kQYYbDL`lCnj`-0hC+vp{V$Qff4tRAp;^qB><54^~j)32P`w<@= zXZXQk+69bbz%Y0TaVUT^Zx=!a5@s`m0ms9sRc_bb-!Zk#vo=F(j0od^@ibz2cj*YH z?9LNe){;@i5_doNzkraeK4Jej4EBB>4ksIT41}h<4?B zq-_oi$vZ|^jSgtxW5wPxFtQZ#FvZ+MdlQo=(cYM~GbLP~YlMRI7WZ1Z-w+jGE%cOX zE=AGm@E{3Db1EE`4#-*&21SZ15>`XnSQP01AdnE9X&Nz%Vlf0hLx~ZH3n;DddBxx| zipw}JjPM=94^fnWAXePu9WZ+MfdCo+@*p>Xh8<|!fx;d%?m@#2?4^hw)T%24z~lDi zOMLO^D}3|rU3K&-sC+N8HT)9Z$IlADO$_`V!M4A$)AXo)+99|J>AiQ|V76JpZGr|* z)c@FCaI@%bWksqBdm`M!B#f)^s>CCEAXPV|g<6FLlJ#}Bxf&AfJu}4kMW_M`)mf-eZ$!9PFbxOH(8v92f_c#@s5JSh zo4wtmz0X;yKHVG-xVyc>T`8;F3i03`VSbLK@om>-ag$X)aqX~QH*5Rb+$vApUnGp#fE9j|= z$dQE9S)@WmqAC_||E*tFysJL3ddAy|))!tnfsj620 zZkVS!18w%c7f?2EbG>UDi(;4RpqD*I0qAPo+gFUXk5_b$TamD9gGm4E&?~&Mt}kDW z_-Ft9=eYlaR{$~oj0@YFg1EA3c4o| zW(VIDXr;C87>#(SdgK4zRpq|1AGVoIS>~tt3)RdGXj7qI0OtBtdNA_GW9ve-L6*y z>N6){kYZFu=)BQ~&Kq8NE!Finm5o~sq3+ztY9EnCMKQ`+P}Tyt)NtN{#wwoL{I?Ts zp1JM(n_$pEmEw`njyhjbr;d64E59@Ex!zY98aszlGICx~s7N}33rJ~&=M``R96OYC zL5h;6OU}b(FQMK(VDd*$hzR2je%#5_)`W6?K>Y3<(#Hod3fw>#CZOy+To~ZP2wF2r zj95Ot#rxm>66becqm&hy#Y>L!iZBis_IpX&(oQgOoe}2;q_~1mbW55HWqeuis!M7k zz|udM0MhhTGxoJJX?OrQ-F}n)L}`b5>}#7W?J-yw8piIVWvU-gh5(m>>>WADGj~oM z1Y$s8Dh)gs(ob8@*Fo#XkcZnJ;Ld}H=lgB47_lQ{*_x9Z*N-0=V!s&3pemCOgxWjiJzC&3ECpF<)(E$UpQh=DGeVTaJ zJ%(Yx>3Bj`1wCg5AVOs>EUm&cmnRP%!#==y66+jM4X12GuEC-d0Od-^yjn&55HL*x zrfI-94H!o;D2&sHX&SKKjo9r*?4}XZ;Njv$_NP0a8g52L&^0X9ya#$?U)jFmqU z#52BkUauGByb8XK5WL4Y$lqWd@}R~A)lBRjHJl?CL=D#v!Baf|7OtVpuqdIaJ^6sz z?yfg}m~vu7tmUt&H@^U!B@%*};l0PS+hNd9He=*s3Dbg4YT?q`i*dm@kayq^P_%#y z`Jl{T09+8FL=Nm6w0A+XuB((iP9yH_PLlr)Bh+2=f_>Hz?p|2c$)bra_2gj1->AE| zhCpA9Rhen8grgG<_0OU>`k&ZuuF`qicW5Dq{cSh5ud{D2WsaSOV$xps*3KL(ks~P= zB(13HRA@4~FXssjsbsj)6ke>u>Z+wRZ|CPA$LlH?^?U5K^` zX4R}iDhzAa&6c0Y;sq}(ZH;=P19jIhH=1HOz{dZw3PCkKz?duxY}h=Ub2yz2_~8#; zW`upyvHX0*W&2B>e=RwZD);!dgt)-e{#f&Kl%jwPd^p1=pFw2 zk3Zrc{&7a)7T$>KW9sm$!nGZT;#%ue(C?G&o_WX`KQO-Nh~S-TohC@GuEL{E$Lsd6 zB&UN|l}p!BTI4tg;^*%1QdQW-g0@TS;M$XP?m12aj$>2Ob73Twh`>SwUkd0^96Q-* zh4LU_zL>;V;e$s&KpqoNvhGD#(u?aryf9D3?_#doxhh8TsQQrXPKZVc5aJp{z6F`2#+F^IJT8^Ba`1KuQA^ z6vqHEK7RK#?jPTiZpN4Z03ZNKL_t(xcl!ziAm@l>dB8k>6tA@zA?UfYqAji5;2>Ic zZ}VqrPIkjvJ=Yp;Zol*>=-&#ei zRvCx25VLe_fdeKW_yJ+k{_2H*4;e8=mE#=36cCiDiB2VQdC}LcK%MN5cc%M^=RK)M zUSOGUbN>>5{@?x!OvhW8@0!#zT#7KT%&c{07FZQUcVw34p-s7iR&UgfRWIcxjFQtO`OB;Ik0-j>jIuF5&6={yyDs$99{ z#$fx5o52jt*jlj(O7^$O&EHQV>k>^Ul=*ZUi94g!dm;Jf2s?*c~pjmZ6sr z&72rHiQD!5_Jl8g_!{56KjZ87kK$2P&vY;#SHi+fwfLL&D`=cBjuTF&Q{5OrR4v_=&KnUlaxX|;!;8>VDI?YlF*59e$7xWe+~r`8!C@Q%#zE#~-$Tzr%KVF$ zEvw>fITu-T!%GKTwTPa5Sl>g6d?+z1TBJ_e!}a+*BE)!&JaA6;7Gf|iB_pmYmPJ1I z-q#2PXbz4GL0aoMD<z*S2tb6A0Se`s?)W9TV;e1UDgsO<1L>;0Ph* z?V$F{UP`9T)02m^P6J}uhJcH5hN_%7D|`z^a7K8=1M3F{7mpmHgk)XkqIXNWevqDh z&wwpu!F#InFa@FsFx~GrYwvEw8k*h}*)t|&d9_uhF@nl~De1PowH5`7pipJ_Uib_z9k8#9)H({Dagdi0@$06YM=78gIk7+ky7zYF&AmL#V z>vF+-K4X47<8r>>{CL6TykMSJtkDc~yxjwxH|u;$VQGP4XG)!du7~TrMe0aSdny&U z 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�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 Z_+RVuN=kdO^hW>y002ovPDHLkV1na Date: Wed, 15 Feb 2023 15:09:22 +0100 Subject: [PATCH 142/182] Fix possible compiler warning and linker error Type was forward declared as class, but is a struct. GCC is quiet about this Clang gives a warning about potential linker errors on MSVC. --- source/blender/asset_system/AS_asset_library.hh | 1 - 1 file changed, 1 deletion(-) diff --git a/source/blender/asset_system/AS_asset_library.hh b/source/blender/asset_system/AS_asset_library.hh index 290e8e44b9f6..d92375082d92 100644 --- a/source/blender/asset_system/AS_asset_library.hh +++ b/source/blender/asset_system/AS_asset_library.hh @@ -19,7 +19,6 @@ #include "BKE_callbacks.h" struct AssetLibrary; -class bUserAssetLibrary; struct IDRemapper; struct Main; -- 2.30.2 From 085f5fd50e6c605a00bb009a654d3ce5e6d1fcc3 Mon Sep 17 00:00:00 2001 From: Matti-Ranta Date: Wed, 15 Feb 2023 15:49:22 +0100 Subject: [PATCH 143/182] Cleanup: delete .arcconfig Now that https://developer.blender.org/ has been decommissioned, arcconfig is no longer needed. Pull Request #104768 --- .arcconfig | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 .arcconfig diff --git a/.arcconfig b/.arcconfig deleted file mode 100644 index 548af935888c..000000000000 --- a/.arcconfig +++ /dev/null @@ -1,8 +0,0 @@ -{ - "project_id" : "Blender", - "conduit_uri" : "https://developer.blender.org/", - "phabricator.uri" : "https://developer.blender.org/", - "git.default-relative-commit" : "origin/master", - "arc.land.update.default" : "rebase", - "arc.land.onto.default" : "master" -} -- 2.30.2 From 297d2b5fa11bc086bb9ad0da53eb2c14545eb6ac Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Wed, 15 Feb 2023 15:55:07 +0100 Subject: [PATCH 144/182] Fix weird icon padding in asset library selector menu button Since the menu doesn't automatically align the labels like other menus and pulldowns in Blender, I manually made them align using the blank icon. However the menu button would also include this blank icon now. This is a specific fix for the 3.5 release. In the main branch I will replace it with proper support for automatically aligning labels in such menus. --- source/blender/editors/interface/interface.cc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/source/blender/editors/interface/interface.cc b/source/blender/editors/interface/interface.cc index aa5e870623d7..6da7576d5131 100644 --- a/source/blender/editors/interface/interface.cc +++ b/source/blender/editors/interface/interface.cc @@ -4585,7 +4585,15 @@ static uiBut *ui_def_but_rna(uiBlock *block, #endif } - icon = item[i].icon; + /* #ICON_BLANK1 can be used to add padding of the size of an icon. This is fine to align + * multiple items within a menu, but not for the menu button that only shows the label then. + */ + if ((type == UI_BTYPE_MENU) && (item[i].icon == ICON_BLANK1)) { + icon = ICON_NONE; + } + else { + icon = item[i].icon; + } } else { if (!str) { -- 2.30.2 From fa1222f296dd8e482c4b8e74712a48660fd910f3 Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Wed, 15 Feb 2023 16:05:03 +0100 Subject: [PATCH 145/182] UI: Ensure menus with icons align all menu item labels Usually in Blender, we try to align the labels of items within a menu, if necessary by adding a blank icon for padding. This wasn't done for menus generated from enum properties (RNA or custom property enums). Now we do it whenever there is at least one item with an icon. --- source/blender/editors/interface/interface.cc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/interface/interface.cc b/source/blender/editors/interface/interface.cc index 6da7576d5131..954b72b56803 100644 --- a/source/blender/editors/interface/interface.cc +++ b/source/blender/editors/interface/interface.cc @@ -4287,6 +4287,7 @@ static void ui_def_but_rna__menu(bContext * /*C*/, uiLayout *layout, void *but_p int totitems = 0; int categories = 0; int entries_nosepr_count = 0; + bool has_item_with_icon = false; for (const EnumPropertyItem *item = item_array; item->identifier; item++, totitems++) { if (!item->identifier[0]) { /* inconsistent, but menus with categories do not look good flipped */ @@ -4298,6 +4299,9 @@ static void ui_def_but_rna__menu(bContext * /*C*/, uiLayout *layout, void *but_p /* We do not want simple separators in `entries_nosepr_count`. */ continue; } + if (item->icon) { + has_item_with_icon = true; + } entries_nosepr_count++; } @@ -4402,11 +4406,18 @@ static void ui_def_but_rna__menu(bContext * /*C*/, uiLayout *layout, void *but_p uiItemS(column); } else { - if (item->icon) { + int icon = item->icon; + /* Use blank icon if there is none for this item (but for some other one) to make sure labels + * align. */ + if (icon == ICON_NONE && has_item_with_icon) { + icon = ICON_BLANK1; + } + + if (icon) { uiDefIconTextButI(block, UI_BTYPE_BUT_MENU, B_NOP, - item->icon, + icon, item->name, 0, 0, -- 2.30.2 From 36147cb8b893d84e18435f83d55136e328dca63d Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Wed, 15 Feb 2023 16:00:00 +0100 Subject: [PATCH 146/182] Revert changes to align asset library labels in menus This reverts 1116d821dc and part of 5bac672e1a. The solution was made specifically for the 3.5 release, to avoid breaking other cases. The previous commit addressed the problem properly by letting the general menu code align labels where needed. --- .../asset/intern/asset_library_reference_enum.cc | 10 +++------- source/blender/editors/interface/interface.cc | 10 +--------- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/source/blender/editors/asset/intern/asset_library_reference_enum.cc b/source/blender/editors/asset/intern/asset_library_reference_enum.cc index 9aac90fc6e2a..aab4bd12222c 100644 --- a/source/blender/editors/asset/intern/asset_library_reference_enum.cc +++ b/source/blender/editors/asset/intern/asset_library_reference_enum.cc @@ -77,11 +77,7 @@ const EnumPropertyItem *ED_asset_library_reference_to_rna_enum_itemf(const bool if (include_generated) { const EnumPropertyItem generated_items[] = { - {ASSET_LIBRARY_ALL, - "ALL", - ICON_BLANK1, - "All", - "Show assets from all of the listed asset libraries"}, + {ASSET_LIBRARY_ALL, "ALL", 0, "All", "Show assets from all of the listed asset libraries"}, RNA_ENUM_ITEM_SEPR, {ASSET_LIBRARY_LOCAL, "LOCAL", @@ -90,7 +86,7 @@ const EnumPropertyItem *ED_asset_library_reference_to_rna_enum_itemf(const bool "Show the assets currently available in this Blender session"}, {ASSET_LIBRARY_ESSENTIALS, "ESSENTIALS", - ICON_BLANK1, + 0, "Essentials", "Show the basic building blocks and utilities coming with Blender"}, {0, nullptr, 0, nullptr, nullptr}, @@ -122,7 +118,7 @@ const EnumPropertyItem *ED_asset_library_reference_to_rna_enum_itemf(const bool const int enum_value = ED_asset_library_reference_to_enum_value(&library_reference); /* Use library path as description, it's a nice hint for users. */ EnumPropertyItem tmp = { - enum_value, user_library->name, ICON_BLANK1, user_library->name, user_library->path}; + enum_value, user_library->name, ICON_NONE, user_library->name, user_library->path}; RNA_enum_item_add(&item, &totitem, &tmp); } diff --git a/source/blender/editors/interface/interface.cc b/source/blender/editors/interface/interface.cc index 954b72b56803..cd4cb1ae087b 100644 --- a/source/blender/editors/interface/interface.cc +++ b/source/blender/editors/interface/interface.cc @@ -4596,15 +4596,7 @@ static uiBut *ui_def_but_rna(uiBlock *block, #endif } - /* #ICON_BLANK1 can be used to add padding of the size of an icon. This is fine to align - * multiple items within a menu, but not for the menu button that only shows the label then. - */ - if ((type == UI_BTYPE_MENU) && (item[i].icon == ICON_BLANK1)) { - icon = ICON_NONE; - } - else { - icon = item[i].icon; - } + icon = item[i].icon; } else { if (!str) { -- 2.30.2 From 93299b3f1b694845b0e461b9649c92a39fdb12d1 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 15 Feb 2023 16:59:58 +0100 Subject: [PATCH 147/182] Cycles: disable AMD GPU rendering binaries due to compiler bugs There are known bugs in HIP compiler that are causing random build failures when making changes to the Cycles kernel. This is preventing developers from efficiently making improvements to Cycles. For now Cycles AMD GPU rendering is disabled in Blender 3.6 until a good solution is found, so that ongoing work like Principled v2 is not blocked. We hope this can be resolved later on in the 3.6 release cycle. Ref #104786 --- .../cmake/config/blender_release.cmake | 2 +- intern/cycles/blender/addon/properties.py | 25 +++++++++++-------- intern/cycles/cmake/external_libs.cmake | 13 ++++++---- 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/build_files/cmake/config/blender_release.cmake b/build_files/cmake/config/blender_release.cmake index 08cb882ebfbb..108057285747 100644 --- a/build_files/cmake/config/blender_release.cmake +++ b/build_files/cmake/config/blender_release.cmake @@ -85,7 +85,7 @@ if(NOT APPLE) set(WITH_CYCLES_DEVICE_OPTIX ON CACHE BOOL "" FORCE) set(WITH_CYCLES_CUDA_BINARIES ON CACHE BOOL "" FORCE) set(WITH_CYCLES_CUBIN_COMPILER OFF CACHE BOOL "" FORCE) - set(WITH_CYCLES_HIP_BINARIES ON CACHE BOOL "" FORCE) + set(WITH_CYCLES_HIP_BINARIES OFF CACHE BOOL "" FORCE) set(WITH_CYCLES_DEVICE_ONEAPI ON CACHE BOOL "" FORCE) set(WITH_CYCLES_ONEAPI_BINARIES ON CACHE BOOL "" FORCE) endif() diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py index 41eacb7417f0..785432583491 100644 --- a/intern/cycles/blender/addon/properties.py +++ b/intern/cycles/blender/addon/properties.py @@ -1676,17 +1676,20 @@ class CyclesPreferences(bpy.types.AddonPreferences): col.label(text="and NVIDIA driver version %s or newer" % driver_version, icon='BLANK1', translate=False) elif device_type == 'HIP': - import sys - if sys.platform[:3] == "win": - driver_version = "21.Q4" - col.label(text="Requires AMD GPU with Vega or RDNA architecture", icon='BLANK1') - col.label(text=iface_("and AMD Radeon Pro %s driver or newer") % driver_version, - icon='BLANK1', translate=False) - elif sys.platform.startswith("linux"): - driver_version = "22.10" - col.label(text="Requires AMD GPU with Vega or RDNA architecture", icon='BLANK1') - col.label(text=iface_("and AMD driver version %s or newer") % driver_version, icon='BLANK1', - translate=False) + if True: + col.label(text="HIP temporarily disabled due to compiler bugs", icon='BLANK1') + else: + import sys + if sys.platform[:3] == "win": + driver_version = "21.Q4" + col.label(text="Requires AMD GPU with Vega or RDNA architecture", icon='BLANK1') + col.label(text=iface_("and AMD Radeon Pro %s driver or newer") % driver_version, + icon='BLANK1', translate=False) + elif sys.platform.startswith("linux"): + driver_version = "22.10" + col.label(text="Requires AMD GPU with Vega or RDNA architecture", icon='BLANK1') + col.label(text=iface_("and AMD driver version %s or newer") % driver_version, icon='BLANK1', + translate=False) elif device_type == 'ONEAPI': import sys if sys.platform.startswith("win"): diff --git a/intern/cycles/cmake/external_libs.cmake b/intern/cycles/cmake/external_libs.cmake index 4b165e1a5bec..b10aeec8bdf9 100644 --- a/intern/cycles/cmake/external_libs.cmake +++ b/intern/cycles/cmake/external_libs.cmake @@ -42,12 +42,15 @@ endif() ########################################################################### if(WITH_CYCLES_HIP_BINARIES AND WITH_CYCLES_DEVICE_HIP) - find_package(HIP) - set_and_warn_library_found("HIP compiler" HIP_FOUND WITH_CYCLES_HIP_BINARIES) + set(WITH_CYCLES_HIP_BINARIES OFF) + message(STATUS "HIP temporarily disabled due to compiler bugs") - if(HIP_FOUND) - message(STATUS "Found HIP ${HIP_HIPCC_EXECUTABLE} (${HIP_VERSION})") - endif() + # find_package(HIP) + # set_and_warn_library_found("HIP compiler" HIP_FOUND WITH_CYCLES_HIP_BINARIES) + + # if(HIP_FOUND) + # message(STATUS "Found HIP ${HIP_HIPCC_EXECUTABLE} (${HIP_VERSION})") + # endif() endif() if(NOT WITH_HIP_DYNLOAD) -- 2.30.2 From c7c524d8d40f03a323afac872918510738fe5e45 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Wed, 15 Feb 2023 11:38:17 -0500 Subject: [PATCH 148/182] Fix #104690: Evaluated positions user-after-free for copied poly curves The evaluated positions cache can live longer than a specific `CurvesGeometry`, but for only-poly curves, it pointed to the positions, which are freed when the curves are. Instead, use the same pattern as the evaluated offsets and don't store the positions span, just return it when retrieving evaluated positions. --- source/blender/blenkernel/BKE_curves.hh | 15 +++++-------- .../blenkernel/intern/curves_geometry.cc | 21 +++++++++---------- 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/source/blender/blenkernel/BKE_curves.hh b/source/blender/blenkernel/BKE_curves.hh index 0a3915755980..c3ad7c027a1b 100644 --- a/source/blender/blenkernel/BKE_curves.hh +++ b/source/blender/blenkernel/BKE_curves.hh @@ -71,16 +71,11 @@ class CurvesGeometryRuntime { mutable SharedCache> nurbs_basis_cache; - /** Cache of evaluated positions. */ - struct EvaluatedPositions { - Vector vector; - /** - * The evaluated positions result, using a separate span in case all curves are poly curves, - * in which case a separate array of evaluated positions is unnecessary. - */ - Span span; - }; - mutable SharedCache evaluated_position_cache; + /** + * Cache of evaluated positions for all curves. The positions span will + * be used directly rather than the cache when all curves are poly type. + */ + mutable SharedCache> evaluated_position_cache; /** * A cache of bounds shared between data-blocks with unchanged positions and radii. diff --git a/source/blender/blenkernel/intern/curves_geometry.cc b/source/blender/blenkernel/intern/curves_geometry.cc index f6fb6cf4d870..704bbb34f49b 100644 --- a/source/blender/blenkernel/intern/curves_geometry.cc +++ b/source/blender/blenkernel/intern/curves_geometry.cc @@ -605,17 +605,15 @@ void CurvesGeometry::ensure_nurbs_basis_cache() const Span CurvesGeometry::evaluated_positions() const { const bke::CurvesGeometryRuntime &runtime = *this->runtime; + if (this->is_single_type(CURVE_TYPE_POLY)) { + runtime.evaluated_position_cache.ensure( + [&](Vector &r_data) { r_data.clear_and_shrink(); }); + return this->positions(); + } this->ensure_nurbs_basis_cache(); - runtime.evaluated_position_cache.ensure([&](CurvesGeometryRuntime::EvaluatedPositions &r_data) { - if (this->is_single_type(CURVE_TYPE_POLY)) { - r_data.span = this->positions(); - r_data.vector.clear_and_shrink(); - return; - } - - r_data.vector.resize(this->evaluated_points_num()); - r_data.span = r_data.vector; - MutableSpan evaluated_positions = r_data.vector; + runtime.evaluated_position_cache.ensure([&](Vector &r_data) { + r_data.resize(this->evaluated_points_num()); + MutableSpan evaluated_positions = r_data; const OffsetIndices points_by_curve = this->points_by_curve(); const OffsetIndices evaluated_points_by_curve = this->evaluated_points_by_curve(); @@ -672,7 +670,7 @@ Span CurvesGeometry::evaluated_positions() const } }); }); - return runtime.evaluated_position_cache.data().span; + return runtime.evaluated_position_cache.data(); } Span CurvesGeometry::evaluated_tangents() const @@ -781,6 +779,7 @@ static void evaluate_generic_data_for_curve( Span CurvesGeometry::evaluated_normals() const { const bke::CurvesGeometryRuntime &runtime = *this->runtime; + this->ensure_nurbs_basis_cache(); runtime.evaluated_normal_cache.ensure([&](Vector &r_data) { const OffsetIndices points_by_curve = this->points_by_curve(); const OffsetIndices evaluated_points_by_curve = this->evaluated_points_by_curve(); -- 2.30.2 From 07025f0eb78c2ca1947484f791cbbfe2ba7b2905 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Wed, 15 Feb 2023 13:25:46 -0500 Subject: [PATCH 149/182] Fix #104789: uv_layers.remove() always raises error A simple typo from 6c774feba2c9a1eb583. Also return so nothing happens when the UV map isn't found. --- source/blender/makesrna/intern/rna_mesh.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c index 0f9b11905fa6..e660513a2439 100644 --- a/source/blender/makesrna/intern/rna_mesh.c +++ b/source/blender/makesrna/intern/rna_mesh.c @@ -2385,8 +2385,9 @@ static PointerRNA rna_Mesh_uv_layers_new(struct Mesh *me, static void rna_Mesh_uv_layers_remove(struct Mesh *me, ReportList *reports, CustomDataLayer *layer) { - if (!BKE_id_attribute_find(&me->id, layer->name, CD_PROP_FLOAT, ATTR_DOMAIN_CORNER)) { + if (!BKE_id_attribute_find(&me->id, layer->name, CD_PROP_FLOAT2, ATTR_DOMAIN_CORNER)) { BKE_reportf(reports, RPT_ERROR, "UV map '%s' not found", layer->name); + return; } BKE_id_attribute_remove(&me->id, layer->name, reports); } -- 2.30.2 From f03cf8ac08d3db4f65411eed98263665baa58bab Mon Sep 17 00:00:00 2001 From: Colin Marmond Date: Wed, 15 Feb 2023 16:10:37 -0500 Subject: [PATCH 150/182] Fix #102529: De-duplicate add node search items with assets Fix a little omission. The id name has a 2 char prefix which has to be removed in order to compare to the real name. Pull Request #104793 --- source/blender/editors/space_node/add_node_search.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/space_node/add_node_search.cc b/source/blender/editors/space_node/add_node_search.cc index 07fc06d0dde2..16505620e6ac 100644 --- a/source/blender/editors/space_node/add_node_search.cc +++ b/source/blender/editors/space_node/add_node_search.cc @@ -132,7 +132,7 @@ static void gather_search_items_for_node_groups(const bContext &C, if (node_group->typeinfo->group_idname != group_node_id) { continue; } - if (local_assets.contains(node_group->id.name)) { + if (local_assets.contains(node_group->id.name + 2)) { continue; } if (!nodeGroupPoll(&node_tree, node_group, nullptr)) { -- 2.30.2 From b47bd6e619818c911e54564f7b1476cd60bcd7c2 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Wed, 15 Feb 2023 17:38:47 -0500 Subject: [PATCH 151/182] Cleanup: Use simpler attribute transfer API in duplicate elements node Instead of retrieving which attributes to transfer from the geometry set which exists at a different abstraction level, get them from accessors directly with a newer utility function. This removes boilerplate code and makes the logic clearer for a future even more generic attribute propagation API. --- source/blender/blenkernel/BKE_attribute.h | 1 + .../blenkernel/intern/attribute_access.cc | 6 +- .../nodes/node_geo_duplicate_elements.cc | 218 +++++------------- 3 files changed, 67 insertions(+), 158 deletions(-) diff --git a/source/blender/blenkernel/BKE_attribute.h b/source/blender/blenkernel/BKE_attribute.h index 7c01a9205fc0..76558b9ba286 100644 --- a/source/blender/blenkernel/BKE_attribute.h +++ b/source/blender/blenkernel/BKE_attribute.h @@ -41,6 +41,7 @@ typedef enum eAttrDomainMask { ATTR_DOMAIN_MASK_CURVE = (1 << 4), ATTR_DOMAIN_MASK_ALL = (1 << 5) - 1 } eAttrDomainMask; +ENUM_OPERATORS(eAttrDomainMask, ATTR_DOMAIN_MASK_ALL); #define ATTR_DOMAIN_AS_MASK(domain) ((eAttrDomainMask)((1 << (int)(domain)))) diff --git a/source/blender/blenkernel/intern/attribute_access.cc b/source/blender/blenkernel/intern/attribute_access.cc index 8a6e14867013..e6721e96ab84 100644 --- a/source/blender/blenkernel/intern/attribute_access.cc +++ b/source/blender/blenkernel/intern/attribute_access.cc @@ -905,8 +905,10 @@ Vector retrieve_attributes_for_transfer( BLI_assert(src); bke::GSpanAttributeWriter dst = dst_attributes.lookup_or_add_for_write_only_span( id, meta_data.domain, meta_data.data_type); - BLI_assert(dst); - attributes.append({std::move(src), meta_data, std::move(dst)}); + if (dst) { + /* Writing the the legacy "normal" attribute will fail. */ + attributes.append({std::move(src), meta_data, std::move(dst)}); + } return true; }); diff --git a/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc b/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc index 5b260a818a1e..c61bb8b4d8a7 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc @@ -64,18 +64,6 @@ struct IndexAttributes { /** \name Utility Functions * \{ */ -static Map gather_attributes_without_id( - const GeometrySet &geometry_set, - const GeometryComponentType component_type, - const AnonymousAttributePropagationInfo &propagation_info) -{ - Map attributes; - geometry_set.gather_attributes_for_propagation( - {component_type}, component_type, false, propagation_info, attributes); - attributes.remove("id"); - return attributes; -}; - static OffsetIndices accumulate_counts_to_offsets(const IndexMask selection, const VArray &counts, Array &r_offset_data) @@ -183,39 +171,25 @@ static void copy_stable_id_point(const OffsetIndices offsets, dst_attribute.finish(); } -static void copy_attributes_without_id(GeometrySet &geometry_set, - const GeometryComponentType component_type, - const eAttrDomain domain, - const OffsetIndices offsets, +static void copy_attributes_without_id(const OffsetIndices offsets, const IndexMask selection, const AnonymousAttributePropagationInfo &propagation_info, + const eAttrDomain domain, const bke::AttributeAccessor src_attributes, bke::MutableAttributeAccessor dst_attributes) { - const Map attributes = gather_attributes_without_id( - geometry_set, component_type, propagation_info); - - for (const Map::Item entry : attributes.items()) { - const AttributeIDRef attribute_id = entry.key; - GAttributeReader src_attribute = src_attributes.lookup(attribute_id); - if (!src_attribute || src_attribute.domain != domain) { - continue; - } - eAttrDomain out_domain = src_attribute.domain; - const eCustomDataType data_type = bke::cpp_type_to_custom_data_type( - src_attribute.varray.type()); - GSpanAttributeWriter dst_attribute = dst_attributes.lookup_or_add_for_write_only_span( - attribute_id, out_domain, data_type); - if (!dst_attribute) { - continue; - } - attribute_math::convert_to_static_type(data_type, [&](auto dummy) { + for (auto &attribute : bke::retrieve_attributes_for_transfer(src_attributes, + dst_attributes, + ATTR_DOMAIN_AS_MASK(domain), + propagation_info, + {"id"})) { + attribute_math::convert_to_static_type(attribute.src.type(), [&](auto dummy) { using T = decltype(dummy); - VArraySpan src = src_attribute.varray.typed(); - MutableSpan dst = dst_attribute.span.typed(); + const Span src = attribute.src.typed(); + MutableSpan dst = attribute.dst.span.typed(); threaded_slice_fill(offsets, selection, src, dst); }); - dst_attribute.finish(); + attribute.dst.finish(); } } @@ -230,42 +204,26 @@ static void copy_attributes_without_id(GeometrySet &geometry_set, * copied with an offset fill, otherwise a mapping is used. */ static void copy_curve_attributes_without_id( - const GeometrySet &geometry_set, const bke::CurvesGeometry &src_curves, const IndexMask selection, const OffsetIndices curve_offsets, const AnonymousAttributePropagationInfo &propagation_info, bke::CurvesGeometry &dst_curves) { - Map attributes = gather_attributes_without_id( - geometry_set, GEO_COMPONENT_TYPE_CURVE, propagation_info); - const OffsetIndices src_points_by_curve = src_curves.points_by_curve(); const OffsetIndices dst_points_by_curve = dst_curves.points_by_curve(); - for (const Map::Item entry : attributes.items()) { - const AttributeIDRef attribute_id = entry.key; - GAttributeReader src_attribute = src_curves.attributes().lookup(attribute_id); - if (!src_attribute) { - continue; - } - - eAttrDomain out_domain = src_attribute.domain; - const eCustomDataType data_type = bke::cpp_type_to_custom_data_type( - src_attribute.varray.type()); - GSpanAttributeWriter dst_attribute = - dst_curves.attributes_for_write().lookup_or_add_for_write_only_span( - attribute_id, out_domain, data_type); - if (!dst_attribute) { - continue; - } - - attribute_math::convert_to_static_type(data_type, [&](auto dummy) { + for (auto &attribute : bke::retrieve_attributes_for_transfer(src_curves.attributes(), + dst_curves.attributes_for_write(), + ATTR_DOMAIN_MASK_ALL, + propagation_info, + {"id"})) { + attribute_math::convert_to_static_type(attribute.src.type(), [&](auto dummy) { using T = decltype(dummy); - VArraySpan src{src_attribute.varray.typed()}; - MutableSpan dst = dst_attribute.span.typed(); + const Span src = attribute.src.typed(); + MutableSpan dst = attribute.dst.span.typed(); - switch (out_domain) { + switch (attribute.meta_data.domain) { case ATTR_DOMAIN_CURVE: threaded_slice_fill(curve_offsets, selection, src, dst); break; @@ -281,10 +239,11 @@ static void copy_curve_attributes_without_id( }); break; default: + BLI_assert_unreachable(); break; } }); - dst_attribute.finish(); + attribute.dst.finish(); } } @@ -394,8 +353,7 @@ static void duplicate_curves(GeometrySet &geometry_set, }); all_dst_offsets.last() = dst_points_num; - copy_curve_attributes_without_id( - geometry_set, curves, selection, curve_offsets, propagation_info, new_curves); + copy_curve_attributes_without_id(curves, selection, curve_offsets, propagation_info, new_curves); copy_stable_id_curves(curves, selection, curve_offsets, new_curves); @@ -422,7 +380,6 @@ static void duplicate_curves(GeometrySet &geometry_set, * copied with an offset fill, otherwise a mapping is used. */ static void copy_face_attributes_without_id( - GeometrySet &geometry_set, const Span edge_mapping, const Span vert_mapping, const Span loop_mapping, @@ -432,31 +389,14 @@ static void copy_face_attributes_without_id( const bke::AttributeAccessor src_attributes, bke::MutableAttributeAccessor dst_attributes) { - Map attributes = gather_attributes_without_id( - geometry_set, GEO_COMPONENT_TYPE_MESH, propagation_info); - - for (const Map::Item entry : attributes.items()) { - const AttributeIDRef attribute_id = entry.key; - GAttributeReader src_attribute = src_attributes.lookup(attribute_id); - if (!src_attribute) { - continue; - } - - eAttrDomain out_domain = src_attribute.domain; - const eCustomDataType data_type = bke::cpp_type_to_custom_data_type( - src_attribute.varray.type()); - GSpanAttributeWriter dst_attribute = dst_attributes.lookup_or_add_for_write_only_span( - attribute_id, out_domain, data_type); - if (!dst_attribute) { - continue; - } - - attribute_math::convert_to_static_type(data_type, [&](auto dummy) { + for (auto &attribute : bke::retrieve_attributes_for_transfer( + src_attributes, dst_attributes, ATTR_DOMAIN_MASK_ALL, propagation_info, {"id"})) { + attribute_math::convert_to_static_type(attribute.src.type(), [&](auto dummy) { using T = decltype(dummy); - VArraySpan src{src_attribute.varray.typed()}; - MutableSpan dst = dst_attribute.span.typed(); + const Span src = attribute.src.typed(); + MutableSpan dst = attribute.dst.span.typed(); - switch (out_domain) { + switch (attribute.meta_data.domain) { case ATTR_DOMAIN_POINT: array_utils::gather(src, vert_mapping, dst); break; @@ -470,10 +410,11 @@ static void copy_face_attributes_without_id( array_utils::gather(src, loop_mapping, dst); break; default: + BLI_assert_unreachable(); break; } }); - dst_attribute.finish(); + attribute.dst.finish(); } } @@ -607,8 +548,7 @@ static void duplicate_faces(GeometrySet &geometry_set, new_mesh->loose_edges_tag_none(); - copy_face_attributes_without_id(geometry_set, - edge_mapping, + copy_face_attributes_without_id(edge_mapping, vert_mapping, loop_mapping, duplicates, @@ -646,7 +586,6 @@ static void duplicate_faces(GeometrySet &geometry_set, * copied with an offset fill, for point domain a mapping is used. */ static void copy_edge_attributes_without_id( - GeometrySet &geometry_set, const Span point_mapping, const OffsetIndices offsets, const IndexMask selection, @@ -654,30 +593,18 @@ static void copy_edge_attributes_without_id( const bke::AttributeAccessor src_attributes, bke::MutableAttributeAccessor dst_attributes) { - Map attributes = gather_attributes_without_id( - geometry_set, GEO_COMPONENT_TYPE_MESH, propagation_info); - - for (const Map::Item entry : attributes.items()) { - const AttributeIDRef attribute_id = entry.key; - GAttributeReader src_attribute = src_attributes.lookup(attribute_id); - if (!src_attribute) { - continue; - } - - const eAttrDomain out_domain = src_attribute.domain; - const eCustomDataType data_type = bke::cpp_type_to_custom_data_type( - src_attribute.varray.type()); - GSpanAttributeWriter dst_attribute = dst_attributes.lookup_or_add_for_write_only_span( - attribute_id, out_domain, data_type); - if (!dst_attribute) { - continue; - } - attribute_math::convert_to_static_type(data_type, [&](auto dummy) { + for (auto &attribute : + bke::retrieve_attributes_for_transfer(src_attributes, + dst_attributes, + ATTR_DOMAIN_MASK_POINT | ATTR_DOMAIN_MASK_EDGE, + propagation_info, + {"id"})) { + attribute_math::convert_to_static_type(attribute.src.type(), [&](auto dummy) { using T = decltype(dummy); - VArraySpan src{src_attribute.varray.typed()}; - MutableSpan dst = dst_attribute.span.typed(); + const Span src = attribute.src.typed(); + MutableSpan dst = attribute.dst.span.typed(); - switch (out_domain) { + switch (attribute.meta_data.domain) { case ATTR_DOMAIN_EDGE: threaded_slice_fill(offsets, selection, src, dst); break; @@ -685,10 +612,11 @@ static void copy_edge_attributes_without_id( array_utils::gather(src, point_mapping, dst); break; default: + BLI_assert_unreachable(); break; } }); - dst_attribute.finish(); + attribute.dst.finish(); } } @@ -791,8 +719,7 @@ static void duplicate_edges(GeometrySet &geometry_set, } }); - copy_edge_attributes_without_id(geometry_set, - vert_orig_indices, + copy_edge_attributes_without_id(vert_orig_indices, duplicates, selection, propagation_info, @@ -855,32 +782,16 @@ static void duplicate_points_curve(GeometrySet &geometry_set, } new_curve_offsets.last() = dst_num; - Map attributes = gather_attributes_without_id( - geometry_set, GEO_COMPONENT_TYPE_CURVE, propagation_info); - - for (const Map::Item entry : attributes.items()) { - const AttributeIDRef attribute_id = entry.key; - GAttributeReader src_attribute = src_curves.attributes().lookup(attribute_id); - if (!src_attribute) { - continue; - } - - eAttrDomain domain = src_attribute.domain; - const eCustomDataType data_type = bke::cpp_type_to_custom_data_type( - src_attribute.varray.type()); - GSpanAttributeWriter dst_attribute = - new_curves.attributes_for_write().lookup_or_add_for_write_only_span( - attribute_id, domain, data_type); - if (!dst_attribute) { - continue; - } - - attribute_math::convert_to_static_type(data_type, [&](auto dummy) { + for (auto &attribute : bke::retrieve_attributes_for_transfer(src_curves.attributes(), + new_curves.attributes_for_write(), + ATTR_DOMAIN_MASK_ALL, + propagation_info, + {"id"})) { + attribute_math::convert_to_static_type(attribute.src.type(), [&](auto dummy) { using T = decltype(dummy); - VArraySpan src{src_attribute.varray.typed()}; - MutableSpan dst = dst_attribute.span.typed(); - - switch (domain) { + const Span src = attribute.src.typed(); + MutableSpan dst = attribute.dst.span.typed(); + switch (attribute.meta_data.domain) { case ATTR_DOMAIN_CURVE: threading::parallel_for(selection.index_range(), 512, [&](IndexRange range) { for (const int i_selection : range) { @@ -893,10 +804,11 @@ static void duplicate_points_curve(GeometrySet &geometry_set, threaded_slice_fill(duplicates, selection, src, dst); break; default: + BLI_assert_unreachable(); break; } }); - dst_attribute.finish(); + attribute.dst.finish(); } copy_stable_id_point(duplicates, src_curves.attributes(), new_curves.attributes_for_write()); @@ -940,12 +852,10 @@ static void duplicate_points_mesh(GeometrySet &geometry_set, Mesh *new_mesh = BKE_mesh_new_nomain(duplicates.total_size(), 0, 0, 0, 0); - copy_attributes_without_id(geometry_set, - GEO_COMPONENT_TYPE_MESH, - ATTR_DOMAIN_POINT, - duplicates, + copy_attributes_without_id(duplicates, selection, propagation_info, + ATTR_DOMAIN_POINT, mesh.attributes(), new_mesh->attributes_for_write()); @@ -990,12 +900,10 @@ static void duplicate_points_pointcloud(GeometrySet &geometry_set, PointCloud *pointcloud = BKE_pointcloud_new_nomain(duplicates.total_size()); - copy_attributes_without_id(geometry_set, - GEO_COMPONENT_TYPE_POINT_CLOUD, - ATTR_DOMAIN_POINT, - duplicates, + copy_attributes_without_id(duplicates, selection, propagation_info, + ATTR_DOMAIN_POINT, src_points.attributes(), pointcloud->attributes_for_write()); @@ -1103,12 +1011,10 @@ static void duplicate_instances(GeometrySet &geometry_set, dst_instances->reference_handles().slice(range).fill(new_handle); } - copy_attributes_without_id(geometry_set, - GEO_COMPONENT_TYPE_INSTANCES, - ATTR_DOMAIN_INSTANCE, - duplicates, + copy_attributes_without_id(duplicates, selection, propagation_info, + ATTR_DOMAIN_INSTANCE, src_instances.attributes(), dst_instances->attributes_for_write()); -- 2.30.2 From c2071da085c59559976cc4ab95fcabef1e4d9409 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Wed, 15 Feb 2023 17:39:53 -0500 Subject: [PATCH 152/182] Cleanup: Make format, fix missing static warning --- source/blender/blenkernel/intern/crazyspace.cc | 3 +-- source/blender/editors/mesh/editmesh_bisect.c | 2 +- .../blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc | 4 ++-- tests/python/bl_usd_export_test.py | 1 + 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/source/blender/blenkernel/intern/crazyspace.cc b/source/blender/blenkernel/intern/crazyspace.cc index 703454fef1ce..d63ba6d08b30 100644 --- a/source/blender/blenkernel/intern/crazyspace.cc +++ b/source/blender/blenkernel/intern/crazyspace.cc @@ -596,8 +596,7 @@ void BKE_crazyspace_api_eval_clear(Object *object) namespace blender::bke::crazyspace { -GeometryDeformation get_evaluated_curves_deformation(const Object *ob_eval, - const Object &ob_orig) +GeometryDeformation get_evaluated_curves_deformation(const Object *ob_eval, const Object &ob_orig) { BLI_assert(ob_orig.type == OB_CURVES); const Curves &curves_id_orig = *static_cast(ob_orig.data); diff --git a/source/blender/editors/mesh/editmesh_bisect.c b/source/blender/editors/mesh/editmesh_bisect.c index 4fc225f54336..9114b4770dd2 100644 --- a/source/blender/editors/mesh/editmesh_bisect.c +++ b/source/blender/editors/mesh/editmesh_bisect.c @@ -54,7 +54,7 @@ typedef struct { BMBackup mesh_backup; bool is_valid; bool is_dirty; - } *backup; + } * backup; int backup_len; } BisectData; diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc index b9ff59b6c6fc..1624544a5ced 100644 --- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc +++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc @@ -12,9 +12,9 @@ #include "BLI_linklist.h" #include "BLI_listbase.h" #include "BLI_math.h" +#include "BLI_sort.hh" #include "BLI_task.h" #include "BLI_utildefines.h" -#include "BLI_sort.hh" #include "BLI_vector.hh" #include "PIL_time.h" @@ -1889,7 +1889,7 @@ static void lineart_edge_neighbor_init_task(void *__restrict userdata, edge_nabr->flags = 0; } -void lineart_sort_adjacent_items(LineartAdjacentEdge *ai, int length) +static void lineart_sort_adjacent_items(LineartAdjacentEdge *ai, int length) { blender::parallel_sort( ai, ai + length, [](const LineartAdjacentEdge &p1, const LineartAdjacentEdge &p2) { diff --git a/tests/python/bl_usd_export_test.py b/tests/python/bl_usd_export_test.py index 80edb89a9b3a..1080acaf7e68 100644 --- a/tests/python/bl_usd_export_test.py +++ b/tests/python/bl_usd_export_test.py @@ -14,6 +14,7 @@ import bpy args = None + class AbstractUSDTest(unittest.TestCase): @classmethod def setUpClass(cls): -- 2.30.2 From 7ee8749aac3b47854bce0d36e4e5889c973e7764 Mon Sep 17 00:00:00 2001 From: Martijn Versteegh Date: Wed, 15 Feb 2023 23:54:50 +0100 Subject: [PATCH 153/182] Fix: Skip anonymous CustomData layers for the python API Now that the UV map names are read from the evaluated mesh the names of the anonymous layers would show up in the UV Map node and be accessible via the python interface. This changes the collection definition to skip anonymous layers. Pull Request #104783 --- source/blender/blenkernel/BKE_customdata.h | 1 + source/blender/blenkernel/intern/customdata.cc | 14 ++++++++++++++ source/blender/makesrna/intern/rna_mesh_utils.h | 10 ++++++---- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h index 9cddc39f43c4..297cd3c2433f 100644 --- a/source/blender/blenkernel/BKE_customdata.h +++ b/source/blender/blenkernel/BKE_customdata.h @@ -282,6 +282,7 @@ bool CustomData_has_layer(const struct CustomData *data, int type); * Returns the number of layers with this type. */ int CustomData_number_of_layers(const struct CustomData *data, int type); +int CustomData_number_of_anonymous_layers(const struct CustomData *data, int type); int CustomData_number_of_layers_typemask(const struct CustomData *data, eCustomDataMask mask); /** diff --git a/source/blender/blenkernel/intern/customdata.cc b/source/blender/blenkernel/intern/customdata.cc index 75a8c8651708..ef6f458ee401 100644 --- a/source/blender/blenkernel/intern/customdata.cc +++ b/source/blender/blenkernel/intern/customdata.cc @@ -2991,6 +2991,20 @@ int CustomData_number_of_layers(const CustomData *data, const int type) return number; } +int CustomData_number_of_anonymous_layers(const CustomData *data, const int type) +{ + int number = 0; + + for (int i = 0; i < data->totlayer; i++) { + if (data->layers[i].type == type && data->layers[i].anonymous_id != nullptr) { + number++; + } + } + + return number; +} + + int CustomData_number_of_layers_typemask(const CustomData *data, const eCustomDataMask mask) { int number = 0; diff --git a/source/blender/makesrna/intern/rna_mesh_utils.h b/source/blender/makesrna/intern/rna_mesh_utils.h index 495c58d7b307..933202f116c9 100644 --- a/source/blender/makesrna/intern/rna_mesh_utils.h +++ b/source/blender/makesrna/intern/rna_mesh_utils.h @@ -8,13 +8,14 @@ /* Macros to help reduce code clutter in rna_mesh.c */ -/* Define the accessors for a basic CustomDataLayer collection */ + +/* Define the accessors for a basic CustomDataLayer collection, skipping anonymous layers */ #define DEFINE_CUSTOMDATA_LAYER_COLLECTION(collection_name, customdata_type, layer_type) \ /* check */ \ static int rna_##collection_name##_check(CollectionPropertyIterator *UNUSED(iter), void *data) \ { \ CustomDataLayer *layer = (CustomDataLayer *)data; \ - return (layer->type != layer_type); \ + return (layer->anonymous_id != NULL || layer->type != layer_type); \ } \ /* begin */ \ static void rna_Mesh_##collection_name##s_begin(CollectionPropertyIterator *iter, \ @@ -37,7 +38,7 @@ static int rna_Mesh_##collection_name##s_length(PointerRNA *ptr) \ { \ CustomData *data = rna_mesh_##customdata_type(ptr); \ - return data ? CustomData_number_of_layers(data, layer_type) : 0; \ + return data ? CustomData_number_of_layers(data, layer_type) - CustomData_number_of_anonymous_layers(data, layer_type) : 0; \ } \ /* index range */ \ static void rna_Mesh_##collection_name##_index_range( \ @@ -45,10 +46,11 @@ { \ CustomData *data = rna_mesh_##customdata_type(ptr); \ *min = 0; \ - *max = data ? CustomData_number_of_layers(data, layer_type) - 1 : 0; \ + *max = data ? CustomData_number_of_layers(data, layer_type) - CustomData_number_of_anonymous_layers(data, layer_type) - 1 : 0; \ *max = MAX2(0, *max); \ } + /* Define the accessors for special CustomDataLayers in the collection * (active, render, clone, stencil, etc) */ #define DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM( \ -- 2.30.2 From 89e12ddf8657518cc5ad1a6b6dcd280b6927fab0 Mon Sep 17 00:00:00 2001 From: Miguel Pozo Date: Wed, 15 Feb 2023 23:54:51 +0100 Subject: [PATCH 154/182] Fix #104370: Draw: Don't request the same attribute more than once Avoid running out of attributes when multiple material slots use the same one. Cleanup: Removes the return value from drw_attributes_add_request since it shouldn't be modified afterward and it's never used. Avoid making copies of DRW_AttributeRequest in drw_attributes_has_request. Co-authored-by: Miguel Pozo Pull Request #104709 --- source/blender/draw/intern/draw_attributes.cc | 33 ++++++++----------- source/blender/draw/intern/draw_attributes.hh | 10 +++--- 2 files changed, 19 insertions(+), 24 deletions(-) diff --git a/source/blender/draw/intern/draw_attributes.cc b/source/blender/draw/intern/draw_attributes.cc index 553832b0bf62..e1d53844f5ac 100644 --- a/source/blender/draw/intern/draw_attributes.cc +++ b/source/blender/draw/intern/draw_attributes.cc @@ -4,20 +4,15 @@ #include "draw_attributes.hh" /* Return true if the given DRW_AttributeRequest is already in the requests. */ -static bool drw_attributes_has_request(const DRW_Attributes *requests, DRW_AttributeRequest req) +static bool drw_attributes_has_request(const DRW_Attributes *requests, + const DRW_AttributeRequest &req) { for (int i = 0; i < requests->num_requests; i++) { - const DRW_AttributeRequest src_req = requests->requests[i]; - if (src_req.domain != req.domain) { - continue; + const DRW_AttributeRequest &src_req = requests->requests[i]; + if (src_req.domain == req.domain && src_req.layer_index == req.layer_index && + src_req.cd_type == req.cd_type) { + return true; } - if (src_req.layer_index != req.layer_index) { - continue; - } - if (src_req.cd_type != req.cd_type) { - continue; - } - return true; } return false; } @@ -61,14 +56,15 @@ bool drw_attributes_overlap(const DRW_Attributes *a, const DRW_Attributes *b) return true; } -DRW_AttributeRequest *drw_attributes_add_request(DRW_Attributes *attrs, - const char *name, - const eCustomDataType type, - const int layer_index, - const eAttrDomain domain) +void drw_attributes_add_request(DRW_Attributes *attrs, + const char *name, + const eCustomDataType type, + const int layer_index, + const eAttrDomain domain) { - if (attrs->num_requests >= GPU_MAX_ATTR) { - return nullptr; + if (attrs->num_requests >= GPU_MAX_ATTR || + drw_attributes_has_request(attrs, {type, layer_index, domain})) { + return; } DRW_AttributeRequest *req = &attrs->requests[attrs->num_requests]; @@ -77,7 +73,6 @@ DRW_AttributeRequest *drw_attributes_add_request(DRW_Attributes *attrs, req->layer_index = layer_index; req->domain = domain; attrs->num_requests += 1; - return req; } bool drw_custom_data_match_attribute(const CustomData *custom_data, diff --git a/source/blender/draw/intern/draw_attributes.hh b/source/blender/draw/intern/draw_attributes.hh index 1449f7b3b8a0..d5de4e1641b0 100644 --- a/source/blender/draw/intern/draw_attributes.hh +++ b/source/blender/draw/intern/draw_attributes.hh @@ -60,11 +60,11 @@ void drw_attributes_merge(DRW_Attributes *dst, /* Return true if all requests in b are in a. */ bool drw_attributes_overlap(const DRW_Attributes *a, const DRW_Attributes *b); -DRW_AttributeRequest *drw_attributes_add_request(DRW_Attributes *attrs, - const char *name, - eCustomDataType data_type, - int layer_index, - eAttrDomain domain); +void drw_attributes_add_request(DRW_Attributes *attrs, + const char *name, + eCustomDataType data_type, + int layer_index, + eAttrDomain domain); bool drw_custom_data_match_attribute(const CustomData *custom_data, const char *name, -- 2.30.2 From e71615a26da580284f57e9d40bca827c44ed54b7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 16 Feb 2023 09:49:50 +1100 Subject: [PATCH 155/182] Cleanup: document & improve naming for Wayland's pending window actions --- intern/ghost/intern/GHOST_WindowWayland.cpp | 38 +++++++++++++-------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/intern/ghost/intern/GHOST_WindowWayland.cpp b/intern/ghost/intern/GHOST_WindowWayland.cpp index 066ff4aa03ab..843f6f62c73f 100644 --- a/intern/ghost/intern/GHOST_WindowWayland.cpp +++ b/intern/ghost/intern/GHOST_WindowWayland.cpp @@ -306,14 +306,23 @@ static void gwl_window_frame_update_from_pending(GWL_Window *win); #ifdef USE_EVENT_BACKGROUND_THREAD enum eGWL_PendingWindowActions { - PENDING_FRAME_CONFIGURE = 0, - PENDING_EGL_RESIZE, + /** + * The state of the window frame has changed, apply the state from #GWL_Window::frame_pending. + */ + PENDING_WINDOW_FRAME_CONFIGURE = 0, + /** The EGL buffer must be resized to match #GWL_WindowFrame::size. */ + PENDING_EGL_WINDOW_RESIZE, # ifdef GHOST_OPENGL_ALPHA + /** Draw an opaque region behind the window. */ PENDING_OPAQUE_SET, # endif - PENDING_SCALE_UPDATE, + /** + * The DPI for a monitor has changed or the monitors (outputs) + * this window is visible on may have changed. Recalculate the windows scale. + */ + PENDING_OUTPUT_SCALE_UPDATE, }; -# define PENDING_NUM (PENDING_SCALE_UPDATE + 1) +# define PENDING_NUM (PENDING_OUTPUT_SCALE_UPDATE + 1) static void gwl_window_pending_actions_tag(GWL_Window *win, enum eGWL_PendingWindowActions type) { @@ -323,10 +332,10 @@ static void gwl_window_pending_actions_tag(GWL_Window *win, enum eGWL_PendingWin static void gwl_window_pending_actions_handle(GWL_Window *win) { - if (win->pending_actions[PENDING_FRAME_CONFIGURE].exchange(false)) { + if (win->pending_actions[PENDING_WINDOW_FRAME_CONFIGURE].exchange(false)) { gwl_window_frame_update_from_pending(win); } - if (win->pending_actions[PENDING_EGL_RESIZE].exchange(false)) { + if (win->pending_actions[PENDING_EGL_WINDOW_RESIZE].exchange(false)) { wl_egl_window_resize(win->egl_window, UNPACK2(win->frame.size), 0, 0); } # ifdef GHOST_OPENGL_ALPHA @@ -334,7 +343,7 @@ static void gwl_window_pending_actions_handle(GWL_Window *win) win->ghost_window->setOpaque(); } # endif - if (win->pending_actions[PENDING_SCALE_UPDATE].exchange(false)) { + if (win->pending_actions[PENDING_OUTPUT_SCALE_UPDATE].exchange(false)) { win->ghost_window->outputs_changed_update_scale(); } } @@ -342,9 +351,10 @@ static void gwl_window_pending_actions_handle(GWL_Window *win) #endif /* USE_EVENT_BACKGROUND_THREAD */ /** - * Update the window's #GWL_WindowFrame + * Update the window's #GWL_WindowFrame. + * The caller must handle locking & run from the main thread. */ -static void gwl_window_frame_update_from_pending_lockfree(GWL_Window *win) +static void gwl_window_frame_update_from_pending_no_lock(GWL_Window *win) { #ifdef USE_EVENT_BACKGROUND_THREAD GHOST_ASSERT(win->ghost_system->main_thread_id == std::this_thread::get_id(), @@ -381,7 +391,7 @@ static void gwl_window_frame_update_from_pending(GWL_Window *win) #ifdef USE_EVENT_BACKGROUND_THREAD std::lock_guard lock_frame_guard{win->frame_pending_mutex}; #endif - gwl_window_frame_update_from_pending_lockfree(win); + gwl_window_frame_update_from_pending_no_lock(win); } /** \} */ @@ -576,12 +586,12 @@ static void frame_handle_configure(struct libdecor_frame *frame, GHOST_SystemWayland *system = win->ghost_system; const bool is_main_thread = system->main_thread_id == std::this_thread::get_id(); if (!is_main_thread) { - gwl_window_pending_actions_tag(win, PENDING_FRAME_CONFIGURE); + gwl_window_pending_actions_tag(win, PENDING_WINDOW_FRAME_CONFIGURE); } else # endif { - gwl_window_frame_update_from_pending_lockfree(win); + gwl_window_frame_update_from_pending_no_lock(win); } } } @@ -671,7 +681,7 @@ static void xdg_surface_handle_configure(void *data, if (!is_main_thread) { /* NOTE(@ideasman42): this only gets one redraw, * I could not find a case where this causes problems. */ - gwl_window_pending_actions_tag(win, PENDING_FRAME_CONFIGURE); + gwl_window_pending_actions_tag(win, PENDING_WINDOW_FRAME_CONFIGURE); } else #endif @@ -1373,7 +1383,7 @@ bool GHOST_WindowWayland::outputs_changed_update_scale() { #ifdef USE_EVENT_BACKGROUND_THREAD if (system_->main_thread_id != std::this_thread::get_id()) { - gwl_window_pending_actions_tag(window_, PENDING_SCALE_UPDATE); + gwl_window_pending_actions_tag(window_, PENDING_OUTPUT_SCALE_UPDATE); return false; } #endif -- 2.30.2 From 55d7793bfff46a42303ea4718000656ea2d6bb3b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 16 Feb 2023 10:03:01 +1100 Subject: [PATCH 156/182] Cleanup: format --- source/blender/blenkernel/intern/customdata.cc | 1 - source/blender/makesrna/intern/rna_mesh_utils.h | 10 ++++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/source/blender/blenkernel/intern/customdata.cc b/source/blender/blenkernel/intern/customdata.cc index ef6f458ee401..eac61c6c5c3f 100644 --- a/source/blender/blenkernel/intern/customdata.cc +++ b/source/blender/blenkernel/intern/customdata.cc @@ -3004,7 +3004,6 @@ int CustomData_number_of_anonymous_layers(const CustomData *data, const int type return number; } - int CustomData_number_of_layers_typemask(const CustomData *data, const eCustomDataMask mask) { int number = 0; diff --git a/source/blender/makesrna/intern/rna_mesh_utils.h b/source/blender/makesrna/intern/rna_mesh_utils.h index 933202f116c9..2b01c98b35b8 100644 --- a/source/blender/makesrna/intern/rna_mesh_utils.h +++ b/source/blender/makesrna/intern/rna_mesh_utils.h @@ -8,7 +8,6 @@ /* Macros to help reduce code clutter in rna_mesh.c */ - /* Define the accessors for a basic CustomDataLayer collection, skipping anonymous layers */ #define DEFINE_CUSTOMDATA_LAYER_COLLECTION(collection_name, customdata_type, layer_type) \ /* check */ \ @@ -38,7 +37,9 @@ static int rna_Mesh_##collection_name##s_length(PointerRNA *ptr) \ { \ CustomData *data = rna_mesh_##customdata_type(ptr); \ - return data ? CustomData_number_of_layers(data, layer_type) - CustomData_number_of_anonymous_layers(data, layer_type) : 0; \ + return data ? CustomData_number_of_layers(data, layer_type) - \ + CustomData_number_of_anonymous_layers(data, layer_type) : \ + 0; \ } \ /* index range */ \ static void rna_Mesh_##collection_name##_index_range( \ @@ -46,11 +47,12 @@ { \ CustomData *data = rna_mesh_##customdata_type(ptr); \ *min = 0; \ - *max = data ? CustomData_number_of_layers(data, layer_type) - CustomData_number_of_anonymous_layers(data, layer_type) - 1 : 0; \ + *max = data ? CustomData_number_of_layers(data, layer_type) - \ + CustomData_number_of_anonymous_layers(data, layer_type) - 1 : \ + 0; \ *max = MAX2(0, *max); \ } - /* Define the accessors for special CustomDataLayers in the collection * (active, render, clone, stencil, etc) */ #define DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM( \ -- 2.30.2 From 837f90966410941cf85c6e34ba0d944ac1f952c8 Mon Sep 17 00:00:00 2001 From: Harley Acheson Date: Thu, 16 Feb 2023 00:41:26 +0100 Subject: [PATCH 157/182] Windows: allow windows to span multiple monitors On the Windows platform allow Blender windows to be created that are spread over multiple adjacent monitors. --- On Windows we are quite feature-complete and stable for the creation and placement of multiple (non-temp) Blender windows. We correctly do so across multiple monitors no matter their arrangement, resolution, and scale. However, there is another way that Blender could use multiple monitors - suggested by a core dev - which is to size a window so that it comprises multiple monitors. There are some advantages to this way of working because the one window remains constantly active and in focus. It also allows a single region (like a node editor) to be as large as possible. But this way of working is not currently possible. That is because during window creation we constrain them to fit within the confines of the nearest single monitor. This has mostly been done for simplicity and safety. We don't want to restore a saved window to a position where it cannot be seen or used. This patch addresses that. It allows windows to span multiple monitors, and does so safely by constraining the four corners of the window to be within the working area of any active monitor. This means it allows the creation of single windows as shown below in blue (left two), but does not allow the one in orange (right): ![image.png](/attachments/b2a9dfca-d54c-467a-ab95-717df3b25051) Note this has been previously (before gitea) reviewed and approved by Brecht. Co-authored-by: Harley Acheson Pull Request #104438 --- intern/ghost/intern/GHOST_WindowWin32.cpp | 59 ++++++++++++++++------- intern/ghost/intern/GHOST_WindowWin32.h | 4 +- 2 files changed, 44 insertions(+), 19 deletions(-) diff --git a/intern/ghost/intern/GHOST_WindowWin32.cpp b/intern/ghost/intern/GHOST_WindowWin32.cpp index 3e82f55c5839..b8e1b16ef4e1 100644 --- a/intern/ghost/intern/GHOST_WindowWin32.cpp +++ b/intern/ghost/intern/GHOST_WindowWin32.cpp @@ -93,7 +93,7 @@ GHOST_WindowWin32::GHOST_WindowWin32(GHOST_SystemWin32 *system, } RECT win_rect = {left, top, long(left + width), long(top + height)}; - adjustWindowRectForClosestMonitor(&win_rect, style, extended_style); + adjustWindowRectForDesktop(&win_rect, style, extended_style); wchar_t *title_16 = alloc_utf16_from_8((char *)title, 0); m_hWnd = ::CreateWindowExW(extended_style, /* window extended style */ @@ -298,24 +298,52 @@ GHOST_WindowWin32::~GHOST_WindowWin32() m_directManipulationHelper = NULL; } -void GHOST_WindowWin32::adjustWindowRectForClosestMonitor(LPRECT win_rect, - DWORD dwStyle, - DWORD dwExStyle) +void GHOST_WindowWin32::adjustWindowRectForDesktop(LPRECT win_rect, DWORD dwStyle, DWORD dwExStyle) { - /* Get Details of the closest monitor. */ - HMONITOR hmonitor = MonitorFromRect(win_rect, MONITOR_DEFAULTTONEAREST); + /* Windows can span multiple monitors, but must be usable. The desktop can have a larger + * surface than all monitors combined, for example when two monitors are aligned diagonally. + * Therefore we ensure that all the window's corners are within some monitor's Work area. */ + + POINT pt; + HMONITOR hmonitor; MONITORINFOEX monitor; monitor.cbSize = sizeof(MONITORINFOEX); monitor.dwFlags = 0; - GetMonitorInfo(hmonitor, &monitor); - /* Constrain requested size and position to fit within this monitor. */ - LONG width = min(monitor.rcWork.right - monitor.rcWork.left, win_rect->right - win_rect->left); - LONG height = min(monitor.rcWork.bottom - monitor.rcWork.top, win_rect->bottom - win_rect->top); - win_rect->left = min(max(monitor.rcWork.left, win_rect->left), monitor.rcWork.right - width); - win_rect->right = win_rect->left + width; - win_rect->top = min(max(monitor.rcWork.top, win_rect->top), monitor.rcWork.bottom - height); - win_rect->bottom = win_rect->top + height; + /* Note that with MonitorFromPoint using MONITOR_DEFAULTTONEAREST, it will return + * the exact monitor if there is one at the location or the nearest monitor if not. */ + + /* Top-left. */ + pt.x = win_rect->left; + pt.y = win_rect->top; + hmonitor = MonitorFromPoint(pt, MONITOR_DEFAULTTONEAREST); + GetMonitorInfo(hmonitor, &monitor); + win_rect->top = max(win_rect->top, monitor.rcWork.top); + win_rect->left = max(win_rect->left, monitor.rcWork.left); + + /* Top-right. */ + pt.x = win_rect->right; + pt.y = win_rect->top; + hmonitor = MonitorFromPoint(pt, MONITOR_DEFAULTTONEAREST); + GetMonitorInfo(hmonitor, &monitor); + win_rect->top = max(win_rect->top, monitor.rcWork.top); + win_rect->right = min(win_rect->right, monitor.rcWork.right); + + /* Bottom-left. */ + pt.x = win_rect->left; + pt.y = win_rect->bottom; + hmonitor = MonitorFromPoint(pt, MONITOR_DEFAULTTONEAREST); + GetMonitorInfo(hmonitor, &monitor); + win_rect->bottom = min(win_rect->bottom, monitor.rcWork.bottom); + win_rect->left = max(win_rect->left, monitor.rcWork.left); + + /* Bottom-right. */ + pt.x = win_rect->right; + pt.y = win_rect->bottom; + hmonitor = MonitorFromPoint(pt, MONITOR_DEFAULTTONEAREST); + GetMonitorInfo(hmonitor, &monitor); + win_rect->bottom = min(win_rect->bottom, monitor.rcWork.bottom); + win_rect->right = min(win_rect->right, monitor.rcWork.right); /* With Windows 10 and newer we can adjust for chrome that differs with DPI and scale. */ GHOST_WIN32_AdjustWindowRectExForDpi fpAdjustWindowRectExForDpi = nullptr; @@ -334,9 +362,6 @@ void GHOST_WindowWin32::adjustWindowRectForClosestMonitor(LPRECT win_rect, else { AdjustWindowRectEx(win_rect, dwStyle & ~WS_OVERLAPPED, FALSE, dwExStyle); } - - /* But never allow a top position that can hide part of the title bar. */ - win_rect->top = max(monitor.rcWork.top, win_rect->top); } bool GHOST_WindowWin32::getValid() const diff --git a/intern/ghost/intern/GHOST_WindowWin32.h b/intern/ghost/intern/GHOST_WindowWin32.h index 44071f0915ec..b6c4aa25c793 100644 --- a/intern/ghost/intern/GHOST_WindowWin32.h +++ b/intern/ghost/intern/GHOST_WindowWin32.h @@ -87,12 +87,12 @@ class GHOST_WindowWin32 : public GHOST_Window { ~GHOST_WindowWin32(); /** - * Adjusts a requested window rect to fit and position correctly in monitor. + * Adjusts a requested window rect to fit and position within the desktop. * \param win_rect: pointer to rectangle that will be modified. * \param dwStyle: The Window Style of the window whose required size is to be calculated. * \param dwExStyle: The Extended Window Style of the window. */ - void adjustWindowRectForClosestMonitor(LPRECT win_rect, DWORD dwStyle, DWORD dwExStyle); + void adjustWindowRectForDesktop(LPRECT win_rect, DWORD dwStyle, DWORD dwExStyle); /** * Returns indication as to whether the window is valid. -- 2.30.2 From 5880150620c6db0eae8bf39b6e81820330a3f3fc Mon Sep 17 00:00:00 2001 From: Richard Antalik Date: Thu, 16 Feb 2023 00:48:52 +0100 Subject: [PATCH 158/182] Fix #104584: Reassigning effect strip input does not update its position Lookup cache was not invalidated, to update attached effects position, a handle of a input strip is touched. To update attached effects, currently the code only does that when strip position is changed. This is, because effect strip updating is done internally in sequencer module code and ideally shouldn't be done at all. A TODO comment with further explanation is added. --- source/blender/editors/space_sequencer/sequencer_edit.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index 28d7f388ca56..1c5063b8aacf 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -1262,6 +1262,12 @@ static int sequencer_reassign_inputs_exec(bContext *C, wmOperator *op) int old_start = last_seq->start; + /* Force time position update for reassigned effects. + * TODO(Richard): This is because internally startdisp is still used, due to poor performance of + * mapping effect range to inputs. This mapping could be cached though. */ + SEQ_sequence_lookup_tag(scene, SEQ_LOOKUP_TAG_INVALID); + SEQ_time_left_handle_frame_set(scene, seq1, SEQ_time_left_handle_frame_get(scene, seq1)); + SEQ_relations_invalidate_cache_preprocessed(scene, last_seq); SEQ_offset_animdata(scene, last_seq, (last_seq->start - old_start)); -- 2.30.2 From e1fd1b8d174e7c3d6b897c26d5ea9e4c1c2fbcaa Mon Sep 17 00:00:00 2001 From: Harley Acheson Date: Thu, 16 Feb 2023 02:38:57 +0100 Subject: [PATCH 159/182] UI: Improvement to screen_find_area_xy In BKE_screen_area_map_find_area_xy (find a ScrArea by 2D location), ignore edges by using screen verts instead of totrct Differential Revision: https://projects.blender.org/blender/blender/pulls/104680 Reviewed by Brecht Van Lommel --- source/blender/blenkernel/intern/screen.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c index 95ef6b7b9253..fabcd6278b48 100644 --- a/source/blender/blenkernel/intern/screen.c +++ b/source/blender/blenkernel/intern/screen.c @@ -956,7 +956,9 @@ ScrArea *BKE_screen_area_map_find_area_xy(const ScrAreaMap *areamap, const int xy[2]) { LISTBASE_FOREACH (ScrArea *, area, &areamap->areabase) { - if (BLI_rcti_isect_pt_v(&area->totrct, xy)) { + /* Test area's outer screen verts, not inner totrct. */ + if (xy[0] >= area->v1->vec.x && xy[0] <= area->v4->vec.x && xy[1] >= area->v1->vec.y && + xy[1] <= area->v2->vec.y) { if (ELEM(spacetype, SPACE_TYPE_ANY, area->spacetype)) { return area; } -- 2.30.2 From f30f1818fdc2c8f45c2174cbd1b9bd83bba2ff95 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Thu, 16 Feb 2023 13:47:13 +0100 Subject: [PATCH 160/182] Fix #104698: Assert and failure adding shortcuts to curves sculpt tools The keymap name in `WM_keymap_guess_from_context` didn't match the name of the keymap in the Blender default keymap (`km_sculpt_curves`). Fix by changing the utility function to match the keymap name. Before right clicking on any tool in curves sculpt mode gave an assert, now it shows a context menu. Pull Request #104791 --- source/blender/windowmanager/intern/wm_keymap_utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/windowmanager/intern/wm_keymap_utils.c b/source/blender/windowmanager/intern/wm_keymap_utils.c index 0817b10f86e0..cf8c0ebb8590 100644 --- a/source/blender/windowmanager/intern/wm_keymap_utils.c +++ b/source/blender/windowmanager/intern/wm_keymap_utils.c @@ -141,7 +141,7 @@ wmKeyMap *WM_keymap_guess_from_context(const bContext *C) km_id = "Grease Pencil Stroke Vertex Mode"; break; case CTX_MODE_SCULPT_CURVES: - km_id = "Curves Sculpt"; + km_id = "Sculpt Curves"; break; } } -- 2.30.2 From 6be593911255ebe5788bd868576f2fcab9f8232a Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Thu, 16 Feb 2023 13:48:39 +0100 Subject: [PATCH 161/182] Fix #104697: Curves Sculpt: Setting brush shortcuts does not work The active tools in `_defs_curves_sculpt` don't use names that are exactly the same as the corresponding brush name with "builtin_brush." at the beginning, instead they use more standard identifiers without capitals or spaces. The "brush_select" utility operator assumed the names matched though. That can be fixed by manually mapping the brushes to the active tools. Pull Request #104792 --- .../blender/editors/sculpt_paint/paint_ops.cc | 50 +++++++++++++++++-- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/sculpt_paint/paint_ops.cc b/source/blender/editors/sculpt_paint/paint_ops.cc index c8216bda59d6..ca102b5a0b89 100644 --- a/source/blender/editors/sculpt_paint/paint_ops.cc +++ b/source/blender/editors/sculpt_paint/paint_ops.cc @@ -832,6 +832,36 @@ static Brush *brush_tool_toggle(Main *bmain, Paint *paint, Brush *brush_orig, co return nullptr; } +/** The name of the active tool is "builtin_brush." concatenated with the returned string. */ +static blender::StringRefNull curves_active_tool_name_get(const eBrushCurvesSculptTool tool) +{ + switch (tool) { + case CURVES_SCULPT_TOOL_COMB: + return "comb"; + case CURVES_SCULPT_TOOL_DELETE: + return "delete"; + case CURVES_SCULPT_TOOL_SNAKE_HOOK: + return "snake_hook"; + case CURVES_SCULPT_TOOL_ADD: + return "add"; + case CURVES_SCULPT_TOOL_GROW_SHRINK: + return "grow_shrink"; + case CURVES_SCULPT_TOOL_SELECTION_PAINT: + return "selection_paint"; + case CURVES_SCULPT_TOOL_PINCH: + return "pinch"; + case CURVES_SCULPT_TOOL_SMOOTH: + return "smooth"; + case CURVES_SCULPT_TOOL_PUFF: + return "puff"; + case CURVES_SCULPT_TOOL_DENSITY: + return "density"; + case CURVES_SCULPT_TOOL_SLIDE: + return "slide"; + } + return ""; +} + static bool brush_generic_tool_set(bContext *C, Main *bmain, Paint *paint, @@ -869,8 +899,14 @@ static bool brush_generic_tool_set(bContext *C, * tool_name again. */ int tool_result = brush_tool(brush, paint->runtime.tool_offset); ePaintMode paint_mode = BKE_paintmode_get_active_from_context(C); - const EnumPropertyItem *items = BKE_paint_get_tool_enum_from_paintmode(paint_mode); - RNA_enum_name_from_value(items, tool_result, &tool_name); + + if (paint_mode == PAINT_MODE_SCULPT_CURVES) { + tool_name = curves_active_tool_name_get(eBrushCurvesSculptTool(tool)).c_str(); + } + else { + const EnumPropertyItem *items = BKE_paint_get_tool_enum_from_paintmode(paint_mode); + RNA_enum_name_from_value(items, tool_result, &tool_name); + } char tool_id[MAX_NAME]; SNPRINTF(tool_id, "builtin_brush.%s", tool_name); @@ -921,8 +957,14 @@ static int brush_select_exec(bContext *C, wmOperator *op) if (paint == nullptr) { return OPERATOR_CANCELLED; } - const EnumPropertyItem *items = BKE_paint_get_tool_enum_from_paintmode(paint_mode); - RNA_enum_name_from_value(items, tool, &tool_name); + + if (paint_mode == PAINT_MODE_SCULPT_CURVES) { + tool_name = curves_active_tool_name_get(eBrushCurvesSculptTool(tool)).c_str(); + } + else { + const EnumPropertyItem *items = BKE_paint_get_tool_enum_from_paintmode(paint_mode); + RNA_enum_name_from_value(items, tool, &tool_name); + } if (brush_generic_tool_set(C, bmain, paint, tool, tool_name, create_missing, toggle)) { return OPERATOR_FINISHED; -- 2.30.2 From f2ec56773312308a252d1c1abc798a737ff2d29c Mon Sep 17 00:00:00 2001 From: Pablo Vazquez Date: Thu, 16 Feb 2023 14:39:41 +0100 Subject: [PATCH 162/182] Themes: Fix several issues in Blender Light theme * Fix #92539: Hard to read the breadcrumbs. * Fix View Item active, hover, and text color (e.g. count numbers in the Spreadsheet were almost unreadable). * Fix mismatching node type colors with the default theme. Blender Light is meant to be simply a brighter version of the default, so screenshots and tutorials can be followed with both themes. * Use the same outline color for widgets, so they match when aligned in a row. * Make panels standout (not fully transparent), like in the default theme. --- .../presets/interface_theme/Blender_Light.xml | 277 ++++++++++-------- 1 file changed, 151 insertions(+), 126 deletions(-) diff --git a/release/scripts/presets/interface_theme/Blender_Light.xml b/release/scripts/presets/interface_theme/Blender_Light.xml index 49955bc3ff95..68245c53525c 100644 --- a/release/scripts/presets/interface_theme/Blender_Light.xml +++ b/release/scripts/presets/interface_theme/Blender_Light.xml @@ -29,11 +29,11 @@ icon_modifier="#84b8ffff" icon_shading="#ea7581ff" icon_folder="#e3c16eff" - icon_border_intensity="0.85" + icon_border_intensity="1" > + + + + @@ -519,9 +535,9 @@ > @@ -552,7 +568,7 @@ header="#adadadff" header_text="#000000" header_text_hi="#ffffff" - button="#999999e6" + button="#b3b3b3ff" button_title="#1a1a1a" button_text="#000000" button_text_hi="#000000" @@ -565,9 +581,9 @@ > @@ -623,9 +639,9 @@ > @@ -698,9 +714,9 @@ > @@ -783,9 +799,9 @@ > @@ -843,14 +859,23 @@ > + + + + @@ -871,7 +896,7 @@ button_title="#000000" button_text="#000000" button_text_hi="#000000" - navigation_bar="#656565ff" + navigation_bar="#1d1d1dff" execution_buts="#00000000" tab_active="#6697e6" tab_inactive="#535353" @@ -880,9 +905,9 @@ > @@ -927,9 +952,9 @@ > @@ -939,44 +964,44 @@ @@ -1013,8 +1038,8 @@ @@ -1091,9 +1116,9 @@ > @@ -1125,9 +1150,9 @@ > @@ -1137,26 +1162,26 @@ @@ -1231,9 +1256,9 @@ > @@ -1274,9 +1299,9 @@ > @@ -1292,7 +1317,7 @@ title="#ffffff" text="#ffffff" text_hi="#ffffff" - header="#adadadff" + header="#999999ff" header_text="#1a1a1a" header_text_hi="#ffffff" button="#2f303500" @@ -1308,9 +1333,9 @@ > @@ -1331,7 +1356,7 @@ header="#adadadff" header_text="#000000" header_text_hi="#ffffff" - button="#999999e6" + button="#b3b3b3ff" button_title="#1a1a1a" button_text="#000000" button_text_hi="#000000" @@ -1344,9 +1369,9 @@ > @@ -1585,8 +1610,8 @@ shadow="3" shadow_offset_x="0" shadow_offset_y="-1" - shadow_alpha="0.3" - shadow_value="0.7" + shadow_alpha="1" + shadow_value="0.8" > @@ -1596,8 +1621,8 @@ shadow="3" shadow_offset_x="0" shadow_offset_y="-1" - shadow_alpha="0.3" - shadow_value="0.7" + shadow_alpha="0" + shadow_value="0.8" > @@ -1607,8 +1632,8 @@ shadow="1" shadow_offset_x="0" shadow_offset_y="-1" - shadow_alpha="0.3" - shadow_value="0.7" + shadow_alpha="0" + shadow_value="0.8" > -- 2.30.2 From 328ac680b6520e3e685110acd0850f344b55ef6c Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Thu, 16 Feb 2023 09:05:50 -0500 Subject: [PATCH 163/182] Geometry Nodes: Remove "normal" attribute The "normal" was added before fields existed because we needed a way to expose the data to geometry nodes. It isn't really an attribute, because it's read-only and it's derived rather than original data. No features have relied on the "normal" attribute existing, except for the corresponding column in the spreadsheet. However, the column in the spreadsheet is also inconsistent, since it isn't an attribute but looks just like the other columns. The normal is always visible in the spreadsheet. Pull Request #104795 --- .../intern/geometry_component_mesh.cc | 46 +------------------ 1 file changed, 1 insertion(+), 45 deletions(-) diff --git a/source/blender/blenkernel/intern/geometry_component_mesh.cc b/source/blender/blenkernel/intern/geometry_component_mesh.cc index bdb1b0edf8bf..9aa4b99652e1 100644 --- a/source/blender/blenkernel/intern/geometry_component_mesh.cc +++ b/source/blender/blenkernel/intern/geometry_component_mesh.cc @@ -1137,48 +1137,6 @@ class VertexGroupsAttributeProvider final : public DynamicAttributesProvider { } }; -/** - * This provider makes face normals available as a read-only float3 attribute. - */ -class NormalAttributeProvider final : public BuiltinAttributeProvider { - public: - NormalAttributeProvider() - : BuiltinAttributeProvider( - "normal", ATTR_DOMAIN_FACE, CD_PROP_FLOAT3, NonCreatable, Readonly, NonDeletable) - { - } - - GVArray try_get_for_read(const void *owner) const final - { - const Mesh *mesh = static_cast(owner); - if (mesh == nullptr || mesh->totpoly == 0) { - return {}; - } - return VArray::ForSpan({(float3 *)BKE_mesh_poly_normals_ensure(mesh), mesh->totpoly}); - } - - GAttributeWriter try_get_for_write(void * /*owner*/) const final - { - return {}; - } - - bool try_delete(void * /*owner*/) const final - { - return false; - } - - bool try_create(void * /*owner*/, const AttributeInit & /*initializer*/) const final - { - return false; - } - - bool exists(const void *owner) const final - { - const Mesh *mesh = static_cast(owner); - return mesh->totpoly != 0; - } -}; - /** * In this function all the attribute providers for a mesh component are created. Most data in this * function is statically allocated, because it does not change over time. @@ -1229,8 +1187,6 @@ static ComponentAttributeProviders create_attribute_providers_for_mesh() make_array_write_attribute, tag_component_positions_changed); - static NormalAttributeProvider normal; - static BuiltinCustomDataLayerProvider id("id", ATTR_DOMAIN_POINT, CD_PROP_INT32, @@ -1308,7 +1264,7 @@ static ComponentAttributeProviders create_attribute_providers_for_mesh() static CustomDataAttributeProvider face_custom_data(ATTR_DOMAIN_FACE, face_access); return ComponentAttributeProviders( - {&position, &id, &material_index, &shade_smooth, &sharp_edge, &normal, &crease}, + {&position, &id, &material_index, &shade_smooth, &sharp_edge, &crease}, {&corner_custom_data, &vertex_groups, &point_custom_data, -- 2.30.2 From b9ed92c828c697c16e95bbbea6230be8ff42bc8d Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Thu, 16 Feb 2023 09:06:03 -0500 Subject: [PATCH 164/182] Cleanup: Remove read-only attribute type After the removal of the "normal" attribute providers, we no longer use the concept of read-only attributes. Removing this status simplifies code, clarifies the design, and removes potentially buggy corner cases. Pull Request #104795 --- .../startup/bl_ui/properties_data_mesh.py | 2 +- .../blenkernel/intern/attribute_access.cc | 9 ++------- .../intern/attribute_access_intern.hh | 17 ++--------------- .../intern/geometry_component_curves.cc | 15 --------------- .../intern/geometry_component_instances.cc | 3 +-- .../intern/geometry_component_mesh.cc | 6 ------ .../intern/geometry_component_pointcloud.cc | 3 --- .../interface_template_attribute_search.cc | 6 ------ .../geometry/intern/realize_instances.cc | 1 - .../geometry/nodes/node_geo_extrude_mesh.cc | 9 --------- 10 files changed, 6 insertions(+), 65 deletions(-) diff --git a/release/scripts/startup/bl_ui/properties_data_mesh.py b/release/scripts/startup/bl_ui/properties_data_mesh.py index 8e09a64b9154..c837a038c9f4 100644 --- a/release/scripts/startup/bl_ui/properties_data_mesh.py +++ b/release/scripts/startup/bl_ui/properties_data_mesh.py @@ -604,7 +604,7 @@ class DATA_PT_mesh_attributes(MeshButtonsPanel, Panel): colliding_names = [] for collection in ( # Built-in names. - {"shade_smooth": None, "normal": None, "crease": None}, + {"shade_smooth": None, "crease": None}, mesh.attributes, None if ob is None else ob.vertex_groups, ): diff --git a/source/blender/blenkernel/intern/attribute_access.cc b/source/blender/blenkernel/intern/attribute_access.cc index e6721e96ab84..2ba03b6d1cf6 100644 --- a/source/blender/blenkernel/intern/attribute_access.cc +++ b/source/blender/blenkernel/intern/attribute_access.cc @@ -316,9 +316,6 @@ GVArray BuiltinCustomDataLayerProvider::try_get_for_read(const void *owner) cons GAttributeWriter BuiltinCustomDataLayerProvider::try_get_for_write(void *owner) const { - if (writable_ != Writable) { - return {}; - } CustomData *custom_data = custom_data_access_.get_custom_data(owner); if (custom_data == nullptr) { return {}; @@ -905,10 +902,8 @@ Vector retrieve_attributes_for_transfer( BLI_assert(src); bke::GSpanAttributeWriter dst = dst_attributes.lookup_or_add_for_write_only_span( id, meta_data.domain, meta_data.data_type); - if (dst) { - /* Writing the the legacy "normal" attribute will fail. */ - attributes.append({std::move(src), meta_data, std::move(dst)}); - } + BLI_assert(dst); + attributes.append({std::move(src), meta_data, std::move(dst)}); return true; }); diff --git a/source/blender/blenkernel/intern/attribute_access_intern.hh b/source/blender/blenkernel/intern/attribute_access_intern.hh index b429756e7549..a1a74e3b81c0 100644 --- a/source/blender/blenkernel/intern/attribute_access_intern.hh +++ b/source/blender/blenkernel/intern/attribute_access_intern.hh @@ -37,10 +37,6 @@ class BuiltinAttributeProvider { Creatable, NonCreatable, }; - enum WritableEnum { - Writable, - Readonly, - }; enum DeletableEnum { Deletable, NonDeletable, @@ -51,7 +47,6 @@ class BuiltinAttributeProvider { const eAttrDomain domain_; const eCustomDataType data_type_; const CreatableEnum createable_; - const WritableEnum writable_; const DeletableEnum deletable_; const AttributeValidator validator_; @@ -60,14 +55,12 @@ class BuiltinAttributeProvider { const eAttrDomain domain, const eCustomDataType data_type, const CreatableEnum createable, - const WritableEnum writable, const DeletableEnum deletable, AttributeValidator validator = {}) : name_(std::move(name)), domain_(domain), data_type_(data_type), createable_(createable), - writable_(writable), deletable_(deletable), validator_(validator) { @@ -205,20 +198,14 @@ class BuiltinCustomDataLayerProvider final : public BuiltinAttributeProvider { const eCustomDataType attribute_type, const eCustomDataType stored_type, const CreatableEnum creatable, - const WritableEnum writable, const DeletableEnum deletable, const CustomDataAccessInfo custom_data_access, const AsReadAttribute as_read_attribute, const AsWriteAttribute as_write_attribute, const UpdateOnChange update_on_write, const AttributeValidator validator = {}) - : BuiltinAttributeProvider(std::move(attribute_name), - domain, - attribute_type, - creatable, - writable, - deletable, - validator), + : BuiltinAttributeProvider( + std::move(attribute_name), domain, attribute_type, creatable, deletable, validator), stored_type_(stored_type), custom_data_access_(custom_data_access), as_read_attribute_(as_read_attribute), diff --git a/source/blender/blenkernel/intern/geometry_component_curves.cc b/source/blender/blenkernel/intern/geometry_component_curves.cc index e775a2a00a97..7401546c19d4 100644 --- a/source/blender/blenkernel/intern/geometry_component_curves.cc +++ b/source/blender/blenkernel/intern/geometry_component_curves.cc @@ -375,7 +375,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve() CD_PROP_FLOAT3, CD_PROP_FLOAT3, BuiltinAttributeProvider::NonCreatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::NonDeletable, point_access, make_array_read_attribute, @@ -387,7 +386,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve() CD_PROP_FLOAT, CD_PROP_FLOAT, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, point_access, make_array_read_attribute, @@ -399,7 +397,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve() CD_PROP_INT32, CD_PROP_INT32, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, point_access, make_array_read_attribute, @@ -411,7 +408,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve() CD_PROP_FLOAT, CD_PROP_FLOAT, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, point_access, make_array_read_attribute, @@ -423,7 +419,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve() CD_PROP_FLOAT3, CD_PROP_FLOAT3, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, point_access, make_array_read_attribute, @@ -435,7 +430,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve() CD_PROP_FLOAT3, CD_PROP_FLOAT3, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, point_access, make_array_read_attribute, @@ -453,7 +447,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve() CD_PROP_INT8, CD_PROP_INT8, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, point_access, make_array_read_attribute, @@ -466,7 +459,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve() CD_PROP_INT8, CD_PROP_INT8, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, point_access, make_array_read_attribute, @@ -479,7 +471,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve() CD_PROP_FLOAT, CD_PROP_FLOAT, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, point_access, make_array_read_attribute, @@ -495,7 +486,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve() CD_PROP_INT8, CD_PROP_INT8, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, curve_access, make_array_read_attribute, @@ -514,7 +504,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve() CD_PROP_INT8, CD_PROP_INT8, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, curve_access, make_array_read_attribute, @@ -533,7 +522,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve() CD_PROP_INT8, CD_PROP_INT8, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, curve_access, make_array_read_attribute, @@ -552,7 +540,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve() CD_PROP_INT8, CD_PROP_INT8, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, curve_access, make_array_read_attribute, @@ -569,7 +556,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve() CD_PROP_INT32, CD_PROP_INT32, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, curve_access, make_array_read_attribute, @@ -582,7 +568,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve() CD_PROP_BOOL, CD_PROP_BOOL, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, curve_access, make_array_read_attribute, diff --git a/source/blender/blenkernel/intern/geometry_component_instances.cc b/source/blender/blenkernel/intern/geometry_component_instances.cc index 25143bf20a0d..0c8c66206683 100644 --- a/source/blender/blenkernel/intern/geometry_component_instances.cc +++ b/source/blender/blenkernel/intern/geometry_component_instances.cc @@ -129,7 +129,7 @@ class InstancePositionAttributeProvider final : public BuiltinAttributeProvider public: InstancePositionAttributeProvider() : BuiltinAttributeProvider( - "position", ATTR_DOMAIN_INSTANCE, CD_PROP_FLOAT3, NonCreatable, Writable, NonDeletable) + "position", ATTR_DOMAIN_INSTANCE, CD_PROP_FLOAT3, NonCreatable, NonDeletable) { } @@ -200,7 +200,6 @@ static ComponentAttributeProviders create_attribute_providers_for_instances() CD_PROP_INT32, CD_PROP_INT32, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, instance_custom_data_access, make_array_read_attribute, diff --git a/source/blender/blenkernel/intern/geometry_component_mesh.cc b/source/blender/blenkernel/intern/geometry_component_mesh.cc index 9aa4b99652e1..44697ca2a307 100644 --- a/source/blender/blenkernel/intern/geometry_component_mesh.cc +++ b/source/blender/blenkernel/intern/geometry_component_mesh.cc @@ -1180,7 +1180,6 @@ static ComponentAttributeProviders create_attribute_providers_for_mesh() CD_PROP_FLOAT3, CD_PROP_FLOAT3, BuiltinAttributeProvider::NonCreatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::NonDeletable, point_access, make_array_read_attribute, @@ -1192,7 +1191,6 @@ static ComponentAttributeProviders create_attribute_providers_for_mesh() CD_PROP_INT32, CD_PROP_INT32, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, point_access, make_array_read_attribute, @@ -1211,7 +1209,6 @@ static ComponentAttributeProviders create_attribute_providers_for_mesh() CD_PROP_INT32, CD_PROP_INT32, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, face_access, make_array_read_attribute, @@ -1225,7 +1222,6 @@ static ComponentAttributeProviders create_attribute_providers_for_mesh() CD_PROP_BOOL, CD_MPOLY, BuiltinAttributeProvider::NonCreatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::NonDeletable, face_access, make_derived_read_attribute, @@ -1237,7 +1233,6 @@ static ComponentAttributeProviders create_attribute_providers_for_mesh() CD_PROP_BOOL, CD_PROP_BOOL, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, edge_access, make_array_read_attribute, @@ -1250,7 +1245,6 @@ static ComponentAttributeProviders create_attribute_providers_for_mesh() CD_PROP_FLOAT, CD_CREASE, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, edge_access, make_array_read_attribute, diff --git a/source/blender/blenkernel/intern/geometry_component_pointcloud.cc b/source/blender/blenkernel/intern/geometry_component_pointcloud.cc index 71484bbd5f04..41966fe868a6 100644 --- a/source/blender/blenkernel/intern/geometry_component_pointcloud.cc +++ b/source/blender/blenkernel/intern/geometry_component_pointcloud.cc @@ -142,7 +142,6 @@ static ComponentAttributeProviders create_attribute_providers_for_point_cloud() CD_PROP_FLOAT3, CD_PROP_FLOAT3, BuiltinAttributeProvider::NonCreatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::NonDeletable, point_access, make_array_read_attribute, @@ -153,7 +152,6 @@ static ComponentAttributeProviders create_attribute_providers_for_point_cloud() CD_PROP_FLOAT, CD_PROP_FLOAT, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, point_access, make_array_read_attribute, @@ -164,7 +162,6 @@ static ComponentAttributeProviders create_attribute_providers_for_point_cloud() CD_PROP_INT32, CD_PROP_INT32, BuiltinAttributeProvider::Creatable, - BuiltinAttributeProvider::Writable, BuiltinAttributeProvider::Deletable, point_access, make_array_read_attribute, diff --git a/source/blender/editors/interface/interface_template_attribute_search.cc b/source/blender/editors/interface/interface_template_attribute_search.cc index 55ca945671f0..2ac8e96b9967 100644 --- a/source/blender/editors/interface/interface_template_attribute_search.cc +++ b/source/blender/editors/interface/interface_template_attribute_search.cc @@ -92,15 +92,9 @@ void attribute_search_add_items(StringRefNull str, StringSearch *search = BLI_string_search_new(); for (const GeometryAttributeInfo *item : infos) { - - /* Don't show the legacy "normal" attribute. */ - if (item->name == "normal" && item->domain == ATTR_DOMAIN_FACE) { - continue; - } if (!bke::allow_procedural_attribute_access(item->name)) { continue; } - BLI_string_search_add(search, item->name.c_str(), (void *)item, 0); } diff --git a/source/blender/geometry/intern/realize_instances.cc b/source/blender/geometry/intern/realize_instances.cc index 6b12512aea07..609d6e52a3c2 100644 --- a/source/blender/geometry/intern/realize_instances.cc +++ b/source/blender/geometry/intern/realize_instances.cc @@ -839,7 +839,6 @@ static OrderedAttributes gather_generic_mesh_attributes_to_propagate( options.propagation_info, attributes_to_propagate); attributes_to_propagate.remove("position"); - attributes_to_propagate.remove("normal"); attributes_to_propagate.remove("shade_smooth"); r_create_id = attributes_to_propagate.pop_try("id").has_value(); r_create_material_index = attributes_to_propagate.pop_try("material_index").has_value(); diff --git a/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc b/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc index 63d84076654c..c5d2bbe1b65e 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc @@ -471,9 +471,6 @@ static void extrude_mesh_edges(Mesh &mesh, } GSpanAttributeWriter attribute = attributes.lookup_or_add_for_write_span( id, meta_data.domain, meta_data.data_type); - if (!attribute) { - return true; /* Impossible to write the "normal" attribute. */ - } attribute_math::convert_to_static_type(meta_data.data_type, [&](auto dummy) { using T = decltype(dummy); @@ -867,9 +864,6 @@ static void extrude_mesh_face_regions(Mesh &mesh, } GSpanAttributeWriter attribute = attributes.lookup_or_add_for_write_span( id, meta_data.domain, meta_data.data_type); - if (!attribute) { - return true; /* Impossible to write the "normal" attribute. */ - } attribute_math::convert_to_static_type(meta_data.data_type, [&](auto dummy) { using T = decltype(dummy); @@ -1158,9 +1152,6 @@ static void extrude_individual_mesh_faces(Mesh &mesh, } GSpanAttributeWriter attribute = attributes.lookup_or_add_for_write_span( id, meta_data.domain, meta_data.data_type); - if (!attribute) { - return true; /* Impossible to write the "normal" attribute. */ - } attribute_math::convert_to_static_type(meta_data.data_type, [&](auto dummy) { using T = decltype(dummy); -- 2.30.2 From 768ccbc07d2c632721c54d3e38f2ee6bf46f88be Mon Sep 17 00:00:00 2001 From: Falk David Date: Thu, 16 Feb 2023 15:26:13 +0100 Subject: [PATCH 165/182] Curves: Add remove_selection function This adds a `remove_selection` function that can be used by other objects that make use of `CurvesGeometry`. Pull Request #104813 --- source/blender/editors/curves/CMakeLists.txt | 1 + .../editors/curves/intern/curves_edit.cc | 38 +++++++++++++++++++ .../editors/curves/intern/curves_ops.cc | 19 +--------- source/blender/editors/include/ED_curves.h | 12 ++++++ 4 files changed, 52 insertions(+), 18 deletions(-) create mode 100644 source/blender/editors/curves/intern/curves_edit.cc diff --git a/source/blender/editors/curves/CMakeLists.txt b/source/blender/editors/curves/CMakeLists.txt index 873df89b40c2..36eb0e046474 100644 --- a/source/blender/editors/curves/CMakeLists.txt +++ b/source/blender/editors/curves/CMakeLists.txt @@ -23,6 +23,7 @@ set(INC set(SRC intern/curves_add.cc intern/curves_data.cc + intern/curves_edit.cc intern/curves_ops.cc intern/curves_selection.cc intern/curves_undo.cc diff --git a/source/blender/editors/curves/intern/curves_edit.cc b/source/blender/editors/curves/intern/curves_edit.cc new file mode 100644 index 000000000000..9d5e7730ba07 --- /dev/null +++ b/source/blender/editors/curves/intern/curves_edit.cc @@ -0,0 +1,38 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +/** \file + * \ingroup edcurves + */ + +#include "BLI_index_mask_ops.hh" + +#include "BKE_curves.hh" + +#include "ED_curves.h" + +namespace blender::ed::curves { + +bool remove_selection(bke::CurvesGeometry &curves, const eAttrDomain selection_domain) +{ + const bke::AttributeAccessor attributes = curves.attributes(); + const VArray selection = attributes.lookup_or_default( + ".selection", selection_domain, true); + const int domain_size_orig = attributes.domain_size(selection_domain); + Vector indices; + const IndexMask mask = index_mask_ops::find_indices_from_virtual_array( + selection.index_range(), selection, 4096, indices); + switch (selection_domain) { + case ATTR_DOMAIN_POINT: + curves.remove_points(mask); + break; + case ATTR_DOMAIN_CURVE: + curves.remove_curves(mask); + break; + default: + BLI_assert_unreachable(); + } + + return attributes.domain_size(selection_domain) != domain_size_orig; +} + +} // namespace blender::ed::curves diff --git a/source/blender/editors/curves/intern/curves_ops.cc b/source/blender/editors/curves/intern/curves_ops.cc index d9496cf6e250..080307ef2bd6 100644 --- a/source/blender/editors/curves/intern/curves_ops.cc +++ b/source/blender/editors/curves/intern/curves_ops.cc @@ -1097,24 +1097,7 @@ static int delete_exec(bContext *C, wmOperator * /*op*/) { for (Curves *curves_id : get_unique_editable_curves(*C)) { bke::CurvesGeometry &curves = curves_id->geometry.wrap(); - const eAttrDomain domain = eAttrDomain(curves_id->selection_domain); - const bke::AttributeAccessor attributes = curves.attributes(); - const VArray selection = attributes.lookup_or_default(".selection", domain, false); - const int domain_size_orig = attributes.domain_size(domain); - Vector indices; - const IndexMask mask = index_mask_ops::find_indices_from_virtual_array( - selection.index_range(), selection, 4096, indices); - switch (domain) { - case ATTR_DOMAIN_POINT: - curves.remove_points(mask); - break; - case ATTR_DOMAIN_CURVE: - curves.remove_curves(mask); - break; - default: - BLI_assert_unreachable(); - } - if (attributes.domain_size(domain) != domain_size_orig) { + if (remove_selection(curves, eAttrDomain(curves_id->selection_domain))) { DEG_id_tag_update(&curves_id->id, ID_RECALC_GEOMETRY); WM_event_add_notifier(C, NC_GEOM | ND_DATA, curves_id); } diff --git a/source/blender/editors/include/ED_curves.h b/source/blender/editors/include/ED_curves.h index 2bfe99ea2bd6..d9d6c0c28639 100644 --- a/source/blender/editors/include/ED_curves.h +++ b/source/blender/editors/include/ED_curves.h @@ -185,5 +185,17 @@ bool select_circle(const ViewContext &vc, eSelectOp sel_op); /** \} */ +/* -------------------------------------------------------------------- */ +/** \name Editing + * \{ */ + +/** + * Remove (dissolve) selected curves or points based on the ".selection" attribute. + * \returns true if any point or curve was removed. + */ +bool remove_selection(bke::CurvesGeometry &curves, eAttrDomain selection_domain); + +/** \} */ + } // namespace blender::ed::curves #endif -- 2.30.2 From 769d0a629b24450a6f4912374385195a799469b8 Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Thu, 16 Feb 2023 16:34:49 +0100 Subject: [PATCH 166/182] UI: Refactor how draggable part of button is determined No longer use the existance of an image pointer inside the button, or the the type of a button to decide if the entire button should be draggable, or only its icon. This was rather sneaky, undocumented behavior. Instead make this a proper option in the public UI API, and enable it by default in specific cases to match the previous behavior. This at least makes the behavior known and controllable in the API, and not something that's just "secretly" done deep down in the button handling code. I'd argue we should just use the entire button width by default for dragging, but that would be a bigger change. --- source/blender/editors/include/UI_interface.h | 19 +++++++++++++++++++ source/blender/editors/interface/interface.cc | 14 ++++++++++++++ .../editors/interface/interface_drag.cc | 1 + .../editors/interface/interface_intern.hh | 5 ----- .../editors/interface/interface_query.cc | 2 +- 5 files changed, 35 insertions(+), 6 deletions(-) diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index 066aef1886d6..161179370003 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -239,6 +239,17 @@ enum { UI_BUT_OVERRIDDEN = 1u << 31u, }; +/** #uiBut.dragflag */ +enum { + /** By default only the left part of a button triggers dragging. A questionable design to make + * the icon but not other parts of the button draggable. Set this flag so the entire button can + * be dragged. */ + UI_BUT_DRAG_FULL_BUT = (1 << 0), + + /* --- Internal flags. --- */ + UI_BUT_DRAGPOIN_FREE = (1 << 1), +}; + /* Default font size for normal text. */ #define UI_DEFAULT_TEXT_POINTS 11.0f @@ -881,6 +892,9 @@ bool UI_but_flag_is_set(uiBut *but, int flag); void UI_but_drawflag_enable(uiBut *but, int flag); void UI_but_drawflag_disable(uiBut *but, int flag); +void UI_but_dragflag_enable(uiBut *but, int flag); +void UI_but_dragflag_disable(uiBut *but, int flag); + void UI_but_disable(uiBut *but, const char *disabled_hint); void UI_but_type_set_menu_from_pulldown(uiBut *but); @@ -1789,9 +1803,12 @@ void UI_but_drag_set_id(uiBut *but, struct ID *id); /** * Set an image to display while dragging. This works for any drag type (`WM_DRAG_XXX`). * Not to be confused with #UI_but_drag_set_image(), which sets up dragging of an image. + * + * Sets #UI_BUT_DRAG_FULL_BUT so the full button can be dragged. */ void UI_but_drag_attach_image(uiBut *but, struct ImBuf *imb, float scale); /** + * Sets #UI_BUT_DRAG_FULL_BUT so the full button can be dragged. * \param asset: May be passed from a temporary variable, drag data only stores a copy of this. */ void UI_but_drag_set_asset(uiBut *but, @@ -1808,6 +1825,8 @@ void UI_but_drag_set_name(uiBut *but, const char *name); * Value from button itself. */ void UI_but_drag_set_value(uiBut *but); + +/** Sets #UI_BUT_DRAG_FULL_BUT so the full button can be dragged. */ void UI_but_drag_set_image( uiBut *but, const char *path, int icon, struct ImBuf *imb, float scale, bool use_free); diff --git a/source/blender/editors/interface/interface.cc b/source/blender/editors/interface/interface.cc index cd4cb1ae087b..652750dc5317 100644 --- a/source/blender/editors/interface/interface.cc +++ b/source/blender/editors/interface/interface.cc @@ -4224,6 +4224,10 @@ static uiBut *ui_def_but(uiBlock *block, but->flag |= UI_BUT_UNDO; } + if (ELEM(but->type, UI_BTYPE_COLOR)) { + but->dragflag |= UI_BUT_DRAG_FULL_BUT; + } + BLI_addtail(&block->buttons, but); if (block->curlayout) { @@ -5890,6 +5894,16 @@ void UI_but_drawflag_disable(uiBut *but, int flag) but->drawflag &= ~flag; } +void UI_but_dragflag_enable(uiBut *but, int flag) +{ + but->dragflag |= flag; +} + +void UI_but_dragflag_disable(uiBut *but, int flag) +{ + but->dragflag &= ~flag; +} + void UI_but_disable(uiBut *but, const char *disabled_hint) { UI_but_flag_enable(but, UI_BUT_DISABLED); diff --git a/source/blender/editors/interface/interface_drag.cc b/source/blender/editors/interface/interface_drag.cc index 462cef50317a..4156ec0f4a25 100644 --- a/source/blender/editors/interface/interface_drag.cc +++ b/source/blender/editors/interface/interface_drag.cc @@ -24,6 +24,7 @@ void UI_but_drag_attach_image(uiBut *but, struct ImBuf *imb, const float scale) { but->imb = imb; but->imb_scale = scale; + UI_but_dragflag_enable(but, UI_BUT_DRAG_FULL_BUT); } void UI_but_drag_set_asset(uiBut *but, diff --git a/source/blender/editors/interface/interface_intern.hh b/source/blender/editors/interface/interface_intern.hh index 68a81de4e4a9..accb6ecab2e6 100644 --- a/source/blender/editors/interface/interface_intern.hh +++ b/source/blender/editors/interface/interface_intern.hh @@ -86,11 +86,6 @@ enum { /* WARNING: rest of #uiBut.flag in UI_interface.h */ }; -/** #uiBut.dragflag */ -enum { - UI_BUT_DRAGPOIN_FREE = (1 << 0), -}; - /** #uiBut.pie_dir */ enum RadialDirection { UI_RADIAL_NONE = -1, diff --git a/source/blender/editors/interface/interface_query.cc b/source/blender/editors/interface/interface_query.cc index 84e2b488ccb0..1d5eb9e72502 100644 --- a/source/blender/editors/interface/interface_query.cc +++ b/source/blender/editors/interface/interface_query.cc @@ -247,7 +247,7 @@ bool ui_but_contains_point_px_icon(const uiBut *but, ARegion *region, const wmEv BLI_rcti_rctf_copy(&rect, &but->rect); - if (but->imb || but->type == UI_BTYPE_COLOR) { + if (but->dragflag & UI_BUT_DRAG_FULL_BUT) { /* use button size itself */ } else if (but->drawflag & UI_BUT_ICON_LEFT) { -- 2.30.2 From 1979b55b1f8a0d28947bb5b9fb2c209d51face5d Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Thu, 16 Feb 2023 11:34:23 +0100 Subject: [PATCH 167/182] Cleanup: Refactor File/Asset Browser button dragging code Code to set the dragging data for a button was mostly duplicated, they share it now. The followup commit also needs an easy way to reuse the logic, which is possible now. --- source/blender/editors/space_file/file_draw.c | 238 +++++++++--------- 1 file changed, 114 insertions(+), 124 deletions(-) diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index 97e6531eadd1..77caf8c09ecf 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -128,16 +128,58 @@ static void draw_tile_background(const rcti *draw_rect, int colorid, int shade) UI_draw_roundbox_aa(&draw_rect_fl, true, 5.0f, color); } -static void file_draw_icon(const SpaceFile *sfile, - uiBlock *block, - const FileDirEntry *file, - const char *path, - const rcti *tile_draw_rect, - int icon, - int width, - int height, - bool drag, - bool dimmed) +static void file_but_enable_drag(uiBut *but, + const SpaceFile *sfile, + const FileDirEntry *file, + const char *path, + ImBuf *preview_image, + int icon, + float scale) +{ + ID *id; + + if ((id = filelist_file_get_id(file))) { + UI_but_drag_set_id(but, id); + if (preview_image) { + UI_but_drag_attach_image(but, preview_image, scale); + } + } + else if (sfile->browse_mode == FILE_BROWSE_MODE_ASSETS && + (file->typeflag & FILE_TYPE_ASSET) != 0) { + char blend_path[FILE_MAX_LIBEXTRA]; + if (BLO_library_path_explode(path, blend_path, NULL, NULL)) { + const FileAssetSelectParams *asset_params = ED_fileselect_get_asset_params(sfile); + BLI_assert(asset_params != NULL); + + const int import_method = ED_fileselect_asset_import_method_get(sfile, file); + BLI_assert(import_method > -1); + + UI_but_drag_set_asset(but, + &(AssetHandle){.file_data = file}, + BLI_strdup(blend_path), + import_method, + icon, + preview_image, + scale); + } + } + else if (preview_image) { + UI_but_drag_set_image(but, BLI_strdup(path), icon, preview_image, scale, true); + } + else { + /* path is no more static, cannot give it directly to but... */ + UI_but_drag_set_path(but, BLI_strdup(path), true); + } +} + +static uiBut *file_add_icon_but(const SpaceFile *sfile, + uiBlock *block, + const char *path, + const rcti *tile_draw_rect, + int icon, + int width, + int height, + bool dimmed) { uiBut *but; @@ -151,42 +193,7 @@ static void file_draw_icon(const SpaceFile *sfile, block, UI_BTYPE_LABEL, 0, icon, x, y, width, height, NULL, 0.0f, 0.0f, a1, a2, NULL); UI_but_func_tooltip_set(but, file_draw_tooltip_func, BLI_strdup(path), MEM_freeN); - if (drag) { - /* TODO: duplicated from file_draw_preview(). */ - ID *id; - - if ((id = filelist_file_get_id(file))) { - UI_but_drag_set_id(but, id); - ImBuf *preview_image = filelist_file_getimage(file); - if (preview_image) { - UI_but_drag_attach_image(but, preview_image, UI_DPI_FAC); - } - } - else if (sfile->browse_mode == FILE_BROWSE_MODE_ASSETS && - (file->typeflag & FILE_TYPE_ASSET) != 0) { - ImBuf *preview_image = filelist_file_getimage(file); - char blend_path[FILE_MAX_LIBEXTRA]; - if (BLO_library_path_explode(path, blend_path, NULL, NULL)) { - const FileAssetSelectParams *asset_params = ED_fileselect_get_asset_params(sfile); - BLI_assert(asset_params != NULL); - - const int import_method = ED_fileselect_asset_import_method_get(sfile, file); - BLI_assert(import_method > -1); - - UI_but_drag_set_asset(but, - &(AssetHandle){.file_data = file}, - BLI_strdup(blend_path), - import_method, - icon, - preview_image, - UI_DPI_FAC); - } - } - else { - /* path is no more static, cannot give it directly to but... */ - UI_but_drag_set_path(but, BLI_strdup(path), true); - } - } + return but; } static void file_draw_string(int sx, @@ -297,21 +304,50 @@ void file_calc_previews(const bContext *C, ARegion *region) UI_view2d_totRect_set(v2d, sfile->layout->width, sfile->layout->height); } -static void file_draw_preview(const SpaceFile *sfile, - uiBlock *block, - const FileDirEntry *file, - const char *path, +static void file_add_preview_drag_but(const SpaceFile *sfile, + uiBlock *block, + FileLayout *layout, + const FileDirEntry *file, + const char *path, + const rcti *tile_draw_rect, + ImBuf *preview_image, + const int icon, + const float scale) +{ + /* Invisible button for dragging. */ + rcti drag_rect = *tile_draw_rect; + /* A bit smaller than the full tile, to increase the gap between items that users can drag from + * for box select. */ + BLI_rcti_pad(&drag_rect, -layout->tile_border_x, -layout->tile_border_y); + + uiBut *but = uiDefBut(block, + UI_BTYPE_LABEL, + 0, + "", + drag_rect.xmin, + drag_rect.ymin, + BLI_rcti_size_x(&drag_rect), + BLI_rcti_size_y(&drag_rect), + NULL, + 0.0, + 0.0, + 0, + 0, + NULL); + file_but_enable_drag(but, sfile, file, path, preview_image, icon, scale); +} + +static void file_draw_preview(const FileDirEntry *file, const rcti *tile_draw_rect, const float icon_aspect, ImBuf *imb, const int icon, FileLayout *layout, const bool is_icon, - const bool drag, const bool dimmed, - const bool is_link) + const bool is_link, + float *r_scale) { - uiBut *but; float fx, fy; float dx, dy; int xco, yco; @@ -528,62 +564,11 @@ static void file_draw_preview(const SpaceFile *sfile, immUnbindProgram(); } - /* Invisible button for dragging. */ - rcti drag_rect = *tile_draw_rect; - /* A bit smaller than the full tile, to increase the gap between items that users can drag from - * for box select. */ - BLI_rcti_pad(&drag_rect, -layout->tile_border_x, -layout->tile_border_y); - - but = uiDefBut(block, - UI_BTYPE_LABEL, - 0, - "", - drag_rect.xmin, - drag_rect.ymin, - BLI_rcti_size_x(&drag_rect), - BLI_rcti_size_y(&drag_rect), - NULL, - 0.0, - 0.0, - 0, - 0, - NULL); - - /* Drag-region. */ - if (drag) { - ID *id; - - if ((id = filelist_file_get_id(file))) { - UI_but_drag_set_id(but, id); - UI_but_drag_attach_image(but, imb, scale); - } - /* path is no more static, cannot give it directly to but... */ - else if (sfile->browse_mode == FILE_BROWSE_MODE_ASSETS && - (file->typeflag & FILE_TYPE_ASSET) != 0) { - char blend_path[FILE_MAX_LIBEXTRA]; - - if (BLO_library_path_explode(path, blend_path, NULL, NULL)) { - const FileAssetSelectParams *asset_params = ED_fileselect_get_asset_params(sfile); - BLI_assert(asset_params != NULL); - - const int import_method = ED_fileselect_asset_import_method_get(sfile, file); - BLI_assert(import_method > -1); - - UI_but_drag_set_asset(but, - &(AssetHandle){.file_data = file}, - BLI_strdup(blend_path), - import_method, - icon, - imb, - scale); - } - } - else { - UI_but_drag_set_image(but, BLI_strdup(path), icon, imb, scale, true); - } - } - GPU_blend(GPU_BLEND_NONE); + + if (r_scale) { + *r_scale = scale; + } } static void renamebutton_cb(bContext *C, void *UNUSED(arg1), char *oldname) @@ -1036,31 +1021,36 @@ void file_draw_list(const bContext *C, ARegion *region) is_icon = 1; } - file_draw_preview(sfile, - block, - file, - path, + float scale = 0; + file_draw_preview(file, &tile_draw_rect, thumb_icon_aspect, imb, icon, layout, is_icon, - do_drag, is_hidden, - is_link); + is_link, + /* Returns the scale which is needed below. */ + &scale); + if (do_drag) { + file_add_preview_drag_but( + sfile, block, layout, file, path, &tile_draw_rect, imb, icon, scale); + } } else { - file_draw_icon(sfile, - block, - file, - path, - &tile_draw_rect, - filelist_geticon(files, i, true), - ICON_DEFAULT_WIDTH_SCALE, - ICON_DEFAULT_HEIGHT_SCALE, - do_drag, - is_hidden); + const int icon = filelist_geticon(files, i, true); + uiBut *icon_but = file_add_icon_but(sfile, + block, + path, + &tile_draw_rect, + icon, + ICON_DEFAULT_WIDTH_SCALE, + ICON_DEFAULT_HEIGHT_SCALE, + is_hidden); + if (do_drag) { + file_but_enable_drag(icon_but, sfile, file, path, NULL, icon, UI_DPI_FAC); + } icon_ofs += ICON_DEFAULT_WIDTH_SCALE + 0.2f * UI_UNIT_X; } -- 2.30.2 From 08590dc30798e2d9dc877b995c42890b1884d47a Mon Sep 17 00:00:00 2001 From: Falk David Date: Thu, 16 Feb 2023 17:02:43 +0100 Subject: [PATCH 168/182] Curves: Add select more/less This adds the "Select More/Less" operators for Curves. Both operators use the `select_adjacent` function to (de)select adjacent points. Pull Request #104626 --- .../keyconfig/keymap_data/blender_default.py | 2 + release/scripts/startup/bl_ui/space_view3d.py | 18 +++++ .../editors/curves/intern/curves_ops.cc | 56 +++++++++++++ .../editors/curves/intern/curves_selection.cc | 79 +++++++++++++++++++ source/blender/editors/include/ED_curves.h | 5 ++ 5 files changed, 160 insertions(+) diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py index 4bad5530e525..252bcaeab433 100644 --- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -5631,6 +5631,8 @@ def km_curves(params): ("curves.select_linked", {"type": 'L', "value": 'PRESS', "ctrl": True}, None), ("curves.delete", {"type": 'X', "value": 'PRESS'}, None), ("curves.delete", {"type": 'DEL', "value": 'PRESS'}, None), + ("curves.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("curves.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), ]) return keymap diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 28180be16987..e2335af687dc 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -2044,6 +2044,16 @@ class VIEW3D_MT_select_paint_mask_vertex(Menu): layout.operator("paint.vert_select_linked", text="Select Linked") +class VIEW3D_MT_edit_curves_select_more_less(Menu): + bl_label = "Select More/Less" + + def draw(self, _context): + layout = self.layout + + layout.operator("curves.select_more", text="More") + layout.operator("curves.select_less", text="Less") + + class VIEW3D_MT_select_edit_curves(Menu): bl_label = "Select" @@ -2053,10 +2063,17 @@ class VIEW3D_MT_select_edit_curves(Menu): layout.operator("curves.select_all", text="All").action = 'SELECT' layout.operator("curves.select_all", text="None").action = 'DESELECT' layout.operator("curves.select_all", text="Invert").action = 'INVERT' + + layout.separator() + layout.operator("curves.select_random", text="Random") layout.operator("curves.select_end", text="Endpoints") layout.operator("curves.select_linked", text="Linked") + layout.separator() + + layout.menu("VIEW3D_MT_edit_curves_select_more_less") + class VIEW3D_MT_select_sculpt_curves(Menu): bl_label = "Select" @@ -8046,6 +8063,7 @@ classes = ( VIEW3D_MT_select_gpencil, VIEW3D_MT_select_paint_mask, VIEW3D_MT_select_paint_mask_vertex, + VIEW3D_MT_edit_curves_select_more_less, VIEW3D_MT_select_edit_curves, VIEW3D_MT_select_sculpt_curves, VIEW3D_MT_mesh_add, diff --git a/source/blender/editors/curves/intern/curves_ops.cc b/source/blender/editors/curves/intern/curves_ops.cc index 080307ef2bd6..924d1cfe09da 100644 --- a/source/blender/editors/curves/intern/curves_ops.cc +++ b/source/blender/editors/curves/intern/curves_ops.cc @@ -1008,6 +1008,60 @@ static void CURVES_OT_select_linked(wmOperatorType *ot) ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } +static int select_more_exec(bContext *C, wmOperator * /*op*/) +{ + VectorSet unique_curves = get_unique_editable_curves(*C); + for (Curves *curves_id : unique_curves) { + CurvesGeometry &curves = curves_id->geometry.wrap(); + select_adjacent(curves, false); + /* Use #ID_RECALC_GEOMETRY instead of #ID_RECALC_SELECT because it is handled as a generic + * attribute for now. */ + DEG_id_tag_update(&curves_id->id, ID_RECALC_GEOMETRY); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, curves_id); + } + + return OPERATOR_FINISHED; +} + +static void CURVES_OT_select_more(wmOperatorType *ot) +{ + ot->name = "Select More"; + ot->idname = __func__; + ot->description = "Grow the selection by one point."; + + ot->exec = select_more_exec; + ot->poll = editable_curves_point_domain_poll; + + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + +static int select_less_exec(bContext *C, wmOperator * /*op*/) +{ + VectorSet unique_curves = get_unique_editable_curves(*C); + for (Curves *curves_id : unique_curves) { + CurvesGeometry &curves = curves_id->geometry.wrap(); + select_adjacent(curves, true); + /* Use #ID_RECALC_GEOMETRY instead of #ID_RECALC_SELECT because it is handled as a generic + * attribute for now. */ + DEG_id_tag_update(&curves_id->id, ID_RECALC_GEOMETRY); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, curves_id); + } + + return OPERATOR_FINISHED; +} + +static void CURVES_OT_select_less(wmOperatorType *ot) +{ + ot->name = "Select Less"; + ot->idname = __func__; + ot->description = "Shrink the selection by one point"; + + ot->exec = select_less_exec; + ot->poll = editable_curves_point_domain_poll; + + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + namespace surface_set { static bool surface_set_poll(bContext *C) @@ -1133,6 +1187,8 @@ void ED_operatortypes_curves() WM_operatortype_append(CURVES_OT_select_random); WM_operatortype_append(CURVES_OT_select_end); WM_operatortype_append(CURVES_OT_select_linked); + WM_operatortype_append(CURVES_OT_select_more); + WM_operatortype_append(CURVES_OT_select_less); WM_operatortype_append(CURVES_OT_surface_set); WM_operatortype_append(CURVES_OT_delete); } diff --git a/source/blender/editors/curves/intern/curves_selection.cc b/source/blender/editors/curves/intern/curves_selection.cc index 585498dd0faa..086662cc85a0 100644 --- a/source/blender/editors/curves/intern/curves_selection.cc +++ b/source/blender/editors/curves/intern/curves_selection.cc @@ -267,6 +267,85 @@ void select_linked(bke::CurvesGeometry &curves) selection.finish(); } +void select_adjacent(bke::CurvesGeometry &curves, const bool deselect) +{ + const OffsetIndices points_by_curve = curves.points_by_curve(); + bke::GSpanAttributeWriter selection = ensure_selection_attribute( + curves, ATTR_DOMAIN_POINT, CD_PROP_BOOL); + const VArray cyclic = curves.cyclic(); + + if (deselect) { + invert_selection(selection.span); + } + + if (selection.span.type().is()) { + MutableSpan selection_typed = selection.span.typed(); + threading::parallel_for(curves.curves_range(), 256, [&](const IndexRange range) { + for (const int curve_i : range) { + const IndexRange points = points_by_curve[curve_i]; + + /* Handle all cases in the forward direction. */ + for (int point_i = points.first(); point_i < points.last(); point_i++) { + if (!selection_typed[point_i] && selection_typed[point_i + 1]) { + selection_typed[point_i] = true; + } + } + + /* Handle all cases in the backwards direction. */ + for (int point_i = points.last(); point_i > points.first(); point_i--) { + if (!selection_typed[point_i] && selection_typed[point_i - 1]) { + selection_typed[point_i] = true; + } + } + + /* Handle cyclic curve case. */ + if (cyclic[curve_i]) { + if (selection_typed[points.first()] != selection_typed[points.last()]) { + selection_typed[points.first()] = true; + selection_typed[points.last()] = true; + } + } + } + }); + } + else if (selection.span.type().is()) { + MutableSpan selection_typed = selection.span.typed(); + threading::parallel_for(curves.curves_range(), 256, [&](const IndexRange range) { + for (const int curve_i : range) { + const IndexRange points = points_by_curve[curve_i]; + + /* Handle all cases in the forward direction. */ + for (int point_i = points.first(); point_i < points.last(); point_i++) { + if ((selection_typed[point_i] == 0.0f) && (selection_typed[point_i + 1] > 0.0f)) { + selection_typed[point_i] = 1.0f; + } + } + + /* Handle all cases in the backwards direction. */ + for (int point_i = points.last(); point_i > points.first(); point_i--) { + if ((selection_typed[point_i] == 0.0f) && (selection_typed[point_i - 1] > 0.0f)) { + selection_typed[point_i] = 1.0f; + } + } + + /* Handle cyclic curve case. */ + if (cyclic[curve_i]) { + if (selection_typed[points.first()] != selection_typed[points.last()]) { + selection_typed[points.first()] = 1.0f; + selection_typed[points.last()] = 1.0f; + } + } + } + }); + } + + if (deselect) { + invert_selection(selection.span); + } + + selection.finish(); +} + void select_random(bke::CurvesGeometry &curves, const eAttrDomain selection_domain, uint32_t random_seed, diff --git a/source/blender/editors/include/ED_curves.h b/source/blender/editors/include/ED_curves.h index d9d6c0c28639..178ec7a5b19b 100644 --- a/source/blender/editors/include/ED_curves.h +++ b/source/blender/editors/include/ED_curves.h @@ -135,6 +135,11 @@ void select_ends(bke::CurvesGeometry &curves, int amount, bool end_points); */ void select_linked(bke::CurvesGeometry &curves); +/** + * (De)select all the adjacent points of the current selected points. + */ +void select_adjacent(bke::CurvesGeometry &curves, bool deselect); + /** * Select random points or curves. * -- 2.30.2 From a5a43ad551e427c0bc03be6658153fb6351df2ed Mon Sep 17 00:00:00 2001 From: Nate Rupsis Date: Thu, 16 Feb 2023 17:31:09 +0100 Subject: [PATCH 169/182] Cleanup: Adding in NLA Track Remove / Remove and free BKE methods This PR adds 2 new methods: * BKE_nlatrack_remove * BKE_nlatrack_remove_and_free and modifies the existing `BKE_nlatrack_free` to remove the track list parameter. This refactor splits out the removal / freeing into it's own methods, and provides a higher order method (BKE_nlatrack_remove_and_free) to conveniently call both. Co-authored-by: Nate Rupsis Pull Request #104752 --- source/blender/blenkernel/BKE_nla.h | 17 ++++++++++--- source/blender/blenkernel/intern/nla.c | 25 +++++++++++++------ source/blender/blenkernel/intern/nla_test.cc | 20 +++++++++++++++ .../editors/space_action/action_data.c | 2 +- .../blender/editors/space_nla/nla_channels.c | 2 +- .../blender/makesrna/intern/rna_animation.c | 2 +- 6 files changed, 54 insertions(+), 14 deletions(-) diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h index 0fa3d16d328b..a58b4166ba57 100644 --- a/source/blender/blenkernel/BKE_nla.h +++ b/source/blender/blenkernel/BKE_nla.h @@ -41,10 +41,10 @@ struct PropertyRNA; */ void BKE_nlastrip_free(struct NlaStrip *strip, bool do_id_user); /** - * Remove the given NLA track from the set of NLA tracks, free the track's data, - * and the track itself. + * Remove & Frees all NLA strips from the given NLA track, + * then frees (doesn't remove) the track itself. */ -void BKE_nlatrack_free(ListBase *tracks, struct NlaTrack *nlt, bool do_id_user); +void BKE_nlatrack_free(struct NlaTrack *nlt, bool do_id_user); /** * Free the elements of type NLA Tracks provided in the given list, but do not free * the list itself since that is not free-standing @@ -95,6 +95,17 @@ struct NlaTrack *BKE_nlatrack_add(struct AnimData *adt, struct NlaTrack *prev, bool is_liboverride); +/** + * Removes the given NLA track from the list of tracks provided. + */ +void BKE_nlatrack_remove(ListBase *tracks, struct NlaTrack *nlt); + +/** + * Remove the given NLA track from the list of NLA tracks, free the track's data, + * and the track itself. + */ +void BKE_nlatrack_remove_and_free(ListBase *tracks, struct NlaTrack *nlt, bool do_id_user); + /** * Create a NLA Strip referencing the given Action. */ diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 29d4cc802fec..2dbab08ef20b 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -91,7 +91,7 @@ void BKE_nlastrip_free(NlaStrip *strip, const bool do_id_user) MEM_freeN(strip); } -void BKE_nlatrack_free(ListBase *tracks, NlaTrack *nlt, bool do_id_user) +void BKE_nlatrack_free(NlaTrack *nlt, const bool do_id_user) { NlaStrip *strip, *stripn; @@ -107,12 +107,7 @@ void BKE_nlatrack_free(ListBase *tracks, NlaTrack *nlt, bool do_id_user) } /* free NLA track itself now */ - if (tracks) { - BLI_freelinkN(tracks, nlt); - } - else { - MEM_freeN(nlt); - } + MEM_freeN(nlt); } void BKE_nla_tracks_free(ListBase *tracks, bool do_id_user) @@ -127,7 +122,7 @@ void BKE_nla_tracks_free(ListBase *tracks, bool do_id_user) /* free tracks one by one */ for (nlt = tracks->first; nlt; nlt = nltn) { nltn = nlt->next; - BKE_nlatrack_free(tracks, nlt, do_id_user); + BKE_nlatrack_remove_and_free(tracks, nlt, do_id_user); } /* clear the list's pointers to be safe */ @@ -514,6 +509,20 @@ void BKE_nla_strip_foreach_id(NlaStrip *strip, LibraryForeachIDData *data) } } +/* Removing ------------------------------------------ */ + +void BKE_nlatrack_remove(ListBase *tracks, struct NlaTrack *nlt) +{ + BLI_assert(tracks); + BLI_remlink(tracks, nlt); +} + +void BKE_nlatrack_remove_and_free(ListBase *tracks, struct NlaTrack *nlt, bool do_id_user) +{ + BKE_nlatrack_remove(tracks, nlt); + BKE_nlatrack_free(nlt, do_id_user); +} + /* *************************************************** */ /* NLA Evaluation <-> Editing Stuff */ diff --git a/source/blender/blenkernel/intern/nla_test.cc b/source/blender/blenkernel/intern/nla_test.cc index 414391a208f5..e06fa496083d 100644 --- a/source/blender/blenkernel/intern/nla_test.cc +++ b/source/blender/blenkernel/intern/nla_test.cc @@ -91,4 +91,24 @@ TEST(nla_track, BKE_nlatrack_remove_strip) EXPECT_EQ(-1, BLI_findindex(&track.strips, &strip2)); } +TEST(nla_track, BKE_nlatrack_remove_and_free) +{ + AnimData adt{}; + NlaTrack *track1; + NlaTrack *track2; + + // Add NLA tracks to the Animation Data. + track1 = BKE_nlatrack_add(&adt, NULL, false); + track2 = BKE_nlatrack_add(&adt, track1, false); + + // ensure we have 2 tracks in the track. + EXPECT_EQ(2, BLI_listbase_count(&adt.nla_tracks)); + + BKE_nlatrack_remove_and_free(&adt.nla_tracks, track2, false); + EXPECT_EQ(1, BLI_listbase_count(&adt.nla_tracks)); + + // ensure the correct track was removed. + EXPECT_EQ(-1, BLI_findindex(&adt.nla_tracks, track2)); +} + } // namespace blender::bke::tests diff --git a/source/blender/editors/space_action/action_data.c b/source/blender/editors/space_action/action_data.c index bb8456f6486a..1bd28b068f9a 100644 --- a/source/blender/editors/space_action/action_data.c +++ b/source/blender/editors/space_action/action_data.c @@ -590,7 +590,7 @@ void ED_animedit_unlink_action( if (nlt->strips.first == NULL) { BLI_assert(nstrip == NULL); - BKE_nlatrack_free(&adt->nla_tracks, nlt, true); + BKE_nlatrack_remove_and_free(&adt->nla_tracks, nlt, true); } } } diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index a783ee32779b..1d7645d4e67a 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -736,7 +736,7 @@ static int nlaedit_delete_tracks_exec(bContext *C, wmOperator *UNUSED(op)) } /* call delete on this track - deletes all strips too */ - BKE_nlatrack_free(&adt->nla_tracks, nlt, true); + BKE_nlatrack_remove_and_free(&adt->nla_tracks, nlt, true); ale->update = ANIM_UPDATE_DEPS; } } diff --git a/source/blender/makesrna/intern/rna_animation.c b/source/blender/makesrna/intern/rna_animation.c index fa2ef98d3df4..43560c5ecba2 100644 --- a/source/blender/makesrna/intern/rna_animation.c +++ b/source/blender/makesrna/intern/rna_animation.c @@ -593,7 +593,7 @@ static void rna_NlaTrack_remove( return; } - BKE_nlatrack_free(&adt->nla_tracks, track, true); + BKE_nlatrack_remove_and_free(&adt->nla_tracks, track, true); RNA_POINTER_INVALIDATE(track_ptr); WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_REMOVED, NULL); -- 2.30.2 From 16505aa84aa73e703862a5703ca1f4457f0c4a08 Mon Sep 17 00:00:00 2001 From: Falk David Date: Thu, 16 Feb 2023 17:47:04 +0100 Subject: [PATCH 170/182] Cleanup: Fix operator description --- source/blender/editors/curves/intern/curves_ops.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/curves/intern/curves_ops.cc b/source/blender/editors/curves/intern/curves_ops.cc index 924d1cfe09da..a05ecfcaed3e 100644 --- a/source/blender/editors/curves/intern/curves_ops.cc +++ b/source/blender/editors/curves/intern/curves_ops.cc @@ -1027,7 +1027,7 @@ static void CURVES_OT_select_more(wmOperatorType *ot) { ot->name = "Select More"; ot->idname = __func__; - ot->description = "Grow the selection by one point."; + ot->description = "Grow the selection by one point"; ot->exec = select_more_exec; ot->poll = editable_curves_point_domain_poll; -- 2.30.2 From 6f0c48710e6e67ad81f32406e7feafae77932d6e Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Thu, 16 Feb 2023 12:11:20 -0500 Subject: [PATCH 171/182] Cleanup: Nodes: Avoid unnecessary const cast, use early return --- source/blender/nodes/intern/node_common.cc | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/source/blender/nodes/intern/node_common.cc b/source/blender/nodes/intern/node_common.cc index 8652493b49bf..9430454cafd7 100644 --- a/source/blender/nodes/intern/node_common.cc +++ b/source/blender/nodes/intern/node_common.cc @@ -78,16 +78,14 @@ bool node_group_poll_instance(const bNode *node, const bNodeTree *nodetree, const char **disabled_hint) { - if (node->typeinfo->poll(node->typeinfo, nodetree, disabled_hint)) { - const bNodeTree *grouptree = (const bNodeTree *)node->id; - if (grouptree) { - return nodeGroupPoll(nodetree, grouptree, disabled_hint); - } - - return true; /* without a linked node tree, group node is always ok */ + if (!node->typeinfo->poll(node->typeinfo, nodetree, disabled_hint)) { + return false; } - - return false; + const bNodeTree *grouptree = reinterpret_cast(node->id); + if (!grouptree) { + return true; + } + return nodeGroupPoll(nodetree, grouptree, disabled_hint); } bool nodeGroupPoll(const bNodeTree *nodetree, @@ -116,8 +114,7 @@ bool nodeGroupPoll(const bNodeTree *nodetree, LISTBASE_FOREACH (const bNode *, node, &grouptree->nodes) { if (node->typeinfo->poll_instance && - !node->typeinfo->poll_instance( - const_cast(node), const_cast(nodetree), r_disabled_hint)) { + !node->typeinfo->poll_instance(node, nodetree, r_disabled_hint)) { return false; } } -- 2.30.2 From 994f3533f8c13651f1402e858ea08153577f4a37 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Thu, 16 Feb 2023 12:12:38 -0500 Subject: [PATCH 172/182] Cleanup: Use Span to iterate over nodes instead of ListBase Similar to 5b8e2ebd97bd795c6aea. --- source/blender/editors/space_node/node_view.cc | 2 +- source/blender/nodes/intern/node_common.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/space_node/node_view.cc b/source/blender/editors/space_node/node_view.cc index ce37057bcf33..b11997ba1b6f 100644 --- a/source/blender/editors/space_node/node_view.cc +++ b/source/blender/editors/space_node/node_view.cc @@ -60,7 +60,7 @@ bool space_node_view_flag( int tot = 0; bool has_frame = false; if (snode.edittree) { - LISTBASE_FOREACH (const bNode *, node, &snode.edittree->nodes) { + for (const bNode *node : snode.edittree->all_nodes()) { if ((node->flag & node_flag) == node_flag) { BLI_rctf_union(&cur_new, &node->runtime->totr); tot++; diff --git a/source/blender/nodes/intern/node_common.cc b/source/blender/nodes/intern/node_common.cc index 9430454cafd7..97a6a925aee8 100644 --- a/source/blender/nodes/intern/node_common.cc +++ b/source/blender/nodes/intern/node_common.cc @@ -112,7 +112,7 @@ bool nodeGroupPoll(const bNodeTree *nodetree, return false; } - LISTBASE_FOREACH (const bNode *, node, &grouptree->nodes) { + for (const bNode *node : grouptree->all_nodes()) { if (node->typeinfo->poll_instance && !node->typeinfo->poll_instance(node, nodetree, r_disabled_hint)) { return false; -- 2.30.2 From 7e2537da13ff2d4e4282336234767f45de6c97b6 Mon Sep 17 00:00:00 2001 From: Colin Marmond Date: Thu, 16 Feb 2023 16:26:23 +0100 Subject: [PATCH 173/182] Fix #104166: Add redraw for asset marking and unmarking When the users click the "Mark as Asset" with the mouse hover the fake user button, the button was not refreshed. In fact, the areas are not listening to the "NC_ID NA_EDITED", which is the signal emitted after an asset is marked/unmarked. Because of this, the areas aren't redrawn (especially the ID buttons). This little patch adds the event listening for the areas where this problem is happening node editor and properties editor. Pull Request #104694 --- source/blender/editors/space_buttons/space_buttons.c | 2 +- source/blender/editors/space_node/space_node.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index 5a333869deaf..90d8d0c30612 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -793,7 +793,7 @@ static void buttons_area_listener(const wmSpaceTypeListenerParams *params) } break; case NC_ID: - if (wmn->action == NA_RENAME) { + if (ELEM(wmn->action, NA_RENAME, NA_EDITED)) { ED_area_tag_redraw(area); } break; diff --git a/source/blender/editors/space_node/space_node.cc b/source/blender/editors/space_node/space_node.cc index df8da8a68c03..de89bd075e4b 100644 --- a/source/blender/editors/space_node/space_node.cc +++ b/source/blender/editors/space_node/space_node.cc @@ -821,7 +821,7 @@ static void node_region_listener(const wmRegionListenerParams *params) } break; case NC_ID: - if (wmn->action == NA_RENAME) { + if (ELEM(wmn->action, NA_RENAME, NA_EDITED)) { ED_region_tag_redraw(region); } break; -- 2.30.2 From 9f87978a2a3a06569daecfb20165cf868f6c96e0 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Thu, 16 Feb 2023 11:17:02 -0500 Subject: [PATCH 174/182] WM: Add option for clearing asset data to append operator When appending assets it often isn't expected for the asset tags and meta-data to be included. Add an option to the append operator to disable appending the asset data, exposing existing internal options. --- source/blender/windowmanager/intern/wm_files_link.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/blender/windowmanager/intern/wm_files_link.c b/source/blender/windowmanager/intern/wm_files_link.c index bbe53bf7355e..3af7d2f26f01 100644 --- a/source/blender/windowmanager/intern/wm_files_link.c +++ b/source/blender/windowmanager/intern/wm_files_link.c @@ -141,6 +141,9 @@ static int wm_link_append_flag(wmOperator *op) if (RNA_boolean_get(op->ptr, "do_reuse_local_id")) { flag |= BLO_LIBLINK_APPEND_LOCAL_ID_REUSE; } + if (RNA_boolean_get(op->ptr, "clear_asset_data")) { + flag |= BLO_LIBLINK_APPEND_ASSET_DATA_CLEAR; + } } if (RNA_boolean_get(op->ptr, "instance_collections")) { flag |= BLO_LIBLINK_COLLECTION_INSTANCE; @@ -400,6 +403,12 @@ static void wm_link_append_properties_common(wmOperatorType *ot, bool is_link) "Re-Use Local Data", "Try to re-use previously matching appended data-blocks instead of appending a new copy"); RNA_def_property_flag(prop, PROP_SKIP_SAVE | PROP_HIDDEN); + prop = RNA_def_boolean(ot->srna, + "clear_asset_data", + false, + "Clear Asset Data", + "Don't add asset meta-data or tags from the original data-block"); + RNA_def_property_flag(prop, PROP_SKIP_SAVE | PROP_HIDDEN); prop = RNA_def_boolean(ot->srna, "autoselect", true, "Select", "Select new objects"); RNA_def_property_flag(prop, PROP_SKIP_SAVE); -- 2.30.2 From 83eff2bd33bc483cb5a62d4c30778b46593f9408 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Thu, 16 Feb 2023 11:17:21 -0500 Subject: [PATCH 175/182] Fix #104785: Quick fur keeps asset status of appended node groups Use the recently added "clear_asset_data" option in the append operator. Pull Request #104828 --- release/scripts/startup/bl_operators/object_quick_effects.py | 1 + 1 file changed, 1 insertion(+) diff --git a/release/scripts/startup/bl_operators/object_quick_effects.py b/release/scripts/startup/bl_operators/object_quick_effects.py index 06f443369722..dc3edcd9b752 100644 --- a/release/scripts/startup/bl_operators/object_quick_effects.py +++ b/release/scripts/startup/bl_operators/object_quick_effects.py @@ -111,6 +111,7 @@ class QuickFur(ObjectModeOperator, Operator): bpy.ops.wm.append(directory=assets_directory, filename=name, use_recursive=True, + clear_asset_data=True, do_reuse_local_id=True) generate_group = bpy.data.node_groups["Generate Hair Curves"] interpolate_group = bpy.data.node_groups["Interpolate Hair Curves"] -- 2.30.2 From b69b8e5198f7d5fcf362d03737e39f03e75b8e25 Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Thu, 16 Feb 2023 18:56:03 +0100 Subject: [PATCH 176/182] Fix unused variable in release builds Assert is not needed in this case. --- source/blender/editors/space_file/file_draw.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index 77caf8c09ecf..bfc1903ae7d9 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -148,9 +148,6 @@ static void file_but_enable_drag(uiBut *but, (file->typeflag & FILE_TYPE_ASSET) != 0) { char blend_path[FILE_MAX_LIBEXTRA]; if (BLO_library_path_explode(path, blend_path, NULL, NULL)) { - const FileAssetSelectParams *asset_params = ED_fileselect_get_asset_params(sfile); - BLI_assert(asset_params != NULL); - const int import_method = ED_fileselect_asset_import_method_get(sfile, file); BLI_assert(import_method > -1); -- 2.30.2 From 88cbb65268f50f8c79458d41e52b9c224c01de1f Mon Sep 17 00:00:00 2001 From: Nate Rupsis Date: Thu, 16 Feb 2023 20:24:33 +0100 Subject: [PATCH 177/182] Fix: Remove the rest of the tracks in the BKE_nlatrack_remove_and_free to free up the memory Fix: The BKE_nlatrack_remove_and_free (#104752) unit test leaks a little memory. Cleaning up the rest of the track list to ensure everything is freed. Co-authored-by: Nate Rupsis Pull Request #104839 --- source/blender/blenkernel/intern/nla_test.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/blender/blenkernel/intern/nla_test.cc b/source/blender/blenkernel/intern/nla_test.cc index e06fa496083d..a844afdaff57 100644 --- a/source/blender/blenkernel/intern/nla_test.cc +++ b/source/blender/blenkernel/intern/nla_test.cc @@ -109,6 +109,11 @@ TEST(nla_track, BKE_nlatrack_remove_and_free) // ensure the correct track was removed. EXPECT_EQ(-1, BLI_findindex(&adt.nla_tracks, track2)); + + // free the rest of the tracks, and ensure they are removed. + BKE_nlatrack_remove_and_free(&adt.nla_tracks, track1, false); + EXPECT_EQ(0, BLI_listbase_count(&adt.nla_tracks)); + EXPECT_EQ(-1, BLI_findindex(&adt.nla_tracks, track1)); } } // namespace blender::bke::tests -- 2.30.2 From 51bbcba3ffe576790cc1cb0516bb55617f85c54a Mon Sep 17 00:00:00 2001 From: Iliya Katueshenock Date: Thu, 16 Feb 2023 15:18:56 -0500 Subject: [PATCH 178/182] Fix: Use proper types in compare node link drag search options Clean up logic to make it more clear and formalize the way to choose fixed node data type based on operation. This make possible to more easily fix wrong node data type for color type and less than ops. Pull Request #104617 --- .../nodes/function/nodes/node_fn_compare.cc | 70 ++++++++++++------- 1 file changed, 46 insertions(+), 24 deletions(-) diff --git a/source/blender/nodes/function/nodes/node_fn_compare.cc b/source/blender/nodes/function/nodes/node_fn_compare.cc index 62cfaf369a00..67b2c15d08e9 100644 --- a/source/blender/nodes/function/nodes/node_fn_compare.cc +++ b/source/blender/nodes/function/nodes/node_fn_compare.cc @@ -93,7 +93,7 @@ static void node_init(bNodeTree * /*tree*/, bNode *node) class SocketSearchOp { public: - std::string socket_name; + const StringRef socket_name; eNodeSocketDatatype data_type; NodeCompareOperation operation; NodeCompareMode mode = NODE_COMPARE_MODE_ELEMENT; @@ -107,40 +107,62 @@ class SocketSearchOp { } }; +static std::optional get_compare_type_for_operation( + const eNodeSocketDatatype type, const NodeCompareOperation operation) +{ + switch (type) { + case SOCK_BOOLEAN: + if (ELEM(operation, NODE_COMPARE_COLOR_BRIGHTER, NODE_COMPARE_COLOR_DARKER)) { + return SOCK_RGBA; + } + return SOCK_INT; + case SOCK_INT: + case SOCK_FLOAT: + case SOCK_VECTOR: + if (ELEM(operation, NODE_COMPARE_COLOR_BRIGHTER, NODE_COMPARE_COLOR_DARKER)) { + return SOCK_RGBA; + } + return type; + case SOCK_RGBA: + if (!ELEM(operation, + NODE_COMPARE_COLOR_BRIGHTER, + NODE_COMPARE_COLOR_DARKER, + NODE_COMPARE_EQUAL, + NODE_COMPARE_NOT_EQUAL)) { + return SOCK_VECTOR; + } + return type; + case SOCK_STRING: + if (!ELEM(operation, NODE_COMPARE_EQUAL, NODE_COMPARE_NOT_EQUAL)) { + return std::nullopt; + } + return type; + default: + BLI_assert_unreachable(); + return std::nullopt; + } +} + static void node_gather_link_searches(GatherLinkSearchOpParams ¶ms) { - const eNodeSocketDatatype type = static_cast(params.other_socket().type); - if (!ELEM(type, SOCK_BOOLEAN, SOCK_FLOAT, SOCK_RGBA, SOCK_VECTOR, SOCK_INT, SOCK_STRING)) { + const eNodeSocketDatatype type = eNodeSocketDatatype(params.other_socket().type); + if (!ELEM(type, SOCK_INT, SOCK_BOOLEAN, SOCK_FLOAT, SOCK_VECTOR, SOCK_RGBA, SOCK_STRING)) { return; } - - const eNodeSocketDatatype mode_type = (type == SOCK_BOOLEAN) ? SOCK_INT : type; - const bool string_type = (type == SOCK_STRING); - - const std::string socket_name = params.in_out() == SOCK_IN ? "A" : "Result"; - + const StringRef socket_name = params.in_out() == SOCK_IN ? "A" : "Result"; for (const EnumPropertyItem *item = rna_enum_node_compare_operation_items; item->identifier != nullptr; item++) { if (item->name != nullptr && item->identifier[0] != '\0') { - if (!string_type && - ELEM(item->value, NODE_COMPARE_COLOR_BRIGHTER, NODE_COMPARE_COLOR_DARKER)) { - params.add_item(IFACE_(item->name), - SocketSearchOp{socket_name, - SOCK_RGBA, - static_cast(item->value)}); - } - else if ((!string_type) || - (string_type && ELEM(item->value, NODE_COMPARE_EQUAL, NODE_COMPARE_NOT_EQUAL))) { - params.add_item(IFACE_(item->name), - SocketSearchOp{socket_name, - mode_type, - static_cast(item->value)}); + const NodeCompareOperation operation = NodeCompareOperation(item->value); + if (const std::optional fixed_type = get_compare_type_for_operation( + type, operation)) { + params.add_item(IFACE_(item->name), SocketSearchOp{socket_name, *fixed_type, operation}); } } } - /* Add Angle socket. */ - if (!string_type && params.in_out() == SOCK_IN) { + + if (params.in_out() != SOCK_IN && type != SOCK_STRING) { params.add_item( IFACE_("Angle"), SocketSearchOp{ -- 2.30.2 From e4ae15b7ef81afadf96848db4d75be88daec517d Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Thu, 16 Feb 2023 16:30:59 -0500 Subject: [PATCH 179/182] Fix #104826: Mesh to BMesh with shape keys can corrupt layers The custom data layer mappings from dfacaf4f409287baa1c8 were created *before* the BMesh shape key layers were added, invalidating the BMesh data offsets they stored. Fix by creating the mappings after all layers have been created. --- source/blender/bmesh/intern/bmesh_mesh_convert.cc | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_mesh_convert.cc b/source/blender/bmesh/intern/bmesh_mesh_convert.cc index ebc176fede18..ea193cc8d85a 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc +++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc @@ -318,11 +318,6 @@ void BM_mesh_bm_from_me(BMesh *bm, const Mesh *me, const struct BMeshFromMeshPar CustomData_bmesh_merge(&mesh_ldata, &bm->ldata, mask.lmask, CD_SET_DEFAULT, bm, BM_LOOP); } - const Vector vert_info = mesh_to_bm_copy_info_calc(mesh_vdata, bm->vdata); - const Vector edge_info = mesh_to_bm_copy_info_calc(mesh_edata, bm->edata); - const Vector poly_info = mesh_to_bm_copy_info_calc(mesh_pdata, bm->pdata); - const Vector loop_info = mesh_to_bm_copy_info_calc(mesh_ldata, bm->ldata); - /* -------------------------------------------------------------------- */ /* Shape Key */ int tot_shape_keys = 0; @@ -407,6 +402,10 @@ void BM_mesh_bm_from_me(BMesh *bm, const Mesh *me, const struct BMeshFromMeshPar } } + const Vector vert_info = mesh_to_bm_copy_info_calc(mesh_vdata, bm->vdata); + const Vector edge_info = mesh_to_bm_copy_info_calc(mesh_edata, bm->edata); + const Vector poly_info = mesh_to_bm_copy_info_calc(mesh_pdata, bm->pdata); + const Vector loop_info = mesh_to_bm_copy_info_calc(mesh_ldata, bm->ldata); if (is_new) { CustomData_bmesh_init_pool(&bm->vdata, me->totvert, BM_VERT); CustomData_bmesh_init_pool(&bm->edata, me->totedge, BM_EDGE); -- 2.30.2 From de91227bb5f9628466fc1dd97f417415785403b6 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Thu, 16 Feb 2023 16:59:58 -0500 Subject: [PATCH 180/182] Fix #104841: Split function for Cycles for sharp edges ignores attribute Cycles uses the "split faces" mesh function to support sharp edges and auto-smooth. However, 75ad8da1ea6799e3983e updated that function to ignore the edges that are explicitly tagged as sharp and only use the edge angle. Fix by taking the attribute into account too. --- source/blender/editors/mesh/mesh_data.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/blender/editors/mesh/mesh_data.cc b/source/blender/editors/mesh/mesh_data.cc index 263f7164fe6b..5f9af1480159 100644 --- a/source/blender/editors/mesh/mesh_data.cc +++ b/source/blender/editors/mesh/mesh_data.cc @@ -1534,8 +1534,13 @@ void ED_mesh_split_faces(Mesh *mesh) const Span polys = mesh->polys(); const Span loops = mesh->loops(); const float split_angle = (mesh->flag & ME_AUTOSMOOTH) != 0 ? mesh->smoothresh : float(M_PI); + const bke::AttributeAccessor attributes = mesh->attributes(); + const VArray mesh_sharp_edges = attributes.lookup_or_default( + "sharp_edge", ATTR_DOMAIN_EDGE, false); + + Array sharp_edges(mesh->totedge); + mesh_sharp_edges.materialize(sharp_edges); - Array sharp_edges(mesh->totedge, false); BKE_edges_sharp_from_angle_set(mesh->totedge, loops.data(), loops.size(), -- 2.30.2 From 65cfb1cd732543f6f57e13bf354103207a1e5979 Mon Sep 17 00:00:00 2001 From: Chris Blackbourn Date: Fri, 17 Feb 2023 11:41:12 +1300 Subject: [PATCH 181/182] Cleanup: format --- source/blender/blenkernel/intern/nla_test.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/blenkernel/intern/nla_test.cc b/source/blender/blenkernel/intern/nla_test.cc index a844afdaff57..401d846eb11e 100644 --- a/source/blender/blenkernel/intern/nla_test.cc +++ b/source/blender/blenkernel/intern/nla_test.cc @@ -93,7 +93,7 @@ TEST(nla_track, BKE_nlatrack_remove_strip) TEST(nla_track, BKE_nlatrack_remove_and_free) { - AnimData adt{}; + AnimData adt{}; NlaTrack *track1; NlaTrack *track2; -- 2.30.2 From 8188c7a84ab092dd50538458cbba57b2baee0786 Mon Sep 17 00:00:00 2001 From: Chris Blackbourn Date: Fri, 17 Feb 2023 12:24:53 +1300 Subject: [PATCH 182/182] Fix #104374: Simplify UV Face Selection and UV Island Selection Implement "Face Touching" UV selection for Box Select, Lasso Select and Circle Select. Implement "Penalty" system for UV click select. --- source/blender/editors/include/ED_uvedit.h | 38 -- source/blender/editors/uvedit/uvedit_intern.h | 10 +- source/blender/editors/uvedit/uvedit_path.c | 150 +++++ source/blender/editors/uvedit/uvedit_select.c | 623 +++++++----------- 4 files changed, 402 insertions(+), 419 deletions(-) diff --git a/source/blender/editors/include/ED_uvedit.h b/source/blender/editors/include/ED_uvedit.h index 349975e11819..3337fb3c1d16 100644 --- a/source/blender/editors/include/ED_uvedit.h +++ b/source/blender/editors/include/ED_uvedit.h @@ -86,7 +86,6 @@ bool ED_uvedit_test(struct Object *obedit); /* Visibility and selection tests. */ -bool uvedit_face_visible_test_ex(const struct ToolSettings *ts, struct BMFace *efa); bool uvedit_face_select_test_ex(const struct ToolSettings *ts, struct BMFace *efa, BMUVOffsets offsets); @@ -194,30 +193,6 @@ void uvedit_uv_select_set_with_sticky(const struct Scene *scene, bool do_history, BMUVOffsets offsets); -/* Low level functions for sticky element selection (sticky mode independent). Type of sticky - * selection is specified explicitly (using sticky_flag, except for face selection). */ - -void uvedit_face_select_shared_vert(const struct Scene *scene, - struct BMEditMesh *em, - struct BMFace *efa, - const bool select, - const bool do_history, - BMUVOffsets offsets); -void uvedit_edge_select_shared_vert(const struct Scene *scene, - struct BMEditMesh *em, - struct BMLoop *l, - const bool select, - const int sticky_flag, - const bool do_history, - BMUVOffsets offsets); -void uvedit_uv_select_shared_vert(const struct Scene *scene, - struct BMEditMesh *em, - struct BMLoop *l, - const bool select, - const int sticky_flag, - const bool do_history, - BMUVOffsets offsets); - /* Sets required UV edge flags as specified by the sticky_flag. */ void uvedit_edge_select_set_noflush(const struct Scene *scene, struct BMLoop *l, @@ -259,19 +234,6 @@ bool ED_uvedit_nearest_uv_multi(const struct View2D *v2d, float *dist_sq, float r_uv[2]); -struct BMFace **ED_uvedit_selected_faces(const struct Scene *scene, - struct BMesh *bm, - int len_max, - int *r_faces_len); -struct BMLoop **ED_uvedit_selected_edges(const struct Scene *scene, - struct BMesh *bm, - int len_max, - int *r_edges_len); -struct BMLoop **ED_uvedit_selected_verts(const struct Scene *scene, - struct BMesh *bm, - int len_max, - int *r_verts_len); - void ED_uvedit_get_aspect(struct Object *obedit, float *r_aspx, float *r_aspy); /** diff --git a/source/blender/editors/uvedit/uvedit_intern.h b/source/blender/editors/uvedit/uvedit_intern.h index 36fc4848deb7..32f6d03a4209 100644 --- a/source/blender/editors/uvedit/uvedit_intern.h +++ b/source/blender/editors/uvedit/uvedit_intern.h @@ -18,7 +18,7 @@ struct Scene; struct SpaceImage; struct wmOperatorType; -/* find nearest */ +/* UV Find Nearest */ typedef struct UvNearestHit { /** Only for `*_multi(..)` versions of functions. */ @@ -30,9 +30,9 @@ typedef struct UvNearestHit { * Needs to be set before calling nearest functions. * * \note When #UV_NEAREST_HIT_INIT_DIST_PX or #UV_NEAREST_HIT_INIT_MAX are used, - * this value is pixels squared. + * Units are pixels. */ - float dist_sq; + float dist; /** Scale the UVs to account for aspect ratio from the image view. */ float scale[2]; @@ -40,7 +40,7 @@ typedef struct UvNearestHit { #define UV_NEAREST_HIT_INIT_DIST_PX(v2d, dist_px) \ { \ - .dist_sq = square_f(U.pixelsize * dist_px), \ + .dist = U.pixelsize * dist_px, \ .scale = { \ UI_view2d_scale_get_x(v2d), \ UI_view2d_scale_get_y(v2d), \ @@ -49,7 +49,7 @@ typedef struct UvNearestHit { #define UV_NEAREST_HIT_INIT_MAX(v2d) \ { \ - .dist_sq = FLT_MAX, \ + .dist = FLT_MAX, \ .scale = { \ UI_view2d_scale_get_x(v2d), \ UI_view2d_scale_get_y(v2d), \ diff --git a/source/blender/editors/uvedit/uvedit_path.c b/source/blender/editors/uvedit/uvedit_path.c index d37c860b67a4..d4e217fb54bd 100644 --- a/source/blender/editors/uvedit/uvedit_path.c +++ b/source/blender/editors/uvedit/uvedit_path.c @@ -787,6 +787,156 @@ void UV_OT_shortest_path_pick(wmOperatorType *ot) /** \name Select Path Between Existing Selection * \{ */ +/* -------------------------------------------------------------------- */ +/** \name Selected Elements as Arrays (Vertex, Edge & Faces) + * + * These functions return single elements per connected vertex/edge. + * So an edge that has two connected edge loops only assigns one loop in the array. + * \{ */ + +static BMFace **ED_uvedit_selected_faces(const Scene *scene, + BMesh *bm, + int len_max, + int *r_faces_len) +{ + const BMUVOffsets offsets = BM_uv_map_get_offsets(bm); + + int faces_len = 0; + BMFace **faces = MEM_mallocN(sizeof(*faces) * len_max, __func__); + + BMIter iter; + BMFace *f; + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { + if (uvedit_face_visible_test(scene, f) && uvedit_face_select_test(scene, f, offsets)) { + faces[faces_len++] = f; + if (faces_len == len_max) { + break; + } + } + } + + *r_faces_len = faces_len; + return faces; +} + +static BMLoop **ED_uvedit_selected_edges(const Scene *scene, + BMesh *bm, + int len_max, + int *r_edges_len) +{ + const BMUVOffsets offsets = BM_uv_map_get_offsets(bm); + BLI_assert(offsets.uv >= 0); + + CLAMP_MAX(len_max, bm->totloop); + int edges_len = 0; + BMLoop **edges = MEM_mallocN(sizeof(*edges) * len_max, __func__); + + BMIter iter; + BMFace *f; + + /* Clear tag. */ + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { + BMIter liter; + BMLoop *l_iter; + BM_ITER_ELEM (l_iter, &liter, f, BM_LOOPS_OF_FACE) { + BM_elem_flag_disable(l_iter, BM_ELEM_TAG); + } + } + + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { + if (uvedit_face_visible_test(scene, f)) { + BMIter liter; + BMLoop *l_iter; + BM_ITER_ELEM (l_iter, &liter, f, BM_LOOPS_OF_FACE) { + if (!BM_elem_flag_test(l_iter, BM_ELEM_TAG)) { + if (uvedit_edge_select_test(scene, l_iter, offsets)) { + BM_elem_flag_enable(l_iter, BM_ELEM_TAG); + + edges[edges_len++] = l_iter; + if (edges_len == len_max) { + goto finally; + } + + /* Tag other connected loops so we don't consider them separate edges. */ + if (l_iter != l_iter->radial_next) { + BMLoop *l_radial_iter = l_iter->radial_next; + do { + if (BM_loop_uv_share_edge_check(l_iter, l_radial_iter, offsets.uv)) { + BM_elem_flag_enable(l_radial_iter, BM_ELEM_TAG); + } + } while ((l_radial_iter = l_radial_iter->radial_next) != l_iter); + } + } + } + } + } + } + +finally: + *r_edges_len = edges_len; + return edges; +} + +static BMLoop **ED_uvedit_selected_verts(const Scene *scene, + BMesh *bm, + int len_max, + int *r_verts_len) +{ + const BMUVOffsets offsets = BM_uv_map_get_offsets(bm); + BLI_assert(offsets.select_vert >= 0); + BLI_assert(offsets.uv >= 0); + + CLAMP_MAX(len_max, bm->totloop); + int verts_len = 0; + BMLoop **verts = MEM_mallocN(sizeof(*verts) * len_max, __func__); + + BMIter iter; + BMFace *f; + + /* Clear tag. */ + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { + BMIter liter; + BMLoop *l_iter; + BM_ITER_ELEM (l_iter, &liter, f, BM_LOOPS_OF_FACE) { + BM_elem_flag_disable(l_iter, BM_ELEM_TAG); + } + } + + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { + if (uvedit_face_visible_test(scene, f)) { + BMIter liter; + BMLoop *l_iter; + BM_ITER_ELEM (l_iter, &liter, f, BM_LOOPS_OF_FACE) { + if (!BM_elem_flag_test(l_iter, BM_ELEM_TAG)) { + if (BM_ELEM_CD_GET_BOOL(l_iter, offsets.select_vert)) { + BM_elem_flag_enable(l_iter->v, BM_ELEM_TAG); + + verts[verts_len++] = l_iter; + if (verts_len == len_max) { + goto finally; + } + + /* Tag other connected loops so we don't consider them separate vertices. */ + BMIter liter_disk; + BMLoop *l_disk_iter; + BM_ITER_ELEM (l_disk_iter, &liter_disk, l_iter->v, BM_LOOPS_OF_VERT) { + if (BM_loop_uv_share_vert_check(l_iter, l_disk_iter, offsets.uv)) { + BM_elem_flag_enable(l_disk_iter, BM_ELEM_TAG); + } + } + } + } + } + } + } + +finally: + *r_verts_len = verts_len; + return verts; +} + +/** \} */ + static int uv_shortest_path_select_exec(bContext *C, wmOperator *op) { Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); diff --git a/source/blender/editors/uvedit/uvedit_select.c b/source/blender/editors/uvedit/uvedit_select.c index e41e53c591b6..ede1c4e083da 100644 --- a/source/blender/editors/uvedit/uvedit_select.c +++ b/source/blender/editors/uvedit/uvedit_select.c @@ -5,43 +5,22 @@ * \ingroup eduv */ -#include -#include -#include +#include "BKE_context.h" +#include "BKE_editmesh.h" +#include "BKE_layer.h" +#include "BKE_mesh.h" +#include "BKE_mesh_mapping.h" +#include "BKE_report.h" -#include "MEM_guardedalloc.h" - -#include "DNA_image_types.h" -#include "DNA_material_types.h" -#include "DNA_meshdata_types.h" -#include "DNA_node_types.h" -#include "DNA_object_types.h" -#include "DNA_scene_types.h" -#include "DNA_space_types.h" - -#include "BLI_alloca.h" -#include "BLI_blenlib.h" #include "BLI_hash.h" #include "BLI_heap.h" #include "BLI_kdopbvh.h" #include "BLI_kdtree.h" #include "BLI_lasso_2d.h" -#include "BLI_math.h" #include "BLI_memarena.h" #include "BLI_polyfill_2d.h" #include "BLI_polyfill_2d_beautify.h" -#include "BLI_utildefines.h" -#include "BKE_context.h" -#include "BKE_customdata.h" -#include "BKE_editmesh.h" -#include "BKE_layer.h" -#include "BKE_material.h" -#include "BKE_mesh.h" -#include "BKE_mesh_mapping.h" -#include "BKE_report.h" - -#include "DEG_depsgraph.h" #include "DEG_depsgraph_query.h" #include "ED_image.h" @@ -50,28 +29,19 @@ #include "ED_select_utils.h" #include "ED_uvedit.h" +#include "MEM_guardedalloc.h" + #include "RNA_access.h" #include "RNA_define.h" #include "RNA_enum_types.h" -#include "WM_api.h" -#include "WM_types.h" - #include "UI_view2d.h" #include "uvedit_intern.h" -static void uv_select_all_perform(const Scene *scene, Object *obedit, int action); +#include "WM_api.h" -static void uv_select_all_perform_multi_ex(const Scene *scene, - Object **objects, - const uint objects_len, - int action, - const Object *ob_exclude); -static void uv_select_all_perform_multi(const Scene *scene, - Object **objects, - const uint objects_len, - int action); +static void uv_select_all_perform(const Scene *scene, Object *obedit, int action); static void uv_select_flush_from_tag_face(const Scene *scene, Object *obedit, const bool select); static void uv_select_flush_from_tag_loop(const Scene *scene, Object *obedit, const bool select); @@ -81,6 +51,30 @@ static void uv_select_tag_update_for_object(Depsgraph *depsgraph, const ToolSettings *ts, Object *obedit); +/* Low level functions for sticky element selection (sticky mode independent). Type of sticky + * selection is specified explicitly (using sticky_flag, except for face selection). */ + +static void uvedit_face_select_shared_vert(const struct Scene *scene, + struct BMEditMesh *em, + struct BMFace *efa, + const bool select, + const bool do_history, + BMUVOffsets offsets); +static void uvedit_edge_select_shared_vert(const struct Scene *scene, + struct BMEditMesh *em, + struct BMLoop *l, + const bool select, + const int sticky_flag, + const bool do_history, + BMUVOffsets offsets); +static void uvedit_uv_select_shared_vert(const struct Scene *scene, + struct BMEditMesh *em, + struct BMLoop *l, + const bool select, + const int sticky_flag, + const bool do_history, + BMUVOffsets offsets); + typedef enum { UV_SSIM_AREA_UV = 1000, UV_SSIM_AREA_3D, @@ -153,32 +147,47 @@ BMLoop *ED_uvedit_active_edge_loop_get(BMesh *bm) char ED_uvedit_select_mode_get(const Scene *scene) { + /* Returns a single element selection mode (Vertex, Edge or Face) based on + * Sync Selection, and potentially multiple selected modes in the UI. */ const ToolSettings *ts = scene->toolsettings; - char uv_selectmode = UV_SELECT_VERTEX; + char uv_select_mode = ts->uv_selectmode; /* i.e. Default from UV Editor. */ if (ts->uv_flag & UV_SYNC_SELECTION) { + /* We're in Sync-Selection mode. + * Convert the selection mode options from the 3D Viewport + * into their closest UV Editor equivalents. */ + + uv_select_mode = 0; if (ts->selectmode & SCE_SELECT_VERTEX) { - uv_selectmode = UV_SELECT_VERTEX; + uv_select_mode |= UV_SELECT_VERTEX; } - else if (ts->selectmode & SCE_SELECT_EDGE) { - uv_selectmode = UV_SELECT_EDGE; + if (ts->selectmode & SCE_SELECT_EDGE) { + uv_select_mode |= UV_SELECT_EDGE; } - else if (ts->selectmode & SCE_SELECT_FACE) { - uv_selectmode = UV_SELECT_FACE; + if (ts->selectmode & SCE_SELECT_FACE) { + uv_select_mode |= UV_SELECT_FACE; } } - else { - if (ts->uv_selectmode & UV_SELECT_VERTEX) { - uv_selectmode = UV_SELECT_VERTEX; - } - else if (ts->uv_selectmode & UV_SELECT_EDGE) { - uv_selectmode = UV_SELECT_EDGE; - } - else if (ts->uv_selectmode & UV_SELECT_FACE) { - uv_selectmode = UV_SELECT_FACE; - } + + /* Order is important here, as more than one type of selection element could be enabled. */ + if (uv_select_mode & UV_SELECT_VERTEX) { + return UV_SELECT_VERTEX; /* Vertex selection is enabled, use Vertex mode. */ } - return uv_selectmode; + if (uv_select_mode & UV_SELECT_EDGE) { + return UV_SELECT_EDGE; /* Edge selection is enabled, use Edge mode. */ + } + if (uv_select_mode & UV_SELECT_FACE) { + return UV_SELECT_FACE; /* Face selection is enabled, use Face mode. */ + } + + if (uv_select_mode & UV_SELECT_ISLAND) { + /* Island selection is stored as Vertex selection internally. */ + return UV_SELECT_VERTEX; /* Not UV_SELECT_ISLAND ! */ + } + + BLI_assert_unreachable(); + + return UV_SELECT_VERTEX; /* Should never happen. */ } void ED_uvedit_select_sync_flush(const ToolSettings *ts, BMEditMesh *em, const bool select) @@ -202,7 +211,7 @@ void ED_uvedit_select_sync_flush(const ToolSettings *ts, BMEditMesh *em, const b static void uvedit_vertex_select_tagged(BMEditMesh *em, Scene *scene, - bool select, + const bool select, const BMUVOffsets offsets) { BMFace *efa; @@ -218,16 +227,18 @@ static void uvedit_vertex_select_tagged(BMEditMesh *em, } } -bool uvedit_face_visible_test_ex(const ToolSettings *ts, BMFace *efa) -{ - if (ts->uv_flag & UV_SYNC_SELECTION) { - return (BM_elem_flag_test(efa, BM_ELEM_HIDDEN) == 0); - } - return (BM_elem_flag_test(efa, BM_ELEM_HIDDEN) == 0 && BM_elem_flag_test(efa, BM_ELEM_SELECT)); -} bool uvedit_face_visible_test(const Scene *scene, BMFace *efa) { - return uvedit_face_visible_test_ex(scene->toolsettings, efa); + if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) { + /* Face Hidden flag always applies to both 3D viewport *and* UV Editor. */ + return false; + } + if (scene->toolsettings->uv_flag & UV_SYNC_SELECTION) { + /* UV Sync Selection mode, ignore 3D Viewport selection for visibility in UV Editor. */ + return true; + } + /* No sync-selection, only *selected* faces in 3D Viewport are visible in UV Editor. */ + return BM_elem_flag_test(efa, BM_ELEM_SELECT); } bool uvedit_face_select_test_ex(const ToolSettings *ts, BMFace *efa, const BMUVOffsets offsets) @@ -807,6 +818,33 @@ static BMLoop *uvedit_loop_find_other_boundary_loop_with_visible_face(const Scen /** \name Find Nearest Elements * \{ */ +static bool uv_nearest_was_updated(const UvNearestHit *hit) +{ + return hit->efa; +} + +static void uv_nearest_hit_update( + UvNearestHit *hit, Object *ob, BMFace *efa, BMLoop *l, const float dist) +{ + BLI_assert(ob != NULL); + BLI_assert(efa != NULL); + BLI_assert(dist >= 0.0f); + if (dist < hit->dist) { + hit->ob = ob; + hit->efa = efa; + hit->l = l; /* Can be NULL. */ + hit->dist = dist; + } +} + +static float uv_nearest_calc_dist(const UvNearestHit *hit, const float co[2], const float uv[2]) +{ + float delta[2]; + sub_v2_v2v2(delta, co, uv); + mul_v2_v2(delta, hit->scale); + return len_v2(delta); +} + bool uv_find_nearest_edge( Scene *scene, Object *obedit, const float co[2], const float penalty, UvNearestHit *hit) { @@ -817,7 +855,6 @@ bool uv_find_nearest_edge( BMIter iter, liter; float *luv, *luv_next; int i; - bool found = false; const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm); BLI_assert(offsets.uv >= 0); @@ -834,29 +871,17 @@ bool uv_find_nearest_edge( float delta[2]; closest_to_line_segment_v2(delta, co, luv, luv_next); - - sub_v2_v2(delta, co); - mul_v2_v2(delta, hit->scale); - - float dist_test_sq = len_squared_v2(delta); + float dist_test = uv_nearest_calc_dist(hit, co, delta); /* Ensures that successive selection attempts will select other edges sharing the same * UV coordinates as the previous selection. */ if ((penalty != 0.0f) && uvedit_edge_select_test(scene, l, offsets)) { - dist_test_sq = square_f(sqrtf(dist_test_sq) + penalty); - } - if (dist_test_sq < hit->dist_sq) { - hit->ob = obedit; - hit->efa = efa; - - hit->l = l; - - hit->dist_sq = dist_test_sq; - found = true; + dist_test += penalty; } + uv_nearest_hit_update(hit, obedit, efa, l, dist_test); } } - return found; + return uv_nearest_was_updated(hit); } bool uv_find_nearest_edge_multi(Scene *scene, @@ -866,88 +891,64 @@ bool uv_find_nearest_edge_multi(Scene *scene, const float penalty, UvNearestHit *hit) { - bool found = false; for (uint ob_index = 0; ob_index < objects_len; ob_index++) { - Object *obedit = objects[ob_index]; - if (uv_find_nearest_edge(scene, obedit, co, penalty, hit)) { - found = true; - } + uv_find_nearest_edge(scene, objects[ob_index], co, penalty, hit); } - return found; + return uv_nearest_was_updated(hit); } static bool uv_find_nearest_face( - Scene *scene, Object *obedit, const float co[2], const float penalty, UvNearestHit *hit) + Scene *scene, Object *obedit, const float co[2], const float penalty_dist, UvNearestHit *hit) { BLI_assert((hit->scale[0] > 0.0f) && (hit->scale[1] > 0.0f)); BMEditMesh *em = BKE_editmesh_from_object(obedit); - bool found = false; - const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_PROP_FLOAT2); + const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm); BMIter iter; BMFace *efa; - BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!uvedit_face_visible_test(scene, efa)) { continue; } - if (BM_face_uv_point_inside_test(efa, co, cd_loop_uv_offset)) { - hit->ob = obedit; - hit->efa = efa; - hit->dist_sq = 0; - return true; - } + /* Ensures that successive selection attempts will select other edges sharing the same + * UV coordinates as the previous selection. */ + const float face_penalty_dist = uvedit_face_select_test(scene, efa, offsets) ? penalty_dist : + 0.0f; - const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm); + if (BM_face_uv_point_inside_test(efa, co, offsets.uv)) { + uv_nearest_hit_update(hit, obedit, efa, NULL, face_penalty_dist); + continue; + } BMLoop *l; BMIter liter; - int i; - BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) { - float *luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset); - float *luv_next = BM_ELEM_CD_GET_VOID_P(l->next, cd_loop_uv_offset); + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { + float *luv = BM_ELEM_CD_GET_VOID_P(l, offsets.uv); + float *luv_next = BM_ELEM_CD_GET_VOID_P(l->next, offsets.uv); float delta[2]; closest_to_line_segment_v2(delta, co, luv, luv_next); - sub_v2_v2(delta, co); mul_v2_v2(delta, hit->scale); - - float dist_test_sq = len_squared_v2(delta); - - /* Ensures that successive selection attempts will select other edges sharing the same - * UV coordinates as the previous selection. */ - if ((penalty != 0.0f) && uvedit_edge_select_test(scene, l, offsets)) { - dist_test_sq = square_f(sqrtf(dist_test_sq) + penalty); - } - if (dist_test_sq < hit->dist_sq) { - hit->ob = obedit; - hit->efa = efa; - - hit->l = l; - - hit->dist_sq = dist_test_sq; - found = true; - } + uv_nearest_hit_update(hit, obedit, efa, NULL, len_v2(delta) + face_penalty_dist); } } - return found; + return uv_nearest_was_updated(hit); } bool uv_find_nearest_face_multi(Scene *scene, Object **objects, uint objects_len, const float co[2], - const float penalty, + const float penalty_dist, UvNearestHit *hit) { - bool found = false; for (int ob_index = 0; ob_index < objects_len; ob_index++) { - found |= uv_find_nearest_face(scene, objects[ob_index], co, penalty, hit); + uv_find_nearest_face(scene, objects[ob_index], co, penalty_dist, hit); } - return found; + return uv_nearest_was_updated(hit); } static bool uv_nearest_between(const BMLoop *l, const float co[2], const int cd_loop_uv_offset) @@ -964,7 +965,6 @@ bool uv_find_nearest_vert( Scene *scene, Object *obedit, float const co[2], const float penalty_dist, UvNearestHit *hit) { BLI_assert((hit->scale[0] > 0.0f) && (hit->scale[1] > 0.0f)); - bool found = false; BMEditMesh *em = BKE_editmesh_from_object(obedit); BMFace *efa; @@ -984,39 +984,30 @@ bool uv_find_nearest_vert( BMLoop *l; int i; BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) { - float *luv = BM_ELEM_CD_GET_FLOAT_P(l, offsets.uv); - - float delta[2]; - - sub_v2_v2v2(delta, co, luv); - mul_v2_v2(delta, hit->scale); - - float dist_test_sq = len_squared_v2(delta); + const float *luv = BM_ELEM_CD_GET_FLOAT_P(l, offsets.uv); + float dist_test = uv_nearest_calc_dist(hit, co, luv); /* Ensures that successive selection attempts will select other vertices sharing the same * UV coordinates */ if ((penalty_dist != 0.0f) && uvedit_uv_select_test(scene, l, offsets)) { - dist_test_sq = square_f(sqrtf(dist_test_sq) + penalty_dist); + dist_test += penalty_dist; } - if (dist_test_sq <= hit->dist_sq) { - if (dist_test_sq == hit->dist_sq) { - if (!uv_nearest_between(l, co, offsets.uv)) { - continue; - } + if (dist_test == hit->dist) { + /* Special case to break ties. */ + if (uv_nearest_between(l, co, offsets.uv)) { + hit->ob = obedit; + hit->efa = efa; + hit->l = l; } - - hit->dist_sq = dist_test_sq; - - hit->ob = obedit; - hit->efa = efa; - hit->l = l; - found = true; + continue; } + + uv_nearest_hit_update(hit, obedit, efa, l, dist_test); } } - return found; + return uv_nearest_was_updated(hit); } bool uv_find_nearest_vert_multi(Scene *scene, @@ -2436,8 +2427,8 @@ static bool uv_mouse_select_multi(bContext *C, Scene *scene = CTX_data_scene(C); const ToolSettings *ts = scene->toolsettings; UvNearestHit hit = UV_NEAREST_HIT_INIT_DIST_PX(®ion->v2d, 75.0f); - int selectmode, sticky; - bool found_item = false; + int selectmode = ts->uv_selectmode; + int sticky = ts->uv_sticky; /* 0 == don't flush, 1 == sel, -1 == deselect; only use when selection sync is enabled. */ int flush = 0; @@ -2459,16 +2450,11 @@ static bool uv_mouse_select_multi(bContext *C, sticky = SI_STICKY_DISABLE; } - else { - selectmode = ts->uv_selectmode; - sticky = ts->uv_sticky; - } /* find nearest element */ if (selectmode == UV_SELECT_VERTEX) { /* find vertex */ - found_item = uv_find_nearest_vert_multi(scene, objects, objects_len, co, penalty_dist, &hit); - if (found_item) { + if (uv_find_nearest_vert_multi(scene, objects, objects_len, co, penalty_dist, &hit)) { if ((ts->uv_flag & UV_SYNC_SELECTION) == 0) { BMesh *bm = BKE_editmesh_from_object(hit.ob)->bm; ED_uvedit_active_vert_loop_set(bm, hit.l); @@ -2477,8 +2463,7 @@ static bool uv_mouse_select_multi(bContext *C, } else if (selectmode == UV_SELECT_EDGE) { /* find edge */ - found_item = uv_find_nearest_edge_multi(scene, objects, objects_len, co, penalty_dist, &hit); - if (found_item) { + if (uv_find_nearest_edge_multi(scene, objects, objects_len, co, penalty_dist, &hit)) { if ((ts->uv_flag & UV_SYNC_SELECTION) == 0) { BMesh *bm = BKE_editmesh_from_object(hit.ob)->bm; ED_uvedit_active_edge_loop_set(bm, hit.l); @@ -2487,17 +2472,18 @@ static bool uv_mouse_select_multi(bContext *C, } else if (selectmode == UV_SELECT_FACE) { /* find face */ - found_item = uv_find_nearest_face_multi(scene, objects, objects_len, co, penalty_dist, &hit); + const bool found_item = uv_find_nearest_face_multi( + scene, objects, objects_len, co, penalty_dist, &hit); if (found_item) { BMesh *bm = BKE_editmesh_from_object(hit.ob)->bm; BM_mesh_active_face_set(bm, hit.efa); } } else if (selectmode == UV_SELECT_ISLAND) { - found_item = uv_find_nearest_face_multi(scene, objects, objects_len, co, penalty_dist, &hit); + uv_find_nearest_face_multi(scene, objects, objects_len, co, penalty_dist, &hit); } - bool found = found_item; + bool found = uv_nearest_was_updated(&hit); bool changed = false; bool is_selected = false; @@ -3480,6 +3466,32 @@ static void uv_select_flush_from_loop_edge_flag(const Scene *scene, BMEditMesh * /** \name Box Select Operator * \{ */ +static bool uv_box_select_is_face_touching(Scene *scene, + BMFace *efa, + rctf rectf, + const int cd_loop_uv_offset) +{ + /* First, are we visible? */ + if (!uvedit_face_visible_test(scene, efa)) { + return false; + } + + /* Next, are any of the edges inside the rectangle? */ + BMLoop *l; + BMIter iter; + BM_ITER_ELEM (l, &iter, efa, BM_LOOPS_OF_FACE) { + float *luv = BM_ELEM_CD_GET_FLOAT_P(l, cd_loop_uv_offset); + float *luv_next = BM_ELEM_CD_GET_FLOAT_P(l->next, cd_loop_uv_offset); + if (BLI_rctf_isect_segment(&rectf, luv_next, luv)) { + return true; + } + } + + /* Last, is an arbitrary point of the rectangle in the interior of the face? */ + float rectangle_corner[2] = {rectf.xmin, rectf.ymin}; + return BM_face_uv_point_inside_test(efa, rectangle_corner, cd_loop_uv_offset); +} + static int uv_box_select_exec(bContext *C, wmOperator *op) { Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); @@ -3492,10 +3504,9 @@ static int uv_box_select_exec(bContext *C, wmOperator *op) BMIter iter, liter; float *luv; rctf rectf; - bool pinned; - const bool use_face_center = ((ts->uv_flag & UV_SYNC_SELECTION) ? - (ts->selectmode == SCE_SELECT_FACE) : - (ts->uv_selectmode == UV_SELECT_FACE)); + const bool use_face_touch = ((ts->uv_flag & UV_SYNC_SELECTION) ? + (ts->selectmode == SCE_SELECT_FACE) : + (ts->uv_selectmode == UV_SELECT_FACE)); const bool use_edge = ((ts->uv_flag & UV_SYNC_SELECTION) ? (ts->selectmode == SCE_SELECT_EDGE) : (ts->uv_selectmode == UV_SELECT_EDGE)); @@ -3510,7 +3521,7 @@ static int uv_box_select_exec(bContext *C, wmOperator *op) const bool select = (sel_op != SEL_OP_SUB); const bool use_pre_deselect = SEL_OP_USE_PRE_DESELECT(sel_op); - pinned = RNA_boolean_get(op->ptr, "pinned"); + const bool pinned = RNA_boolean_get(op->ptr, "pinned"); bool changed_multi = false; @@ -3522,7 +3533,6 @@ static int uv_box_select_exec(bContext *C, wmOperator *op) uv_select_all_perform_multi(scene, objects, objects_len, SEL_DESELECT); } - /* don't indent to avoid diff noise! */ for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -3535,22 +3545,13 @@ static int uv_box_select_exec(bContext *C, wmOperator *op) BM_uv_map_ensure_pin_attr(em->bm, active_uv_name); const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm); - /* do actual selection */ - if (use_face_center && !pinned) { - /* handle face selection mode */ - float cent[2]; - + /* Do actual selection. */ + if (use_face_touch && !pinned) { + /* Handle face selection mode. */ BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { - /* assume not touched */ - BM_elem_flag_disable(efa, BM_ELEM_TAG); - - if (uvedit_face_visible_test(scene, efa)) { - BM_face_uv_calc_center_median(efa, offsets.uv, cent); - if (BLI_rctf_isect_pt_v(&rectf, cent)) { - BM_elem_flag_enable(efa, BM_ELEM_TAG); - changed = true; - } - } + const bool touched = uv_box_select_is_face_touching(scene, efa, rectf, offsets.uv); + BM_elem_flag_set(efa, BM_ELEM_TAG, touched); + changed |= touched; } /* (de)selects all tagged faces and deals with sticky modes */ @@ -3721,6 +3722,26 @@ static bool uv_circle_select_is_edge_inside(const float uv_a[2], return dist_squared_to_line_segment_v2((const float[2]){0.0f, 0.0f}, co_a, co_b) < 1.0f; } +static bool uv_circle_select_is_face_touching(BMFace *efa, + const float offset[2], + const float ellipse[2], + const int cd_loop_uv_offset) +{ + /* First, are any of the edges inside the solid ellipse? */ + BMLoop *l; + BMIter iter; + BM_ITER_ELEM (l, &iter, efa, BM_LOOPS_OF_FACE) { + float *luv = BM_ELEM_CD_GET_FLOAT_P(l, cd_loop_uv_offset); + float *luv_next = BM_ELEM_CD_GET_FLOAT_P(l->next, cd_loop_uv_offset); + if (uv_circle_select_is_edge_inside(luv, luv_next, offset, ellipse)) { + return true; + } + } + + /* Also, is the center of the ellipse in the interior of the face? */ + return BM_face_uv_point_inside_test(efa, offset, cd_loop_uv_offset); +} + static int uv_circle_select_exec(bContext *C, wmOperator *op) { Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); @@ -3737,9 +3758,6 @@ static int uv_circle_select_exec(bContext *C, wmOperator *op) float zoomx, zoomy; float offset[2], ellipse[2]; - const bool use_face_center = ((ts->uv_flag & UV_SYNC_SELECTION) ? - (ts->selectmode == SCE_SELECT_FACE) : - (ts->uv_selectmode == UV_SELECT_FACE)); const bool use_edge = ((ts->uv_flag & UV_SYNC_SELECTION) ? (ts->selectmode == SCE_SELECT_EDGE) : (ts->uv_selectmode == UV_SELECT_EDGE)); @@ -3787,19 +3805,13 @@ static int uv_circle_select_exec(bContext *C, wmOperator *op) BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name); const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm); - /* do selection */ - if (use_face_center) { + /* Do selection. */ + if (ED_uvedit_select_mode_get(scene) == UV_SELECT_FACE) { BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { - BM_elem_flag_disable(efa, BM_ELEM_TAG); - /* assume not touched */ - if (select != uvedit_face_select_test(scene, efa, offsets)) { - float cent[2]; - BM_face_uv_calc_center_median(efa, offsets.uv, cent); - if (uv_circle_select_is_point_inside(cent, offset, ellipse)) { - BM_elem_flag_enable(efa, BM_ELEM_TAG); - changed = true; - } - } + const bool touched = select != uvedit_face_select_test(scene, efa, offsets) && + uv_circle_select_is_face_touching(efa, offset, ellipse, offsets.uv); + BM_elem_flag_set(efa, BM_ELEM_TAG, touched); + changed |= touched; } /* (de)selects all tagged faces and deals with sticky modes */ @@ -3930,14 +3942,35 @@ static bool do_lasso_select_mesh_uv_is_edge_inside(const ARegion *region, const float co_test_b[2]) { int co_screen_a[2], co_screen_b[2]; - if (UI_view2d_view_to_region_segment_clip( - ®ion->v2d, co_test_a, co_test_b, co_screen_a, co_screen_b) && - BLI_rcti_isect_segment(clip_rect, co_screen_a, co_screen_b) && - BLI_lasso_is_edge_inside( - mcoords, mcoords_len, UNPACK2(co_screen_a), UNPACK2(co_screen_b), V2D_IS_CLIPPED)) { - return true; + return UI_view2d_view_to_region_segment_clip( + ®ion->v2d, co_test_a, co_test_b, co_screen_a, co_screen_b) && + BLI_rcti_isect_segment(clip_rect, co_screen_a, co_screen_b) && + BLI_lasso_is_edge_inside( + mcoords, mcoords_len, UNPACK2(co_screen_a), UNPACK2(co_screen_b), V2D_IS_CLIPPED); +} + +static bool uv_lasso_select_is_face_touching(BMFace *efa, + const ARegion *region, + const rcti *clip_rect, + const int mcoords[][2], + const int mcoords_len, + const int cd_loop_uv_offset) +{ + /* First, are any of the face edges inside the lasso? */ + BMLoop *l; + BMIter iter; + BM_ITER_ELEM (l, &iter, efa, BM_LOOPS_OF_FACE) { + float *luv = BM_ELEM_CD_GET_FLOAT_P(l, cd_loop_uv_offset); + float *luv_next = BM_ELEM_CD_GET_FLOAT_P(l->next, cd_loop_uv_offset); + if (do_lasso_select_mesh_uv_is_edge_inside( + region, clip_rect, mcoords, mcoords_len, luv, luv_next)) { + return true; + } } - return false; + + /* Also, is an arbitrary point of the lasso in the interior of the face? */ + float lasso_corner[2] = {mcoords[0][0], mcoords[0][1]}; + return BM_face_uv_point_inside_test(efa, lasso_corner, cd_loop_uv_offset); } static bool do_lasso_select_mesh_uv(bContext *C, @@ -3950,9 +3983,6 @@ static bool do_lasso_select_mesh_uv(bContext *C, Scene *scene = CTX_data_scene(C); const ToolSettings *ts = scene->toolsettings; ViewLayer *view_layer = CTX_data_view_layer(C); - const bool use_face_center = ((ts->uv_flag & UV_SYNC_SELECTION) ? - (ts->selectmode == SCE_SELECT_FACE) : - (ts->uv_selectmode == UV_SELECT_FACE)); const bool use_edge = ((ts->uv_flag & UV_SYNC_SELECTION) ? (ts->selectmode == SCE_SELECT_EDGE) : (ts->uv_selectmode == UV_SELECT_EDGE)); @@ -3991,18 +4021,13 @@ static bool do_lasso_select_mesh_uv(bContext *C, BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name); const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm); - if (use_face_center) { /* Face Center Select. */ + if (ED_uvedit_select_mode_get(scene) == UV_SELECT_FACE) { /* Face Touch Select. */ BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { - BM_elem_flag_disable(efa, BM_ELEM_TAG); - /* assume not touched */ - if (select != uvedit_face_select_test(scene, efa, offsets)) { - float cent[2]; - BM_face_uv_calc_center_median(efa, offsets.uv, cent); - if (do_lasso_select_mesh_uv_is_point_inside(region, &rect, mcoords, mcoords_len, cent)) { - BM_elem_flag_enable(efa, BM_ELEM_TAG); - changed = true; - } - } + const bool touched = select != uvedit_face_select_test(scene, efa, offsets) && + uv_lasso_select_is_face_touching( + efa, region, &rect, mcoords, mcoords_len, offsets.uv); + BM_elem_flag_set(efa, BM_ELEM_TAG, touched); + changed |= touched; } /* (de)selects all tagged faces and deals with sticky modes */ @@ -4327,7 +4352,7 @@ static int uv_select_overlap(bContext *C, const bool extend) BMIter iter; BMFace *efa; BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { - if (!uvedit_face_visible_test_ex(scene->toolsettings, efa)) { + if (!uvedit_face_visible_test(scene, efa)) { continue; } uv_tri_len += efa->len - 2; @@ -4361,7 +4386,7 @@ static int uv_select_overlap(bContext *C, const bool extend) int face_index; BM_ITER_MESH_INDEX (efa, &iter, em->bm, BM_FACES_OF_MESH, face_index) { - if (!uvedit_face_visible_test_ex(scene->toolsettings, efa)) { + if (!uvedit_face_visible_test(scene, efa)) { continue; } @@ -5231,160 +5256,6 @@ void UV_OT_select_similar(wmOperatorType *ot) /** \} */ -/* -------------------------------------------------------------------- */ -/** \name Selected Elements as Arrays (Vertex, Edge & Faces) - * - * These functions return single elements per connected vertex/edge. - * So an edge that has two connected edge loops only assigns one loop in the array. - * \{ */ - -BMFace **ED_uvedit_selected_faces(const Scene *scene, BMesh *bm, int len_max, int *r_faces_len) -{ - const BMUVOffsets offsets = BM_uv_map_get_offsets(bm); - - CLAMP_MAX(len_max, bm->totface); - int faces_len = 0; - BMFace **faces = MEM_mallocN(sizeof(*faces) * len_max, __func__); - - BMIter iter; - BMFace *f; - BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { - if (uvedit_face_visible_test(scene, f)) { - if (uvedit_face_select_test(scene, f, offsets)) { - faces[faces_len++] = f; - if (faces_len == len_max) { - goto finally; - } - } - } - } - -finally: - *r_faces_len = faces_len; - if (faces_len != len_max) { - faces = MEM_reallocN(faces, sizeof(*faces) * faces_len); - } - return faces; -} - -BMLoop **ED_uvedit_selected_edges(const Scene *scene, BMesh *bm, int len_max, int *r_edges_len) -{ - const BMUVOffsets offsets = BM_uv_map_get_offsets(bm); - BLI_assert(offsets.uv >= 0); - - CLAMP_MAX(len_max, bm->totloop); - int edges_len = 0; - BMLoop **edges = MEM_mallocN(sizeof(*edges) * len_max, __func__); - - BMIter iter; - BMFace *f; - - /* Clear tag. */ - BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { - BMIter liter; - BMLoop *l_iter; - BM_ITER_ELEM (l_iter, &liter, f, BM_LOOPS_OF_FACE) { - BM_elem_flag_disable(l_iter, BM_ELEM_TAG); - } - } - - BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { - if (uvedit_face_visible_test(scene, f)) { - BMIter liter; - BMLoop *l_iter; - BM_ITER_ELEM (l_iter, &liter, f, BM_LOOPS_OF_FACE) { - if (!BM_elem_flag_test(l_iter, BM_ELEM_TAG)) { - if (uvedit_edge_select_test(scene, l_iter, offsets)) { - BM_elem_flag_enable(l_iter, BM_ELEM_TAG); - - edges[edges_len++] = l_iter; - if (edges_len == len_max) { - goto finally; - } - - /* Tag other connected loops so we don't consider them separate edges. */ - if (l_iter != l_iter->radial_next) { - BMLoop *l_radial_iter = l_iter->radial_next; - do { - if (BM_loop_uv_share_edge_check(l_iter, l_radial_iter, offsets.uv)) { - BM_elem_flag_enable(l_radial_iter, BM_ELEM_TAG); - } - } while ((l_radial_iter = l_radial_iter->radial_next) != l_iter); - } - } - } - } - } - } - -finally: - *r_edges_len = edges_len; - if (edges_len != len_max) { - edges = MEM_reallocN(edges, sizeof(*edges) * edges_len); - } - return edges; -} - -BMLoop **ED_uvedit_selected_verts(const Scene *scene, BMesh *bm, int len_max, int *r_verts_len) -{ - const BMUVOffsets offsets = BM_uv_map_get_offsets(bm); - BLI_assert(offsets.select_vert >= 0); - BLI_assert(offsets.uv >= 0); - - CLAMP_MAX(len_max, bm->totloop); - int verts_len = 0; - BMLoop **verts = MEM_mallocN(sizeof(*verts) * len_max, __func__); - - BMIter iter; - BMFace *f; - - /* Clear tag. */ - BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { - BMIter liter; - BMLoop *l_iter; - BM_ITER_ELEM (l_iter, &liter, f, BM_LOOPS_OF_FACE) { - BM_elem_flag_disable(l_iter, BM_ELEM_TAG); - } - } - - BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { - if (uvedit_face_visible_test(scene, f)) { - BMIter liter; - BMLoop *l_iter; - BM_ITER_ELEM (l_iter, &liter, f, BM_LOOPS_OF_FACE) { - if (!BM_elem_flag_test(l_iter, BM_ELEM_TAG)) { - if (BM_ELEM_CD_GET_BOOL(l_iter, offsets.select_vert)) { - BM_elem_flag_enable(l_iter->v, BM_ELEM_TAG); - - verts[verts_len++] = l_iter; - if (verts_len == len_max) { - goto finally; - } - - /* Tag other connected loops so we don't consider them separate vertices. */ - BMIter liter_disk; - BMLoop *l_disk_iter; - BM_ITER_ELEM (l_disk_iter, &liter_disk, l_iter->v, BM_LOOPS_OF_VERT) { - if (BM_loop_uv_share_vert_check(l_iter, l_disk_iter, offsets.uv)) { - BM_elem_flag_enable(l_disk_iter, BM_ELEM_TAG); - } - } - } - } - } - } - } - -finally: - *r_verts_len = verts_len; - if (verts_len != len_max) { - verts = MEM_reallocN(verts, sizeof(*verts) * verts_len); - } - return verts; -} - -/** \} */ - /* -------------------------------------------------------------------- */ /** \name Select Mode UV Vert/Edge/Face/Island Operator * \{ */ -- 2.30.2

HuG3w+N!*@O-+LEw{%+!@o@48QJ@WNij31d2 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 -- 2.30.2 From 765bd10501aa6142fc2de37992cd03c6f80a521c Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Wed, 15 Feb 2023 14:16:43 +0100 Subject: [PATCH 140/182] Revert "Blender 3.5 Beta:" This reverts commit 904b7e4e41b5b7c47735694990b0af00630b798b. --- .../build_environment/cmake/download.cmake | 2 +- build_files/config/pipeline_config.yaml | 18 +++++++++--------- .../blender/blenkernel/BKE_blender_version.h | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/build_files/build_environment/cmake/download.cmake b/build_files/build_environment/cmake/download.cmake index b5da14a63d13..dab4417109a6 100644 --- a/build_files/build_environment/cmake/download.cmake +++ b/build_files/build_environment/cmake/download.cmake @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later ## Update and uncomment this in the release branch -set(BLENDER_VERSION 3.5) +# set(BLENDER_VERSION 3.1) function(download_source dep) set(TARGET_FILE ${${dep}_FILE}) diff --git a/build_files/config/pipeline_config.yaml b/build_files/config/pipeline_config.yaml index 6bade75e70f9..0576d0c0a1e9 100644 --- a/build_files/config/pipeline_config.yaml +++ b/build_files/config/pipeline_config.yaml @@ -5,38 +5,38 @@ update-code: git: submodules: - - branch: blender-v3.5-release + - branch: main commit_id: HEAD path: release/scripts/addons - - branch: blender-v3.5-release + - branch: main commit_id: HEAD path: release/scripts/addons_contrib - - branch: blender-v3.5-release + - branch: main commit_id: HEAD path: release/datafiles/locale - - branch: blender-v3.5-release + - branch: main commit_id: HEAD path: source/tools svn: libraries: darwin-arm64: - branch: tags/blender-3.5-release + branch: trunk commit_id: HEAD path: lib/darwin_arm64 darwin-x86_64: - branch: tags/blender-3.5-release + branch: trunk commit_id: HEAD path: lib/darwin linux-x86_64: - branch: tags/blender-3.5-release + branch: trunk commit_id: HEAD path: lib/linux_x86_64_glibc_228 windows-amd64: - branch: tags/blender-3.5-release + branch: trunk commit_id: HEAD path: lib/win64_vc15 tests: - branch: tags/blender-3.5-release + branch: trunk commit_id: HEAD path: lib/tests benchmarks: diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h index 9bd5f2b33644..672054b7c529 100644 --- a/source/blender/blenkernel/BKE_blender_version.h +++ b/source/blender/blenkernel/BKE_blender_version.h @@ -21,7 +21,7 @@ extern "C" { /* Blender patch version for bugfix releases. */ #define BLENDER_VERSION_PATCH 0 /** Blender release cycle stage: alpha/beta/rc/release. */ -#define BLENDER_VERSION_CYCLE beta +#define BLENDER_VERSION_CYCLE alpha /* TODO proper version bump. */ -- 2.30.2 From 1be728996a8cfce3ab43ea922fe658e4e24dcc6f Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Wed, 15 Feb 2023 14:17:00 +0100 Subject: [PATCH 141/182] Revert "Splash screen for Blender 3.5" This reverts commit a0b4da2bd0ed2cac9213d3aceb313687edd3f1f5. --- release/datafiles/splash.png | Bin 694426 -> 842492 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/release/datafiles/splash.png b/release/datafiles/splash.png index 384822af6a5fec9c04d330482823694571e02f40..eb1250cf5a53e2e08eaff46ef7b7e05e4cd0cca6 100644 GIT binary patch literal 842492 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
^(pENqz9mm(Ao3LSH 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