[Bf-blender-cvs] [d1418dd151b] master: Updated voxel remesher defaults

2022-04-12 Thread Joseph Eagar
Commit: d1418dd151b1b446fd97108959ef0ba5c0404424
Author: Joseph Eagar
Date:   Tue Apr 12 23:31:04 2022 -0700
Branches: master
https://developer.blender.org/rBd1418dd151b1b446fd97108959ef0ba5c0404424

Updated voxel remesher defaults

Implements T97163
Newly created meshes have all voxel remesher checkboxes aside from Fix Poles 
enabled.
Startup files updated with versioning.

Reviewed By @JulianKaspar
Differential Revision: https://developer.blender.org/D14608
Ref D14608

===

M   source/blender/blenloader/intern/versioning_defaults.c
M   source/blender/makesdna/DNA_mesh_defaults.h
M   source/blender/makesrna/intern/rna_mesh.c

===

diff --git a/source/blender/blenloader/intern/versioning_defaults.c 
b/source/blender/blenloader/intern/versioning_defaults.c
index 000f132adcb..cec6d520af3 100644
--- a/source/blender/blenloader/intern/versioning_defaults.c
+++ b/source/blender/blenloader/intern/versioning_defaults.c
@@ -532,11 +532,12 @@ void BLO_update_defaults_startup_blend(Main *bmain, const 
char *app_template)
   for (Mesh *mesh = bmain->meshes.first; mesh; mesh = mesh->id.next) {
 /* Match default for new meshes. */
 mesh->smoothresh = DEG2RADF(30);
+/* Match voxel remesher options for all existing meshes in templates. */
+mesh->flag |= ME_REMESH_REPROJECT_VOLUME | ME_REMESH_REPROJECT_PAINT_MASK 
| ME_REMESH_REPROJECT_SCULPT_FACE_SETS | ME_REMESH_REPROJECT_VERTEX_COLORS;
 
 /* For Sculpting template. */
 if (app_template && STREQ(app_template, "Sculpting")) {
   mesh->remesh_voxel_size = 0.035f;
-  mesh->flag |= ME_REMESH_FIX_POLES | ME_REMESH_REPROJECT_VOLUME;
   BKE_mesh_smooth_flag_set(mesh, false);
 }
 else {
diff --git a/source/blender/makesdna/DNA_mesh_defaults.h 
b/source/blender/makesdna/DNA_mesh_defaults.h
index 079bda42009..30fe387b05a 100644
--- a/source/blender/makesdna/DNA_mesh_defaults.h
+++ b/source/blender/makesdna/DNA_mesh_defaults.h
@@ -22,7 +22,7 @@
 .remesh_voxel_adaptivity = 0.0f, \
 .face_sets_color_seed = 0, \
 .face_sets_color_default = 1, \
-.flag = ME_REMESH_FIX_POLES | ME_REMESH_REPROJECT_VOLUME, \
+.flag = ME_REMESH_REPROJECT_VOLUME | ME_REMESH_REPROJECT_PAINT_MASK | 
ME_REMESH_REPROJECT_SCULPT_FACE_SETS | ME_REMESH_REPROJECT_VERTEX_COLORS, \
 .editflag = ME_EDIT_MIRROR_VERTEX_GROUPS \
   }
 
diff --git a/source/blender/makesrna/intern/rna_mesh.c 
b/source/blender/makesrna/intern/rna_mesh.c
index 22275df61f9..52af96e355d 100644
--- a/source/blender/makesrna/intern/rna_mesh.c
+++ b/source/blender/makesrna/intern/rna_mesh.c
@@ -3451,20 +3451,17 @@ static void rna_def_mesh(BlenderRNA *brna)
 
   prop = RNA_def_property(srna, "use_remesh_preserve_paint_mask", 
PROP_BOOLEAN, PROP_NONE);
   RNA_def_property_boolean_sdna(prop, NULL, "flag", 
ME_REMESH_REPROJECT_PAINT_MASK);
-  RNA_def_property_boolean_default(prop, false);
   RNA_def_property_ui_text(prop, "Preserve Paint Mask", "Keep the current mask 
on the new mesh");
   RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
 
   prop = RNA_def_property(srna, "use_remesh_preserve_sculpt_face_sets", 
PROP_BOOLEAN, PROP_NONE);
   RNA_def_property_boolean_sdna(prop, NULL, "flag", 
ME_REMESH_REPROJECT_SCULPT_FACE_SETS);
-  RNA_def_property_boolean_default(prop, false);
   RNA_def_property_ui_text(
   prop, "Preserve Face Sets", "Keep the current Face Sets on the new 
mesh");
   RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
 
   prop = RNA_def_property(srna, "use_remesh_preserve_vertex_colors", 
PROP_BOOLEAN, PROP_NONE);
   RNA_def_property_boolean_sdna(prop, NULL, "flag", 
ME_REMESH_REPROJECT_VERTEX_COLORS);
-  RNA_def_property_boolean_default(prop, false);
   RNA_def_property_ui_text(
   prop, "Preserve Vertex Colors", "Keep the current vertex colors on the 
new mesh");
   RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");

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


[Bf-blender-cvs] [567aad9dcdc] master: Fix T97152: Selection tools do nothing in particle hair edit

2022-04-12 Thread Campbell Barton
Commit: 567aad9dcdcbcb4d05d4945a4cd493f809fcfe8c
Author: Campbell Barton
Date:   Wed Apr 13 16:22:17 2022 +1000
Branches: master
https://developer.blender.org/rB567aad9dcdcbcb4d05d4945a4cd493f809fcfe8c

Fix T97152: Selection tools do nothing in particle hair edit

Regression in [0] which caused canceled PRESS events not to generate
CLICK_DRAG.

Resolve by checking for an active brush tool in poll instead of the
PARTICLE_OT_brush_edit invoke function.

[0]: 4d0f846b936c9101ecb76a6db962aac2d74a460a,

===

M   source/blender/editors/physics/particle_edit.c

===

diff --git a/source/blender/editors/physics/particle_edit.c 
b/source/blender/editors/physics/particle_edit.c
index eba647a1b17..0e03feba340 100644
--- a/source/blender/editors/physics/particle_edit.c
+++ b/source/blender/editors/physics/particle_edit.c
@@ -4693,10 +4693,6 @@ static int brush_edit_init(bContext *C, wmOperator *op)
   BrushEdit *bedit;
   float min[3], max[3];
 
-  if (!WM_toolsystem_active_tool_is_brush(C)) {
-return 0;
-  }
-
   /* set the 'distance factor' for grabbing (used in comb etc) */
   INIT_MINMAX(min, max);
   PE_minmax(depsgraph, scene, view_layer, min, max);
@@ -5033,6 +5029,11 @@ static void brush_edit_cancel(bContext *UNUSED(C), 
wmOperator *op)
   brush_edit_exit(op);
 }
 
+static bool brush_edit_poll(bContext *C)
+{
+  return PE_poll_view3d(C) && WM_toolsystem_active_tool_is_brush(C);
+}
+
 void PARTICLE_OT_brush_edit(wmOperatorType *ot)
 {
   /* identifiers */
@@ -5045,7 +5046,7 @@ void PARTICLE_OT_brush_edit(wmOperatorType *ot)
   ot->invoke = brush_edit_invoke;
   ot->modal = brush_edit_modal;
   ot->cancel = brush_edit_cancel;
-  ot->poll = PE_poll_view3d;
+  ot->poll = brush_edit_poll;
 
   /* flags */
   ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING;

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


[Bf-blender-cvs] [29cda45d837] tracking_tools: Merge branch 'master' into tracking_tools

2022-04-12 Thread Sebastian Koenig
Commit: 29cda45d837335899a5a14a221a7dc6176120eb6
Author: Sebastian Koenig
Date:   Wed Apr 13 08:26:07 2022 +0200
Branches: tracking_tools
https://developer.blender.org/rB29cda45d837335899a5a14a221a7dc6176120eb6

Merge branch 'master' into tracking_tools

===



===



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


[Bf-blender-cvs] [9a659f2573b] master: WM: improve logging for handling operators

2022-04-12 Thread Campbell Barton
Commit: 9a659f2573b3d51a3f0a5390b02f33b4863d53aa
Author: Campbell Barton
Date:   Wed Apr 13 15:40:58 2022 +1000
Branches: master
https://developer.blender.org/rB9a659f2573b3d51a3f0a5390b02f33b4863d53aa

WM: improve logging for handling operators

- Add logging for CLICK_DRAG event handling to debug drag events.
- Use logging API for reporting the key-map, operator and event.

This command now prints useful information for investigating
key-map and event handling issues:

  blender --log "wm.handler.*" --log-level 4

===

M   source/blender/windowmanager/intern/wm_event_system.c

===

diff --git a/source/blender/windowmanager/intern/wm_event_system.c 
b/source/blender/windowmanager/intern/wm_event_system.c
index 84c40c42adc..87588c40b57 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -2691,6 +2691,51 @@ static int wm_action_not_handled(int action)
   return action == WM_HANDLER_CONTINUE || action == (WM_HANDLER_BREAK | 
WM_HANDLER_MODAL);
 }
 
+static const char *keymap_handler_log_action_str(const int action)
+{
+  if (action & WM_HANDLER_BREAK) {
+return "handled";
+  }
+  if (action & WM_HANDLER_HANDLED) {
+return "handled (and pass on)";
+  }
+  return "un-handled";
+}
+
+static const char *keymap_handler_log_kmi_event_str(const wmKeyMapItem *kmi,
+char *buf,
+size_t buf_maxlen)
+{
+  /* Short representation of the key that was pressed,
+   * include this since it may differ from the event in minor details
+   * which can help looking up the key-map definition. */
+  WM_keymap_item_to_string(kmi, false, buf, buf_maxlen);
+  return buf;
+}
+
+static const char *keymap_handler_log_kmi_op_str(bContext *C,
+ const wmKeyMapItem *kmi,
+ char *buf,
+ size_t buf_maxlen)
+{
+  /* The key-map item properties can further help distinguish this item from 
others. */
+  char *kmi_props = NULL;
+  if (kmi->properties != NULL) {
+wmOperatorType *ot = WM_operatortype_find(kmi->idname, 0);
+if (ot) {
+  kmi_props = RNA_pointer_as_string_keywords(C, kmi->ptr, false, false, 
true, 512);
+}
+else { /* Fallback. */
+  kmi_props = IDP_reprN(kmi->properties, NULL);
+}
+  }
+  BLI_snprintf(buf, buf_maxlen, "%s(%s)", kmi->idname, kmi_props ? kmi_props : 
"");
+  if (kmi_props != NULL) {
+MEM_freeN(kmi_props);
+  }
+  return buf;
+}
+
 #define PRINT \
   if (do_debug_handler) \
   printf
@@ -2722,52 +2767,26 @@ static int wm_handlers_do_keymap_with_keymap_handler(
 if (wm_eventmatch(event, kmi)) {
   struct wmEventHandler_KeymapPost keymap_post = handler->post;
 
-  if (do_debug_handler) {
-/* Short representation of the key that was pressed,
- * include this since it may differ from the event in minor details
- * which can help looking up the key-map definition. */
-char kmi_buf[256];
-WM_keymap_item_to_string(kmi, false, kmi_buf, sizeof(kmi_buf));
-
-/* The key-map item properties can further help distinguish this 
item from others. */
-char *kmi_props = NULL;
-if (kmi->properties != NULL) {
-  wmOperatorType *ot = WM_operatortype_find(kmi->idname, 0);
-  if (ot) {
-kmi_props = RNA_pointer_as_string_keywords(C, kmi->ptr, false, 
false, true, 512);
-  }
-  else { /* Fallback. */
-kmi_props = IDP_reprN(kmi->properties, NULL);
-  }
-}
-
-printf("%s: item matched: \"%s\", %s(%s)\n",
-   __func__,
-   kmi_buf,
-   kmi->idname,
-   kmi_props ? kmi_props : "");
-if (kmi_props != NULL) {
-  MEM_freeN(kmi_props);
-}
-  }
-
   action |= wm_handler_operator_call(
   C, handlers, &handler->head, event, kmi->ptr, kmi->idname);
 
+  char op_buf[512];
+  char kmi_buf[128];
+  CLOG_INFO(WM_LOG_HANDLERS,
+2,
+"keymap '%s', %s, %s, event: %s",
+keymap->idname,
+keymap_handler_log_kmi_op_str(C, kmi, op_buf, 
sizeof(op_buf)),
+keymap_handler_log_action_str(action),
+keymap_handler_log_kmi_event_str(kmi, kmi_buf, 
sizeof(kmi_buf)));
+
   if (action & WM_HANDLER_BREAK) {
 /* Not always_pass here, it denotes removed handler_base. */
-CLOG_INFO(WM_LOG_HANDLERS, 2, "handled! '%s'", kmi->idname);
 if (keymap_post.po

[Bf-blender-cvs] [02de1bff1e7] master: Cleanup: warning for 'float' to 'int' with MSVC

2022-04-12 Thread Campbell Barton
Commit: 02de1bff1e78d0e67ac083ebad58cec6ce956403
Author: Campbell Barton
Date:   Wed Apr 13 14:22:58 2022 +1000
Branches: master
https://developer.blender.org/rB02de1bff1e78d0e67ac083ebad58cec6ce956403

Cleanup: warning for 'float' to 'int' with MSVC

===

M   source/blender/blenfont/intern/blf_font.c

===

diff --git a/source/blender/blenfont/intern/blf_font.c 
b/source/blender/blenfont/intern/blf_font.c
index 16d4c46589d..51b65dab8fc 100644
--- a/source/blender/blenfont/intern/blf_font.c
+++ b/source/blender/blenfont/intern/blf_font.c
@@ -1210,10 +1210,10 @@ static void blf_font_fill(FontBLF *font)
   font->color[2] = 0;
   font->color[3] = 255;
 
-  font->clip_rec.xmin = 0.0f;
-  font->clip_rec.xmax = 0.0f;
-  font->clip_rec.ymin = 0.0f;
-  font->clip_rec.ymax = 0.0f;
+  font->clip_rec.xmin = 0;
+  font->clip_rec.xmax = 0;
+  font->clip_rec.ymin = 0;
+  font->clip_rec.ymax = 0;
   font->flags = 0;
   font->dpi = 0;
   font->size = 0;

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


[Bf-blender-cvs] [7d3db7a3ae9] master: Cleanup: use C++ comments for disabled code

2022-04-12 Thread Campbell Barton
Commit: 7d3db7a3ae9f3b3039e81138e3d399f1d4f9717f
Author: Campbell Barton
Date:   Wed Apr 13 13:46:22 2022 +1000
Branches: master
https://developer.blender.org/rB7d3db7a3ae9f3b3039e81138e3d399f1d4f9717f

Cleanup: use C++ comments for disabled code

Also ensure space around text in C-comment blocks.

===

M   intern/utfconv/utfconv.c
M   source/blender/blenloader/intern/readfile.c
M   source/blender/bmesh/operators/bmo_smooth_laplacian.c
M   source/blender/compositor/intern/COM_NodeOperationBuilder.cc
M   source/blender/editors/object/object_select.c
M   source/blender/editors/sculpt_paint/sculpt_intern.h
M   source/blender/editors/sculpt_paint/sculpt_undo.c
M   source/blender/editors/transform/transform_convert_sequencer.c
M   source/blender/editors/util/ed_transverts.c
M   source/blender/makesrna/intern/rna_ID.c
M   source/blender/makesrna/intern/rna_armature.c
M   source/blender/makesrna/intern/rna_brush.c
M   source/blender/makesrna/intern/rna_modifier.c
M   source/blender/makesrna/intern/rna_object.c
M   source/blender/makesrna/intern/rna_texture.c
M   source/blender/modifiers/intern/MOD_laplaciansmooth.c
M   source/blender/modifiers/intern/MOD_screw.c
M   source/blender/python/bmesh/bmesh_py_types.c

===

diff --git a/intern/utfconv/utfconv.c b/intern/utfconv/utfconv.c
index a9625309a55..4cc72ae110f 100644
--- a/intern/utfconv/utfconv.c
+++ b/intern/utfconv/utfconv.c
@@ -40,7 +40,7 @@ size_t count_utf_8_from_16(const wchar_t *string16)
   }
   else {
 if (u < 0xE000) {
-  /*illegal*/;
+  /* Illegal. */
 }
 else {
   count += 3;
diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index aba0bfe84d2..27890a908ab 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -2619,7 +2619,7 @@ static void lib_link_workspace_layout_restore(struct 
IDNameLib_Map *id_map,
 
   scpt->script = restore_pointer_by_name(id_map, (ID *)scpt->script, 
USER_REAL);
 
-  /*screen->script = NULL; - 2.45 set to null, better re-run the 
script */
+  // screen->script = NULL; /* 2.45 set to null, better re-run the 
script. */
   if (scpt->script) {
 SCRIPT_SET_NULL(scpt->script);
   }
diff --git a/source/blender/bmesh/operators/bmo_smooth_laplacian.c 
b/source/blender/bmesh/operators/bmo_smooth_laplacian.c
index 67ab57fa403..08efe5383a8 100644
--- a/source/blender/bmesh/operators/bmo_smooth_laplacian.c
+++ b/source/blender/bmesh/operators/bmo_smooth_laplacian.c
@@ -37,7 +37,7 @@ struct BLaplacianSystem {
   BMOperator *op;
   LinearSolver *context;
 
-  /*Data*/
+  /* Data. */
   float min_area;
 };
 typedef struct BLaplacianSystem LaplacianSystem;
diff --git a/source/blender/compositor/intern/COM_NodeOperationBuilder.cc 
b/source/blender/compositor/intern/COM_NodeOperationBuilder.cc
index 788686f3036..1fdec43eb3b 100644
--- a/source/blender/compositor/intern/COM_NodeOperationBuilder.cc
+++ b/source/blender/compositor/intern/COM_NodeOperationBuilder.cc
@@ -104,7 +104,7 @@ void 
NodeOperationBuilder::convert_to_operations(ExecutionSystem *system)
   prune_operations();
 
   /* ensure topological (link-based) order of nodes */
-  /*sort_operations();*/ /* not needed yet */
+  // sort_operations(); /* not needed yet. */
 
   if (context_->get_execution_model() == eExecutionModel::Tiled) {
 /* create execution groups */
diff --git a/source/blender/editors/object/object_select.c 
b/source/blender/editors/object/object_select.c
index 3ebf578ca6b..c3d8fb9cfe5 100644
--- a/source/blender/editors/object/object_select.c
+++ b/source/blender/editors/object/object_select.c
@@ -1449,7 +1449,7 @@ void OBJECT_OT_select_random(wmOperatorType *ot)
   ot->idname = "OBJECT_OT_select_random";
 
   /* api callbacks */
-  /*ot->invoke = object_select_random_invoke XXX: need a number popup ;*/
+  // ot->invoke = object_select_random_invoke; /* TODO: need a number popup. */
   ot->exec = object_select_random_exec;
   ot->poll = objects_selectable_poll;
 
diff --git a/source/blender/editors/sculpt_paint/sculpt_intern.h 
b/source/blender/editors/sculpt_paint/sculpt_intern.h
index 03d459b6af7..466432a35ec 100644
--- a/source/blender/editors/sculpt_paint/sculpt_intern.h
+++ b/source/blender/editors/sculpt_paint/sculpt_intern.h
@@ -440,7 +440,7 @@ typedef struct FilterCache {
   /* Auto-masking. */
   AutomaskingCache *automasking;
 
-  /* Pre-smoothed colors used by sharpening. Colors are HSL.*/
+  /* Pre-smoothed colors used by sharpening. Colors are HSL. */
   float (*pre_smoothed_color)[4];
 } FilterCache;
 
diff --git a/source/blender/editors/sculpt_paint/sculpt_undo.c 
b/source/blender/editors/sculpt_paint/sculp

[Bf-blender-cvs] [4b5195a9d75] master: Cleanup: clang-format

2022-04-12 Thread Campbell Barton
Commit: 4b5195a9d75ac1cef101f902c9866e07e75193bb
Author: Campbell Barton
Date:   Wed Apr 13 13:45:42 2022 +1000
Branches: master
https://developer.blender.org/rB4b5195a9d75ac1cef101f902c9866e07e75193bb

Cleanup: clang-format

===

M   intern/cycles/util/simd.h
M   source/blender/editors/sculpt_paint/sculpt_intern.h

===

diff --git a/intern/cycles/util/simd.h b/intern/cycles/util/simd.h
index 6772025d1de..03783abd20f 100644
--- a/intern/cycles/util/simd.h
+++ b/intern/cycles/util/simd.h
@@ -33,11 +33,11 @@
 _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON); \
 _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON);
 #elif defined(__aarch64__) || defined(_M_ARM64)
-#define _MM_FLUSH_ZERO_ON 24
-#define __get_fpcr(__fpcr) __asm__ __volatile__("mrs %0,fpcr" : "=r" (__fpcr))
-#define __set_fpcr(__fpcr) __asm__ __volatile__("msr fpcr,%0" : :"ri" (__fpcr))
-#  define SIMD_SET_FLUSH_TO_ZERO  set_fz(_MM_FLUSH_ZERO_ON);
-#  define SIMD_GET_FLUSH_TO_ZERO  get_fz(_MM_FLUSH_ZERO_ON)
+#  define _MM_FLUSH_ZERO_ON 24
+#  define __get_fpcr(__fpcr) __asm__ __volatile__("mrs %0,fpcr" : "=r"(__fpcr))
+#  define __set_fpcr(__fpcr) __asm__ __volatile__("msr fpcr,%0" : : 
"ri"(__fpcr))
+#  define SIMD_SET_FLUSH_TO_ZERO set_fz(_MM_FLUSH_ZERO_ON);
+#  define SIMD_GET_FLUSH_TO_ZERO get_fz(_MM_FLUSH_ZERO_ON)
 #else
 #  define SIMD_SET_FLUSH_TO_ZERO
 #endif
@@ -112,18 +112,20 @@ static struct StepTy {
 
 #endif
 #if defined(__aarch64__) || defined(_M_ARM64)
-__forceinline int set_fz(uint32_t flag) {
-uint64_t old_fpcr, new_fpcr;
-__get_fpcr(old_fpcr);
-new_fpcr = old_fpcr | (1ULL << flag);
-__set_fpcr(new_fpcr);
-__get_fpcr(old_fpcr);
-return old_fpcr == new_fpcr;
-}
-__forceinline int get_fz(uint32_t flag) {
-uint64_t cur_fpcr;
-__get_fpcr(cur_fpcr);
-return (cur_fpcr & (1ULL<< flag)) > 0 ? 1 : 0 ;
+__forceinline int set_fz(uint32_t flag)
+{
+  uint64_t old_fpcr, new_fpcr;
+  __get_fpcr(old_fpcr);
+  new_fpcr = old_fpcr | (1ULL << flag);
+  __set_fpcr(new_fpcr);
+  __get_fpcr(old_fpcr);
+  return old_fpcr == new_fpcr;
+}
+__forceinline int get_fz(uint32_t flag)
+{
+  uint64_t cur_fpcr;
+  __get_fpcr(cur_fpcr);
+  return (cur_fpcr & (1ULL << flag)) > 0 ? 1 : 0;
 }
 #endif
 
diff --git a/source/blender/editors/sculpt_paint/sculpt_intern.h 
b/source/blender/editors/sculpt_paint/sculpt_intern.h
index bd18810acf8..03d459b6af7 100644
--- a/source/blender/editors/sculpt_paint/sculpt_intern.h
+++ b/source/blender/editors/sculpt_paint/sculpt_intern.h
@@ -440,7 +440,7 @@ typedef struct FilterCache {
   /* Auto-masking. */
   AutomaskingCache *automasking;
 
-  /* Pre-smoothed colors used by sharpening. Colors are HSL.*/ 
+  /* Pre-smoothed colors used by sharpening. Colors are HSL.*/
   float (*pre_smoothed_color)[4];
 } FilterCache;

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


[Bf-blender-cvs] [21ae323dbf2] master: Cleanup: avoid redundant float/int conversions in BLF

2022-04-12 Thread Campbell Barton
Commit: 21ae323dbf28b4e0049e68153fe1a310ccf5ebef
Author: Campbell Barton
Date:   Wed Apr 13 12:45:41 2022 +1000
Branches: master
https://developer.blender.org/rB21ae323dbf28b4e0049e68153fe1a310ccf5ebef

Cleanup: avoid redundant float/int conversions in BLF

Internally many offsets for BLF were integers but exposed as floats,
since these are used in pixel-space, many callers were converging them
back to integers. Simplify logic by using ints.

===

M   source/blender/blenfont/BLF_api.h
M   source/blender/blenfont/intern/blf.c
M   source/blender/blenfont/intern/blf_font.c
M   source/blender/blenfont/intern/blf_glyph.c
M   source/blender/blenfont/intern/blf_internal.h
M   source/blender/blenfont/intern/blf_internal_types.h
M   source/blender/blenfont/intern/blf_thumbs.c
M   source/blender/blenkernel/intern/image.cc
M   source/blender/editors/interface/interface_handlers.c
M   source/blender/editors/interface/interface_style.cc
M   source/blender/editors/interface/interface_widgets.c
M   source/blender/editors/space_file/file_draw.c
M   source/blender/editors/util/ed_draw.c
M   source/blender/sequencer/intern/effects.c

===

diff --git a/source/blender/blenfont/BLF_api.h 
b/source/blender/blenfont/BLF_api.h
index 058b0f120f7..e5e2b1711b1 100644
--- a/source/blender/blenfont/BLF_api.h
+++ b/source/blender/blenfont/BLF_api.h
@@ -109,7 +109,7 @@ typedef bool (*BLF_GlyphBoundsFn)(const char *str,
   size_t str_step_ofs,
   const struct rcti *glyph_step_bounds,
   int glyph_advance_x,
-  const struct rctf *glyph_bounds,
+  const struct rcti *glyph_bounds,
   const int glyph_bearing[2],
   void *user_data);
 
@@ -151,9 +151,9 @@ size_t BLF_width_to_rstrlen(
 void BLF_boundbox_ex(int fontid,
  const char *str,
  size_t str_len,
- struct rctf *box,
+ struct rcti *box,
  struct ResultBLF *r_info) ATTR_NONNULL(2);
-void BLF_boundbox(int fontid, const char *str, size_t str_len, struct rctf 
*box) ATTR_NONNULL();
+void BLF_boundbox(int fontid, const char *str, size_t str_len, struct rcti 
*box) ATTR_NONNULL();
 
 /**
  * The next both function return the width and height
@@ -173,9 +173,9 @@ float BLF_height(int fontid, const char *str, size_t 
str_len) ATTR_WARN_UNUSED_R
  * Return dimensions of the font without any sample text.
  */
 int BLF_height_max(int fontid) ATTR_WARN_UNUSED_RESULT;
-float BLF_width_max(int fontid) ATTR_WARN_UNUSED_RESULT;
-float BLF_descender(int fontid) ATTR_WARN_UNUSED_RESULT;
-float BLF_ascender(int fontid) ATTR_WARN_UNUSED_RESULT;
+int BLF_width_max(int fontid) ATTR_WARN_UNUSED_RESULT;
+int BLF_descender(int fontid) ATTR_WARN_UNUSED_RESULT;
+int BLF_ascender(int fontid) ATTR_WARN_UNUSED_RESULT;
 
 /**
  * The following function return the width and height of the string, but
@@ -195,7 +195,7 @@ float BLF_fixed_width(int fontid) ATTR_WARN_UNUSED_RESULT;
  * have to be enable/disable using BLF_enable/disable.
  */
 void BLF_rotation(int fontid, float angle);
-void BLF_clipping(int fontid, float xmin, float ymin, float xmax, float ymax);
+void BLF_clipping(int fontid, int xmin, int ymin, int xmax, int ymax);
 void BLF_wordwrap(int fontid, int wrap_width);
 
 #if BLF_BLUR_ENABLE
diff --git a/source/blender/blenfont/intern/blf.c 
b/source/blender/blenfont/intern/blf.c
index 2b5a2cdf606..a944ab332bd 100644
--- a/source/blender/blenfont/intern/blf.c
+++ b/source/blender/blenfont/intern/blf.c
@@ -342,9 +342,9 @@ void BLF_position(int fontid, float x, float y, float z)
   }
 }
 
-font->pos[0] = x;
-font->pos[1] = y;
-font->pos[2] = z;
+font->pos[0] = round_fl_to_int(x);
+font->pos[1] = round_fl_to_int(y);
+font->pos[2] = round_fl_to_int(z);
   }
 }
 
@@ -488,7 +488,7 @@ static void blf_draw_gl__start(FontBLF *font)
 GPU_matrix_mul(font->m);
   }
 
-  GPU_matrix_translate_3fv(font->pos);
+  GPU_matrix_translate_3f(font->pos[0], font->pos[1], font->pos[2]);
 
   if (font->flags & BLF_ASPECT) {
 GPU_matrix_scale_3fv(font->aspect);
@@ -589,9 +589,10 @@ size_t BLF_width_to_strlen(
   if (font) {
 const float xa = (font->flags & BLF_ASPECT) ? font->aspect[0] : 1.0f;
 size_t ret;
-ret = blf_font_width_to_strlen(font, str, str_len, width / xa, r_width);
+int width_result;
+ret = blf_font_width_to_strlen(font, str, str_len, width / xa, 
&width_result);
 if (r_width) {
-  *r_width *= xa;
+  *r_width = (float)width_result * xa;
 }
 return ret;
   }
@@ -610,9 +611,10 @@ size_t BLF_width_to_rstrlen(
   if (font) {
 const float xa = (fo

[Bf-blender-cvs] [ae43872ad57] master: BLF: sub-pixel positioning support

2022-04-12 Thread Campbell Barton
Commit: ae43872ad572eb3e6ad1ebfd02921fc2403059bc
Author: Campbell Barton
Date:   Tue Apr 5 20:10:55 2022 +1000
Branches: master
https://developer.blender.org/rBae43872ad572eb3e6ad1ebfd02921fc2403059bc

BLF: sub-pixel positioning support

Support sub-pixel kerning and hinting for future support for improved
character placement. No user visible changes have been made.

- Calculate sub-pixel offsets, using integer maths.
- Use convenience functions to perform the conversions and hide the
  underlying values.
- Use `ft_pix` type to distinguish values that use sub-pixel integer
  values from freetype and values rounded to pixels.

This was originally based on D12999 by @harley with the user visible
changes removed so they can be applied separately.

===

M   source/blender/blenfont/intern/blf_font.c
M   source/blender/blenfont/intern/blf_glyph.c
M   source/blender/blenfont/intern/blf_internal.h
M   source/blender/blenfont/intern/blf_internal_types.h

===

diff --git a/source/blender/blenfont/intern/blf_font.c 
b/source/blender/blenfont/intern/blf_font.c
index 60ff5f6470f..e5d7cb05408 100644
--- a/source/blender/blenfont/intern/blf_font.c
+++ b/source/blender/blenfont/intern/blf_font.c
@@ -57,34 +57,26 @@ static SpinLock blf_glyph_cache_mutex;
 /* May be set to #UI_widgetbase_draw_cache_flush. */
 static void (*blf_draw_cache_flush)(void) = NULL;
 
+static ft_pix blf_font_height_max_ft_pix(struct FontBLF *font);
+static ft_pix blf_font_width_max_ft_pix(struct FontBLF *font);
+
 /*  */
 /** \name FreeType Utilities (Internal)
  * \{ */
 
-/**
- * Convert a FreeType 26.6 value representing an unscaled design size to 
pixels.
- * This is an exact copy of the scaling done inside FT_Get_Kerning when called
- * with #FT_KERNING_DEFAULT, including arbitrary resizing for small fonts.
- */
-static int blf_unscaled_F26Dot6_to_pixels(FontBLF *font, FT_Pos value)
+/* Convert a FreeType 26.6 value representing an unscaled design size to 
factional pixels. */
+static ft_pix blf_unscaled_F26Dot6_to_pixels(FontBLF *font, FT_Pos value)
 {
   /* Scale value by font size using integer-optimized multiplication. */
   FT_Long scaled = FT_MulFix(value, font->face->size->metrics.x_scale);
 
-  /* FreeType states that this '25' has been determined heuristically. */
+  /* Copied from FreeType's FT_Get_Kerning (with FT_KERNING_DEFAULT), scaling 
down */
+  /* kerning distances at small ppem values so that they don't become too big. 
*/
   if (font->face->size->metrics.x_ppem < 25) {
 scaled = FT_MulDiv(scaled, font->face->size->metrics.x_ppem, 25);
   }
 
-  /* Copies of internal FreeType macros needed here. */
-#define FT_PIX_FLOOR(x) ((x) & ~63)
-#define FT_PIX_ROUND(x) FT_PIX_FLOOR((x) + 32)
-
-  /* Round to even 64ths, then divide by 64. */
-  return (int)FT_PIX_ROUND(scaled) >> 6;
-
-#undef FT_PIX_FLOOR
-#undef FT_PIX_ROUND
+  return (ft_pix)scaled;
 }
 
 /** \} */
@@ -293,36 +285,39 @@ BLI_INLINE GlyphBLF *blf_glyph_from_utf8_and_step(
   return blf_glyph_ensure(font, gc, charcode);
 }
 
-BLI_INLINE int blf_kerning(FontBLF *font, const GlyphBLF *g_prev, const 
GlyphBLF *g)
+BLI_INLINE ft_pix blf_kerning(FontBLF *font, const GlyphBLF *g_prev, const 
GlyphBLF *g)
 {
-  if (!FT_HAS_KERNING(font->face) || g_prev == NULL) {
-return 0;
-  }
+  ft_pix adjustment = 0;
 
-  FT_Vector delta = {KERNING_ENTRY_UNSET};
+  /* Small adjust if there is hinting. */
+  adjustment += g->lsb_delta - ((g_prev) ? g_prev->rsb_delta : 0);
 
-  /* Get unscaled kerning value from our cache if ASCII. */
-  if ((g_prev->c < KERNING_CACHE_TABLE_SIZE) && (g->c < 
GLYPH_ASCII_TABLE_SIZE)) {
-delta.x = font->kerning_cache->ascii_table[g->c][g_prev->c];
-  }
+  if (FT_HAS_KERNING(font->face) && g_prev) {
+FT_Vector delta = {KERNING_ENTRY_UNSET};
 
-  /* If not ASCII or not found in cache, ask FreeType for kerning. */
-  if (UNLIKELY(delta.x == KERNING_ENTRY_UNSET)) {
-/* Note that this function sets delta values to zero on any error. */
-FT_Get_Kerning(font->face, g_prev->idx, g->idx, FT_KERNING_UNSCALED, 
&delta);
-  }
+/* Get unscaled kerning value from our cache if ASCII. */
+if ((g_prev->c < KERNING_CACHE_TABLE_SIZE) && (g->c < 
GLYPH_ASCII_TABLE_SIZE)) {
+  delta.x = font->kerning_cache->ascii_table[g->c][g_prev->c];
+}
 
-  /* If ASCII we save this value to our cache for quicker access next time. */
-  if ((g_prev->c < KERNING_CACHE_TABLE_SIZE) && (g->c < 
GLYPH_ASCII_TABLE_SIZE)) {
-font->kerning_cache->ascii_table[g->c][g_prev->c] = (int)delta.x;
-  }
+/* If not ASCII or not found in cache, ask FreeType for kerning. */
+if (UNLIKELY(delta.x == KERNING_ENTRY_UNSET)) {
+  /* Note that this function sets delta values to zero on any error. */
+  FT_Get_Kerning(font->face, g_prev->idx, g->idx, F

[Bf-blender-cvs] [d0a70adf8f2] master: Cleanup: shadowed variable warning

2022-04-12 Thread Campbell Barton
Commit: d0a70adf8f2e8977fb27f8987488bded33e82106
Author: Campbell Barton
Date:   Wed Apr 13 11:55:46 2022 +1000
Branches: master
https://developer.blender.org/rBd0a70adf8f2e8977fb27f8987488bded33e82106

Cleanup: shadowed variable warning

===

M   source/blender/editors/sculpt_paint/sculpt_filter_color.c

===

diff --git a/source/blender/editors/sculpt_paint/sculpt_filter_color.c 
b/source/blender/editors/sculpt_paint/sculpt_filter_color.c
index 70ae1fbdd3d..5d4a2c54832 100644
--- a/source/blender/editors/sculpt_paint/sculpt_filter_color.c
+++ b/source/blender/editors/sculpt_paint/sculpt_filter_color.c
@@ -200,14 +200,14 @@ static void color_filter_task_cb(void *__restrict 
userdata,
 bool copy_alpha = col[3] == smooth_color[3];
 
 if (fade < 0.0f) {
-  float delta[4];
+  float delta_color[4];
 
   /* Unsharp mask. */
-  copy_v4_v4(delta, ss->filter_cache->pre_smoothed_color[vd.index]);
-  sub_v4_v4(delta, smooth_color);
+  copy_v4_v4(delta_color, 
ss->filter_cache->pre_smoothed_color[vd.index]);
+  sub_v4_v4(delta_color, smooth_color);
 
   copy_v4_v4(final_color, col);
-  madd_v4_v4fl(final_color, delta, fade);
+  madd_v4_v4fl(final_color, delta_color, fade);
 }
 else {
   blend_color_interpolate_float(final_color, col, smooth_color, fade);

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


[Bf-blender-cvs] [132576ebb17] master: gpu.types.Buffer: fill buffer interface with just what is requested

2022-04-12 Thread Germano Cavalcante
Commit: 132576ebb172e1bc354fdea56e9977438b1d5030
Author: Germano Cavalcante
Date:   Tue Apr 12 22:34:52 2022 -0300
Branches: master
https://developer.blender.org/rB132576ebb172e1bc354fdea56e9977438b1d5030

gpu.types.Buffer: fill buffer interface with just what is requested

Use the `flags` parameter to avoid unnecessary allocations.

===

M   source/blender/python/gpu/gpu_py_buffer.c

===

diff --git a/source/blender/python/gpu/gpu_py_buffer.c 
b/source/blender/python/gpu/gpu_py_buffer.c
index d3f55517ae7..020535d002a 100644
--- a/source/blender/python/gpu/gpu_py_buffer.c
+++ b/source/blender/python/gpu/gpu_py_buffer.c
@@ -604,23 +604,31 @@ static void pygpu_buffer_strides_calc(const 
eGPUDataFormat format,
 }
 
 /* Here is the buffer interface function */
-static int pygpu_buffer__bf_getbuffer(BPyGPUBuffer *self, Py_buffer *view, int 
UNUSED(flags))
+static int pygpu_buffer__bf_getbuffer(BPyGPUBuffer *self, Py_buffer *view, int 
flags)
 {
   if (view == NULL) {
 PyErr_SetString(PyExc_ValueError, "NULL view in getbuffer");
 return -1;
   }
 
+  memset(view, 0, sizeof(*view));
+
   view->obj = (PyObject *)self;
   view->buf = (void *)self->buf.as_void;
   view->len = bpygpu_Buffer_size(self);
   view->readonly = 0;
   view->itemsize = GPU_texture_dataformat_size(self->format);
-  view->format = (char *)pygpu_buffer_formatstr(self->format);
-  view->ndim = self->shape_len;
-  view->shape = self->shape;
-  view->strides = MEM_mallocN(view->ndim * sizeof(*view->strides), 
"BPyGPUBuffer strides");
-  pygpu_buffer_strides_calc(self->format, view->ndim, view->shape, 
view->strides);
+  if (flags & PyBUF_FORMAT) {
+view->format = (char *)pygpu_buffer_formatstr(self->format);
+  }
+  if (flags & PyBUF_ND) {
+view->ndim = self->shape_len;
+view->shape = self->shape;
+  }
+  if (flags & PyBUF_STRIDES) {
+view->strides = MEM_mallocN(view->ndim * sizeof(*view->strides), 
"BPyGPUBuffer strides");
+pygpu_buffer_strides_calc(self->format, view->ndim, view->shape, 
view->strides);
+  }
   view->suboffsets = NULL;
   view->internal = NULL;

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


[Bf-blender-cvs] [af176760054] master: gpy.types.GPUUniformBuf: support any object exposing buffer interface

2022-04-12 Thread Germano Cavalcante
Commit: af176760054f2f3c17c524414d415dca9abb378e
Author: Germano Cavalcante
Date:   Tue Apr 12 22:44:57 2022 -0300
Branches: master
https://developer.blender.org/rBaf176760054f2f3c17c524414d415dca9abb378e

gpy.types.GPUUniformBuf: support any object exposing buffer interface

Since uniform buffers are generally structs and not sequences,
`BPyGPU_BufferType` objects are not suitable for filling the buffer.

===

M   source/blender/python/gpu/gpu_py_uniformbuffer.c

===

diff --git a/source/blender/python/gpu/gpu_py_uniformbuffer.c 
b/source/blender/python/gpu/gpu_py_uniformbuffer.c
index be3571d4f7c..f8f88d61cf6 100644
--- a/source/blender/python/gpu/gpu_py_uniformbuffer.c
+++ b/source/blender/python/gpu/gpu_py_uniformbuffer.c
@@ -64,17 +64,17 @@ static PyObject *pygpu_uniformbuffer__tp_new(PyTypeObject 
*UNUSED(self),
   BPYGPU_IS_INIT_OR_ERROR_OBJ;
 
   GPUUniformBuf *ubo = NULL;
-  BPyGPUBuffer *pybuffer_obj;
+  PyObject *pybuffer_obj;
   char err_out[256] = "unknown error. See console";
 
   static const char *_keywords[] = {"data", NULL};
   static _PyArg_Parser _parser = {
-  "O!" /* `data` */
+  "O" /* `data` */
   ":GPUUniformBuf.__new__",
   _keywords,
   0,
   };
-  if (!_PyArg_ParseTupleAndKeywordsFast(args, kwds, &_parser, 
&BPyGPU_BufferType, &pybuffer_obj)) {
+  if (!_PyArg_ParseTupleAndKeywordsFast(args, kwds, &_parser, &pybuffer_obj)) {
 return NULL;
   }
 
@@ -82,13 +82,19 @@ static PyObject *pygpu_uniformbuffer__tp_new(PyTypeObject 
*UNUSED(self),
 STRNCPY(err_out, "No active GPU context found");
   }
   else {
-size_t size = bpygpu_Buffer_size(pybuffer_obj);
-if ((size % 16) != 0) {
+Py_buffer pybuffer;
+if (PyObject_GetBuffer(pybuffer_obj, &pybuffer, PyBUF_SIMPLE) == -1) {
+  /* PyObject_GetBuffer raise a PyExc_BufferError */
+  return NULL;
+}
+
+if ((pybuffer.len % 16) != 0) {
   STRNCPY(err_out, "UBO is not padded to size of vec4");
 }
 else {
-  ubo = GPU_uniformbuf_create_ex(size, pybuffer_obj->buf.as_void, 
"python_uniformbuffer");
+  ubo = GPU_uniformbuf_create_ex(pybuffer.len, pybuffer.buf, 
"python_uniformbuffer");
 }
+PyBuffer_Release(&pybuffer);
   }
 
   if (ubo == NULL) {
@@ -107,11 +113,14 @@ static PyObject 
*pygpu_uniformbuffer_update(BPyGPUUniformBuf *self, PyObject *ob
 {
   BPYGPU_UNIFORMBUF_CHECK_OBJ(self);
 
-  if (!BPyGPU_Buffer_Check(obj)) {
+  Py_buffer pybuffer;
+  if (PyObject_GetBuffer(obj, &pybuffer, PyBUF_SIMPLE) == -1) {
+/* PyObject_GetBuffer raise a PyExc_BufferError */
 return NULL;
   }
 
-  GPU_uniformbuf_update(self->ubo, ((BPyGPUBuffer *)obj)->buf.as_void);
+  GPU_uniformbuf_update(self->ubo, pybuffer.buf);
+  PyBuffer_Release(&pybuffer);
   Py_RETURN_NONE;
 }
 
@@ -156,8 +165,8 @@ PyDoc_STRVAR(pygpu_uniformbuffer__tp_doc,
  "\n"
  "   This object gives access to off uniform buffers.\n"
  "\n"
- "   :arg data: Buffer object.\n"
- "   :type data: :class:`gpu.types.Buffer`\n");
+ "   :arg data: Data to fill the buffer.\n"
+ "   :type data: object exposing buffer interface\n");
 PyTypeObject BPyGPUUniformBuf_Type = {
 PyVarObject_HEAD_INIT(NULL, 0).tp_name = "GPUUniformBuf",
 .tp_basicsize = sizeof(BPyGPUUniformBuf),

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


[Bf-blender-cvs] [17a19069db4] master: Fix cases where 'Py_buffer' might not be released

2022-04-12 Thread Germano Cavalcante
Commit: 17a19069db407b80bf6fbaf97e07bc239cf75e84
Author: Germano Cavalcante
Date:   Tue Apr 12 22:16:09 2022 -0300
Branches: master
https://developer.blender.org/rB17a19069db407b80bf6fbaf97e07bc239cf75e84

Fix cases where 'Py_buffer' might not be released

===

M   source/blender/python/gpu/gpu_py_element.c

===

diff --git a/source/blender/python/gpu/gpu_py_element.c 
b/source/blender/python/gpu/gpu_py_element.c
index f2836576659..04975fcef96 100644
--- a/source/blender/python/gpu/gpu_py_element.c
+++ b/source/blender/python/gpu/gpu_py_element.c
@@ -70,12 +70,14 @@ static PyObject *pygpu_IndexBuf__tp_new(PyTypeObject 
*UNUSED(type), PyObject *ar
 
 if (pybuffer.ndim != 1 && pybuffer.shape[1] != verts_per_prim) {
   PyErr_Format(PyExc_ValueError, "Each primitive must exactly %d indices", 
verts_per_prim);
+  PyBuffer_Release(&pybuffer);
   return NULL;
 }
 
 if (pybuffer.itemsize != 4 ||
 
PyC_StructFmt_type_is_float_any(PyC_StructFmt_type_from_str(pybuffer.format))) {
   PyErr_Format(PyExc_ValueError, "Each index must be an 4-bytes integer 
value");
+  PyBuffer_Release(&pybuffer);
   return NULL;
 }

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


[Bf-blender-cvs] [8fad71799f7] master: Fix size of MAT3 and MAT4 in GPUShaderCreateInfo.push_constant

2022-04-12 Thread Germano Cavalcante
Commit: 8fad71799f7188d16c20498942e337b674a84594
Author: Germano Cavalcante
Date:   Tue Apr 12 22:31:27 2022 -0300
Branches: master
https://developer.blender.org/rB8fad71799f7188d16c20498942e337b674a84594

Fix size of MAT3 and MAT4 in GPUShaderCreateInfo.push_constant

It was being wrongly multiplied by 2.

===

M   source/blender/python/gpu/gpu_py_shader_create_info.cc

===

diff --git a/source/blender/python/gpu/gpu_py_shader_create_info.cc 
b/source/blender/python/gpu/gpu_py_shader_create_info.cc
index caf71ad5980..c67192d632d 100644
--- a/source/blender/python/gpu/gpu_py_shader_create_info.cc
+++ b/source/blender/python/gpu/gpu_py_shader_create_info.cc
@@ -666,9 +666,9 @@ static int constant_type_size(Type type)
   return 16;
   break;
 case Type::MAT3:
-  return 72 + 3 * 4;
+  return 36 + 3 * 4;
 case Type::MAT4:
-  return 128;
+  return 64;
   break;
   }
   BLI_assert(false);

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


[Bf-blender-cvs] [cd4a9c488f6] master: Fix possible pointer being freed without being allocated in pygpu module

2022-04-12 Thread Germano Cavalcante
Commit: cd4a9c488f66abccf3e35a33adbf2630a389ae67
Author: Germano Cavalcante
Date:   Tue Apr 12 20:52:19 2022 -0300
Branches: master
https://developer.blender.org/rBcd4a9c488f66abccf3e35a33adbf2630a389ae67

Fix possible pointer being freed without being allocated in pygpu module

The `clear` method can be called before dealloc, which can
mislead buffer ownership.

===

M   source/blender/python/gpu/gpu_py_buffer.c

===

diff --git a/source/blender/python/gpu/gpu_py_buffer.c 
b/source/blender/python/gpu/gpu_py_buffer.c
index 82c9f8f1f04..d3f55517ae7 100644
--- a/source/blender/python/gpu/gpu_py_buffer.c
+++ b/source/blender/python/gpu/gpu_py_buffer.c
@@ -277,7 +277,10 @@ static int pygpu_buffer__tp_traverse(BPyGPUBuffer *self, 
visitproc visit, void *
 
 static int pygpu_buffer__tp_clear(BPyGPUBuffer *self)
 {
-  Py_CLEAR(self->parent);
+  if (self->parent) {
+Py_CLEAR(self->parent);
+self->buf.as_void = NULL;
+  }
   return 0;
 }
 
@@ -287,7 +290,7 @@ static void pygpu_buffer__tp_dealloc(BPyGPUBuffer *self)
 PyObject_GC_UnTrack(self);
 Py_CLEAR(self->parent);
   }
-  else {
+  else if (self->buf.as_void) {
 MEM_freeN(self->buf.as_void);
   }

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


[Bf-blender-cvs] [d742007c8e5] universal-scene-description: USD export: convert active UV map to st.

2022-04-12 Thread Michael Kowalski
Commit: d742007c8e5c25cba3bfe835e3a44289177a5163
Author: Michael Kowalski
Date:   Tue Apr 12 18:17:13 2022 -0400
Branches: universal-scene-description
https://developer.blender.org/rBd742007c8e5c25cba3bfe835e3a44289177a5163

USD export: convert active UV map to st.

Updated the logic of the convert_uv_to_st option to rename the
active UV set to 'st', to allow specifying the default UV set
when there are multiple UVs.  Previously, this option assumed
a single UV set.

===

M   source/blender/editors/io/io_usd.c
M   source/blender/io/usd/intern/usd_writer_abstract.cc
M   source/blender/io/usd/intern/usd_writer_mesh.cc
M   source/blender/io/usd/intern/usd_writer_mesh.h

===

diff --git a/source/blender/editors/io/io_usd.c 
b/source/blender/editors/io/io_usd.c
index a98b4f23f83..fa76a0dc529 100644
--- a/source/blender/editors/io/io_usd.c
+++ b/source/blender/editors/io/io_usd.c
@@ -698,8 +698,7 @@ void WM_OT_usd_export(struct wmOperatorType *ot)
   "convert_uv_to_st",
   false,
   "Convert uv to st",
-  "When checked, the USD exporter will convert all uv map names to 
interchangeable 'st'"
-  "(Assumes one uv layout per mesh)");
+  "Export the active uv map as USD primvar named 'st'");
 
   RNA_def_boolean(ot->srna,
   "convert_orientation",
diff --git a/source/blender/io/usd/intern/usd_writer_abstract.cc 
b/source/blender/io/usd/intern/usd_writer_abstract.cc
index 30dd640f3a5..b12c0106506 100644
--- a/source/blender/io/usd/intern/usd_writer_abstract.cc
+++ b/source/blender/io/usd/intern/usd_writer_abstract.cc
@@ -236,6 +236,9 @@ pxr::UsdShadeMaterial 
USDAbstractWriter::ensure_usd_material(const HierarchyCont
   }
   if (material->use_nodes && 
this->usd_export_context_.export_params.generate_preview_surface) {
 std::string active_uv = get_mesh_active_uvlayer_name(context.object);
+if (usd_export_context_.export_params.convert_uv_to_st && 
!active_uv.empty()) {
+  active_uv = "st";
+}
 create_usd_preview_surface_material(
 this->usd_export_context_, material, usd_material, active_uv);
   }
diff --git a/source/blender/io/usd/intern/usd_writer_mesh.cc 
b/source/blender/io/usd/intern/usd_writer_mesh.cc
index b94251dd174..ba3b2897fec 100644
--- a/source/blender/io/usd/intern/usd_writer_mesh.cc
+++ b/source/blender/io/usd/intern/usd_writer_mesh.cc
@@ -193,10 +193,18 @@ struct USDMeshData {
 void USDGenericMeshWriter::write_custom_data(const Mesh *mesh, 
pxr::UsdGeomMesh usd_mesh)
 {
   const CustomData *ldata = &mesh->ldata;
+
+  /* Index of the UV layer to be renamed "st", set to the active UV layer 
index if
+   * the convert_uv_to_st option is enabled and set to -1 otherwise. */
+  const int st_layer_idx = usd_export_context_.export_params.convert_uv_to_st ?
+   CustomData_get_active_layer_index(ldata, 
CD_MLOOPUV) :
+   -1;
+
   for (int layer_idx = 0; layer_idx < ldata->totlayer; layer_idx++) {
 const CustomDataLayer *layer = &ldata->layers[layer_idx];
 if (layer->type == CD_MLOOPUV && 
usd_export_context_.export_params.export_uvmaps) {
-  write_uv_maps(mesh, usd_mesh, layer);
+  const char *name_override = st_layer_idx == layer_idx ? "st" : nullptr;
+  write_uv_maps(mesh, usd_mesh, layer, name_override);
 }
 else if (layer->type == CD_MLOOPCOL &&
  usd_export_context_.export_params.export_vertex_colors) {
@@ -207,7 +215,8 @@ void USDGenericMeshWriter::write_custom_data(const Mesh 
*mesh, pxr::UsdGeomMesh
 
 void USDGenericMeshWriter::write_uv_maps(const Mesh *mesh,
  pxr::UsdGeomMesh usd_mesh,
- const CustomDataLayer *layer)
+ const CustomDataLayer *layer,
+ const char *name_override)
 {
   pxr::UsdTimeCode timecode = get_export_time_code();
 
@@ -215,7 +224,8 @@ void USDGenericMeshWriter::write_uv_maps(const Mesh *mesh,
* The primvar name is the same as the UV Map name. This is to allow the 
standard name "st"
* for texture coordinates by naming the UV Map as such, without having to 
guess which UV Map
* is the "standard" one. */
-  pxr::TfToken primvar_name(pxr::TfMakeValidIdentifier(layer->name));
+  pxr::TfToken primvar_name(name_override ? name_override :
+
pxr::TfMakeValidIdentifier(layer->name));
 
   if (usd_export_context_.export_params.author_blender_name) {
 // Store original layer name in blender
@@ -228,9 +238,6 @@ void USDGenericMeshWriter::write_uv_maps(const Mesh *mesh,
 .Set(std::string(layer->name), pxr::UsdTimeCode::Default());
   }
 
-  if (usd_export_context_.export_params.convert_uv_to_st)
-primvar_name = pxr::TfToken("st");
-
   pxr::UsdGeomPrimvar uv_coor

[Bf-blender-cvs] [2b3f5cb965a] universal-scene-description: USD export: handle USD Preview Surface emission.

2022-04-12 Thread Michael Kowalski
Commit: 2b3f5cb965adfeae446cf8fe77530bef3dd2fc5d
Author: Michael Kowalski
Date:   Mon Apr 11 21:12:10 2022 -0400
Branches: universal-scene-description
https://developer.blender.org/rB2b3f5cb965adfeae446cf8fe77530bef3dd2fc5d

USD export: handle USD Preview Surface emission.

Now setting the USD Preview Surface emissiveColor input
on export.

===

M   source/blender/io/usd/intern/usd_writer_material.cc

===

diff --git a/source/blender/io/usd/intern/usd_writer_material.cc 
b/source/blender/io/usd/intern/usd_writer_material.cc
index 4f03acace0c..64639bd5ba6 100644
--- a/source/blender/io/usd/intern/usd_writer_material.cc
+++ b/source/blender/io/usd/intern/usd_writer_material.cc
@@ -75,6 +75,7 @@ static const pxr::TfToken clamp("clamp", 
pxr::TfToken::Immortal);
 static const pxr::TfToken repeat("repeat", pxr::TfToken::Immortal);
 static const pxr::TfToken wrapS("wrapS", pxr::TfToken::Immortal);
 static const pxr::TfToken wrapT("wrapT", pxr::TfToken::Immortal);
+static const pxr::TfToken emissiveColor("emissiveColor", 
pxr::TfToken::Immortal);
 }  // namespace usdtokens
 
 /* Cycles specific tokens (Blender Importer and HdCycles) */
@@ -271,6 +272,7 @@ static InputSpecMap &preview_surface_input_map()
   {"Clearcoat", {usdtokens::clearcoat, pxr::SdfValueTypeNames->Float, 
usdtokens::r, true}},
   {"Clearcoat Roughness",
{usdtokens::clearcoatRoughness, pxr::SdfValueTypeNames->Float, 
usdtokens::r, true}},
+  {"Emission", {usdtokens::emissiveColor, pxr::SdfValueTypeNames->Color3f, 
usdtokens::rgb, true}},
   };
 
   return input_map;

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


[Bf-blender-cvs] [9bc678969aa] master: pyGPU: Port 'StageInterfaceInfo' and 'ShaderCreateInfo' types

2022-04-12 Thread Germano Cavalcante
Commit: 9bc678969aaef5e2343d9362648e9a633d1b6e5e
Author: Germano Cavalcante
Date:   Tue Apr 12 18:28:27 2022 -0300
Branches: master
https://developer.blender.org/rB9bc678969aaef5e2343d9362648e9a633d1b6e5e

pyGPU: Port 'StageInterfaceInfo' and 'ShaderCreateInfo' types

In order to allow GLSL Cross Compilation across platforms, expose in
Python the `GPUShaderCreateInfo` strategy as detailed in
https://wiki.blender.org/wiki/EEVEE_%26_Viewport/GPU_Module/GLSL_Cross_Compilation

The new features can be listed as follows:
```
>>> gpu.types.GPUShaderCreateInfo.
  define(
  fragment_out(
  fragment_source(
  push_constant(
  sampler(
  typedef_source(
  uniform_buf(
  vertex_in(
  vertex_out(
  vertex_source(

>>> gpu.types.GPUStageInterfaceInfo.
flat(
name
no_perspective(
smooth(

>>> gpu.shader.create_from_info(
```

Reviewed By: fclem, campbellbarton

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

===

M   source/blender/gpu/GPU_shader.h
M   source/blender/gpu/intern/gpu_shader.cc
M   source/blender/gpu/intern/gpu_shader_create_info.cc
M   source/blender/gpu/intern/gpu_shader_create_info.hh
M   source/blender/python/generic/py_capi_utils.h
M   source/blender/python/gpu/CMakeLists.txt
M   source/blender/python/gpu/gpu_py_shader.c
M   source/blender/python/gpu/gpu_py_shader.h
A   source/blender/python/gpu/gpu_py_shader_create_info.cc
M   source/blender/python/gpu/gpu_py_types.c

===

diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h
index c0c25022836..eed7685bf01 100644
--- a/source/blender/gpu/GPU_shader.h
+++ b/source/blender/gpu/GPU_shader.h
@@ -56,6 +56,7 @@ 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;
diff --git a/source/blender/gpu/intern/gpu_shader.cc 
b/source/blender/gpu/intern/gpu_shader.cc
index b434cfbbb0e..227525bd5d3 100644
--- a/source/blender/gpu/intern/gpu_shader.cc
+++ b/source/blender/gpu/intern/gpu_shader.cc
@@ -249,6 +249,19 @@ const GPUShaderCreateInfo 
*GPU_shader_create_info_get(const char *info_name)
   return gpu_shader_create_info_get(info_name);
 }
 
+bool GPU_shader_create_info_check_error(const GPUShaderCreateInfo *_info, char 
r_error[128])
+{
+  using namespace blender::gpu::shader;
+  const ShaderCreateInfo &info = *reinterpret_cast(_info);
+  std::string error = info.check_error();
+  if (error.length() == 0) {
+return true;
+  }
+
+  BLI_strncpy(r_error, error.c_str(), 128);
+  return false;
+}
+
 GPUShader *GPU_shader_create_from_info_name(const char *info_name)
 {
   using namespace blender::gpu::shader;
@@ -270,28 +283,10 @@ GPUShader *GPU_shader_create_from_info(const 
GPUShaderCreateInfo *_info)
 
   GPU_debug_group_begin(GPU_DEBUG_SHADER_COMPILATION_GROUP);
 
-  /* At least a vertex shader and a fragment shader are required, or only a 
compute shader. */
-  if (info.compute_source_.is_empty()) {
-if (info.vertex_source_.is_empty()) {
-  printf("Missing vertex shader in %s.\n", info.name_.c_str());
-}
-if (info.fragment_source_.is_empty()) {
-  printf("Missing fragment shader in %s.\n", info.name_.c_str());
-}
-BLI_assert(!info.vertex_source_.is_empty() && 
!info.fragment_source_.is_empty());
-  }
-  else {
-if (!info.vertex_source_.is_empty()) {
-  printf("Compute shader has vertex_source_ shader attached in %s.\n", 
info.name_.c_str());
-}
-if (!info.geometry_source_.is_empty()) {
-  printf("Compute shader has geometry_source_ shader attached in %s.\n", 
info.name_.c_str());
-}
-if (!info.fragment_source_.is_empty()) {
-  printf("Compute shader has fragment_source_ shader attached in %s.\n", 
info.name_.c_str());
-}
-BLI_assert(info.vertex_source_.is_empty() && 
info.geometry_source_.is_empty() &&
-   info.fragment_source_.is_empty());
+  std::string error = info.check_error();
+  if (error.length()) {
+printf(error.c_str());
+BLI_assert(true);
   }
 
   Shader *shader = GPUBackend::get()->shader_alloc(info.name_.c_str());
diff --git a/source/blender/gpu/inter

[Bf-blender-cvs] [359b6baf325] master: Fix: Assert when curve has no evaluated points

2022-04-12 Thread Hans Goudey
Commit: 359b6baf325a701328732598ecc04b68a9a335d9
Author: Hans Goudey
Date:   Tue Apr 12 14:56:14 2022 -0500
Branches: master
https://developer.blender.org/rB359b6baf325a701328732598ecc04b68a9a335d9

Fix: Assert when curve has no evaluated points

It is valid for NURBS curves to have no evaluated points in some cases.

===

M   source/blender/blenkernel/BKE_curves.hh

===

diff --git a/source/blender/blenkernel/BKE_curves.hh 
b/source/blender/blenkernel/BKE_curves.hh
index 9fd023edcf2..9dafe2095e7 100644
--- a/source/blender/blenkernel/BKE_curves.hh
+++ b/source/blender/blenkernel/BKE_curves.hh
@@ -377,6 +377,7 @@ namespace curves {
  */
 inline int curve_segment_size(const int points_num, const bool cyclic)
 {
+  BLI_assert(points_num > 0);
   return cyclic ? points_num : points_num - 1;
 }
 
@@ -681,8 +682,7 @@ inline IndexRange 
CurvesGeometry::lengths_range_for_curve(const int curve_index,
   BLI_assert(cyclic == this->cyclic()[curve_index]);
   const IndexRange points = this->evaluated_points_for_curve(curve_index);
   const int start = points.start() + curve_index;
-  const int size = curves::curve_segment_size(points.size(), cyclic);
-  return {start, size};
+  return {start, points.is_empty() ? 0 : 
curves::curve_segment_size(points.size(), cyclic)};
 }
 
 inline Span CurvesGeometry::evaluated_lengths_for_curve(const int 
curve_index,

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


[Bf-blender-cvs] [b1d915d0271] master: Cleanup: Remove reference to CD_NORMAL in poly custom data

2022-04-12 Thread Hans Goudey
Commit: b1d915d02719427d9cf021c8fca5e9ab5f341576
Author: Hans Goudey
Date:   Tue Apr 12 13:55:33 2022 -0500
Branches: master
https://developer.blender.org/rBb1d915d02719427d9cf021c8fca5e9ab5f341576

Cleanup: Remove reference to CD_NORMAL in poly custom data

Vertex and face normals are not stored in custom data anymore,
in both Mesh and DerivedMesh.

===

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

===

diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c 
b/source/blender/blenkernel/intern/subsurf_ccg.c
index 91deeda8381..5e7a0fc116b 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -1963,8 +1963,6 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
ccgSubSurf_getNumFinalFaces(ss) * 4,
ccgSubSurf_getNumFinalFaces(ss));
 
-  CustomData_free_layer_active(&ccgdm->dm.polyData, CD_NORMAL, 
ccgdm->dm.numPolyData);
-
   ccgdm->reverseFaceMap = MEM_callocN(sizeof(int) * 
ccgSubSurf_getNumFinalFaces(ss),
   "reverseFaceMap");

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


[Bf-blender-cvs] [88ab34488b4] master: Cleanup: Correct wording in comments

2022-04-12 Thread Hans Goudey
Commit: 88ab34488b45a59a7d6c7425181466319dc5eada
Author: Hans Goudey
Date:   Tue Apr 12 13:53:53 2022 -0500
Branches: master
https://developer.blender.org/rB88ab34488b45a59a7d6c7425181466319dc5eada

Cleanup: Correct wording in comments

===

M   source/blender/blenkernel/BKE_mesh_tangent.h
M   source/blender/blenkernel/intern/mesh_remap.c

===

diff --git a/source/blender/blenkernel/BKE_mesh_tangent.h 
b/source/blender/blenkernel/BKE_mesh_tangent.h
index 5d9f850dd24..27061a5766e 100644
--- a/source/blender/blenkernel/BKE_mesh_tangent.h
+++ b/source/blender/blenkernel/BKE_mesh_tangent.h
@@ -28,7 +28,7 @@ void BKE_mesh_calc_loop_tangent_single_ex(const struct MVert 
*mverts,
   int numPolys,
   struct ReportList *reports);
 /**
- * Wrapper around BKE_mesh_calc_loop_tangent_single_ex, which takes care of 
most boiling code.
+ * Wrapper around BKE_mesh_calc_loop_tangent_single_ex, which takes care of 
most boilerplate code.
  * \note
  * - There must be a valid loop's CD_NORMALS available.
  * - The mesh should be made of only tris and quads!
diff --git a/source/blender/blenkernel/intern/mesh_remap.c 
b/source/blender/blenkernel/intern/mesh_remap.c
index 9a4c01ec7aa..2e634a14872 100644
--- a/source/blender/blenkernel/intern/mesh_remap.c
+++ b/source/blender/blenkernel/intern/mesh_remap.c
@@ -1350,7 +1350,7 @@ void BKE_mesh_remap_calc_loops_from_mesh(const int mode,
   if (need_lnors_dst) {
 short(*custom_nors_dst)[2] = CustomData_get_layer(ldata_dst, 
CD_CUSTOMLOOPNORMAL);
 
-/* Cache poly nors into a temp CDLayer. */
+/* Cache loop normals into a temporary custom data layer. */
 loop_nors_dst = CustomData_get_layer(ldata_dst, CD_NORMAL);
 const bool do_loop_nors_dst = (loop_nors_dst == NULL);
 if (!loop_nors_dst) {

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


[Bf-blender-cvs] [869a46df298] master: Cycles fp consistency for Apple Silicon CPUs

2022-04-12 Thread Michael Jones
Commit: 869a46df2980818644db4823fb1d29e9d525b645
Author: Michael Jones
Date:   Tue Apr 12 19:36:55 2022 +0100
Branches: master
https://developer.blender.org/rB869a46df2980818644db4823fb1d29e9d525b645

Cycles fp consistency for Apple Silicon CPUs

Propagate the fp settings from the main thread to all the worker threads (the 
fp settings includes the FZ settings among other things) - this guarantees 
consistency in execution of floating point math regardless if its executed in 
tbb thread arena or on main thread

Add FZ mode to arm64/aarch64 in parallel to the way its been done on intel 
processors, currently compiling for arm target does not set this mode at all, 
hence potentially runs slower and with possible results mismatch with intel x86.

Reviewed By: brecht

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

===

M   intern/cycles/integrator/path_trace.cpp
M   intern/cycles/util/simd.h

===

diff --git a/intern/cycles/integrator/path_trace.cpp 
b/intern/cycles/integrator/path_trace.cpp
index ab134179602..f1e70b7f28f 100644
--- a/intern/cycles/integrator/path_trace.cpp
+++ b/intern/cycles/integrator/path_trace.cpp
@@ -355,6 +355,9 @@ void PathTrace::path_trace(RenderWork &render_work)
 
   const int num_works = path_trace_works_.size();
 
+  tbb::task_group_context *tbb_ctx = tbb::task::self().group();
+  tbb_ctx->capture_fp_settings();
+
   tbb::parallel_for(0, num_works, [&](int i) {
 const double work_start_time = time_dt();
 const int num_samples = render_work.path_trace.num_samples;
diff --git a/intern/cycles/util/simd.h b/intern/cycles/util/simd.h
index 15dda4e76a8..6772025d1de 100644
--- a/intern/cycles/util/simd.h
+++ b/intern/cycles/util/simd.h
@@ -32,6 +32,12 @@
 #  define SIMD_SET_FLUSH_TO_ZERO \
 _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON); \
 _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON);
+#elif defined(__aarch64__) || defined(_M_ARM64)
+#define _MM_FLUSH_ZERO_ON 24
+#define __get_fpcr(__fpcr) __asm__ __volatile__("mrs %0,fpcr" : "=r" (__fpcr))
+#define __set_fpcr(__fpcr) __asm__ __volatile__("msr fpcr,%0" : :"ri" (__fpcr))
+#  define SIMD_SET_FLUSH_TO_ZERO  set_fz(_MM_FLUSH_ZERO_ON);
+#  define SIMD_GET_FLUSH_TO_ZERO  get_fz(_MM_FLUSH_ZERO_ON)
 #else
 #  define SIMD_SET_FLUSH_TO_ZERO
 #endif
@@ -104,6 +110,21 @@ static struct PosInfTy {
 static struct StepTy {
 } step ccl_attr_maybe_unused;
 
+#endif
+#if defined(__aarch64__) || defined(_M_ARM64)
+__forceinline int set_fz(uint32_t flag) {
+uint64_t old_fpcr, new_fpcr;
+__get_fpcr(old_fpcr);
+new_fpcr = old_fpcr | (1ULL << flag);
+__set_fpcr(new_fpcr);
+__get_fpcr(old_fpcr);
+return old_fpcr == new_fpcr;
+}
+__forceinline int get_fz(uint32_t flag) {
+uint64_t cur_fpcr;
+__get_fpcr(cur_fpcr);
+return (cur_fpcr & (1ULL<< flag)) > 0 ? 1 : 0 ;
+}
 #endif
 
 /* Utilities used by Neon */

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


[Bf-blender-cvs] [ceb80600d66] cycles_oneapi: Cycles: Compact float3 for oneAPI backend

2022-04-12 Thread Stefan Werner
Commit: ceb80600d661bb1372d170d81fbb66af0237fa0b
Author: Stefan Werner
Date:   Thu Apr 7 16:09:15 2022 +0200
Branches: cycles_oneapi
https://developer.blender.org/rBceb80600d661bb1372d170d81fbb66af0237fa0b

Cycles: Compact float3 for oneAPI backend

The oneAPI backend was using 128byts for float3, now it's 96 bytes.
Saving memory and maybe giving a bit more speed.

===

M   intern/cycles/kernel/device/oneapi/compat.h
M   intern/cycles/util/types_float3.h
M   intern/cycles/util/types_float3_impl.h
M   intern/cycles/util/types_int4_impl.h

===

diff --git a/intern/cycles/kernel/device/oneapi/compat.h 
b/intern/cycles/kernel/device/oneapi/compat.h
index eb924f48067..0c0ec827a71 100644
--- a/intern/cycles/kernel/device/oneapi/compat.h
+++ b/intern/cycles/kernel/device/oneapi/compat.h
@@ -156,6 +156,19 @@ void oneapi_kernel_##name(KernelGlobalsGPU *ccl_restrict 
kg, \
 typedef unsigned char uchar;
 using sycl::half;
 
+typedef struct float3 {
+  float x, y, z;
+} float3;
+
+ccl_always_inline float3 make_float3(float x, float y, float z)
+{
+  return {x, y, z};
+}
+ccl_always_inline float3 make_float3(float x)
+{
+  return {x, x, x};
+}
+
 /* math functions */
 #define fabsf(x) sycl::fabs((x))
 #define copysignf(x, y) sycl::copysign((x), (y))
diff --git a/intern/cycles/util/types_float3.h 
b/intern/cycles/util/types_float3.h
index 7e28a62438e..4f51583b20c 100644
--- a/intern/cycles/util/types_float3.h
+++ b/intern/cycles/util/types_float3.h
@@ -10,7 +10,7 @@
 
 CCL_NAMESPACE_BEGIN
 
-#if !defined(__KERNEL_GPU__) || defined(__KERNEL_ONEAPI__)
+#if !defined(__KERNEL_GPU__)
 struct ccl_try_align(16) float3
 {
 #  ifdef __KERNEL_SSE__
diff --git a/intern/cycles/util/types_float3_impl.h 
b/intern/cycles/util/types_float3_impl.h
index c2ef6ab1f07..7fbceafb493 100644
--- a/intern/cycles/util/types_float3_impl.h
+++ b/intern/cycles/util/types_float3_impl.h
@@ -14,7 +14,7 @@
 
 CCL_NAMESPACE_BEGIN
 
-#if !defined(__KERNEL_GPU__) || defined(__KERNEL_ONEAPI__)
+#if !defined(__KERNEL_GPU__)
 #  ifdef __KERNEL_SSE__
 __forceinline float3::float3()
 {
diff --git a/intern/cycles/util/types_int4_impl.h 
b/intern/cycles/util/types_int4_impl.h
index 088c51e62bf..11e1ede6705 100644
--- a/intern/cycles/util/types_int4_impl.h
+++ b/intern/cycles/util/types_int4_impl.h
@@ -83,6 +83,8 @@ ccl_device_inline int4 make_int4(const float3 &f)
 {
 #  ifdef __KERNEL_SSE__
   int4 a(_mm_cvtps_epi32(f.m128));
+#  elif defined(__KERNEL_ONEAPI__)
+  int4 a = {(int)f.x, (int)f.y, (int)f.z, 0};
 #  else
   int4 a = {(int)f.x, (int)f.y, (int)f.z, (int)f.w};
 #  endif

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


[Bf-blender-cvs] [2d472b70e5a] master: Revert "Cycles: enable HIP for Vega and Vega II (Radeon 7) GPUs on Windows"

2022-04-12 Thread Brecht Van Lommel
Commit: 2d472b70e5ae22ece199003f51742a72f485fd87
Author: Brecht Van Lommel
Date:   Tue Apr 12 19:17:47 2022 +0200
Branches: master
https://developer.blender.org/rB2d472b70e5ae22ece199003f51742a72f485fd87

Revert "Cycles: enable HIP for Vega and Vega II (Radeon 7) GPUs on Windows"

This is not currently working, reverting until the driver/compiler has a fix.

This reverts commit c46e58817cd72d1481967d32e3c6f47f42933d39.

===

M   CMakeLists.txt
M   intern/cycles/blender/addon/properties.py
M   intern/cycles/device/hip/util.h

===

diff --git a/CMakeLists.txt b/CMakeLists.txt
index ca457ab6b37..cc39429742e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -446,7 +446,7 @@ if(NOT APPLE)
   endif()
 
   option(WITH_CYCLES_HIP_BINARIES  "Build Cycles AMD HIP binaries" OFF)
-  set(CYCLES_HIP_BINARIES_ARCH gfx900 gfx906 gfx1010 gfx1011 gfx1012 gfx1030 
gfx1031 gfx1032 gfx1034 CACHE STRING "AMD HIP architectures to build binaries 
for")
+  set(CYCLES_HIP_BINARIES_ARCH gfx1010 gfx1011 gfx1012 gfx1030 gfx1031 gfx1032 
gfx1034 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 ee051766c50..ed054b041d8 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -1507,7 +1507,7 @@ class CyclesPreferences(bpy.types.AddonPreferences):
 col.label(text="and NVIDIA driver version 470 or newer", 
icon='BLANK1')
 elif device_type == 'HIP':
 import sys
-col.label(text="Requires discrete AMD GPU with Vega 
architecture", icon='BLANK1')
+col.label(text="Requires discrete AMD GPU with RDNA 
architecture", icon='BLANK1')
 if sys.platform[:3] == "win":
 col.label(text="and AMD Radeon Pro 21.Q4 driver or newer", 
icon='BLANK1')
 elif device_type == 'METAL':
diff --git a/intern/cycles/device/hip/util.h b/intern/cycles/device/hip/util.h
index 4e4906171d1..adb68a2d44c 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 >= 9);
+  return (major > 10) || (major == 10 && minor >= 1);
 }
 
 CCL_NAMESPACE_END

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


[Bf-blender-cvs] [a0957ceab26] master: Fix T97069: Null collection object during layercollection resync when relinking.

2022-04-12 Thread Bastien Montagne
Commit: a0957ceab2635676b057b69d0a241fe895005466
Author: Bastien Montagne
Date:   Tue Apr 12 18:16:46 2022 +0200
Branches: master
https://developer.blender.org/rBa0957ceab2635676b057b69d0a241fe895005466

Fix T97069: Null collection object during layercollection resync when relinking.

We better handle NULL object pointers before doing layer collections
resync, otherwise said resync process has to deal with those NULL
pointers. By the look of it this mistake has been there since the origin
of the remapping/relinking code.

Also for safety (and optimization), do not perform layer collection
resync from `libblock_remap_data_postprocess_object_update` when
`libblock_remap_data_postprocess_collection_update` is called
immediately afterwards.

Also added same 'skip on NULL collection object pointer' check to
`layer_collection_local_sync` as the one in
`layer_collection_objects_sync`, since it's fairly hard to always
guaranty there is no such NULL pointer when calling that code.

===

M   source/blender/blenkernel/intern/layer.c
M   source/blender/blenkernel/intern/lib_remap.c

===

diff --git a/source/blender/blenkernel/intern/layer.c 
b/source/blender/blenkernel/intern/layer.c
index 1cc1839d2d0..f0ccd305690 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -1658,7 +1658,10 @@ static void layer_collection_local_sync(ViewLayer 
*view_layer,
 
   if (visible) {
 LISTBASE_FOREACH (CollectionObject *, cob, 
&layer_collection->collection->gobject) {
-  BLI_assert(cob->ob);
+  if (cob->ob == NULL) {
+continue;
+  }
+
   Base *base = BKE_view_layer_base_find(view_layer, cob->ob);
   base->local_collections_bits |= local_collections_uuid;
 }
diff --git a/source/blender/blenkernel/intern/lib_remap.c 
b/source/blender/blenkernel/intern/lib_remap.c
index 1a6fcf5ff43..2b449ad50bb 100644
--- a/source/blender/blenkernel/intern/lib_remap.c
+++ b/source/blender/blenkernel/intern/lib_remap.c
@@ -317,7 +317,8 @@ static void libblock_remap_data_preprocess(ID *id_owner,
  */
 static void libblock_remap_data_postprocess_object_update(Main *bmain,
   Object *old_ob,
-  Object *new_ob)
+  Object *new_ob,
+  const bool 
do_sync_collection)
 {
   if (new_ob == NULL) {
 /* In case we unlinked old_ob (new_ob is NULL), the object has already
@@ -331,7 +332,9 @@ static void 
libblock_remap_data_postprocess_object_update(Main *bmain,
 BKE_collections_object_remove_duplicates(bmain);
   }
 
-  BKE_main_collection_sync_remap(bmain);
+  if (do_sync_collection) {
+BKE_main_collection_sync_remap(bmain);
+  }
 
   if (old_ob == NULL) {
 for (Object *ob = bmain->objects.first; ob != NULL; ob = ob->id.next) {
@@ -567,7 +570,8 @@ static void libblock_remap_foreach_idpair_cb(ID *old_id, ID 
*new_id, void *user_
* Maybe we should do a per-ID callback for this instead? */
   switch (GS(old_id->name)) {
 case ID_OB:
-  libblock_remap_data_postprocess_object_update(bmain, (Object *)old_id, 
(Object *)new_id);
+  libblock_remap_data_postprocess_object_update(
+  bmain, (Object *)old_id, (Object *)new_id, true);
   break;
 case ID_GR:
   libblock_remap_data_postprocess_collection_update(
@@ -719,7 +723,7 @@ static void libblock_relink_foreach_idpair_cb(ID *old_id, 
ID *new_id, void *user
   case ID_OB:
 if (!is_object_update_processed) {
   libblock_remap_data_postprocess_object_update(
-  bmain, (Object *)old_id, (Object *)new_id);
+  bmain, (Object *)old_id, (Object *)new_id, true);
   is_object_update_processed = true;
 }
 break;
@@ -781,11 +785,14 @@ void BKE_libblock_relink_multiple(Main *bmain,
(Collection *)id_iter :
((Scene 
*)id_iter)->master_collection;
 /* No choice but to check whole objects once, and all children 
collections. */
-libblock_remap_data_postprocess_collection_update(bmain, 
owner_collection, NULL, NULL);
 if (!is_object_update_processed) {
-  libblock_remap_data_postprocess_object_update(bmain, NULL, NULL);
+  /* We only want to affect Object pointers here, not Collection 
ones, LayerCollections
+   * will be resynced as part of the call to
+   * `libblock_remap_data_postprocess_collection_update` below. */
+  libblock_remap_data_postprocess_object_update(bmain, NULL, NULL, 
false);
   is_object_update_processed = true;
 }
+

[Bf-blender-cvs] [48014fbf143] master: Fix (unreported) use-after-free case in Properties Editor ID remapping code.

2022-04-12 Thread Bastien Montagne
Commit: 48014fbf1432de2ad74ef76280673062d9870af7
Author: Bastien Montagne
Date:   Tue Apr 12 18:11:08 2022 +0200
Branches: master
https://developer.blender.org/rB48014fbf1432de2ad74ef76280673062d9870af7

Fix (unreported) use-after-free case in Properties Editor ID remapping code.

Regression in rBa21bca0e20a051, found while investigating T97069.

===

M   source/blender/editors/space_buttons/space_buttons.c

===

diff --git a/source/blender/editors/space_buttons/space_buttons.c 
b/source/blender/editors/space_buttons/space_buttons.c
index 1ec6832c6c3..1d0061ab7d8 100644
--- a/source/blender/editors/space_buttons/space_buttons.c
+++ b/source/blender/editors/space_buttons/space_buttons.c
@@ -861,12 +861,11 @@ static void buttons_id_remap(ScrArea *UNUSED(area),
 for (int i = 0; i < path->len; i++) {
   switch (BKE_id_remapper_apply(mappings, &path->ptr[i].owner_id, 
ID_REMAP_APPLY_DEFAULT)) {
 case ID_REMAP_RESULT_SOURCE_UNASSIGNED: {
-  if (i == 0) {
-MEM_SAFE_FREE(sbuts->path);
-  }
-  else {
+  path->len = i;
+  if (i != 0) {
+/* If the first item in the path is cleared, the whole path is 
cleared, so no need to
+ * clear further items here, see also at the end of this block. */
 memset(&path->ptr[i], 0, sizeof(path->ptr[i]) * (path->len - i));
-path->len = i;
   }
   break;
 }
@@ -887,6 +886,9 @@ static void buttons_id_remap(ScrArea *UNUSED(area),
 }
   }
 }
+if (path->len == 0) {
+  MEM_SAFE_FREE(sbuts->path);
+}
   }
 
   if (sbuts->texuser) {

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


[Bf-blender-cvs] [77db370cb6e] master: Fix: BMesh Python API errors after vertex_normals addition

2022-04-12 Thread Hans Goudey
Commit: 77db370cb6e032d477bf48dbeb8bb608ba2b643f
Author: Hans Goudey
Date:   Tue Apr 12 11:08:21 2022 -0500
Branches: master
https://developer.blender.org/rB77db370cb6e032d477bf48dbeb8bb608ba2b643f

Fix: BMesh Python API errors after vertex_normals addition

64cd927519748bbd50 didn't update the argument parsing strings,
and updated the docstring of `from_object` incorrectly.

Fixes T97025, T97213

===

M   source/blender/python/bmesh/bmesh_py_types.c

===

diff --git a/source/blender/python/bmesh/bmesh_py_types.c 
b/source/blender/python/bmesh/bmesh_py_types.c
index 46f89dd4103..1d9fc32f55b 100644
--- a/source/blender/python/bmesh/bmesh_py_types.c
+++ b/source/blender/python/bmesh/bmesh_py_types.c
@@ -1061,8 +1061,9 @@ PyDoc_STRVAR(bpy_bmesh_from_object_doc,
  "   :arg cage: Get the mesh as a deformed cage.\n"
  "   :type cage: boolean\n"
  "   :arg face_normals: Calculate face normals.\n"
+ "   :type face_normals: boolean\n"
  "   :arg vertex_normals: Calculate vertex normals.\n"
- "   :type face_normals: boolean\n");
+ "   :type vertex_normals: boolean\n");
 static PyObject *bpy_bmesh_from_object(BPy_BMesh *self, PyObject *args, 
PyObject *kw)
 {
   static const char *kwlist[] = {
@@ -1083,7 +1084,7 @@ static PyObject *bpy_bmesh_from_object(BPy_BMesh *self, 
PyObject *args, PyObject
 
   if (!PyArg_ParseTupleAndKeywords(args,
kw,
-   "OO|$O&O&:from_object",
+   "OO|$O&O&O&:from_object",
(char **)kwlist,
&py_object,
&py_depsgraph,
@@ -1190,7 +1191,7 @@ static PyObject *bpy_bmesh_from_mesh(BPy_BMesh *self, 
PyObject *args, PyObject *
 
   if (!PyArg_ParseTupleAndKeywords(args,
kw,
-   "O|$O&O&i:from_mesh",
+   "O|$O&O&O&i:from_mesh",
(char **)kwlist,
&py_mesh,
PyC_ParseBool,

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


[Bf-blender-cvs] [05a1770ab06] master: Fix T97280: Typo in tooltip of image texture node

2022-04-12 Thread Thomas Dinges
Commit: 05a1770ab069e834bfe11c4d5e7675e3b542f53c
Author: Thomas Dinges
Date:   Tue Apr 12 17:36:12 2022 +0200
Branches: master
https://developer.blender.org/rB05a1770ab069e834bfe11c4d5e7675e3b542f53c

Fix T97280: Typo in tooltip of image texture node

===

M   release/datafiles/colormanagement/config.ocio

===

diff --git a/release/datafiles/colormanagement/config.ocio 
b/release/datafiles/colormanagement/config.ocio
index bdb04cbf9ce..55e52de7002 100644
--- a/release/datafiles/colormanagement/config.ocio
+++ b/release/datafiles/colormanagement/config.ocio
@@ -173,7 +173,7 @@ colorspaces:
 name: Non-Color
 family: raw
 description: |
-Color space used for images which contains non-color data (i,e, normal 
maps)
+Color space used for images which contains non-color data (i.e. normal 
maps)
 equalitygroup:
 bitdepth: 32f
 isdata: true

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


[Bf-blender-cvs] [9ee1d807c5e] cycles_oneapi: Cycles: Move oneAPI logging to the next verbosity level

2022-04-12 Thread Sergey Sharybin
Commit: 9ee1d807c5e233f623a947acb55f01c49fbf5f13
Author: Sergey Sharybin
Date:   Tue Apr 12 16:05:37 2022 +0200
Branches: cycles_oneapi
https://developer.blender.org/rB9ee1d807c5e233f623a947acb55f01c49fbf5f13

Cycles: Move oneAPI logging to the next verbosity level

Move "noisy" log messages to the next level so that path tracing
final report can be logged without console clugging with memory
copy logs.

In practice this allows to see final report without render slowdown
caused by console buffering.

===

M   intern/cycles/device/oneapi/device_impl.cpp

===

diff --git a/intern/cycles/device/oneapi/device_impl.cpp 
b/intern/cycles/device/oneapi/device_impl.cpp
index 566779787e2..5aed2fabcdb 100644
--- a/intern/cycles/device/oneapi/device_impl.cpp
+++ b/intern/cycles/device/oneapi/device_impl.cpp
@@ -221,7 +221,7 @@ void OneapiDevice::mem_alloc(device_memory &mem)
 void OneapiDevice::mem_copy_to(device_memory &mem)
 {
   if (mem.name) {
-VLOG(2) << "OneapiDevice::mem_copy_to: \"" << mem.name << "\", "
+VLOG(4) << "OneapiDevice::mem_copy_to: \"" << mem.name << "\", "
 << string_human_readable_number(mem.memory_size()).c_str() << " 
bytes. ("
 << string_human_readable_size(mem.memory_size()).c_str() << ")";
   }
@@ -252,7 +252,7 @@ void OneapiDevice::mem_copy_from(device_memory &mem, size_t 
y, size_t w, size_t
 const size_t offset = elem * y * w;
 
 if (mem.name) {
-  VLOG(2) << "OneapiDevice::mem_copy_from: \"" << mem.name << "\" object 
of "
+  VLOG(4) << "OneapiDevice::mem_copy_from: \"" << mem.name << "\" object 
of "
   << string_human_readable_number(mem.memory_size()).c_str() << " 
bytes. ("
   << string_human_readable_size(mem.memory_size()).c_str() << ") 
from offset "
   << offset << " data " << size << " bytes";
@@ -276,7 +276,7 @@ void OneapiDevice::mem_copy_from(device_memory &mem, size_t 
y, size_t w, size_t
 void OneapiDevice::mem_zero(device_memory &mem)
 {
   if (mem.name) {
-VLOG(2) << "OneapiDevice::mem_zero: \"" << mem.name << "\", "
+VLOG(4) << "OneapiDevice::mem_zero: \"" << mem.name << "\", "
 << string_human_readable_number(mem.memory_size()).c_str() << " 
bytes. ("
 << string_human_readable_size(mem.memory_size()).c_str() << ")\n";
   }
@@ -327,7 +327,7 @@ void OneapiDevice::const_copy_to(const char *name, void 
*host, size_t size)
 {
   assert(name);
 
-  VLOG(2) << "OneapiDevice::const_copy_to \"" << name << "\" object "
+  VLOG(4) << "OneapiDevice::const_copy_to \"" << name << "\" object "
   << string_human_readable_number(size).c_str() << " bytes. ("
   << string_human_readable_size(size).c_str() << ")";

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


[Bf-blender-cvs] [809501289d7] temp-T96710-pbvh-pixels: Remove vertex based brush testing.

2022-04-12 Thread Jeroen Bakker
Commit: 809501289d721147b18d12671a7734aa3599e7f4
Author: Jeroen Bakker
Date:   Tue Apr 12 15:25:59 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB809501289d721147b18d12671a7734aa3599e7f4

Remove vertex based brush testing.

===

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

===

diff --git a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc 
b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
index d537ed9d8d3..13cfad1c9ae 100644
--- a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
@@ -57,7 +57,6 @@ struct TexturePaintingUserData {
   Brush *brush;
   PBVHNode **nodes;
   ImageData image_data;
-  std::vector vertex_brush_tests;
 };
 
 /** Reading and writing to image buffer with 4 float channels. */
@@ -257,29 +256,6 @@ template class PaintingKernel {
   }
 };
 
-/* Test which vertices pass the brush test and store them in the 
vertex_brush_tests array. */
-static void do_vertex_brush_test(void *__restrict userdata,
- const int n,
- const TaskParallelTLS *__restrict UNUSED(tls))
-{
-  TexturePaintingUserData *data = static_cast(userdata);
-  const Object *ob = data->ob;
-  SculptSession *ss = ob->sculpt;
-  const Brush *brush = data->brush;
-  SculptBrushTest test;
-  SculptBrushTestFn sculpt_brush_test_sq_fn = 
SCULPT_brush_test_init_with_falloff_shape(
-  ss, &test, brush->falloff_shape);
-  PBVHNode *node = data->nodes[n];
-
-  PBVHVertexIter vd;
-  BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
-if (sculpt_brush_test_sq_fn(&test, vd.co)) {
-  data->vertex_brush_tests[vd.index] = true;
-}
-  }
-  BKE_pbvh_vertex_iter_end;
-}
-
 static void do_paint_pixels(void *__restrict userdata,
 const int n,
 const TaskParallelTLS *__restrict tls)
@@ -292,20 +268,6 @@ static void do_paint_pixels(void *__restrict userdata,
 
   NodeData &node_data = BKE_pbvh_pixels_node_data_get(*node);
 
-  /* Propagate vertex brush test to triangle. This should be extended with 
brush overlapping edges
-   * and faces only. */
-  /* TODO(jbakker) move to user data. to reduce reallocation. */
-  std::vector triangle_brush_test_results(node_data.triangles.size());
-
-  for (int triangle_index = 0; triangle_index < node_data.triangles.size(); 
triangle_index++) {
-TrianglePaintInput &triangle = 
node_data.triangles.get_paint_input(triangle_index);
-int3 &vert_indices = triangle.vert_indices;
-for (int i = 0; i < 3; i++) {
-  triangle_brush_test_results[triangle_index] = 
triangle_brush_test_results[triangle_index] ||
-
data->vertex_brush_tests[vert_indices[i]];
-}
-  }
-
   const int thread_id = BLI_task_parallel_thread_id(tls);
   MVert *mvert = SCULPT_mesh_deformed_mverts_get(ss);
   PaintingKernel kernel_float4(ss, brush, thread_id, mvert);
@@ -332,9 +294,6 @@ static void do_paint_pixels(void *__restrict userdata,
 }
 
 for (const PackedPixelRow &pixel_row : tile_data.pixel_rows) {
-  if (!triangle_brush_test_results[pixel_row.triangle_index]) {
-continue;
-  }
   bool pixels_painted = false;
   if (image_buffer->rect_float != nullptr) {
 pixels_painted = kernel_float4.paint(node_data.triangles, 
pixel_row, image_buffer);
@@ -408,13 +367,10 @@ void SCULPT_do_paint_brush_image(
 {
   Brush *brush = BKE_paint_brush(&sd->paint);
 
-  Mesh *mesh = (Mesh *)ob->data;
-
   TexturePaintingUserData data = {nullptr};
   data.ob = ob;
   data.brush = brush;
   data.nodes = nodes;
-  data.vertex_brush_tests = std::vector(mesh->totvert);
 
   if (!ImageData::init_active_image(ob, &data.image_data, 
paint_mode_settings)) {
 return;
@@ -422,7 +378,6 @@ void SCULPT_do_paint_brush_image(
 
   TaskParallelSettings settings;
   BKE_pbvh_parallel_range_settings(&settings, true, totnode);
-  BLI_task_parallel_range(0, totnode, &data, do_vertex_brush_test, &settings);
   BLI_task_parallel_range(0, totnode, &data, do_paint_pixels, &settings);
 
   TaskParallelSettings settings_flush;

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


[Bf-blender-cvs] [a41382aef65] tracking_tools: Merge branch 'master' into tracking_tools

2022-04-12 Thread Sebastian Koenig
Commit: a41382aef657910cbb5080498630d4450e72853a
Author: Sebastian Koenig
Date:   Tue Apr 12 15:24:52 2022 +0200
Branches: tracking_tools
https://developer.blender.org/rBa41382aef657910cbb5080498630d4450e72853a

Merge branch 'master' into tracking_tools

===



===



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


[Bf-blender-cvs] [25873ff0f71] tracking_tools: Clip Editor: Remove Objects Panel from sidebar

2022-04-12 Thread Sebastian Koenig
Commit: 25873ff0f71547f8e5eef4e73061c8fa2784a221
Author: Sebastian Koenig
Date:   Tue Apr 12 15:22:21 2022 +0200
Branches: tracking_tools
https://developer.blender.org/rB25873ff0f71547f8e5eef4e73061c8fa2784a221

Clip Editor: Remove Objects Panel from sidebar

Since the objects panel is now accessible from the header, we don't need
to have it in the sidebar anymore.

Also, the Lens Panel was closed by default. However, it doesn't really
make sense to hide the Lens parameters from the camera, since they are
essential to solving.

===

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

===

diff --git a/release/scripts/startup/bl_ui/space_clip.py 
b/release/scripts/startup/bl_ui/space_clip.py
index 19bc7ae5bde..85c49ff9563 100644
--- a/release/scripts/startup/bl_ui/space_clip.py
+++ b/release/scripts/startup/bl_ui/space_clip.py
@@ -739,10 +739,8 @@ class CLIP_PT_orientation(CLIP_PT_reconstruction_panel, 
Panel):
 
 class CLIP_PT_objects(CLIP_PT_clip_view_panel, Panel):
 bl_space_type = 'CLIP_EDITOR'
-bl_region_type = 'UI'
-bl_category = "Track"
+bl_region_type = 'HEADER'
 bl_label = "Objects"
-bl_options = {'DEFAULT_CLOSED'}
 
 def draw(self, context):
 layout = self.layout
@@ -996,7 +994,6 @@ class CLIP_PT_tracking_lens(Panel):
 bl_category = "Track"
 bl_label = "Lens"
 bl_parent_id = 'CLIP_PT_tracking_camera'
-bl_options = {'DEFAULT_CLOSED'}
 
 @classmethod
 def poll(cls, context):

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


[Bf-blender-cvs] [ee9688da997] master: Cleanup: redundant logical not

2022-04-12 Thread Germano Cavalcante
Commit: ee9688da997fc6e7d7aece39d5da23c99618dc21
Author: Germano Cavalcante
Date:   Tue Apr 12 10:02:01 2022 -0300
Branches: master
https://developer.blender.org/rBee9688da997fc6e7d7aece39d5da23c99618dc21

Cleanup: redundant logical not

Overlooked at rB0ebcc711f.

The logical not in this case was only applied to the left hand side of
the comparison.

===

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

===

diff --git a/source/blender/blenkernel/intern/camera.c 
b/source/blender/blenkernel/intern/camera.c
index 3897df9f05f..32925168437 100644
--- a/source/blender/blenkernel/intern/camera.c
+++ b/source/blender/blenkernel/intern/camera.c
@@ -698,12 +698,12 @@ static bool camera_frame_fit_calc_from_data(CameraParams 
*params,
 add_v3_v3v3(plane_isect_1_other, plane_isect_1, plane_isect_1_no);
 add_v3_v3v3(plane_isect_2_other, plane_isect_2, plane_isect_2_no);
 
-if (!isect_line_line_v3(plane_isect_1,
-plane_isect_1_other,
-plane_isect_2,
-plane_isect_2_other,
-plane_isect_pt_1,
-plane_isect_pt_2) != 0) {
+if (isect_line_line_v3(plane_isect_1,
+   plane_isect_1_other,
+   plane_isect_2,
+   plane_isect_2_other,
+   plane_isect_pt_1,
+   plane_isect_pt_2) == 0) {
   return false;
 }

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


[Bf-blender-cvs] [d3918312d86] temp-T96710-pbvh-pixels: Added support for secondary brush color.

2022-04-12 Thread Jeroen Bakker
Commit: d3918312d86b88e0ea5252fe8a05d6946efbad28
Author: Jeroen Bakker
Date:   Tue Apr 12 14:27:50 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rBd3918312d86b88e0ea5252fe8a05d6946efbad28

Added support for secondary brush color.

===

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

===

diff --git a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc 
b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
index c293b28597a..d537ed9d8d3 100644
--- a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
@@ -17,6 +17,7 @@
 #include "IMB_colormanagement.h"
 #include "IMB_imbuf.h"
 
+#include "BKE_brush.h"
 #include "BKE_image_wrappers.hh"
 #include "BKE_material.h"
 #include "BKE_pbvh.h"
@@ -156,18 +157,14 @@ template class PaintingKernel {
 init_brush_test();
   }
 
-  bool paint(const Triangles &triangles, const PackedPixelRow &encoded_pixels, 
ImBuf *image_buffer)
+  bool paint(const Triangles &triangles, const PackedPixelRow &pixel_row, 
ImBuf *image_buffer)
   {
-if (image_buffer != last_used_image_buffer_ptr) {
-  last_used_image_buffer_ptr = image_buffer;
-  init_brush_color(image_buffer);
-}
-image_accessor.set_image_position(image_buffer, 
encoded_pixels.start_image_coordinate);
-const TrianglePaintInput triangle = 
triangles.get_paint_input(encoded_pixels.triangle_index);
-float3 pixel_pos = get_start_pixel_pos(triangle, encoded_pixels);
-const float3 delta_pixel_pos = get_delta_pixel_pos(triangle, 
encoded_pixels, pixel_pos);
+image_accessor.set_image_position(image_buffer, 
pixel_row.start_image_coordinate);
+const TrianglePaintInput triangle = 
triangles.get_paint_input(pixel_row.triangle_index);
+float3 pixel_pos = get_start_pixel_pos(triangle, pixel_row);
+const float3 delta_pixel_pos = get_delta_pixel_pos(triangle, pixel_row, 
pixel_pos);
 bool pixels_painted = false;
-for (int x = 0; x < encoded_pixels.num_pixels; x++) {
+for (int x = 0; x < pixel_row.num_pixels; x++) {
   if (!brush_test_fn(&test, pixel_pos)) {
 pixel_pos += delta_pixel_pos;
 image_accessor.next_pixel();
@@ -194,16 +191,17 @@ template class PaintingKernel {
 return pixels_painted;
   }
 
- private:
   void init_brush_color(ImBuf *image_buffer)
   {
-/* TODO: use StringRefNull. */
 const char *to_colorspace = 
image_accessor.get_colorspace_name(image_buffer);
 if (last_used_color_space == to_colorspace) {
   return;
 }
+copy_v3_v3(brush_color,
+   ss->cache->invert ? BKE_brush_secondary_color_get(ss->scene, 
brush) :
+   BKE_brush_color_get(ss->scene, brush));
+brush_color[3] = 1.0f;
 
-copy_v4_fl4(brush_color, brush->rgb[0], brush->rgb[1], brush->rgb[2], 1.0);
 const char *from_colorspace = IMB_colormanagement_role_colorspace_name_get(
 COLOR_ROLE_COLOR_PICKING);
 ColormanageProcessor *cm_processor = 
IMB_colormanagement_colorspace_processor_new(
@@ -213,6 +211,7 @@ template class PaintingKernel {
 last_used_color_space = to_colorspace;
   }
 
+ private:
   void init_brush_strength()
   {
 brush_strength = ss->cache->bstrength;
@@ -325,6 +324,13 @@ static void do_paint_pixels(void *__restrict userdata,
   continue;
 }
 
+if (image_buffer->rect_float != nullptr) {
+  kernel_float4.init_brush_color(image_buffer);
+}
+else {
+  kernel_float4.init_brush_color(image_buffer);
+}
+
 for (const PackedPixelRow &pixel_row : tile_data.pixel_rows) {
   if (!triangle_brush_test_results[pixel_row.triangle_index]) {
 continue;

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


[Bf-blender-cvs] [01f79f7c93a] temp-T96710-pbvh-pixels: Remove using namespace.

2022-04-12 Thread Jeroen Bakker
Commit: 01f79f7c93acf441c15842f6e505f5310e169c19
Author: Jeroen Bakker
Date:   Tue Apr 12 14:02:27 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB01f79f7c93acf441c15842f6e505f5310e169c19

Remove using namespace.

===

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

===

diff --git a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc 
b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
index 109897a206f..2a883011cea 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
@@ -9,7 +9,6 @@
 #include "BLI_math_geom.h"
 
 namespace blender::bke::pbvh::pixels {
-using namespace blender::bke::image;
 
 struct ExtendUVContext {
   PBVH *pbvh;
@@ -227,7 +226,7 @@ class UVSeamExtender {
   int image_buffer_width_;
 
  public:
-  explicit UVSeamExtender(ExtendUVContext &context, const ImageTileWrapper 
&image_tile)
+  explicit UVSeamExtender(ExtendUVContext &context, const 
image::ImageTileWrapper &image_tile)
   : image_buffer_width_(context.image_buffer->x)
   {
 rows.resize(context.image_buffer->y);
@@ -244,7 +243,7 @@ class UVSeamExtender {
   }
 
  private:
-  void init(ExtendUVContext &context, const ImageTileWrapper &image_tile)
+  void init(ExtendUVContext &context, const image::ImageTileWrapper 
&image_tile)
   {
 for (int n = 0; n < context.pbvh->totnode; n++) {
   PBVHNode &node = context.pbvh->nodes[n];
@@ -255,7 +254,7 @@ class UVSeamExtender {
 }
   }
 
-  void init(ExtendUVContext &context, PBVHNode &node, const ImageTileWrapper 
&image_tile)
+  void init(ExtendUVContext &context, PBVHNode &node, const 
image::ImageTileWrapper &image_tile)
   {
 NodeData &node_data = *static_cast(node.pixels.node_data);
 UDIMTilePixels *tile_node_data = node_data.find_tile_data(image_tile);
@@ -300,7 +299,7 @@ void BKE_pbvh_pixels_fix_seams(PBVH &pbvh,
 
   ImageUser local_image_user = image_user;
   LISTBASE_FOREACH (ImageTile *, tile_data, &image.tiles) {
-ImageTileWrapper image_tile(tile_data);
+image::ImageTileWrapper image_tile(tile_data);
 
 local_image_user.tile = image_tile.get_tile_number();
 ImBuf *image_buffer = BKE_image_acquire_ibuf(&image, &local_image_user, 
nullptr);

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


[Bf-blender-cvs] [ea486bcd3d3] temp-T96710-pbvh-pixels: Remove indices from Triangles. Index of the triangle is in sync with prim list.

2022-04-12 Thread Jeroen Bakker
Commit: ea486bcd3d35efcbdab33e6a4bda371d0a48147a
Author: Jeroen Bakker
Date:   Tue Apr 12 13:59:39 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rBea486bcd3d35efcbdab33e6a4bda371d0a48147a

Remove indices from Triangles. Index of the triangle is in sync with prim list.

===

M   source/blender/blenkernel/BKE_pbvh_pixels.hh
M   source/blender/blenkernel/intern/pbvh_pixels.cc
M   source/blender/blenkernel/intern/pbvh_pixels_seams.cc

===

diff --git a/source/blender/blenkernel/BKE_pbvh_pixels.hh 
b/source/blender/blenkernel/BKE_pbvh_pixels.hh
index 12f420cfe32..b2cdb9353e3 100644
--- a/source/blender/blenkernel/BKE_pbvh_pixels.hh
+++ b/source/blender/blenkernel/BKE_pbvh_pixels.hh
@@ -18,22 +18,6 @@
 
 namespace blender::bke::pbvh::pixels {
 
-/**
- * Loop indices. Only stores 2 indices, the third one is always 
`loop_indices[1] + 1`.
- */
-struct EncodedLoopIndices {
-  int2 encoded;
-
-  EncodedLoopIndices(const int3 decoded) : encoded(decoded.x, decoded.y)
-  {
-  }
-
-  int3 decode() const
-  {
-return int3(encoded.x, encoded.y, encoded.y + 1);
-  }
-};
-
 struct TrianglePaintInput {
   int3 vert_indices;
   /**
@@ -68,32 +52,11 @@ struct TrianglePaintInput {
 struct Triangles {
   /** Data accessed by the inner loop of the painting brush. */
   Vector paint_input;
-  /** Per triangle the index of the polygon it belongs to. */
-  Vector poly_indices;
-  /**
-   * Loop indices per triangle.
-   *
-   * NOTE: is only available during building the triangles. Kept here as in 
the future we need
-   * the data to calculate normals.
-   */
-  Vector loop_indices;
 
  public:
-  void append(const int3 vert_indices, const EncodedLoopIndices loop_indices, 
const int poly_index)
+  void append(const int3 vert_indices)
   {
 this->paint_input.append(TrianglePaintInput(vert_indices));
-this->loop_indices.append(loop_indices);
-this->poly_indices.append(poly_index);
-  }
-
-  int3 get_loop_indices(const int index) const
-  {
-return loop_indices[index].decode();
-  }
-
-  int get_poly_index(const int index)
-  {
-return poly_indices[index];
   }
 
   TrianglePaintInput &get_paint_input(const int index)
@@ -109,8 +72,6 @@ struct Triangles {
   void clear()
   {
 paint_input.clear();
-loop_indices.clear();
-poly_indices.clear();
   }
 
   uint64_t size() const
@@ -120,8 +81,7 @@ struct Triangles {
 
   uint64_t mem_size() const
   {
-return loop_indices.size() * sizeof(EncodedLoopIndices) +
-   paint_input.size() * sizeof(TrianglePaintInput) + 
poly_indices.size() * sizeof(int);
+return paint_input.size() * sizeof(TrianglePaintInput);
   }
 };
 
diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc 
b/source/blender/blenkernel/intern/pbvh_pixels.cc
index d9bd921865f..52f16cdb3fa 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -107,15 +107,14 @@ static void init_triangles(PBVH *pbvh, PBVHNode *node, 
NodeData *node_data, cons
   for (int i = 0; i < node->totprim; i++) {
 const MLoopTri *lt = &pbvh->looptri[node->prim_indices[i]];
 node_data->triangles.append(
-int3(mloop[lt->tri[0]].v, mloop[lt->tri[1]].v, mloop[lt->tri[2]].v),
-int3(lt->tri[0], lt->tri[1], lt->tri[2]),
-lt->poly);
+int3(mloop[lt->tri[0]].v, mloop[lt->tri[1]].v, mloop[lt->tri[2]].v));
   }
 }
 
 struct EncodePixelsUserData {
   Image *image;
   ImageUser *image_user;
+  PBVH *pbvh;
   Vector *nodes;
   MLoopUV *ldata_uv;
 };
@@ -127,7 +126,7 @@ static void do_encode_pixels(void *__restrict userdata,
   EncodePixelsUserData *data = static_cast(userdata);
   Image *image = data->image;
   ImageUser image_user = *data->image_user;
-
+  PBVH *pbvh = data->pbvh;
   PBVHNode *node = (*data->nodes)[n];
   NodeData *node_data = static_cast(node->pixels.node_data);
   LISTBASE_FOREACH (ImageTile *, tile, &data->image->tiles) {
@@ -143,11 +142,11 @@ static void do_encode_pixels(void *__restrict userdata,
 
 Triangles &triangles = node_data->triangles;
 for (int triangle_index = 0; triangle_index < triangles.size(); 
triangle_index++) {
-  int3 loop_indices = triangles.get_loop_indices(triangle_index);
+  const MLoopTri *lt = &pbvh->looptri[node->prim_indices[triangle_index]];
   float2 uvs[3] = {
-  float2(data->ldata_uv[loop_indices[0]].uv) - tile_offset,
-  float2(data->ldata_uv[loop_indices[1]].uv) - tile_offset,
-  float2(data->ldata_uv[loop_indices[2]].uv) - tile_offset,
+  float2(data->ldata_uv[lt->tri[0]].uv) - tile_offset,
+  float2(data->ldata_uv[lt->tri[1]].uv) - tile_offset,
+  float2(data->ldata_uv[lt->tri[2]].uv) - tile_offset,
   };
 
   const float minv = clamp_f(min_fff(uvs[0].y, uvs[1].y, uvs[2].y), 0.0f, 
1.0f);
@@ -313,6 +312,7 @@ static vo

[Bf-blender-cvs] [1ec0129cfa2] temp-T96710-pbvh-pixels: Fix quad data stored multiple times.

2022-04-12 Thread Jeroen Bakker
Commit: 1ec0129cfa2ae4a26ade00bb89c694423e37570e
Author: Jeroen Bakker
Date:   Tue Apr 12 13:35:16 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB1ec0129cfa2ae4a26ade00bb89c694423e37570e

Fix quad data stored multiple times.

===

M   source/blender/blenkernel/BKE_pbvh.h
M   source/blender/blenkernel/intern/pbvh_pixels.cc
M   source/blender/editors/sculpt_paint/sculpt.c

===

diff --git a/source/blender/blenkernel/BKE_pbvh.h 
b/source/blender/blenkernel/BKE_pbvh.h
index e6c591bb533..ea4a4efca87 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -143,7 +143,6 @@ void BKE_pbvh_build_bmesh(PBVH *pbvh,
   int cd_face_node_offset);
 
 void BKE_pbvh_build_pixels(PBVH *pbvh,
-   const struct MPoly *mpoly,
const struct MLoop *mloop,
struct CustomData *ldata,
struct Image *image,
diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc 
b/source/blender/blenkernel/intern/pbvh_pixels.cc
index 1eae3fa5537..d9bd921865f 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -102,18 +102,14 @@ static void extract_barycentric_pixels(UDIMTilePixels 
&tile_data,
   }
 }
 
-static void init_triangles(
-PBVH *pbvh, PBVHNode *node, NodeData *node_data, const MPoly *mpoly, const 
MLoop *mloop)
+static void init_triangles(PBVH *pbvh, PBVHNode *node, NodeData *node_data, 
const MLoop *mloop)
 {
   for (int i = 0; i < node->totprim; i++) {
 const MLoopTri *lt = &pbvh->looptri[node->prim_indices[i]];
-const MPoly *p = &mpoly[lt->poly];
-for (int l = 0; l < p->totloop - 2; l++) {
-  node_data->triangles.append(
-  int3(mloop[lt->tri[0]].v, mloop[lt->tri[1]].v, mloop[lt->tri[2]].v),
-  int3(lt->tri[0], lt->tri[1], lt->tri[2]),
-  lt->poly);
-}
+node_data->triangles.append(
+int3(mloop[lt->tri[0]].v, mloop[lt->tri[1]].v, mloop[lt->tri[2]].v),
+int3(lt->tri[0], lt->tri[1], lt->tri[2]),
+lt->poly);
   }
 }
 
@@ -295,7 +291,6 @@ static void apply_watertight_check(PBVH *pbvh, Image 
*image, ImageUser *image_us
 }
 
 static void update_pixels(PBVH *pbvh,
-  const struct MPoly *mpoly,
   const struct MLoop *mloop,
   struct CustomData *ldata,
   struct Image *image,
@@ -314,7 +309,7 @@ static void update_pixels(PBVH *pbvh,
 
   for (PBVHNode *node : nodes_to_update) {
 NodeData *node_data = static_cast(node->pixels.node_data);
-init_triangles(pbvh, node, node_data, mpoly, mloop);
+init_triangles(pbvh, node, node_data, mloop);
   }
 
   EncodePixelsUserData user_data;
@@ -401,13 +396,12 @@ extern "C" {
 using namespace blender::bke::pbvh::pixels;
 
 void BKE_pbvh_build_pixels(PBVH *pbvh,
-   const struct MPoly *mpoly,
const struct MLoop *mloop,
struct CustomData *ldata,
struct Image *image,
struct ImageUser *image_user)
 {
-  update_pixels(pbvh, mpoly, mloop, ldata, image, image_user);
+  update_pixels(pbvh, mloop, ldata, image, image_user);
 }
 
 void pbvh_pixels_free(PBVHNode *node)
diff --git a/source/blender/editors/sculpt_paint/sculpt.c 
b/source/blender/editors/sculpt_paint/sculpt.c
index 94dc5027710..fc1df1635bd 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -2781,12 +2781,7 @@ static void sculpt_pbvh_update_pixels(PaintModeSettings 
*paint_mode_settings,
 return;
   }
 
-  BKE_pbvh_build_pixels(ss->pbvh,
-mesh->mpoly,
-mesh->mloop,
-&mesh->ldata,
-image,
-image_user);
+  BKE_pbvh_build_pixels(ss->pbvh, mesh->mloop, &mesh->ldata, image, 
image_user);
 }
 
 /** \} */

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


[Bf-blender-cvs] [18916cb6eb0] tracking_tools: Fix setting key shortcuts for insert keyframe menu items

2022-04-12 Thread Campbell Barton
Commit: 18916cb6eb0cc253663810e0477417ee2ede05ab
Author: Campbell Barton
Date:   Wed Mar 9 14:15:57 2022 +1100
Branches: tracking_tools
https://developer.blender.org/rB18916cb6eb0cc253663810e0477417ee2ede05ab

Fix setting key shortcuts for insert keyframe menu items

It was not possible to assign a shortcut to menu items in the insert
key-frame menu going back to version 2.7x. Doing so would replace the
current key that opens the insert keyframe menu (I-key by default),
instead of binding a key to insert a key-frame for the keying-set
referenced by the menu item.

Now each menu item can be bound to a key or added to the "Quick
Favorites" menu, directly inserting a key-frame for the corresponding
keying-set.

Note that users must use the operator `anim.keyframe_insert_by_name`
when setting up key-shortcuts as `anim.keyframe_insert` is only intended
to launch the menu.

Keymap Editor:

When editing these key-map items in the key-map editor, the keying-set
identifier must be used. At the moment the key-map editor doesn't
support showing a drop-down list. The identifiers can be used from the
tool-tip or the info editor.

{F12994924}

Details:

Use `ANIM_OT_keyframe_insert_by_name` instead of
`ANIM_OT_keyframe_insert_menu` for the insert keyframe popup menu to
resolve the following issues binding keys to keying sets:

- The index of the keying set isn't stable (adding/removing keying sets
  may change it).
- Binding a key to items in the popup menu triggers a popup instead of
  inserting a key using the keying set from the menu item.

While support for using the current operator could be improved, it will
still only work for built-in keying sets, so I'd prefer to use an
operator that is intended for key-bindings.

Besides supporting binding keys to menu items there are no functional
changes.

Reviewed By: sybren

Ref D14289

===

M   source/blender/editors/animation/keyframing.c

===

diff --git a/source/blender/editors/animation/keyframing.c 
b/source/blender/editors/animation/keyframing.c
index 8d079641e9f..0d0d13e2f74 100644
--- a/source/blender/editors/animation/keyframing.c
+++ b/source/blender/editors/animation/keyframing.c
@@ -1979,23 +1979,57 @@ static int insert_key_menu_invoke(bContext *C, 
wmOperator *op, const wmEvent *UN
 {
   Scene *scene = CTX_data_scene(C);
 
-  /* if prompting or no active Keying Set, show the menu */
-  if ((scene->active_keyingset == 0) || RNA_boolean_get(op->ptr, 
"always_prompt")) {
-uiPopupMenu *pup;
-uiLayout *layout;
-
-/* call the menu, which will call this operator again, hence the canceled 
*/
-pup = UI_popup_menu_begin(C, WM_operatortype_name(op->type, op->ptr), 
ICON_NONE);
-layout = UI_popup_menu_layout(pup);
-uiItemsEnumO(layout, "ANIM_OT_keyframe_insert_menu", "type");
-UI_popup_menu_end(C, pup);
+  /* When there is an active keying set and no request to prompt, keyframe 
immediately. */
+  if ((scene->active_keyingset != 0) && !RNA_boolean_get(op->ptr, 
"always_prompt")) {
+/* Just call the exec() on the active keying-set. */
+RNA_enum_set(op->ptr, "type", 0);
+return op->type->exec(C, op);
+  }
+
+  /* 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.
+   * 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);
+  uiLayout *layout = UI_popup_menu_layout(pup);
+
+  /* Even though `ANIM_OT_keyframe_insert_menu` can show a menu in one line,
+   * prefer `ANIM_OT_keyframe_insert_by_name` so users can bind keys to 
specific
+   * keying sets by name in the key-map instead of the index which isn't 
stable. */
+  PropertyRNA *prop = RNA_struct_find_property(op->ptr, "type");
+  const EnumPropertyItem *item_array = NULL;
+  int totitem;
+  bool free;
+
+  RNA_property_enum_items_gettexted(C, op->ptr, prop, &item_array, &totitem, 
&free);
+
+  for (int i = 0; i < totitem; i++) {
+const EnumPropertyItem *item = &item_array[i];
+if (item->identifier[0] != '\0') {
+  uiItemStringO(layout,
+item->name,
+item->icon,
+"ANIM_OT_keyframe_insert_by_name",
+"type",
+item->identifier);
+}
+else {
+  /* This enum shouldn't contain headings, assert there are none.
+   * NOTE: If in the future the enum includes them, additional layout code 
can be
+   * added to show them - although that doesn't seem likely. */
+  BLI_assert(item->name == NULL);
+  uiItemS(layout);
+}
+  }
 
-return OPERATOR_INTERFACE;
+  if (free) {
+M

[Bf-blender-cvs] [9fccd4d7895] tracking_tools: install_deps: Tweak rBbc9c9631a46f, libwebp is not only a dependency from ffmpeg.

2022-04-12 Thread Bastien Montagne
Commit: 9fccd4d7895d2e328225fe2f454afd81685e2761
Author: Bastien Montagne
Date:   Mon Apr 11 14:51:37 2022 +0200
Branches: tracking_tools
https://developer.blender.org/rB9fccd4d7895d2e328225fe2f454afd81685e2761

install_deps: Tweak rBbc9c9631a46f, libwebp is not only a dependency from 
ffmpeg.

===

M   build_files/build_environment/install_deps.sh

===

diff --git a/build_files/build_environment/install_deps.sh 
b/build_files/build_environment/install_deps.sh
index 8018ac8ff1a..ecf5d215333 100755
--- a/build_files/build_environment/install_deps.sh
+++ b/build_files/build_environment/install_deps.sh
@@ -4004,6 +4004,7 @@ install_DEB() {
   WEBP_DEV="libwebp-dev"
   check_package_DEB $WEBP_DEV
   if [ $? -eq 0 ]; then
+install_packages_DEB $WEBP_DEV
 WEBP_USE=true
   fi
 
@@ -4435,9 +4436,6 @@ install_DEB() {
 if [ "$VPX_USE" = true ]; then
   _packages="$_packages $VPX_DEV"
 fi
-if [ "$WEBP_USE" = true ]; then
-  _packages="$_packages $WEBP_DEV"
-fi
 if [ "$OPUS_USE" = true ]; then
   _packages="$_packages $OPUS_DEV"
 fi
@@ -4722,6 +4720,7 @@ install_RPM() {
   WEBP_DEV="libwebp-devel"
   check_package_RPM $WEBP_DEV
   if [ $? -eq 0 ]; then
+install_packages_RPM $WEBP_DEV
 WEBP_USE=true
   fi
 
@@ -5124,9 +5123,6 @@ install_RPM() {
 if [ "$VPX_USE" = true ]; then
   _packages="$_packages $VPX_DEV"
 fi
-if [ "$WEBP_USE" = true ]; then
-  _packages="$_packages $WEBP_DEV"
-fi
 if [ "$OPUS_USE" = true ]; then
   _packages="$_packages $OPUS_DEV"
 fi
@@ -5300,6 +5296,7 @@ install_ARCH() {
   WEBP_DEV="libwebp"
   check_package_ARCH $WEBP_DEV
   if [ $? -eq 0 ]; then
+install_packages_ARCH $WEBP_DEV
 WEBP_USE=true
   fi
 
@@ -5704,16 +5701,12 @@ install_ARCH() {
 if [ "$VPX_USE" = true ]; then
   _packages="$_packages $VPX_DEV"
 fi
-if [ "$WEBP_USE" = true ]; then
-  _packages="$_packages $WEBP_DEV"
-fi
 if [ "$OPUS_USE" = true ]; then
   _packages="$_packages $OPUS_DEV"
 fi
 if [ "$MP3LAME_USE" = true ]; then
   _packages="$_packages $MP3LAME_DEV"
 fi
-install_packages_ARCH $_packages
 
 compile_FFmpeg
   fi
@@ -5961,6 +5954,12 @@ print_info() {
 fi
   fi
 
+  if [ "$WEBP_USE" = true ]; then
+_1="-D WITH_IMAGE_WEBP=ON"
+PRINT "  $_1"
+_buildargs="$_buildargs $_1"
+  fi
+
   if [ -d $INST/openexr ]; then
 _1="-D OPENEXR_ROOT_DIR=$INST/openexr"
 PRINT "  $_1"

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


[Bf-blender-cvs] [09014c1a2d5] tracking_tools: Clip Editor: Show object name in Solve error message

2022-04-12 Thread Sebastian Koenig
Commit: 09014c1a2d582ac72760d7aa0123af43d0121adb
Author: Sebastian Koenig
Date:   Tue Apr 12 12:32:44 2022 +0200
Branches: tracking_tools
https://developer.blender.org/rB09014c1a2d582ac72760d7aa0123af43d0121adb

Clip Editor: Show object name in Solve error message

===

M   release/datafiles/locale
M   release/scripts/addons
M   release/scripts/startup/bl_ui/space_clip.py
M   source/tools

===

diff --git a/release/datafiles/locale b/release/datafiles/locale
index 716dc02ec30..245306b56bd 16
--- a/release/datafiles/locale
+++ b/release/datafiles/locale
@@ -1 +1 @@
-Subproject commit 716dc02ec30c0810513f7b4adc4ae865ae50c4e6
+Subproject commit 245306b56bda2aa39af219c3dd705666363e2c54
diff --git a/release/scripts/addons b/release/scripts/addons
index 787ea78f7fa..50718ab6c0b 16
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit 787ea78f7fa6f0373d80ba1247768402df93f8ad
+Subproject commit 50718ab6c0b7b0e20af580fdc67918432e08b270
diff --git a/release/scripts/startup/bl_ui/space_clip.py 
b/release/scripts/startup/bl_ui/space_clip.py
index 31eb4c20549..19bc7ae5bde 100644
--- a/release/scripts/startup/bl_ui/space_clip.py
+++ b/release/scripts/startup/bl_ui/space_clip.py
@@ -247,8 +247,8 @@ class CLIP_HT_header(Header):
 if sc.view == 'CLIP':
 r = active_object.reconstruction
 if r.is_valid and sc.view == 'CLIP':
-layout.label(text="Solve error: %.2f px" %
- (r.average_error))
+layout.label(text="%s Solve error: %.2f px" %
+ (active_object.name, r.average_error))
 
 row = layout.row()
 row.popover(panel='CLIP_PT_objects')
diff --git a/source/tools b/source/tools
index 1e658ca996f..f4af5ed5a70 16
--- a/source/tools
+++ b/source/tools
@@ -1 +1 @@
-Subproject commit 1e658ca996f11e5ff3398d89bd81f5b719304a57
+Subproject commit f4af5ed5a705c5d048b137ba56a6cf9295681ec5

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


[Bf-blender-cvs] [39590dab00f] tracking_tools: Merge branch 'master' into tracking_tools

2022-04-12 Thread Sebastian Koenig
Commit: 39590dab00f4648aed28a0639a0d6c8e16c5d90f
Author: Sebastian Koenig
Date:   Tue Apr 12 12:40:13 2022 +0200
Branches: tracking_tools
https://developer.blender.org/rB39590dab00f4648aed28a0639a0d6c8e16c5d90f

Merge branch 'master' into tracking_tools

===



===

diff --cc source/blender/editors/mask/mask_ops.c
index d2384e1c358,3c0e7ee399c..7cc0a3e156e
--- a/source/blender/editors/mask/mask_ops.c
+++ b/source/blender/editors/mask/mask_ops.c
@@@ -242,11 -243,11 +243,11 @@@ static void mask_point_undistort_pos(Sp
BKE_mask_coord_from_movieclip(sc->clip, &sc->user, r_co, r_co);
  }
  
 -static bool spline_under_mouse_get(const bContext *C,
 -   Mask *mask_orig,
 -   const float co[2],
 -   MaskLayer **r_mask_layer,
 -   MaskSpline **r_mask_spline)
 +bool ED_mask_spline_under_mouse_get(const bContext *C,
- Mask *mask,
++Mask *mask_orig,
 +const float co[2],
 +MaskLayer **r_mask_layer,
 +MaskSpline **r_mask_spline)
  {
const float threshold = 19.0f;
ScrArea *area = CTX_wm_area(C);

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


[Bf-blender-cvs] [bb6d0165b40] tracking_tools: Curves Sculpting Icons: Snake Hook and Grow updates

2022-04-12 Thread Dalai Felinto
Commit: bb6d0165b40ebaf06c3ba8820e645d0a4abe7bbf
Author: Dalai Felinto
Date:   Mon Apr 11 15:09:54 2022 +0200
Branches: tracking_tools
https://developer.blender.org/rBbb6d0165b40ebaf06c3ba8820e645d0a4abe7bbf

Curves Sculpting Icons: Snake Hook and Grow updates

This implements the icon for snake hook, as well as tweak the
growth brush to make it bigger and with the triangles more
distinct for better reading of the icon.

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

===

M   release/datafiles/icons/ops.curves.sculpt_grow_shrink.dat
A   release/datafiles/icons/ops.curves.sculpt_snake_hook.dat
M   source/blender/editors/datafiles/CMakeLists.txt

===

diff --git a/release/datafiles/icons/ops.curves.sculpt_grow_shrink.dat 
b/release/datafiles/icons/ops.curves.sculpt_grow_shrink.dat
index 9b3453085e4..13f19185030 100644
Binary files a/release/datafiles/icons/ops.curves.sculpt_grow_shrink.dat and 
b/release/datafiles/icons/ops.curves.sculpt_grow_shrink.dat differ
diff --git a/release/datafiles/icons/ops.curves.sculpt_grow_shrink.dat 
b/release/datafiles/icons/ops.curves.sculpt_snake_hook.dat
similarity index 53%
copy from release/datafiles/icons/ops.curves.sculpt_grow_shrink.dat
copy to release/datafiles/icons/ops.curves.sculpt_snake_hook.dat
index 9b3453085e4..15128701d0a 100644
Binary files a/release/datafiles/icons/ops.curves.sculpt_grow_shrink.dat and 
b/release/datafiles/icons/ops.curves.sculpt_snake_hook.dat differ
diff --git a/source/blender/editors/datafiles/CMakeLists.txt 
b/source/blender/editors/datafiles/CMakeLists.txt
index 8fca0c46c82..fb6621c846d 100644
--- a/source/blender/editors/datafiles/CMakeLists.txt
+++ b/source/blender/editors/datafiles/CMakeLists.txt
@@ -777,6 +777,7 @@ set_property(GLOBAL PROPERTY ICON_GEOM_NAMES
   ops.curves.sculpt_cut
   ops.curves.sculpt_delete
   ops.curves.sculpt_grow_shrink
+  ops.curves.sculpt_snake_hook
   ops.generic.cursor
   ops.generic.select
   ops.generic.select_box

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


[Bf-blender-cvs] [66b03b7e3bc] temp-T96710-pbvh-pixels: Change the tile painting loop to use node data first.

2022-04-12 Thread Jeroen Bakker
Commit: 66b03b7e3bcaeb76865c0b1e34a68c1a754277f4
Author: Jeroen Bakker
Date:   Tue Apr 12 12:07:37 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB66b03b7e3bcaeb76865c0b1e34a68c1a754277f4

Change the tile painting loop to use node data first.

===

M   source/blender/blenkernel/BKE_pbvh_pixels.hh
M   source/blender/blenkernel/intern/pbvh_pixels.cc
M   source/blender/editors/sculpt_paint/sculpt_paint_image.cc

===

diff --git a/source/blender/blenkernel/BKE_pbvh_pixels.hh 
b/source/blender/blenkernel/BKE_pbvh_pixels.hh
index 26d90639fc0..92d5b84be72 100644
--- a/source/blender/blenkernel/BKE_pbvh_pixels.hh
+++ b/source/blender/blenkernel/BKE_pbvh_pixels.hh
@@ -222,9 +222,7 @@ struct NodeData {
   }
 };
 
-Triangles &BKE_pbvh_pixels_triangles_get(PBVHNode &node);
-UDIMTilePixels *BKE_pbvh_pixels_tile_data_get(PBVHNode &node,
-  const image::ImageTileWrapper 
&image_tile);
+NodeData &BKE_pbvh_pixels_node_data_get(PBVHNode &node);
 void BKE_pbvh_pixels_mark_dirty(PBVHNode &node);
 void BKE_pbvh_pixels_mark_image_dirty(PBVHNode &node, Image &image, ImageUser 
&image_user);
 /** Extend pixels to fix uv seams for the given nodes. */
diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc 
b/source/blender/blenkernel/intern/pbvh_pixels.cc
index b4f8c6f8265..bcb97624566 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -367,19 +367,11 @@ static void update_pixels(PBVH *pbvh,
 #endif
 }
 
-Triangles &BKE_pbvh_pixels_triangles_get(PBVHNode &node)
+NodeData &BKE_pbvh_pixels_node_data_get(PBVHNode &node)
 {
   BLI_assert(node.pixels.node_data != nullptr);
   NodeData *node_data = static_cast(node.pixels.node_data);
-  return node_data->triangles;
-}
-
-UDIMTilePixels *BKE_pbvh_pixels_tile_data_get(PBVHNode &node,
-  const image::ImageTileWrapper 
&image_tile)
-{
-  BLI_assert(node.pixels.node_data != nullptr);
-  NodeData *node_data = static_cast(node.pixels.node_data);
-  return node_data->find_tile_data(image_tile);
+  return *node_data;
 }
 
 void BKE_pbvh_pixels_mark_dirty(PBVHNode &node)
diff --git a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc 
b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
index 2c4e7553ef3..2c587656ef1 100644
--- a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
@@ -291,14 +291,15 @@ static void do_paint_pixels(void *__restrict userdata,
   const Brush *brush = data->brush;
   PBVHNode *node = data->nodes[n];
 
-  Triangles &triangles = BKE_pbvh_pixels_triangles_get(*node);
+  NodeData &node_data = BKE_pbvh_pixels_node_data_get(*node);
+
   /* Propagate vertex brush test to triangle. This should be extended with 
brush overlapping edges
* and faces only. */
   /* TODO(jbakker) move to user data. to reduce reallocation. */
-  std::vector triangle_brush_test_results(triangles.size());
+  std::vector triangle_brush_test_results(node_data.triangles.size());
 
-  for (int triangle_index = 0; triangle_index < triangles.size(); 
triangle_index++) {
-TrianglePaintInput &triangle = triangles.get_paint_input(triangle_index);
+  for (int triangle_index = 0; triangle_index < node_data.triangles.size(); 
triangle_index++) {
+TrianglePaintInput &triangle = 
node_data.triangles.get_paint_input(triangle_index);
 int3 &vert_indices = triangle.vert_indices;
 for (int i = 0; i < 3; i++) {
   triangle_brush_test_results[triangle_index] = 
triangle_brush_test_results[triangle_index] ||
@@ -313,40 +314,39 @@ static void do_paint_pixels(void *__restrict userdata,
 
   ImageUser image_user = *data->image_data.image_user;
   bool pixels_updated = false;
-  LISTBASE_FOREACH (ImageTile *, tile, &data->image_data.image->tiles) {
-ImageTileWrapper image_tile(tile);
-image_user.tile = image_tile.get_tile_number();
-UDIMTilePixels *tile_data = BKE_pbvh_pixels_tile_data_get(*node, 
image_tile);
-if (tile_data == nullptr) {
-  /* This node doesn't paint on this tile. */
-  continue;
-}
-
-ImBuf *image_buffer = BKE_image_acquire_ibuf(data->image_data.image, 
&image_user, nullptr);
-if (image_buffer == nullptr) {
-  continue;
-}
-
-for (const PackedPixelRow &pixel_row : tile_data->pixel_rows) {
-  if (!triangle_brush_test_results[pixel_row.triangle_index]) {
-continue;
-  }
-  bool pixels_painted = false;
-  if (image_buffer->rect_float != nullptr) {
-pixels_painted = kernel_float4.paint(triangles, pixel_row, 
image_buffer);
-  }
-  else {
-pixels_painted = kernel_byte4.paint(triangles, pixel_row, 
image_buffer);
-  }
-
-  if (pixels_painted) {
-tile_data->mark_dirty(pixel_

[Bf-blender-cvs] [cf8b29950bf] temp-T96710-pbvh-pixels: Don't call a function to update the node state.

2022-04-12 Thread Jeroen Bakker
Commit: cf8b29950bf43fcccfcd8b2172cc8a166faab0a3
Author: Jeroen Bakker
Date:   Tue Apr 12 12:10:11 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rBcf8b29950bf43fcccfcd8b2172cc8a166faab0a3

Don't call a function to update the node state.

===

M   source/blender/blenkernel/BKE_pbvh_pixels.hh
M   source/blender/blenkernel/intern/pbvh_pixels.cc
M   source/blender/editors/sculpt_paint/sculpt_paint_image.cc

===

diff --git a/source/blender/blenkernel/BKE_pbvh_pixels.hh 
b/source/blender/blenkernel/BKE_pbvh_pixels.hh
index 92d5b84be72..12f420cfe32 100644
--- a/source/blender/blenkernel/BKE_pbvh_pixels.hh
+++ b/source/blender/blenkernel/BKE_pbvh_pixels.hh
@@ -223,7 +223,6 @@ struct NodeData {
 };
 
 NodeData &BKE_pbvh_pixels_node_data_get(PBVHNode &node);
-void BKE_pbvh_pixels_mark_dirty(PBVHNode &node);
 void BKE_pbvh_pixels_mark_image_dirty(PBVHNode &node, Image &image, ImageUser 
&image_user);
 /** Extend pixels to fix uv seams for the given nodes. */
 void BKE_pbvh_pixels_fix_seams(PBVH &pbvh,
diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc 
b/source/blender/blenkernel/intern/pbvh_pixels.cc
index bcb97624566..1eae3fa5537 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -374,13 +374,6 @@ NodeData &BKE_pbvh_pixels_node_data_get(PBVHNode &node)
   return *node_data;
 }
 
-void BKE_pbvh_pixels_mark_dirty(PBVHNode &node)
-{
-  BLI_assert(node.pixels.node_data != nullptr);
-  NodeData *node_data = static_cast(node.pixels.node_data);
-  node_data->flags.dirty |= true;
-}
-
 void BKE_pbvh_pixels_mark_image_dirty(PBVHNode &node, Image &image, ImageUser 
&image_user)
 {
   BLI_assert(node.pixels.node_data != nullptr);
diff --git a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc 
b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
index 2c587656ef1..c293b28597a 100644
--- a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
@@ -349,9 +349,7 @@ static void do_paint_pixels(void *__restrict userdata,
 }
   }
 
-  if (pixels_updated) {
-BKE_pbvh_pixels_mark_dirty(*node);
-  }
+  node_data.flags.dirty |= pixels_updated;
 }
 
 static void do_mark_dirty_regions(void *__restrict userdata,

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


[Bf-blender-cvs] [09478756373] temp-T96710-pbvh-pixels: Remove image locking.

2022-04-12 Thread Jeroen Bakker
Commit: 09478756373c97cd6d6ad0ce08f5228abcbfe7e3
Author: Jeroen Bakker
Date:   Tue Apr 12 11:45:36 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB09478756373c97cd6d6ad0ce08f5228abcbfe7e3

Remove image locking.

===

M   source/blender/blenkernel/intern/pbvh_pixels.cc
M   source/blender/editors/sculpt_paint/sculpt_paint_image.cc

===

diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc 
b/source/blender/blenkernel/intern/pbvh_pixels.cc
index 6ffa56f647b..b4f8c6f8265 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -395,17 +395,16 @@ void BKE_pbvh_pixels_mark_image_dirty(PBVHNode &node, 
Image &image, ImageUser &i
   NodeData *node_data = static_cast(node.pixels.node_data);
   if (node_data->flags.dirty) {
 ImageUser local_image_user = image_user;
-void *image_lock;
 LISTBASE_FOREACH (ImageTile *, tile, &image.tiles) {
   image::ImageTileWrapper image_tile(tile);
   local_image_user.tile = image_tile.get_tile_number();
-  ImBuf *image_buffer = BKE_image_acquire_ibuf(&image, &local_image_user, 
&image_lock);
+  ImBuf *image_buffer = BKE_image_acquire_ibuf(&image, &local_image_user, 
nullptr);
   if (image_buffer == nullptr) {
 continue;
   }
 
   node_data->mark_region(image, image_tile, *image_buffer);
-  BKE_image_release_ibuf(&image, image_buffer, image_lock);
+  BKE_image_release_ibuf(&image, image_buffer, nullptr);
 }
 node_data->flags.dirty = false;
   }
diff --git a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc 
b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
index 2a4a7c45146..2c4e7553ef3 100644
--- a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
@@ -311,8 +311,6 @@ static void do_paint_pixels(void *__restrict userdata,
   PaintingKernel kernel_float4(ss, brush, thread_id, mvert);
   PaintingKernel kernel_byte4(ss, brush, thread_id, mvert);
 
-  /* TODO: should we lock? */
-  void *image_lock;
   ImageUser image_user = *data->image_data.image_user;
   bool pixels_updated = false;
   LISTBASE_FOREACH (ImageTile *, tile, &data->image_data.image->tiles) {
@@ -324,7 +322,7 @@ static void do_paint_pixels(void *__restrict userdata,
   continue;
 }
 
-ImBuf *image_buffer = BKE_image_acquire_ibuf(data->image_data.image, 
&image_user, &image_lock);
+ImBuf *image_buffer = BKE_image_acquire_ibuf(data->image_data.image, 
&image_user, nullptr);
 if (image_buffer == nullptr) {
   continue;
 }
@@ -346,7 +344,7 @@ static void do_paint_pixels(void *__restrict userdata,
   }
 }
 
-BKE_image_release_ibuf(data->image_data.image, image_buffer, image_lock);
+BKE_image_release_ibuf(data->image_data.image, image_buffer, nullptr);
 
 pixels_updated |= tile_data->flags.dirty;
   }

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


[Bf-blender-cvs] [b7e511373a2] temp-T96710-pbvh-pixels: Use primitives stored in PBVH.

2022-04-12 Thread Jeroen Bakker
Commit: b7e511373a215375296f8483320273ad315a94ca
Author: Jeroen Bakker
Date:   Tue Apr 12 11:10:45 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rBb7e511373a215375296f8483320273ad315a94ca

Use primitives stored in PBVH.

===

M   source/blender/blenkernel/BKE_pbvh.h
M   source/blender/blenkernel/intern/pbvh_pixels.cc
M   source/blender/editors/sculpt_paint/sculpt.c

===

diff --git a/source/blender/blenkernel/BKE_pbvh.h 
b/source/blender/blenkernel/BKE_pbvh.h
index 0e33de2b9ac..e6c591bb533 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -143,11 +143,9 @@ void BKE_pbvh_build_bmesh(PBVH *pbvh,
   int cd_face_node_offset);
 
 void BKE_pbvh_build_pixels(PBVH *pbvh,
-   const struct MeshElemMap *pmap,
const struct MPoly *mpoly,
const struct MLoop *mloop,
struct CustomData *ldata,
-   int totpoly,
struct Image *image,
struct ImageUser *image_user);
 void BKE_pbvh_free(PBVH *pbvh);
diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc 
b/source/blender/blenkernel/intern/pbvh_pixels.cc
index a60b3e816f5..6ffa56f647b 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -102,36 +102,19 @@ static void extract_barycentric_pixels(UDIMTilePixels 
&tile_data,
   }
 }
 
-static void init_triangles(PBVH *pbvh,
-   PBVHNode *node,
-   NodeData *node_data,
-   const MeshElemMap *pmap,
-   const MPoly *mpoly,
-   const MLoop *mloop,
-   std::vector &visited_polygons)
+static void init_triangles(
+PBVH *pbvh, PBVHNode *node, NodeData *node_data, const MPoly *mpoly, const 
MLoop *mloop)
 {
-  PBVHVertexIter vd;
-
-  BKE_pbvh_vertex_iter_begin (pbvh, node, vd, PBVH_ITER_UNIQUE) {
-const MeshElemMap *vert_map = &pmap[vd.index];
-for (int j = 0; j < pmap[vd.index].count; j++) {
-  const int poly_index = vert_map->indices[j];
-
-  if (visited_polygons[poly_index]) {
-continue;
-  }
-  visited_polygons[poly_index] = true;
-
-  const MPoly *p = &mpoly[poly_index];
-  const MLoop *loopstart = &mloop[p->loopstart];
-  for (int l = 0; l < p->totloop - 2; l++) {
-node_data->triangles.append(int3(loopstart[0].v, loopstart[l + 1].v, 
loopstart[l + 2].v),
-int3(p->loopstart, p->loopstart + l + 1, 
p->loopstart + l + 2),
-poly_index);
-  }
+  for (int i = 0; i < node->totprim; i++) {
+const MLoopTri *lt = &pbvh->looptri[node->prim_indices[i]];
+const MPoly *p = &mpoly[lt->poly];
+for (int l = 0; l < p->totloop - 2; l++) {
+  node_data->triangles.append(
+  int3(mloop[lt->tri[0]].v, mloop[lt->tri[1]].v, mloop[lt->tri[2]].v),
+  int3(lt->tri[0], lt->tri[1], lt->tri[2]),
+  lt->poly);
 }
   }
-  BKE_pbvh_vertex_iter_end;
 }
 
 struct EncodePixelsUserData {
@@ -213,23 +196,6 @@ static bool should_pixels_be_updated(PBVHNode *node)
   return true;
 }
 
-/**
- * Does the given node contains a list with polygons it owns.
- *
- * The owning polygons are stored per triangle inside the node.
- */
-static bool contains_polygons(PBVHNode *node)
-{
-  if ((node->flag & PBVH_Leaf) == 0) {
-return false;
-  }
-  NodeData *node_data = static_cast(node->pixels.node_data);
-  if (node_data == nullptr) {
-return false;
-  }
-  return true;
-}
-
 static int64_t count_nodes_to_update(PBVH *pbvh)
 {
   int64_t result = 0;
@@ -251,9 +217,7 @@ static int64_t count_nodes_to_update(PBVH *pbvh)
  *
  * returns if there were any nodes found (true).
  */
-static bool find_nodes_to_update(PBVH *pbvh,
- Vector &r_nodes_to_update,
- std::vector &r_visited_polygons)
+static bool find_nodes_to_update(PBVH *pbvh, Vector 
&r_nodes_to_update)
 {
   int64_t nodes_to_update_len = count_nodes_to_update(pbvh);
   if (nodes_to_update_len == 0) {
@@ -264,26 +228,19 @@ static bool find_nodes_to_update(PBVH *pbvh,
 
   for (int n = 0; n < pbvh->totnode; n++) {
 PBVHNode *node = &pbvh->nodes[n];
-if (should_pixels_be_updated(node)) {
-  r_nodes_to_update.append(node);
-  node->flag = static_cast(node->flag | PBVH_RebuildPixels);
+if (!should_pixels_be_updated(node)) {
+  continue;
+}
+r_nodes_to_update.append(node);
+node->flag = static_cast(node->flag | PBVH_RebuildPixels);
 
-  if (node->pixels.node_data == nullptr) {
-NodeData *node_data = MEM_new(__func__);
-  

[Bf-blender-cvs] [798db23477c] temp-T96710-pbvh-pixels: Renamed inner type to ImageBuffer.

2022-04-12 Thread Jeroen Bakker
Commit: 798db23477c02367054048efded9a3b107f8dfa4
Author: Jeroen Bakker
Date:   Tue Apr 12 11:35:01 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB798db23477c02367054048efded9a3b107f8dfa4

Renamed inner type to ImageBuffer.

===

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

===

diff --git a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc 
b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
index 4b1a40d40e6..2a4a7c45146 100644
--- a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
@@ -70,7 +70,7 @@ class ImageBufferFloat4 {
 pixel_offset = int(image_pixel_position.y) * image_buffer->x + 
int(image_pixel_position.x);
   }
 
-  void goto_next_pixel()
+  void next_pixel()
   {
 pixel_offset += 1;
   }
@@ -80,7 +80,7 @@ class ImageBufferFloat4 {
 return &image_buffer->rect_float[pixel_offset * 4];
   }
 
-  void store_pixel(ImBuf *image_buffer, const float4 pixel_data) const
+  void write_pixel(ImBuf *image_buffer, const float4 pixel_data) const
   {
 copy_v4_v4(&image_buffer->rect_float[pixel_offset * 4], pixel_data);
   }
@@ -102,7 +102,7 @@ class ImageBufferByte4 {
 pixel_offset = int(image_pixel_position.y) * image_buffer->x + 
int(image_pixel_position.x);
   }
 
-  void goto_next_pixel()
+  void next_pixel()
   {
 pixel_offset += 1;
   }
@@ -116,7 +116,7 @@ class ImageBufferByte4 {
 return result;
   }
 
-  void store_pixel(ImBuf *image_buffer, const float4 pixel_data) const
+  void write_pixel(ImBuf *image_buffer, const float4 pixel_data) const
   {
 rgba_float_to_uchar(
 static_cast(static_cast(&image_buffer->rect[pixel_offset])), pixel_data);
@@ -128,8 +128,8 @@ class ImageBufferByte4 {
   }
 };
 
-template class PaintingKernel {
-  ImagePixelAccessor image_accessor;
+template class PaintingKernel {
+  ImageBuffer image_accessor;
 
   SculptSession *ss;
   const Brush *brush;
@@ -170,7 +170,7 @@ template class PaintingKernel {
 for (int x = 0; x < encoded_pixels.num_pixels; x++) {
   if (!brush_test_fn(&test, pixel_pos)) {
 pixel_pos += delta_pixel_pos;
-image_accessor.goto_next_pixel();
+image_accessor.next_pixel();
 continue;
   }
 
@@ -185,10 +185,10 @@ template class 
PaintingKernel {
   blend_color_mix_float(buffer_color, color, paint_color);
   buffer_color *= brush->alpha;
   IMB_blend_color_float(color, color, buffer_color, 
static_cast(brush->blend));
-  image_accessor.store_pixel(image_buffer, color);
+  image_accessor.write_pixel(image_buffer, color);
   pixels_painted = true;
 
-  image_accessor.goto_next_pixel();
+  image_accessor.next_pixel();
   pixel_pos += delta_pixel_pos;
 }
 return pixels_painted;
@@ -244,7 +244,8 @@ template class PaintingKernel {
 return result - start_pixel;
   }
 
-  float3 init_pixel_pos(const TrianglePaintInput &triangle, const float3 
&barycentric_weights) const
+  float3 init_pixel_pos(const TrianglePaintInput &triangle,
+const float3 &barycentric_weights) const
   {
 const int3 &vert_indices = triangle.vert_indices;
 float3 result;

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


[Bf-blender-cvs] [21caf27fa9f] temp-T96710-pbvh-pixels: Remove Pixel class.

2022-04-12 Thread Jeroen Bakker
Commit: 21caf27fa9f6c50e63145d094e94097bad1a83f1
Author: Jeroen Bakker
Date:   Tue Apr 12 11:22:00 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB21caf27fa9f6c50e63145d094e94097bad1a83f1

Remove Pixel class.

===

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

===

diff --git a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc 
b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
index 9196b062800..4b1a40d40e6 100644
--- a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
@@ -59,24 +59,6 @@ struct TexturePaintingUserData {
   std::vector vertex_brush_tests;
 };
 
-struct Pixel {
-  /** Local position of the pixel on the surface. */
-  float3 pos;
-
-  Pixel &operator+=(const Pixel &other)
-  {
-pos += other.pos;
-return *this;
-  }
-
-  Pixel operator-(const Pixel &other) const
-  {
-Pixel result;
-result.pos = pos - other.pos;
-return result;
-  }
-};
-
 /** Reading and writing to image buffer with 4 float channels. */
 class ImageBufferFloat4 {
  private:
@@ -182,12 +164,12 @@ template class 
PaintingKernel {
 }
 image_accessor.set_image_position(image_buffer, 
encoded_pixels.start_image_coordinate);
 const TrianglePaintInput triangle = 
triangles.get_paint_input(encoded_pixels.triangle_index);
-Pixel pixel = get_start_pixel(triangle, encoded_pixels);
-const Pixel add_pixel = get_delta_pixel(triangle, encoded_pixels, pixel);
+float3 pixel_pos = get_start_pixel_pos(triangle, encoded_pixels);
+const float3 delta_pixel_pos = get_delta_pixel_pos(triangle, 
encoded_pixels, pixel_pos);
 bool pixels_painted = false;
 for (int x = 0; x < encoded_pixels.num_pixels; x++) {
-  if (!brush_test_fn(&test, pixel.pos)) {
-pixel += add_pixel;
+  if (!brush_test_fn(&test, pixel_pos)) {
+pixel_pos += delta_pixel_pos;
 image_accessor.goto_next_pixel();
 continue;
   }
@@ -197,7 +179,7 @@ template class PaintingKernel {
   const float3 face_normal(0.0f, 0.0f, 0.0f);
   const float mask = 0.0f;
   const float falloff_strength = SCULPT_brush_strength_factor(
-  ss, brush, pixel.pos, sqrtf(test.dist), normal, face_normal, mask, 
0, thread_id);
+  ss, brush, pixel_pos, sqrtf(test.dist), normal, face_normal, mask, 
0, thread_id);
   float4 paint_color = brush_color * falloff_strength * brush_strength;
   float4 buffer_color;
   blend_color_mix_float(buffer_color, color, paint_color);
@@ -207,7 +189,7 @@ template class PaintingKernel {
   pixels_painted = true;
 
   image_accessor.goto_next_pixel();
-  pixel += add_pixel;
+  pixel_pos += delta_pixel_pos;
 }
 return pixels_painted;
   }
@@ -241,31 +223,32 @@ template class 
PaintingKernel {
   }
 
   /**
-   * Extract the staring pixel from the given encoded_pixels belonging to the 
triangle.
+   * Extract the starting pixel position from the given encoded_pixels 
belonging to the triangle.
*/
-  Pixel get_start_pixel(const TrianglePaintInput &triangle,
-const PackedPixelRow &encoded_pixels) const
+  float3 get_start_pixel_pos(const TrianglePaintInput &triangle,
+ const PackedPixelRow &encoded_pixels) const
   {
-return init_pixel(triangle, encoded_pixels.start_barycentric_coord);
+return init_pixel_pos(triangle, encoded_pixels.start_barycentric_coord);
   }
 
   /**
-   * Extract the delta pixel that will be used to advance a Pixel instance to 
the next pixel.
+   * Extract the delta pixel position that will be used to advance a Pixel 
instance to the next
+   * pixel.
*/
-  Pixel get_delta_pixel(const TrianglePaintInput &triangle,
-const PackedPixelRow &encoded_pixels,
-const Pixel &start_pixel) const
+  float3 get_delta_pixel_pos(const TrianglePaintInput &triangle,
+ const PackedPixelRow &encoded_pixels,
+ const float3 &start_pixel) const
   {
-Pixel result = init_pixel(
+float3 result = init_pixel_pos(
 triangle, encoded_pixels.start_barycentric_coord + 
triangle.delta_barycentric_coord_u);
 return result - start_pixel;
   }
 
-  Pixel init_pixel(const TrianglePaintInput &triangle, const float3 
&barycentric_weights) const
+  float3 init_pixel_pos(const TrianglePaintInput &triangle, const float3 
&barycentric_weights) const
   {
 const int3 &vert_indices = triangle.vert_indices;
-Pixel result;
-interp_v3_v3v3v3(result.pos,
+float3 result;
+interp_v3_v3v3v3(result,
  mvert[vert_indices[0]].co,
  mvert[vert_indices[1]].co,
  mvert[vert_indices[2]].co,


[Bf-blender-cvs] [7c181c8982f] temp-T96710-pbvh-pixels: Removed VisitedPolygons.

2022-04-12 Thread Jeroen Bakker
Commit: 7c181c8982f6154479daffd1364adc9450551ff7
Author: Jeroen Bakker
Date:   Tue Apr 12 10:41:43 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB7c181c8982f6154479daffd1364adc9450551ff7

Removed VisitedPolygons.

===

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

===

diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc 
b/source/blender/blenkernel/intern/pbvh_pixels.cc
index 84cb3888d74..de07b3f0cad 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -27,30 +27,6 @@ namespace blender::bke::pbvh::pixels {
 constexpr bool USE_WATERTIGHT_CHECK = false;
 constexpr bool USE_WATERTIGHT_SEAM_CHECK = true;
 
-/**
- * Keep track of visited polygons.
- *
- * Uses a std::vector to reduce memory requirements.
- * TODO(jbakker): Should be replaced by BLI bool vector when available 
{D14006}.
- */
-class VisitedPolygons : std::vector {
- public:
-  VisitedPolygons(int64_t polygon_len) : std::vector(polygon_len)
-  {
-  }
-
-  /**
-   * Check of the given poly_index has already been visited.
-   * Marks the given polygon as visited and return the previous visited state.
-   */
-  bool tag_visited(const int poly_index)
-  {
-bool visited = (*this)[poly_index];
-(*this)[poly_index] = true;
-return visited;
-  }
-};
-
 /**
  * @brief Calculate the delta of two neighbour uv coordinates in the given 
image buffer.
  */
@@ -132,7 +108,7 @@ static void init_triangles(PBVH *pbvh,
const MeshElemMap *pmap,
const MPoly *mpoly,
const MLoop *mloop,
-   VisitedPolygons &visited_polygons)
+   std::vector &visited_polygons)
 {
   PBVHVertexIter vd;
 
@@ -140,9 +116,11 @@ static void init_triangles(PBVH *pbvh,
 const MeshElemMap *vert_map = &pmap[vd.index];
 for (int j = 0; j < pmap[vd.index].count; j++) {
   const int poly_index = vert_map->indices[j];
-  if (visited_polygons.tag_visited(poly_index)) {
+
+  if (visited_polygons[poly_index]) {
 continue;
   }
+  visited_polygons[poly_index] = true;
 
   const MPoly *p = &mpoly[poly_index];
   const MLoop *loopstart = &mloop[p->loopstart];
@@ -275,7 +253,7 @@ static int64_t count_nodes_to_update(PBVH *pbvh)
  */
 static bool find_nodes_to_update(PBVH *pbvh,
  Vector &r_nodes_to_update,
- VisitedPolygons &r_visited_polygons)
+ std::vector &r_visited_polygons)
 {
   int64_t nodes_to_update_len = count_nodes_to_update(pbvh);
   if (nodes_to_update_len == 0) {
@@ -304,7 +282,7 @@ static bool find_nodes_to_update(PBVH *pbvh,
* nodes. */
   Triangles &triangles = BKE_pbvh_pixels_triangles_get(*node);
   for (int &poly_index : triangles.poly_indices) {
-r_visited_polygons.tag_visited(poly_index);
+r_visited_polygons[poly_index] = true;
   }
 }
   }
@@ -369,7 +347,7 @@ static void update_pixels(PBVH *pbvh,
   struct ImageUser *image_user)
 {
   Vector nodes_to_update;
-  VisitedPolygons visited_polygons(tot_poly);
+  std::vector visited_polygons(tot_poly);
 
   if (!find_nodes_to_update(pbvh, nodes_to_update, visited_polygons)) {
 return;

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


[Bf-blender-cvs] [b57ea0330cd] temp-T96710-pbvh-pixels: Remve extractor namespace.

2022-04-12 Thread Jeroen Bakker
Commit: b57ea0330cdcdc2106f4bfd04ca9133d5fc0b51e
Author: Jeroen Bakker
Date:   Tue Apr 12 10:37:40 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rBb57ea0330cdcdc2106f4bfd04ca9133d5fc0b51e

Remve extractor namespace.

===

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

===

diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc 
b/source/blender/blenkernel/intern/pbvh_pixels.cc
index 7bc3e1296a3..84cb3888d74 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -20,7 +20,7 @@
 
 #include "pbvh_intern.h"
 
-namespace blender::bke::pbvh::pixels::extractor {
+namespace blender::bke::pbvh::pixels {
 
 /** Durind debugging this check could be enabled. It will write to each image 
pixel that is covered
  * by the pbvh. */
@@ -435,10 +435,6 @@ static void update_pixels(PBVH *pbvh,
 #endif
 }
 
-}  // namespace blender::bke::pbvh::pixels::extractor
-
-namespace blender::bke::pbvh::pixels {
-
 Triangles &BKE_pbvh_pixels_triangles_get(PBVHNode &node)
 {
   BLI_assert(node.pixels.node_data != nullptr);
@@ -446,7 +442,8 @@ Triangles &BKE_pbvh_pixels_triangles_get(PBVHNode &node)
   return node_data->triangles;
 }
 
-UDIMTilePixels *BKE_pbvh_pixels_tile_data_get(PBVHNode &node, const 
image::ImageTileWrapper &image_tile)
+UDIMTilePixels *BKE_pbvh_pixels_tile_data_get(PBVHNode &node,
+  const image::ImageTileWrapper 
&image_tile)
 {
   BLI_assert(node.pixels.node_data != nullptr);
   NodeData *node_data = static_cast(node.pixels.node_data);
@@ -485,7 +482,6 @@ void BKE_pbvh_pixels_mark_image_dirty(PBVHNode &node, Image 
&image, ImageUser &i
 }  // namespace blender::bke::pbvh::pixels
 
 extern "C" {
-using namespace blender::bke::pbvh::pixels::extractor;
 using namespace blender::bke::pbvh::pixels;
 
 void BKE_pbvh_build_pixels(PBVH *pbvh,

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


[Bf-blender-cvs] [f49adba9c14] temp-T96710-pbvh-pixels: Removed doxygen comments.

2022-04-12 Thread Jeroen Bakker
Commit: f49adba9c14acc53c3d5795ae9fa7aec93db59f9
Author: Jeroen Bakker
Date:   Tue Apr 12 10:43:24 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rBf49adba9c14acc53c3d5795ae9fa7aec93db59f9

Removed doxygen comments.

===

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

===

diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc 
b/source/blender/blenkernel/intern/pbvh_pixels.cc
index de07b3f0cad..a60b3e816f5 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -28,7 +28,7 @@ constexpr bool USE_WATERTIGHT_CHECK = false;
 constexpr bool USE_WATERTIGHT_SEAM_CHECK = true;
 
 /**
- * @brief Calculate the delta of two neighbour uv coordinates in the given 
image buffer.
+ * Calculate the delta of two neighbour uv coordinates in the given image 
buffer.
  */
 static float3 calc_barycentric_delta(const float2 uvs[3],
  const float2 start_uv,

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


[Bf-blender-cvs] [167da681336] temp-T96710-pbvh-pixels: Remove unused code.

2022-04-12 Thread Jeroen Bakker
Commit: 167da68133696bb0e0865a9017cc00b6edc7a2da
Author: Jeroen Bakker
Date:   Tue Apr 12 10:35:01 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB167da68133696bb0e0865a9017cc00b6edc7a2da

Remove unused code.

===

M   source/blender/blenkernel/BKE_pbvh_pixels.hh

===

diff --git a/source/blender/blenkernel/BKE_pbvh_pixels.hh 
b/source/blender/blenkernel/BKE_pbvh_pixels.hh
index 1e70eb5cbbf..26d90639fc0 100644
--- a/source/blender/blenkernel/BKE_pbvh_pixels.hh
+++ b/source/blender/blenkernel/BKE_pbvh_pixels.hh
@@ -181,8 +181,6 @@ struct NodeData {
 bool dirty : 1;
   } flags;
 
-  rctf uv_region;
-
   Vector tiles;
   Triangles triangles;
 
@@ -191,8 +189,6 @@ struct NodeData {
 flags.dirty = false;
   }
 
-  void init_pixels_rasterization(Object *ob, PBVHNode *node, ImBuf 
*image_buffer);
-
   UDIMTilePixels *find_tile_data(const image::ImageTileWrapper &image_tile)
   {
 for (UDIMTilePixels &tile : tiles) {

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


[Bf-blender-cvs] [701c225675e] temp-T96710-pbvh-pixels: Encapsulate clear_dirty/mark_dirty.

2022-04-12 Thread Jeroen Bakker
Commit: 701c225675e334e35cb42b95e153ed547af83a2b
Author: Jeroen Bakker
Date:   Tue Apr 12 10:28:47 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB701c225675e334e35cb42b95e153ed547af83a2b

Encapsulate clear_dirty/mark_dirty.

===

M   source/blender/blenkernel/BKE_pbvh_pixels.hh
M   source/blender/editors/sculpt_paint/sculpt_paint_image.cc

===

diff --git a/source/blender/blenkernel/BKE_pbvh_pixels.hh 
b/source/blender/blenkernel/BKE_pbvh_pixels.hh
index a2dc79bae7f..1e70eb5cbbf 100644
--- a/source/blender/blenkernel/BKE_pbvh_pixels.hh
+++ b/source/blender/blenkernel/BKE_pbvh_pixels.hh
@@ -161,10 +161,16 @@ struct UDIMTilePixels {
 BLI_rcti_init_minmax(&dirty_region);
   }
 
-  void mark_region(Image &image, const image::ImageTileWrapper &image_tile, 
ImBuf &image_buffer)
+  void mark_dirty(const PackedPixelRow &pixel_row)
+  {
+int2 start_image_coord(pixel_row.start_image_coordinate.x, 
pixel_row.start_image_coordinate.y);
+BLI_rcti_do_minmax_v(&dirty_region, start_image_coord);
+BLI_rcti_do_minmax_v(&dirty_region, start_image_coord + 
int2(pixel_row.num_pixels + 1, 0));
+flags.dirty = true;
+  }
+
+  void clear_dirty()
   {
-BKE_image_partial_update_mark_region(
-&image, image_tile.image_tile, &image_buffer, &dirty_region);
 BLI_rcti_init_minmax(&dirty_region);
 flags.dirty = false;
   }
@@ -200,8 +206,10 @@ struct NodeData {
   void mark_region(Image &image, const image::ImageTileWrapper &image_tile, 
ImBuf &image_buffer)
   {
 UDIMTilePixels *tile = find_tile_data(image_tile);
-if (tile) {
-  tile->mark_region(image, image_tile, image_buffer);
+if (tile && tile->flags.dirty) {
+  BKE_image_partial_update_mark_region(
+  &image, image_tile.image_tile, &image_buffer, &tile->dirty_region);
+  tile->clear_dirty();
 }
   }
 
@@ -219,7 +227,8 @@ struct NodeData {
 };
 
 Triangles &BKE_pbvh_pixels_triangles_get(PBVHNode &node);
-UDIMTilePixels *BKE_pbvh_pixels_tile_data_get(PBVHNode &node, const 
image::ImageTileWrapper &image_tile);
+UDIMTilePixels *BKE_pbvh_pixels_tile_data_get(PBVHNode &node,
+  const image::ImageTileWrapper 
&image_tile);
 void BKE_pbvh_pixels_mark_dirty(PBVHNode &node);
 void BKE_pbvh_pixels_mark_image_dirty(PBVHNode &node, Image &image, ImageUser 
&image_user);
 /** Extend pixels to fix uv seams for the given nodes. */
diff --git a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc 
b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
index c50db65d425..9196b062800 100644
--- a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
@@ -358,12 +358,7 @@ static void do_paint_pixels(void *__restrict userdata,
   }
 
   if (pixels_painted) {
-int2 start_image_coord(pixel_row.start_image_coordinate.x,
-   pixel_row.start_image_coordinate.y);
-BLI_rcti_do_minmax_v(&tile_data->dirty_region, start_image_coord);
-BLI_rcti_do_minmax_v(&tile_data->dirty_region,
- start_image_coord + int2(pixel_row.num_pixels + 
1, 0));
-tile_data->flags.dirty = true;
+tile_data->mark_dirty(pixel_row);
   }
 }

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


[Bf-blender-cvs] [9112d13e69d] temp-T96710-pbvh-pixels: Rename TIleData to UDIMTilePixels

2022-04-12 Thread Jeroen Bakker
Commit: 9112d13e69dbae6a2b5841ef7acdab110f9472f5
Author: Jeroen Bakker
Date:   Tue Apr 12 09:53:20 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB9112d13e69dbae6a2b5841ef7acdab110f9472f5

Rename TIleData to UDIMTilePixels

===

M   source/blender/blenkernel/BKE_pbvh_pixels.hh
M   source/blender/blenkernel/intern/pbvh_pixels.cc
M   source/blender/blenkernel/intern/pbvh_pixels_seams.cc
M   source/blender/editors/sculpt_paint/sculpt_paint_image.cc

===

diff --git a/source/blender/blenkernel/BKE_pbvh_pixels.hh 
b/source/blender/blenkernel/BKE_pbvh_pixels.hh
index a9680cadc58..a2dc79bae7f 100644
--- a/source/blender/blenkernel/BKE_pbvh_pixels.hh
+++ b/source/blender/blenkernel/BKE_pbvh_pixels.hh
@@ -139,8 +139,13 @@ struct PackedPixelRow {
   ushort triangle_index;
 };
 
-struct TileData {
+/**
+ * Node pixel data containing the pixels for a single UDIM tile.
+ */
+struct UDIMTilePixels {
+  /** UDIM Tile number. */
   short tile_number;
+
   struct {
 bool dirty : 1;
   } flags;
@@ -150,7 +155,7 @@ struct TileData {
 
   Vector pixel_rows;
 
-  TileData()
+  UDIMTilePixels()
   {
 flags.dirty = false;
 BLI_rcti_init_minmax(&dirty_region);
@@ -172,7 +177,7 @@ struct NodeData {
 
   rctf uv_region;
 
-  Vector tiles;
+  Vector tiles;
   Triangles triangles;
 
   NodeData()
@@ -182,9 +187,9 @@ struct NodeData {
 
   void init_pixels_rasterization(Object *ob, PBVHNode *node, ImBuf 
*image_buffer);
 
-  TileData *find_tile_data(const image::ImageTileWrapper &image_tile)
+  UDIMTilePixels *find_tile_data(const image::ImageTileWrapper &image_tile)
   {
-for (TileData &tile : tiles) {
+for (UDIMTilePixels &tile : tiles) {
   if (tile.tile_number == image_tile.get_tile_number()) {
 return &tile;
   }
@@ -194,7 +199,7 @@ struct NodeData {
 
   void mark_region(Image &image, const image::ImageTileWrapper &image_tile, 
ImBuf &image_buffer)
   {
-TileData *tile = find_tile_data(image_tile);
+UDIMTilePixels *tile = find_tile_data(image_tile);
 if (tile) {
   tile->mark_region(image, image_tile, image_buffer);
 }
@@ -214,7 +219,7 @@ struct NodeData {
 };
 
 Triangles &BKE_pbvh_pixels_triangles_get(PBVHNode &node);
-TileData *BKE_pbvh_pixels_tile_data_get(PBVHNode &node, const 
image::ImageTileWrapper &image_tile);
+UDIMTilePixels *BKE_pbvh_pixels_tile_data_get(PBVHNode &node, const 
image::ImageTileWrapper &image_tile);
 void BKE_pbvh_pixels_mark_dirty(PBVHNode &node);
 void BKE_pbvh_pixels_mark_image_dirty(PBVHNode &node, Image &image, ImageUser 
&image_user);
 /** Extend pixels to fix uv seams for the given nodes. */
diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc 
b/source/blender/blenkernel/intern/pbvh_pixels.cc
index a77f592619c..7bc3e1296a3 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -86,7 +86,7 @@ static float3 calc_barycentric_delta_y(const ImBuf 
*image_buffer,
   return calc_barycentric_delta(uvs, start_uv, end_uv);
 }
 
-static void extract_barycentric_pixels(TileData &tile_data,
+static void extract_barycentric_pixels(UDIMTilePixels &tile_data,
const ImBuf *image_buffer,
const int triangle_index,
const float2 uvs[3],
@@ -182,7 +182,7 @@ static void do_encode_pixels(void *__restrict userdata,
 }
 
 float2 tile_offset = float2(image_tile.get_tile_offset());
-TileData tile_data;
+UDIMTilePixels tile_data;
 
 Triangles &triangles = node_data->triangles;
 for (int triangle_index = 0; triangle_index < triangles.size(); 
triangle_index++) {
@@ -328,7 +328,7 @@ static void apply_watertight_check(PBVH *pbvh, Image 
*image, ImageUser *image_us
 continue;
   }
   NodeData *node_data = static_cast(node->pixels.node_data);
-  TileData *tile_node_data = node_data->find_tile_data(image_tile);
+  UDIMTilePixels *tile_node_data = node_data->find_tile_data(image_tile);
   if (tile_node_data == nullptr) {
 continue;
   }
@@ -420,7 +420,7 @@ static void update_pixels(PBVH *pbvh,
   }
   NodeData *node_data = static_cast(node->pixels.node_data);
   compressed_data_len += node_data->triangles.mem_size();
-  for (const TileData &tile_data : node_data->tiles) {
+  for (const UDIMTilePixels &tile_data : node_data->tiles) {
 compressed_data_len += tile_data.encoded_pixels.size() * 
sizeof(PackedPixelRow);
 for (const PackedPixelRow &encoded_pixels : tile_data.encoded_pixels) {
   num_pixels += encoded_pixels.num_pixels;
@@ -446,7 +446,7 @@ Triangles &BKE_pbvh_pixels_triangles_get(PBVHNode &node)
   return node_data->triangles;
 }
 
-TileData *BKE_pbvh_pixels_tile_data_get(PBVHNode &node, const 
image::I

[Bf-blender-cvs] [9a0180e3e7e] temp-T96710-pbvh-pixels: Rename PixelsPackage to PackedPixelRow.

2022-04-12 Thread Jeroen Bakker
Commit: 9a0180e3e7e1c8f62d2550cadd7afc9e6ec3d3d5
Author: Jeroen Bakker
Date:   Tue Apr 12 09:49:32 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB9a0180e3e7e1c8f62d2550cadd7afc9e6ec3d3d5

Rename PixelsPackage to PackedPixelRow.

===

M   source/blender/blenkernel/BKE_pbvh_pixels.hh
M   source/blender/blenkernel/intern/pbvh_pixels.cc
M   source/blender/blenkernel/intern/pbvh_pixels_seams.cc
M   source/blender/editors/sculpt_paint/sculpt_paint_image.cc

===

diff --git a/source/blender/blenkernel/BKE_pbvh_pixels.hh 
b/source/blender/blenkernel/BKE_pbvh_pixels.hh
index 9b953dbee58..a9680cadc58 100644
--- a/source/blender/blenkernel/BKE_pbvh_pixels.hh
+++ b/source/blender/blenkernel/BKE_pbvh_pixels.hh
@@ -36,10 +36,25 @@ struct EncodedLoopIndices {
 
 struct TrianglePaintInput {
   int3 vert_indices;
-  float3 add_barycentric_coord_x;
-  float3 add_barycentric_coord_y;
+  /**
+   * Delta barycentric coordinates between 2 neighbouring UV's in the U 
direction.
+   *
+   * Only the first two coordinates are stored. The third should be 
recalculated
+   */
+  float3 delta_barycentric_coord_u;
+  /** Delta barycentric coordinates between 2 neighbouring UV's in the V 
direction. */
+  float3 delta_barycentric_coord_v;
 
-  TrianglePaintInput(const int3 vert_indices) : vert_indices(vert_indices)
+  /**
+   * Initially only the vert indices are known.
+   *
+   * delta_barycentric_coord_u/v are initialized in a later stage as it 
requires image tile
+   * dimensions.
+   */
+  TrianglePaintInput(const int3 vert_indices)
+  : vert_indices(vert_indices),
+delta_barycentric_coord_u(0.0f, 0.0f, 0.0f),
+delta_barycentric_coord_v(0.0f, 0.0f, 0.0f)
   {
   }
 };
@@ -113,7 +128,7 @@ struct Triangles {
 /**
  * Encode sequential pixels to reduce memory footprint.
  */
-struct PixelsPackage {
+struct PackedPixelRow {
   /** Barycentric coordinate of the first pixel. */
   float3 start_barycentric_coord;
   /** Image coordinate starting of the first pixel. */
@@ -124,8 +139,6 @@ struct PixelsPackage {
   ushort triangle_index;
 };
 
-using PixelPackages = Vector;
-
 struct TileData {
   short tile_number;
   struct {
@@ -135,7 +148,7 @@ struct TileData {
   /* Dirty region of the tile in image space. */
   rcti dirty_region;
 
-  PixelPackages packages;
+  Vector pixel_rows;
 
   TileData()
   {
diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc 
b/source/blender/blenkernel/intern/pbvh_pixels.cc
index ad8b810fdbc..a77f592619c 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -97,9 +97,9 @@ static void extract_barycentric_pixels(TileData &tile_data,
 {
   for (int y = miny; y < maxy; y++) {
 bool start_detected = false;
-PixelsPackage package;
-package.triangle_index = triangle_index;
-package.num_pixels = 0;
+PackedPixelRow pixel_row;
+pixel_row.triangle_index = triangle_index;
+pixel_row.num_pixels = 0;
 int x;
 
 for (x = minx; x < maxx; x++) {
@@ -110,8 +110,8 @@ static void extract_barycentric_pixels(TileData &tile_data,
   const bool is_inside = 
barycentric_inside_triangle_v2(barycentric_weights);
   if (!start_detected && is_inside) {
 start_detected = true;
-package.start_image_coordinate = ushort2(x, y);
-package.start_barycentric_coord = barycentric_weights;
+pixel_row.start_image_coordinate = ushort2(x, y);
+pixel_row.start_barycentric_coord = barycentric_weights;
   }
   else if (start_detected && !is_inside) {
 break;
@@ -121,8 +121,8 @@ static void extract_barycentric_pixels(TileData &tile_data,
 if (!start_detected) {
   continue;
 }
-package.num_pixels = x - package.start_image_coordinate.x;
-tile_data.packages.append(package);
+pixel_row.num_pixels = x - pixel_row.start_image_coordinate.x;
+tile_data.pixel_rows.append(pixel_row);
   }
 }
 
@@ -203,15 +203,15 @@ static void do_encode_pixels(void *__restrict userdata,
   const int maxx = min_ii(ceil(maxu * image_buffer->x), image_buffer->x);
 
   TrianglePaintInput &triangle = triangles.get_paint_input(triangle_index);
-  triangle.add_barycentric_coord_x = 
calc_barycentric_delta_x(image_buffer, uvs, minx, miny);
-  triangle.add_barycentric_coord_y = 
calc_barycentric_delta_y(image_buffer, uvs, minx, miny);
+  triangle.delta_barycentric_coord_u = 
calc_barycentric_delta_x(image_buffer, uvs, minx, miny);
+  triangle.delta_barycentric_coord_v = 
calc_barycentric_delta_y(image_buffer, uvs, minx, miny);
   extract_barycentric_pixels(
   tile_data, image_buffer, triangle_index, uvs, minx, miny, maxx, 
maxy);
 }
 
 BKE_image_release_ibuf(image, image_buffer, nullptr);
 
-if (tile_data.packages.is_empty()) {
+if (tile_data.pix

[Bf-blender-cvs] [10509846db8] temp-T96710-pbvh-pixels: Remove Triangle struct.

2022-04-12 Thread Jeroen Bakker
Commit: 10509846db8a7288d3dfeb293ffc24d7217502af
Author: Jeroen Bakker
Date:   Tue Apr 12 08:42:16 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB10509846db8a7288d3dfeb293ffc24d7217502af

Remove Triangle struct.

===

M   source/blender/blenkernel/BKE_pbvh_pixels.hh
M   source/blender/blenkernel/intern/pbvh_pixels.cc
M   source/blender/editors/sculpt_paint/sculpt_paint_image.cc

===

diff --git a/source/blender/blenkernel/BKE_pbvh_pixels.hh 
b/source/blender/blenkernel/BKE_pbvh_pixels.hh
index e04724e909b..9b953dbee58 100644
--- a/source/blender/blenkernel/BKE_pbvh_pixels.hh
+++ b/source/blender/blenkernel/BKE_pbvh_pixels.hh
@@ -34,21 +34,12 @@ struct EncodedLoopIndices {
   }
 };
 
-struct Triangle {
-  int3 loop_indices;
-  int3 vert_indices;
-  int poly_index;
-  float3 add_barycentric_coord_x;
-};
-
 struct TrianglePaintInput {
   int3 vert_indices;
   float3 add_barycentric_coord_x;
   float3 add_barycentric_coord_y;
 
-  TrianglePaintInput(const Triangle &triangle)
-  : vert_indices(triangle.vert_indices),
-add_barycentric_coord_x(triangle.add_barycentric_coord_x)
+  TrianglePaintInput(const int3 vert_indices) : vert_indices(vert_indices)
   {
   }
 };
@@ -73,11 +64,11 @@ struct Triangles {
   Vector loop_indices;
 
  public:
-  void append(const Triangle &triangle)
+  void append(const int3 vert_indices, const EncodedLoopIndices loop_indices, 
const int poly_index)
   {
-paint_input.append(TrianglePaintInput(triangle));
-loop_indices.append(triangle.loop_indices);
-poly_indices.append(triangle.poly_index);
+this->paint_input.append(TrianglePaintInput(vert_indices));
+this->loop_indices.append(loop_indices);
+this->poly_indices.append(poly_index);
   }
 
   int3 get_loop_indices(const int index) const
diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc 
b/source/blender/blenkernel/intern/pbvh_pixels.cc
index 1443d30240a..ad8b810fdbc 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -147,11 +147,9 @@ static void init_triangles(PBVH *pbvh,
   const MPoly *p = &mpoly[poly_index];
   const MLoop *loopstart = &mloop[p->loopstart];
   for (int l = 0; l < p->totloop - 2; l++) {
-Triangle triangle;
-triangle.loop_indices = int3(p->loopstart, p->loopstart + l + 1, 
p->loopstart + l + 2);
-triangle.vert_indices = int3(loopstart[0].v, loopstart[l + 1].v, 
loopstart[l + 2].v);
-triangle.poly_index = poly_index;
-node_data->triangles.append(triangle);
+node_data->triangles.append(int3(loopstart[0].v, loopstart[l + 1].v, 
loopstart[l + 2].v),
+int3(p->loopstart, p->loopstart + l + 1, 
p->loopstart + l + 2),
+poly_index);
   }
 }
   }
diff --git a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc 
b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
index 1530501b628..9414da42c58 100644
--- a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
@@ -261,7 +261,7 @@ template class PaintingKernel {
 return result - start_pixel;
   }
 
-  Pixel init_pixel(const TrianglePaintInput &triangle, const 
BarycentricWeights &weights) const
+  Pixel init_pixel(const TrianglePaintInput &triangle, const float3 
&barycentric_weights) const
   {
 const int3 &vert_indices = triangle.vert_indices;
 Pixel result;
@@ -269,7 +269,7 @@ template class PaintingKernel {
  mvert[vert_indices[0]].co,
  mvert[vert_indices[1]].co,
  mvert[vert_indices[2]].co,
- weights);
+ barycentric_weights);
 return result;
   }
 };

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


[Bf-blender-cvs] [67e831af28b] temp-T96710-pbvh-pixels: Remove BarycentricWeights.

2022-04-12 Thread Jeroen Bakker
Commit: 67e831af28be44c415a2ba1a851181ff557ae4f6
Author: Jeroen Bakker
Date:   Tue Apr 12 08:26:24 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB67e831af28be44c415a2ba1a851181ff557ae4f6

Remove BarycentricWeights.

===

M   source/blender/blenkernel/BKE_pbvh_pixels.hh
M   source/blender/blenkernel/intern/pbvh_pixels.cc

===

diff --git a/source/blender/blenkernel/BKE_pbvh_pixels.hh 
b/source/blender/blenkernel/BKE_pbvh_pixels.hh
index f5eceb56f2b..237f21bb17d 100644
--- a/source/blender/blenkernel/BKE_pbvh_pixels.hh
+++ b/source/blender/blenkernel/BKE_pbvh_pixels.hh
@@ -18,55 +18,6 @@
 
 namespace blender::bke::pbvh::pixels {
 
-/** Barycentric weights. */
-class BarycentricWeights {
- private:
-  float3 weights;
-
- public:
-  explicit BarycentricWeights() noexcept = default;
-  explicit BarycentricWeights(const float2 v1, const float2 v2, const float2 
v3, const float2 co)
-  {
-barycentric_weights_v2(v1, v2, v3, co, weights);
-  }
-
-  explicit BarycentricWeights(const float3 weights) : weights(weights)
-  {
-  }
-
-  const bool is_inside_triangle() const
-  {
-return barycentric_inside_triangle_v2(weights);
-  }
-
-  float3 operator-(const BarycentricWeights &rhs) const
-  {
-return weights - rhs.weights;
-  }
-
-  BarycentricWeights operator+(const float3 &rhs) const
-  {
-return BarycentricWeights(weights + rhs);
-  }
-
-  BarycentricWeights &operator-=(const float3 &rhs)
-  {
-weights -= rhs;
-return *this;
-  }
-
-  BarycentricWeights &operator+=(const float3 &rhs)
-  {
-weights += rhs;
-return *this;
-  }
-
-  operator const float *() const
-  {
-return weights;
-  }
-};
-
 /**
  * Loop incides. Only stores 2 indices, the third one is always 
`loop_indices[1] + 1`.
  * Second could be delta encoded with the first loop index.
@@ -174,7 +125,7 @@ struct Triangles {
  */
 struct PixelsPackage {
   /** Barycentric coordinate of the first pixel. */
-  BarycentricWeights start_barycentric_coord;
+  float3 start_barycentric_coord;
   /** Image coordinate starting of the first pixel. */
   ushort2 start_image_coordinate;
   /** Number of sequential pixels encoded in this package. */
diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc 
b/source/blender/blenkernel/intern/pbvh_pixels.cc
index 31216b48d85..1443d30240a 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -59,10 +59,11 @@ static float3 calc_barycentric_delta(const float2 uvs[3],
  const float2 end_uv)
 {
 
-  const BarycentricWeights start_barycentric(uvs[0], uvs[1], uvs[2], start_uv);
-  const BarycentricWeights end_barycentric(uvs[0], uvs[1], uvs[2], end_uv);
-  const float3 delta_barycentric = end_barycentric - start_barycentric;
-  return delta_barycentric;
+  float3 start_barycentric;
+  barycentric_weights_v2(uvs[0], uvs[1], uvs[2], start_uv, start_barycentric);
+  float3 end_barycentric;
+  barycentric_weights_v2(uvs[0], uvs[1], uvs[2], end_uv, end_barycentric);
+  return end_barycentric - start_barycentric;
 }
 
 static float3 calc_barycentric_delta_x(const ImBuf *image_buffer,
@@ -103,12 +104,14 @@ static void extract_barycentric_pixels(TileData 
&tile_data,
 
 for (x = minx; x < maxx; x++) {
   float2 uv(float(x) / image_buffer->x, float(y) / image_buffer->y);
-  const BarycentricWeights barycentric(uvs[0], uvs[1], uvs[2], uv);
-  const bool is_inside = barycentric.is_inside_triangle();
+  float3 barycentric_weights;
+  barycentric_weights_v2(uvs[0], uvs[1], uvs[2], uv, barycentric_weights);
+
+  const bool is_inside = 
barycentric_inside_triangle_v2(barycentric_weights);
   if (!start_detected && is_inside) {
 start_detected = true;
 package.start_image_coordinate = ushort2(x, y);
-package.start_barycentric_coord = barycentric;
+package.start_barycentric_coord = barycentric_weights;
   }
   else if (start_detected && !is_inside) {
 break;

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


[Bf-blender-cvs] [ca7d7e02c3f] temp-T96710-pbvh-pixels: Spelling in comments.

2022-04-12 Thread Jeroen Bakker
Commit: ca7d7e02c3f58ad9d7ac742c5bef04df18f7f31c
Author: Jeroen Bakker
Date:   Tue Apr 12 08:30:17 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rBca7d7e02c3f58ad9d7ac742c5bef04df18f7f31c

Spelling in comments.

===

M   source/blender/blenkernel/BKE_pbvh_pixels.hh

===

diff --git a/source/blender/blenkernel/BKE_pbvh_pixels.hh 
b/source/blender/blenkernel/BKE_pbvh_pixels.hh
index 237f21bb17d..e04724e909b 100644
--- a/source/blender/blenkernel/BKE_pbvh_pixels.hh
+++ b/source/blender/blenkernel/BKE_pbvh_pixels.hh
@@ -19,8 +19,7 @@
 namespace blender::bke::pbvh::pixels {
 
 /**
- * Loop incides. Only stores 2 indices, the third one is always 
`loop_indices[1] + 1`.
- * Second could be delta encoded with the first loop index.
+ * Loop indices. Only stores 2 indices, the third one is always 
`loop_indices[1] + 1`.
  */
 struct EncodedLoopIndices {
   int2 encoded;

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


[Bf-blender-cvs] [386f0e47e45] temp-T96710-pbvh-pixels: Renamed BKE_pbvh.hh BKE_pbvh_pixels.hh.

2022-04-12 Thread Jeroen Bakker
Commit: 386f0e47e458e4d26d057df2338ea5525f44815e
Author: Jeroen Bakker
Date:   Tue Apr 12 08:16:33 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB386f0e47e458e4d26d057df2338ea5525f44815e

Renamed BKE_pbvh.hh BKE_pbvh_pixels.hh.

===

R100source/blender/blenkernel/BKE_pbvh.hh   
source/blender/blenkernel/BKE_pbvh_pixels.hh
M   source/blender/blenkernel/intern/pbvh_pixels.cc
M   source/blender/blenkernel/intern/pbvh_pixels_seams.cc
M   source/blender/editors/sculpt_paint/sculpt_paint_image.cc

===

diff --git a/source/blender/blenkernel/BKE_pbvh.hh 
b/source/blender/blenkernel/BKE_pbvh_pixels.hh
similarity index 100%
rename from source/blender/blenkernel/BKE_pbvh.hh
rename to source/blender/blenkernel/BKE_pbvh_pixels.hh
diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc 
b/source/blender/blenkernel/intern/pbvh_pixels.cc
index 0958cb4c1df..31216b48d85 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -4,7 +4,7 @@
 #include "BKE_customdata.h"
 #include "BKE_mesh_mapping.h"
 #include "BKE_pbvh.h"
-#include "BKE_pbvh.hh"
+#include "BKE_pbvh_pixels.hh"
 
 #include "DNA_image_types.h"
 #include "DNA_mesh_types.h"
diff --git a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc 
b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
index 94b49bcb7ee..f3cdf30d355 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
@@ -2,7 +2,7 @@
  * Copyright 2022 Blender Foundation. All rights reserved. */
 
 #include "BKE_pbvh.h"
-#include "BKE_pbvh.hh"
+#include "BKE_pbvh_pixels.hh"
 
 #include "pbvh_intern.h"
 
diff --git a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc 
b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
index a1a703fe0a7..1530501b628 100644
--- a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
@@ -20,7 +20,7 @@
 #include "BKE_image_wrappers.hh"
 #include "BKE_material.h"
 #include "BKE_pbvh.h"
-#include "BKE_pbvh.hh"
+#include "BKE_pbvh_pixels.hh"
 
 #include "bmesh.h"

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


[Bf-blender-cvs] [83dbe62e71e] temp-T96710-pbvh-pixels: Renamed PBVH_UpdatePixels to PBVH_RebuildPixels.

2022-04-12 Thread Jeroen Bakker
Commit: 83dbe62e71e4cf55c0a396ec86be2501365be5cd
Author: Jeroen Bakker
Date:   Tue Apr 12 08:12:24 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB83dbe62e71e4cf55c0a396ec86be2501365be5cd

Renamed PBVH_UpdatePixels to PBVH_RebuildPixels.

===

M   source/blender/blenkernel/BKE_pbvh.h
M   source/blender/blenkernel/intern/pbvh.c
M   source/blender/blenkernel/intern/pbvh_pixels.cc
M   source/blender/blenkernel/intern/pbvh_pixels_seams.cc

===

diff --git a/source/blender/blenkernel/BKE_pbvh.h 
b/source/blender/blenkernel/BKE_pbvh.h
index e442c6bd72c..0e33de2b9ac 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -78,7 +78,7 @@ typedef enum {
 
   PBVH_UpdateTopology = 1 << 13,
   PBVH_UpdateColor = 1 << 14,
-  PBVH_UpdatePixels = 1 << 15,
+  PBVH_RebuildPixels = 1 << 15,
 
 } PBVHNodeFlags;
 
diff --git a/source/blender/blenkernel/intern/pbvh.c 
b/source/blender/blenkernel/intern/pbvh.c
index 8b0ea0ab097..979446a496e 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -1789,7 +1789,7 @@ void BKE_pbvh_mark_update_pixels(PBVH *pbvh)
   for (int n = 0; n < pbvh->totnode; n++) {
 PBVHNode *node = &pbvh->nodes[n];
 if (node->flag & PBVH_Leaf) {
-  node->flag |= PBVH_UpdatePixels;
+  node->flag |= PBVH_RebuildPixels;
 }
   }
 }
diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc 
b/source/blender/blenkernel/intern/pbvh_pixels.cc
index e0c67601d33..0958cb4c1df 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -224,7 +224,7 @@ static bool should_pixels_be_updated(PBVHNode *node)
   if ((node->flag & PBVH_Leaf) == 0) {
 return false;
   }
-  if ((node->flag & PBVH_UpdatePixels) != 0) {
+  if ((node->flag & PBVH_RebuildPixels) != 0) {
 return true;
   }
   NodeData *node_data = static_cast(node->pixels.node_data);
@@ -287,7 +287,7 @@ static bool find_nodes_to_update(PBVH *pbvh,
 PBVHNode *node = &pbvh->nodes[n];
 if (should_pixels_be_updated(node)) {
   r_nodes_to_update.append(node);
-  node->flag = static_cast(node->flag | PBVH_UpdatePixels);
+  node->flag = static_cast(node->flag | PBVH_RebuildPixels);
 
   if (node->pixels.node_data == nullptr) {
 NodeData *node_data = MEM_new(__func__);
@@ -403,7 +403,7 @@ static void update_pixels(PBVH *pbvh,
 
   /* Clear the UpdatePixels flag. */
   for (PBVHNode *node : nodes_to_update) {
-node->flag = static_cast(node->flag & ~PBVH_UpdatePixels);
+node->flag = static_cast(node->flag & ~PBVH_RebuildPixels);
   }
 
 //#define DO_PRINT_STATISTICS
diff --git a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc 
b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
index e55f5cff59e..94b49bcb7ee 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
@@ -271,7 +271,7 @@ class UVSeamExtender {
   context,
   &package,
   &node_data.triangles.get_paint_input(package.triangle_index),
-  (node.flag & PBVH_UpdatePixels) != 0,
+  (node.flag & PBVH_RebuildPixels) != 0,
   node_data.triangles.get_loop_indices(package.triangle_index));
   append(row_package);
 }

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


[Bf-blender-cvs] [d1944dee86e] master: Cleanup: remove unused multi-function

2022-04-12 Thread Jacques Lucke
Commit: d1944dee86e21b92360be526f129b48600ca0154
Author: Jacques Lucke
Date:   Tue Apr 12 11:59:23 2022 +0200
Branches: master
https://developer.blender.org/rBd1944dee86e21b92360be526f129b48600ca0154

Cleanup: remove unused multi-function

===

M   source/blender/functions/FN_multi_function_builder.hh
M   source/blender/functions/tests/FN_multi_function_test.cc

===

diff --git a/source/blender/functions/FN_multi_function_builder.hh 
b/source/blender/functions/FN_multi_function_builder.hh
index e0ccd2a482d..088a906ce02 100644
--- a/source/blender/functions/FN_multi_function_builder.hh
+++ b/source/blender/functions/FN_multi_function_builder.hh
@@ -389,39 +389,6 @@ template class CustomMF_SM : public 
MultiFunction {
   }
 };
 
-/**
- * Generates a multi-function that converts between two types.
- */
-template class CustomMF_Convert : public 
MultiFunction {
- public:
-  CustomMF_Convert()
-  {
-static MFSignature signature = create_signature();
-this->set_signature(&signature);
-  }
-
-  static MFSignature create_signature()
-  {
-static std::string name = CPPType::get().name() + " to " + 
CPPType::get().name();
-MFSignatureBuilder signature{name.c_str()};
-signature.single_input("Input");
-signature.single_output("Output");
-return signature.build();
-  }
-
-  void call(IndexMask mask, MFParams params, MFContext UNUSED(context)) const 
override
-  {
-const VArray &inputs = params.readonly_single_input(0);
-MutableSpan outputs = params.uninitialized_single_output(1);
-
-mask.to_best_mask_type([&](const auto &mask) {
-  for (int64_t i : mask) {
-new (static_cast(&outputs[i])) To(inputs[i]);
-  }
-});
-  }
-};
-
 /**
  * A multi-function that outputs the same value every time. The value is not 
owned by an instance
  * of this function. If #make_value_copy is false, the caller is responsible 
for destructing and
diff --git a/source/blender/functions/tests/FN_multi_function_test.cc 
b/source/blender/functions/tests/FN_multi_function_test.cc
index 59d797605e7..577b09cb014 100644
--- a/source/blender/functions/tests/FN_multi_function_test.cc
+++ b/source/blender/functions/tests/FN_multi_function_test.cc
@@ -307,25 +307,6 @@ TEST(multi_function, CustomMF_GenericConstantArray)
   }
 }
 
-TEST(multi_function, CustomMF_Convert)
-{
-  CustomMF_Convert fn;
-
-  Array inputs = {5.4f, 7.1f, 9.0f};
-  Array outputs(inputs.size(), 0);
-
-  MFParamsBuilder params(fn, inputs.size());
-  params.add_readonly_single_input(inputs.as_span());
-  params.add_uninitialized_single_output(outputs.as_mutable_span());
-
-  MFContextBuilder context;
-  fn.call({0, 2}, params, context);
-
-  EXPECT_EQ(outputs[0], 5);
-  EXPECT_EQ(outputs[1], 0);
-  EXPECT_EQ(outputs[2], 9);
-}
-
 TEST(multi_function, IgnoredOutputs)
 {
   OptionalOutputsFunction fn;

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


[Bf-blender-cvs] [5cae2137505] master: Cleanup: pass vectors by reference

2022-04-12 Thread Jacques Lucke
Commit: 5cae2137505d9e04672d47fb6067a8b5ba66812b
Author: Jacques Lucke
Date:   Tue Apr 12 11:55:46 2022 +0200
Branches: master
https://developer.blender.org/rB5cae2137505d9e04672d47fb6067a8b5ba66812b

Cleanup: pass vectors by reference

Passing them by value caused measurable overhead for me.

===

M   source/blender/nodes/shader/nodes/node_shader_vector_rotate.cc

===

diff --git a/source/blender/nodes/shader/nodes/node_shader_vector_rotate.cc 
b/source/blender/nodes/shader/nodes/node_shader_vector_rotate.cc
index a041492fb13..b35f686e331 100644
--- a/source/blender/nodes/shader/nodes/node_shader_vector_rotate.cc
+++ b/source/blender/nodes/shader/nodes/node_shader_vector_rotate.cc
@@ -69,9 +69,9 @@ static int gpu_shader_vector_rotate(GPUMaterial *mat,
   return 0;
 }
 
-static float3 sh_node_vector_rotate_around_axis(const float3 vector,
-const float3 center,
-const float3 axis,
+static float3 sh_node_vector_rotate_around_axis(const float3 &vector,
+const float3 ¢er,
+const float3 &axis,
 const float angle)
 {
   float3 result = vector - center;
@@ -81,9 +81,9 @@ static float3 sh_node_vector_rotate_around_axis(const float3 
vector,
   return result + center;
 }
 
-static float3 sh_node_vector_rotate_euler(const float3 vector,
-  const float3 center,
-  const float3 rotation,
+static float3 sh_node_vector_rotate_euler(const float3 &vector,
+  const float3 ¢er,
+  const float3 &rotation,
   const bool invert)
 {
   float mat[3][3];
@@ -105,13 +105,15 @@ static const fn::MultiFunction *get_multi_function(bNode 
&node)
 case NODE_VECTOR_ROTATE_TYPE_AXIS: {
   if (invert) {
 static fn::CustomMF_SI_SI_SI_SI_SO fn{
-"Rotate Axis", [](float3 in, float3 center, float3 axis, float 
angle) {
+"Rotate Axis",
+[](const float3 &in, const float3 ¢er, const float3 &axis, 
float angle) {
   return sh_node_vector_rotate_around_axis(in, center, axis, 
-angle);
 }};
 return &fn;
   }
   static fn::CustomMF_SI_SI_SI_SI_SO fn{
-  "Rotate Axis", [](float3 in, float3 center, float3 axis, float 
angle) {
+  "Rotate Axis",
+  [](const float3 &in, const float3 ¢er, const float3 &axis, float 
angle) {
 return sh_node_vector_rotate_around_axis(in, center, axis, angle);
   }};
   return &fn;
@@ -120,13 +122,13 @@ static const fn::MultiFunction *get_multi_function(bNode 
&node)
   float3 axis = float3(1.0f, 0.0f, 0.0f);
   if (invert) {
 static fn::CustomMF_SI_SI_SI_SO fn{
-"Rotate X-Axis", [=](float3 in, float3 center, float angle) {
+"Rotate X-Axis", [=](const float3 &in, const float3 ¢er, float 
angle) {
   return sh_node_vector_rotate_around_axis(in, center, axis, 
-angle);
 }};
 return &fn;
   }
   static fn::CustomMF_SI_SI_SI_SO fn{
-  "Rotate X-Axis", [=](float3 in, float3 center, float angle) {
+  "Rotate X-Axis", [=](const float3 &in, const float3 ¢er, float 
angle) {
 return sh_node_vector_rotate_around_axis(in, center, axis, angle);
   }};
   return &fn;
@@ -135,13 +137,13 @@ static const fn::MultiFunction *get_multi_function(bNode 
&node)
   float3 axis = float3(0.0f, 1.0f, 0.0f);
   if (invert) {
 static fn::CustomMF_SI_SI_SI_SO fn{
-"Rotate Y-Axis", [=](float3 in, float3 center, float angle) {
+"Rotate Y-Axis", [=](const float3 &in, const float3 ¢er, float 
angle) {
   return sh_node_vector_rotate_around_axis(in, center, axis, 
-angle);
 }};
 return &fn;
   }
   static fn::CustomMF_SI_SI_SI_SO fn{
-  "Rotate Y-Axis", [=](float3 in, float3 center, float angle) {
+  "Rotate Y-Axis", [=](const float3 &in, const float3 ¢er, float 
angle) {
 return sh_node_vector_rotate_around_axis(in, center, axis, angle);
   }};
   return &fn;
@@ -150,13 +152,13 @@ static const fn::MultiFunction *get_multi_function(bNode 
&node)
   float3 axis = float3(0.0f, 0.0f, 1.0f);
   if (invert) {
 static fn::CustomMF_SI_SI_SI_SO fn{
-"Rotate Z-Axis", [=](float3 in, float3 center, float angle) {
+"Rotate Z-Axis", [=](const float3 &in, const float3 ¢er, float 
angle) {
   return sh_node_vector_rotate_around_axis(in, center, axis, 
-angle);
 }};
 re

[Bf-blender-cvs] [4fd3d96f46e] master: Fix Pushdown of an action from the Action Editor lacks immediate updates

2022-04-12 Thread Philipp Oeser
Commit: 4fd3d96f46ea4d9f30cdd9d0bc957c776b6f4e83
Author: Philipp Oeser
Date:   Wed Apr 6 11:40:31 2022 +0200
Branches: master
https://developer.blender.org/rB4fd3d96f46ea4d9f30cdd9d0bc957c776b6f4e83

Fix Pushdown of an action from the Action Editor lacks immediate updates

The issue reported was that the recently introduced manual framerange of
an action (see rB5d59b38605d6) was not having an immediate effect in
case the action was pushed down from the Action Editor and only showed
its effects after e.g. saving and reloading the file. However doing the
same thing (pushing down the action) was working fine when done from the
NLA.

Now bring pushdown in sync (in terms of DEG update tagging) between the
Action Editor and the NLA, meaning that now both the owner and the
action are tagged when pushdown happens from the Action Editor as well.

Fixes T96964.

Maniphest Tasks: T96964

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

===

M   source/blender/editors/space_action/CMakeLists.txt
M   source/blender/editors/space_action/action_data.c

===

diff --git a/source/blender/editors/space_action/CMakeLists.txt 
b/source/blender/editors/space_action/CMakeLists.txt
index 9e292062f27..841bd5cf91b 100644
--- a/source/blender/editors/space_action/CMakeLists.txt
+++ b/source/blender/editors/space_action/CMakeLists.txt
@@ -5,6 +5,7 @@ set(INC
   ../../blenkernel
   ../../blenlib
   ../../blentranslation
+  ../../depsgraph
   ../../gpu
   ../../makesdna
   ../../makesrna
diff --git a/source/blender/editors/space_action/action_data.c 
b/source/blender/editors/space_action/action_data.c
index 36858d57446..8f97a58451e 100644
--- a/source/blender/editors/space_action/action_data.c
+++ b/source/blender/editors/space_action/action_data.c
@@ -45,6 +45,8 @@
 #include "ED_mask.h"
 #include "ED_screen.h"
 
+#include "DEG_depsgraph.h"
+
 #include "WM_api.h"
 #include "WM_types.h"
 
@@ -335,6 +337,13 @@ static int action_pushdown_exec(bContext *C, wmOperator 
*op)
 /* action can be safely added */
 BKE_nla_action_pushdown(adt, ID_IS_OVERRIDE_LIBRARY(adt_id_owner));
 
+struct Main *bmain = CTX_data_main(C);
+DEG_id_tag_update_ex(bmain, adt_id_owner, ID_RECALC_ANIMATION);
+
+/* The action needs updating too, as FCurve modifiers are to be 
reevaluated. They won't extend
+ * beyond the NLA strip after pushing down to the NLA. */
+DEG_id_tag_update_ex(bmain, &adt->action->id, ID_RECALC_ANIMATION);
+
 /* Stop displaying this action in this editor
  * NOTE: The editor itself doesn't set a user...
  */

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


[Bf-blender-cvs] [b4a2096415d] master: Fix T95679: Outliner 'Unlink' directly on action misses DEG update

2022-04-12 Thread Philipp Oeser
Commit: b4a2096415d97c68182f47f07962f2809bab4578
Author: Philipp Oeser
Date:   Fri Feb 11 14:00:44 2022 +0100
Branches: master
https://developer.blender.org/rBb4a2096415d97c68182f47f07962f2809bab4578

Fix T95679: Outliner 'Unlink' directly on action misses DEG update

Animation would still play in the viewport.

There are two ways to unlink an action from the Outliner:
[1] `Unlink Action` on the Animation Data context menu.
This does `outliner_do_data_operation` / `unlinkact_animdata_fn` and has
the correct DEG update.
[2] `Unlink` on the Action context menu
This does `outliner_do_libdata_operation` / `unlink_action_fn` and was
missing the DEG update.

Now add the missing DEG update to the second case.

Maniphest Tasks: T95679

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

===

M   source/blender/editors/space_outliner/outliner_tools.cc

===

diff --git a/source/blender/editors/space_outliner/outliner_tools.cc 
b/source/blender/editors/space_outliner/outliner_tools.cc
index 67bc0e91053..65b4ba15369 100644
--- a/source/blender/editors/space_outliner/outliner_tools.cc
+++ b/source/blender/editors/space_outliner/outliner_tools.cc
@@ -217,6 +217,7 @@ static void unlink_action_fn(bContext *C,
 {
   /* just set action to nullptr */
   BKE_animdata_set_action(CTX_wm_reports(C), tsep->id, nullptr);
+  DEG_id_tag_update(tsep->id, ID_RECALC_ANIMATION);
 }
 
 static void unlink_material_fn(bContext *UNUSED(C),

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


[Bf-blender-cvs] [40efc9fb580] lineart-shadow: LineArt: Light contour reprojection is working.

2022-04-12 Thread YimingWu
Commit: 40efc9fb5801629081724f28db4d5cadd5518433
Author: YimingWu
Date:   Tue Apr 12 16:27:20 2022 +0800
Branches: lineart-shadow
https://developer.blender.org/rB40efc9fb5801629081724f28db4d5cadd5518433

LineArt: Light contour reprojection is working.

===

M   source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
M   source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c

===

diff --git a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h 
b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
index 3135cf142c3..a9d9c11e0f3 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
+++ b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
@@ -116,6 +116,7 @@ typedef struct LineartShadowSegmentContainer {
   double fbc1[4], fbc2[4];
   double g1[3], g2[3];
   struct LineartEdge *e_ref;
+  struct LineartEdge *e_ref_light_contour;
   struct LineartEdgeSegment *es_ref; /* Only for 3rd stage casting. */
   ListBase shadow_segments;
 } LineartShadowSegmentContainer;
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c 
b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index 244e600df8d..d96284d6b56 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -326,7 +326,7 @@ static void lineart_edge_cut(LineartRenderBuffer *rb,
 es->material_mask_bits |= material_mask_bits;
 /* Currently only register lit/shade, see 
LineartEdgeSegment::shadow_mask_bits for details. */
 if (shadow_bits == LRT_SHADOW_MASK_ENCLOSED_SHAPE) {
-  if (es->shadow_mask_bits == LRT_SHADOW_MASK_LIT) {
+  if (es->shadow_mask_bits == LRT_SHADOW_MASK_LIT || e->flags & 
LRT_EDGE_FLAG_LIGHT_CONTOUR) {
 es->shadow_mask_bits = LRT_SHADOW_MASK_INHIBITED;
   }
   else if (es->shadow_mask_bits == LRT_SHADOW_MASK_SHADED) {
@@ -2040,6 +2040,8 @@ static void lineart_load_tri_task(void *__restrict 
userdata,
 
   tri->intersection_mask = ob_info->override_intersection_mask;
 
+  tri->target_reference = (ob_info->obindex | (i & LRT_OBINDEX_LOWER));
+
   double gn[3];
   float no[3];
   normal_tri_v3(no, me->mvert[v1].co, me->mvert[v2].co, me->mvert[v3].co);
@@ -3208,7 +3210,8 @@ static bool lineart_edge_from_triangle(const 
LineartTriangle *tri,
bool allow_overlapping_edges)
 {
   /* Normally we just determine from the pointer address. */
-  if (e->t1 == tri || e->t2 == tri) {
+  if (e->t1 && e->t1->target_reference == tri->target_reference ||
+  (e->t2 && e->t2->target_reference == tri->target_reference)) {
 return true;
   }
   /* If allows overlapping, then we compare the vertex coordinates one by one 
to determine if one
@@ -5404,9 +5407,40 @@ static void 
lineart_shadow_create_container_array(LineartRenderBuffer *rb,
   LRT_ITER_ALL_LINES_BEGIN
   {
 /* Only contour and loose edges can actually cast shadows. */
-if (!(e->flags & (LRT_EDGE_FLAG_CONTOUR | LRT_EDGE_FLAG_LOOSE))) {
+if (!(e->flags &
+  (LRT_EDGE_FLAG_CONTOUR | LRT_EDGE_FLAG_LOOSE | 
LRT_EDGE_FLAG_LIGHT_CONTOUR))) {
   continue;
 }
+if (e->flags == LRT_EDGE_FLAG_LIGHT_CONTOUR) {
+  /* Only reproject light contours that also doubles as a view contour. */
+  LineartEdge *orig_e = (LineartEdge *)e->t1;
+  if (!orig_e->t2) {
+e->flags |= LRT_EDGE_FLAG_CONTOUR;
+  }
+  else {
+double vv[3];
+double *view_vector = vv;
+double dot_1 = 0, dot_2 = 0;
+double result;
+
+if (rb->cam_is_persp) {
+  sub_v3_v3v3_db(view_vector, orig_e->v1->gloc, rb->camera_pos);
+}
+else {
+  view_vector = rb->view_vector;
+}
+
+dot_1 = dot_v3v3_db(view_vector, orig_e->t1->gn);
+dot_2 = dot_v3v3_db(view_vector, orig_e->t2->gn);
+
+if ((result = dot_1 * dot_2) <= 0 && (dot_1 + dot_2)) {
+  e->flags |= LRT_EDGE_FLAG_CONTOUR;
+}
+  }
+  if (!(e->flags & LRT_EDGE_FLAG_CONTOUR)) {
+continue;
+  }
+}
 LISTBASE_FOREACH (LineartEdgeSegment *, es, &e->segments) {
   DISCARD_NONSENSE_SEGMENTS
   segment_count++;
@@ -5457,7 +5491,16 @@ static void 
lineart_shadow_create_container_array(LineartRenderBuffer *rb,
   BLI_addtail(&ssc[i].shadow_segments, &ss[i * 2]);
   BLI_addtail(&ssc[i].shadow_segments, &ss[i * 2 + 1]);
 
-  ssc[i].e_ref = e;
+  if (e->flags & LRT_EDGE_FLAG_LIGHT_CONTOUR) {
+ssc[i].e_ref = e->t1;
+ssc[i].e_ref_light_contour = e;
+/* Restore original edge flag. */
+e->flags &= (~LRT_EDGE_FLAG_CONTOUR);
+  }
+  else {
+ssc[i].e_ref = e;
+  }
+
   ssc[i].es_ref = es;
   BLI_addtail(&rb->shadow_containers, &ssc[i]);
 
@@ -5960,7 +6003