[Bf-blender-cvs] [57301121747] blender-v2.93-release: LineArt: Fix edge clipping index error.

2021-06-08 Thread YimingWu
Commit: 57301121747983671f7064170f6fb772ad787cc8
Author: YimingWu
Date:   Sun Jun 6 11:18:18 2021 +0800
Branches: blender-v2.93-release
https://developer.blender.org/rB57301121747983671f7064170f6fb772ad787cc8

LineArt: Fix edge clipping index error.

Small bug that's causing edge count to be incorrect in
final culled list, just being offset exactly 1 entry.

Reviewed By: Sebastian Parborg (zeddb)

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

===

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

===

diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c 
b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index e9cb8453f43..0aad7748dda 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -748,10 +748,10 @@ static void 
lineart_triangle_cull_single(LineartRenderBuffer *rb,
   e = new_e;
 
 #define INCREASE_RL \
-  e_count++; \
   v1_obi = e->v1_obindex; \
   v2_obi = e->v2_obindex; \
   new_e = &((LineartEdge *)e_eln->pointer)[e_count]; \
+  e_count++; \
   e = new_e; \
   e->v1_obindex = v1_obi; \
   e->v2_obindex = v2_obi; \

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [5a612097abb] blender-v2.93-release: Fix T88666: Cryptomatte: EXR sequence does not update when scrubbing the timeline.

2021-06-08 Thread Jeroen Bakker
Commit: 5a612097abb4438ab357ae29e5d6f1916d136d69
Author: Jeroen Bakker
Date:   Mon May 31 14:32:39 2021 +0200
Branches: blender-v2.93-release
https://developer.blender.org/rB5a612097abb4438ab357ae29e5d6f1916d136d69

Fix T88666: Cryptomatte: EXR sequence does not update when scrubbing the 
timeline.

Cause is that initializing the cryptomatte session would reset the
current frame of an image sequence. The solution is to always use the
scene current frame so it resets to the correct frame.

This was a todo that wasn't solved after it landed in master.
Needs to be backported to 2.93.

===

M   source/blender/blenkernel/BKE_node.h
M   source/blender/compositor/nodes/COM_CryptomatteNode.cc
M   source/blender/editors/interface/interface_eyedropper_color.c
M   source/blender/makesrna/intern/rna_nodetree.c
M   source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc

===

diff --git a/source/blender/blenkernel/BKE_node.h 
b/source/blender/blenkernel/BKE_node.h
index d6c4ad037e2..018b1853fca 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -1301,15 +1301,18 @@ void ntreeCompositOutputFileUniqueLayer(struct ListBase 
*list,
 void ntreeCompositColorBalanceSyncFromLGG(bNodeTree *ntree, bNode *node);
 void ntreeCompositColorBalanceSyncFromCDL(bNodeTree *ntree, bNode *node);
 
-void ntreeCompositCryptomatteSyncFromAdd(bNode *node);
+void ntreeCompositCryptomatteSyncFromAdd(const Scene *scene, bNode *node);
 void ntreeCompositCryptomatteSyncFromRemove(bNode *node);
 bNodeSocket *ntreeCompositCryptomatteAddSocket(bNodeTree *ntree, bNode *node);
 int ntreeCompositCryptomatteRemoveSocket(bNodeTree *ntree, bNode *node);
-void ntreeCompositCryptomatteLayerPrefix(const bNode *node, char *r_prefix, 
size_t prefix_len);
+void ntreeCompositCryptomatteLayerPrefix(const Scene *scene,
+ const bNode *node,
+ char *r_prefix,
+ size_t prefix_len);
 /* Update the runtime layer names with the cryptomatte layer names of the 
references
  * render layer or image. */
-void ntreeCompositCryptomatteUpdateLayerNames(bNode *node);
-struct CryptomatteSession *ntreeCompositCryptomatteSession(bNode *node);
+void ntreeCompositCryptomatteUpdateLayerNames(const Scene *scene, bNode *node);
+struct CryptomatteSession *ntreeCompositCryptomatteSession(const Scene *scene, 
bNode *node);
 
 /** \} */
 
diff --git a/source/blender/compositor/nodes/COM_CryptomatteNode.cc 
b/source/blender/compositor/nodes/COM_CryptomatteNode.cc
index d97e4371dc6..3beb3aa2917 100644
--- a/source/blender/compositor/nodes/COM_CryptomatteNode.cc
+++ b/source/blender/compositor/nodes/COM_CryptomatteNode.cc
@@ -77,10 +77,10 @@ void CryptomatteBaseNode::convertToOperations(NodeConverter 
&converter,
 
 /** \name Cryptomatte V2
  * \{ */
-static std::string prefix_from_node(const bNode &node)
+static std::string prefix_from_node(const CompositorContext &context, const 
bNode &node)
 {
   char prefix[MAX_NAME];
-  ntreeCompositCryptomatteLayerPrefix(&node, prefix, sizeof(prefix));
+  ntreeCompositCryptomatteLayerPrefix(context.getScene(), &node, prefix, 
sizeof(prefix));
   return std::string(prefix, BLI_strnlen(prefix, sizeof(prefix)));
 }
 
@@ -119,7 +119,7 @@ void CryptomatteNode::input_operations_from_render_source(
   }
 
   const short cryptomatte_layer_id = 0;
-  const std::string prefix = prefix_from_node(node);
+  const std::string prefix = prefix_from_node(context, node);
   LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {
 RenderLayer *render_layer = RE_GetRenderLayer(render_result, 
view_layer->name);
 if (render_layer) {
@@ -177,7 +177,7 @@ void CryptomatteNode::input_operations_from_image_source(
   }
 }
 
-const std::string prefix = prefix_from_node(node);
+const std::string prefix = prefix_from_node(context, node);
 int layer_index;
 LISTBASE_FOREACH_INDEX (RenderLayer *, render_layer, &image->rr->layers, 
layer_index) {
   if (!blender::StringRef(prefix).startswith(blender::StringRef(
diff --git a/source/blender/editors/interface/interface_eyedropper_color.c 
b/source/blender/editors/interface/interface_eyedropper_color.c
index d5fb0e4e744..dd8b1e6a23e 100644
--- a/source/blender/editors/interface/interface_eyedropper_color.c
+++ b/source/blender/editors/interface/interface_eyedropper_color.c
@@ -118,7 +118,8 @@ static bool eyedropper_init(bContext *C, wmOperator *op)
   RNA_property_float_get_array(&eye->ptr, eye->prop, col);
   if (eye->ptr.type == &RNA_CompositorNodeCryptomatteV2) {
 eye->crypto_node = (bNode *)eye->ptr.data;
-eye->cryptomatte_session = 
ntreeCompositCryptomatteSession(eye->crypto_node);
+eye->cryptomatte_session = 
ntreeCompositCryptomatteSession(CTX_data_scene(C)

[Bf-blender-cvs] [706c7d775d2] blender-v2.93-release: Fix T77651: Black screen on Blender startup on ChromeOS

2021-06-08 Thread Germano Cavalcante
Commit: 706c7d775d263e962161d2f280722d23be0081d6
Author: Germano Cavalcante
Date:   Mon Jun 7 15:11:50 2021 -0300
Branches: blender-v2.93-release
https://developer.blender.org/rB706c7d775d263e962161d2f280722d23be0081d6

Fix T77651: Black screen on Blender startup on ChromeOS

Apparently `textureSize` doesn't work with
`sampler1DArray` on this OS.

Thanks to @dave1853 for finding the source of the
problem.

===

M   source/blender/blenfont/intern/blf_glyph.c
M   source/blender/gpu/shaders/gpu_shader_text_frag.glsl

===

diff --git a/source/blender/blenfont/intern/blf_glyph.c 
b/source/blender/blenfont/intern/blf_glyph.c
index f3c5c057dec..2ec0ca22865 100644
--- a/source/blender/blenfont/intern/blf_glyph.c
+++ b/source/blender/blenfont/intern/blf_glyph.c
@@ -506,7 +506,7 @@ void blf_glyph_render(FontBLF *font, GlyphCacheBLF *gc, 
GlyphBLF *g, float x, fl
   if (gc->texture) {
 GPU_texture_free(gc->texture);
   }
-  gc->texture = GPU_texture_create_1d_array(__func__, w, h, 1, GPU_R8, 
NULL);
+  gc->texture = GPU_texture_create_2d(__func__, w, h, 1, GPU_R8, NULL);
 
   gc->bitmap_len_landed = 0;
 }
diff --git a/source/blender/gpu/shaders/gpu_shader_text_frag.glsl 
b/source/blender/gpu/shaders/gpu_shader_text_frag.glsl
index d85884e0a25..2568cd74445 100644
--- a/source/blender/gpu/shaders/gpu_shader_text_frag.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_text_frag.glsl
@@ -7,7 +7,7 @@ flat in int interp_size;
 
 out vec4 fragColor;
 
-uniform sampler1DArray glyph;
+uniform sampler2D glyph;
 
 const vec2 offsets4[4] = vec2[4](
 vec2(-0.5, 0.5), vec2(0.5, 0.5), vec2(-0.5, -0.5), vec2(-0.5, -0.5));

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [d354e6a8468] blender-v2.93-release: Texture Paint: changing paint slots and viewport could go out of sync

2021-06-08 Thread Philipp Oeser
Commit: d354e6a84688948aac39b1402c35295ccbd3a013
Author: Philipp Oeser
Date:   Fri Jun 4 16:00:51 2021 +0200
Branches: blender-v2.93-release
https://developer.blender.org/rBd354e6a84688948aac39b1402c35295ccbd3a013

Texture Paint: changing paint slots and viewport could go out of sync

When changing to another texture paint slot, the texture displayed in
the viewport should change accordingly (as well as the image displayed
in the Image Editor).

The procedure to find the texture to display in the viewport
(BKE_texpaint_slot_material_find_node) could fail
though because it assumed iterating nodes would always happen in the
same order (it was index based). This is not the case though, nodes can
get sorted differently based on selection (see ED_node_sort).

Now check the actual image being referenced in the paint slot for
comparison.

ref T88788 (probably enough to call this a fix, the other issue(s)
mentioned in the report are more likely a feature request)

Reviewed By: mano-wii

Maniphest Tasks: T88788

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

===

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

===

diff --git a/source/blender/blenkernel/intern/material.c 
b/source/blender/blenkernel/intern/material.c
index 37d47a984cc..8e80a4bc9ae 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -1367,16 +1367,16 @@ void BKE_texpaint_slots_refresh_object(Scene *scene, 
struct Object *ob)
 }
 
 struct FindTexPaintNodeData {
-  bNode *node;
-  short iter_index;
-  short index;
+  Image *ima;
+  bNode *r_node;
 };
 
 static bool texpaint_slot_node_find_cb(bNode *node, void *userdata)
 {
   struct FindTexPaintNodeData *find_data = userdata;
-  if (find_data->iter_index++ == find_data->index) {
-find_data->node = node;
+  Image *ima = (Image *)node->id;
+  if (find_data->ima == ima) {
+find_data->r_node = node;
 return false;
   }
 
@@ -1385,10 +1385,10 @@ static bool texpaint_slot_node_find_cb(bNode *node, 
void *userdata)
 
 bNode *BKE_texpaint_slot_material_find_node(Material *ma, short texpaint_slot)
 {
-  struct FindTexPaintNodeData find_data = {NULL, 0, texpaint_slot};
+  struct FindTexPaintNodeData find_data = 
{ma->texpaintslot[texpaint_slot].ima, NULL};
   ntree_foreach_texnode_recursive(ma->nodetree, texpaint_slot_node_find_cb, 
&find_data);
 
-  return find_data.node;
+  return find_data.r_node;
 }
 
 /* r_col = current value, col = new value, (fac == 0) is no change */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [db909281f28] blender-v2.93-release: Fix T88813: Scalable allocator not used on win10

2021-06-08 Thread Ray Molenkamp
Commit: db909281f2816063828019d47c22d731f7ee94b8
Author: Ray Molenkamp
Date:   Fri Jun 4 17:22:31 2021 -0600
Branches: blender-v2.93-release
https://developer.blender.org/rBdb909281f2816063828019d47c22d731f7ee94b8

Fix T88813: Scalable allocator not used on win10

Due to the way we ship the CRT on windows TBB's
malloc proxy was unable to attach it self to
the memory management functions on windows 10.

This change moves ucrtbase.dll out of the blender.crt
folder and back into the main blender folder to side
step some undesirable behaviour on win10 making TBB
once more able to attach it self.

Having this work again, should give a speed
boost in memory allocation heavy workloads
such as mantaflow.

For details on how this only failed on Win10
see T88813

===

M   build_files/cmake/platform/platform_win32_bundle_crt.cmake

===

diff --git a/build_files/cmake/platform/platform_win32_bundle_crt.cmake 
b/build_files/cmake/platform/platform_win32_bundle_crt.cmake
index f5bc024e4e0..7b2e1edb1b3 100644
--- a/build_files/cmake/platform/platform_win32_bundle_crt.cmake
+++ b/build_files/cmake/platform/platform_win32_bundle_crt.cmake
@@ -15,6 +15,15 @@ if(WITH_WINDOWS_BUNDLE_CRT)
 
   include(InstallRequiredSystemLibraries)
 
+  # ucrtbase(d).dll cannot be in the manifest, due to the way windows 10 
handles
+  # redirects for this dll, for details see T88813.
+  foreach(lib ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS})
+string(FIND ${lib} "ucrtbase" pos)
+if(NOT pos EQUAL -1)
+  list(REMOVE_ITEM CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS ${lib})
+  install(FILES ${lib} DESTINATION . COMPONENT Libraries)
+endif()
+  endforeach()
   # Install the CRT to the blender.crt Sub folder.
   install(FILES ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION ./blender.crt 
COMPONENT Libraries)

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [0b577e977b4] blender-v2.93-release: Fix T88567: Cryptomatte only works for the first View Layer.

2021-06-08 Thread Jeroen Bakker
Commit: 0b577e977b43b9169dc5002b4e27b54c71d518b4
Author: Jeroen Bakker
Date:   Wed Jun 2 10:05:39 2021 +0200
Branches: blender-v2.93-release
https://developer.blender.org/rB0b577e977b43b9169dc5002b4e27b54c71d518b4

Fix T88567: Cryptomatte only works for the first View Layer.

The view layer was always set to 0. This patch increments it.

===

M   source/blender/compositor/nodes/COM_CryptomatteNode.cc

===

diff --git a/source/blender/compositor/nodes/COM_CryptomatteNode.cc 
b/source/blender/compositor/nodes/COM_CryptomatteNode.cc
index 3beb3aa2917..4032a655633 100644
--- a/source/blender/compositor/nodes/COM_CryptomatteNode.cc
+++ b/source/blender/compositor/nodes/COM_CryptomatteNode.cc
@@ -118,9 +118,9 @@ void CryptomatteNode::input_operations_from_render_source(
 return;
   }
 
-  const short cryptomatte_layer_id = 0;
+  short view_layer_id = 0;
   const std::string prefix = prefix_from_node(context, node);
-  LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {
+  LISTBASE_FOREACH_INDEX (ViewLayer *, view_layer, &scene->view_layers, 
view_layer_id) {
 RenderLayer *render_layer = RE_GetRenderLayer(render_result, 
view_layer->name);
 if (render_layer) {
   LISTBASE_FOREACH (RenderPass *, render_pass, &render_layer->passes) {
@@ -129,7 +129,7 @@ void CryptomatteNode::input_operations_from_render_source(
   RenderLayersProg *op = new RenderLayersProg(
   render_pass->name, DataType::Color, render_pass->channels);
   op->setScene(scene);
-  op->setLayerId(cryptomatte_layer_id);
+  op->setLayerId(view_layer_id);
   op->setRenderData(context.getRenderData());
   op->setViewName(context.getViewName());
   r_input_operations.append(op);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [b38eb310509] blender-v2.93-release: Fix T88566: Mantaflow inflow with shapekeys is not working anymore (regression)

2021-06-08 Thread Philipp Oeser
Commit: b38eb310509620cc460bb4ea3b25a01665a4d30b
Author: Philipp Oeser
Date:   Tue May 25 16:27:34 2021 +0200
Branches: blender-v2.93-release
https://developer.blender.org/rBb38eb310509620cc460bb4ea3b25a01665a4d30b

Fix T88566: Mantaflow inflow with shapekeys is not working anymore
(regression)

Code was actually checking for shapekeys, but these were not detected
properly (some effects like shape keys are added as virtual modifiers
before the user created modifiers)

Now go over virtual modifiers as well.

Maniphest Tasks: T88566

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

===

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

===

diff --git a/source/blender/blenkernel/intern/fluid.c 
b/source/blender/blenkernel/intern/fluid.c
index 851d8aae378..1cd5c30c2dd 100644
--- a/source/blender/blenkernel/intern/fluid.c
+++ b/source/blender/blenkernel/intern/fluid.c
@@ -623,7 +623,8 @@ static void clamp_bounds_in_domain(FluidDomainSettings *fds,
 static bool is_static_object(Object *ob)
 {
   /* Check if the object has modifiers that might make the object "dynamic". */
-  ModifierData *md = ob->modifiers.first;
+  VirtualModifierData virtualModifierData;
+  ModifierData *md = BKE_modifiers_get_virtual_modifierlist(ob, 
&virtualModifierData);
   for (; md; md = md->next) {
 if (ELEM(md->type,
  eModifierType_Cloth,

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [e1d2485fd32] blender-v2.93-release: EEVEE: AOVs not same as cycles.

2021-06-08 Thread Jeroen Bakker
Commit: e1d2485fd32b7792d09a91074c51465dd0c02145
Author: Jeroen Bakker
Date:   Wed Jun 2 16:58:36 2021 +0200
Branches: blender-v2.93-release
https://developer.blender.org/rBe1d2485fd32b7792d09a91074c51465dd0c02145

EEVEE: AOVs not same as cycles.

EEVEE uses hashing to sync aov names and types with the gpu.
For the type a hashed value was overridden making `decalA`
and `decalB` choose the same hash. This patches fixes this
by removing the most significant bit.

===

M   source/blender/draw/engines/eevee/eevee_renderpasses.c
M   source/blender/nodes/shader/nodes/node_shader_output_aov.c

===

diff --git a/source/blender/draw/engines/eevee/eevee_renderpasses.c 
b/source/blender/draw/engines/eevee/eevee_renderpasses.c
index 5739024993e..5ada53ab98c 100644
--- a/source/blender/draw/engines/eevee/eevee_renderpasses.c
+++ b/source/blender/draw/engines/eevee/eevee_renderpasses.c
@@ -79,7 +79,7 @@ bool 
EEVEE_renderpasses_only_first_sample_pass_active(EEVEE_Data *vedata)
  * type the rest of the bits are used for the name hash. */
 int EEVEE_renderpasses_aov_hash(const ViewLayerAOV *aov)
 {
-  int hash = BLI_hash_string(aov->name);
+  int hash = BLI_hash_string(aov->name) << 1;
   SET_FLAG_FROM_TEST(hash, aov->type == AOV_TYPE_COLOR, 
EEVEE_AOV_HASH_COLOR_TYPE_MASK);
   return hash;
 }
diff --git a/source/blender/nodes/shader/nodes/node_shader_output_aov.c 
b/source/blender/nodes/shader/nodes/node_shader_output_aov.c
index 403b3e6d9d6..7e7e1b703f1 100644
--- a/source/blender/nodes/shader/nodes/node_shader_output_aov.c
+++ b/source/blender/nodes/shader/nodes/node_shader_output_aov.c
@@ -43,8 +43,9 @@ static int node_shader_gpu_output_aov(GPUMaterial *mat,
 {
   GPUNodeLink *outlink;
   NodeShaderOutputAOV *aov = (NodeShaderOutputAOV *)node->storage;
-  /* Keep in sync with `renderpass_lib.glsl#render_pass_aov_hash`. */
-  unsigned int hash = BLI_hash_string(aov->name) & ~1;
+  /* Keep in sync with `renderpass_lib.glsl#render_pass_aov_hash` and
+   * `EEVEE_renderpasses_aov_hash`. */
+  unsigned int hash = BLI_hash_string(aov->name) << 1;
   GPU_stack_link(mat, node, "node_output_aov", in, out, &outlink);
   GPU_material_add_output_link_aov(mat, outlink, hash);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [8eef2f83e9a] blender-v2.93-release: Fix T88111: Skin modifier assets within invalid face normals

2021-06-08 Thread Campbell Barton
Commit: 8eef2f83e9aae1887816bfa6b8ca572b46e0be65
Author: Campbell Barton
Date:   Wed May 26 16:06:02 2021 +1000
Branches: blender-v2.93-release
https://developer.blender.org/rB8eef2f83e9aae1887816bfa6b8ca572b46e0be65

Fix T88111: Skin modifier assets within invalid face normals

The skin modifier was moving vertices without updating normals for the
connected faces, this happened when smoothing and welding vertices.

Reviewed By: mont29

Ref D11397

===

M   source/blender/modifiers/intern/MOD_skin.c

===

diff --git a/source/blender/modifiers/intern/MOD_skin.c 
b/source/blender/modifiers/intern/MOD_skin.c
index 5e412185cea..5d69b0860bc 100644
--- a/source/blender/modifiers/intern/MOD_skin.c
+++ b/source/blender/modifiers/intern/MOD_skin.c
@@ -90,6 +90,46 @@
 
 #include "bmesh.h"
 
+/*  */
+/** \name Generic BMesh Utilities
+ * \{ */
+
+static void vert_face_normal_mark_set(BMVert *v)
+{
+  BMIter iter;
+  BMFace *f;
+  BM_ITER_ELEM (f, &iter, v, BM_FACES_OF_VERT) {
+f->no[0] = FLT_MAX;
+  }
+}
+
+static void vert_face_normal_mark_update(BMVert *v)
+{
+  BMIter iter;
+  BMFace *f;
+  BM_ITER_ELEM (f, &iter, v, BM_FACES_OF_VERT) {
+if (f->no[0] == FLT_MAX) {
+  BM_face_normal_update(f);
+}
+  }
+}
+
+/**
+ * Recalculate the normals of all faces connected to `verts`.
+ */
+static void vert_array_face_normal_update(BMVert **verts, int verts_len)
+{
+  for (int i = 0; i < verts_len; i++) {
+vert_face_normal_mark_set(verts[i]);
+  }
+
+  for (int i = 0; i < verts_len; i++) {
+vert_face_normal_mark_update(verts[i]);
+  }
+}
+
+/** \} */
+
 typedef struct {
   float mat[3][3];
   /* Vert that edge is pointing away from, no relation to
@@ -1352,13 +1392,25 @@ static void skin_fix_hole_no_good_verts(BMesh *bm, 
Frame *frame, BMFace *split_f
 split_face = collapse_face_corners(bm, split_face, 4, vert_buf);
   }
 
-  /* Done with dynamic array, split_face must now be a quad */
-  BLI_array_free(vert_buf);
+  /* `split_face` should now be a quad. */
   BLI_assert(split_face->len == 4);
+
+  /* Account for the highly unlikely case that it's not a quad. */
   if (split_face->len != 4) {
+/* Reuse `vert_buf` for updating normals. */
+BLI_array_clear(vert_buf);
+BLI_array_grow_items(vert_buf, split_face->len);
+
+BM_iter_as_array(bm, BM_FACES_OF_VERT, split_face, (void **)vert_buf, 
split_face->len);
+
+vert_array_face_normal_update(vert_buf, split_face->len);
+BLI_array_free(vert_buf);
 return;
   }
 
+  /* Done with dynamic array. */
+  BLI_array_free(vert_buf);
+
   /* Get split face's verts */
   // BM_iter_as_array(bm, BM_VERTS_OF_FACE, split_face, (void **)verts, 4);
   BM_face_as_array_vert_quad(split_face, verts);
@@ -1373,6 +1425,8 @@ static void skin_fix_hole_no_good_verts(BMesh *bm, Frame 
*frame, BMFace *split_f
   }
   BMO_op_exec(bm, &op);
   BMO_op_finish(bm, &op);
+
+  vert_array_face_normal_update(frame->verts, 4);
 }
 
 /* If the frame has some vertices that are inside the hull (detached)
@@ -1731,6 +1785,11 @@ static void skin_smooth_hulls(BMesh *bm,
 
   /* Done with original coordinates */
   BM_data_layer_free_n(bm, &bm->vdata, CD_SHAPEKEY, skey);
+
+  BMFace *f;
+  BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) {
+BM_face_normal_update(f);
+  }
 }
 
 /* Returns true if all hulls are successfully built, false otherwise */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [dbb002387d1] blender-v2.93-release: Fix T88625: Multiobject UV hiding/unhiding does not work with UV_SYNC_SELECTION

2021-06-08 Thread Philipp Oeser
Commit: dbb002387d123435fa14c6b2143aa58fbee93298
Author: Philipp Oeser
Date:   Thu May 27 15:30:02 2021 +0200
Branches: blender-v2.93-release
https://developer.blender.org/rBdbb002387d123435fa14c6b2143aa58fbee93298

Fix T88625: Multiobject UV hiding/unhiding does not work with UV_SYNC_SELECTION

Oversight in {rB470f17f21c06}.

Hiding was only done for the first mesh, then the operator finished (in
case of UV_SYNC_SELECTION).
Now just continue to the next.

Maniphest Tasks: T88625

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

===

M   source/blender/editors/uvedit/uvedit_ops.c

===

diff --git a/source/blender/editors/uvedit/uvedit_ops.c 
b/source/blender/editors/uvedit/uvedit_ops.c
index e11341429a6..708f04bf044 100644
--- a/source/blender/editors/uvedit/uvedit_ops.c
+++ b/source/blender/editors/uvedit/uvedit_ops.c
@@ -1471,7 +1471,7 @@ static int uv_hide_exec(bContext *C, wmOperator *op)
   if (EDBM_mesh_hide(em, swap)) {
 EDBM_update_generic(ob->data, true, false);
   }
-  return OPERATOR_FINISHED;
+  continue;
 }
 
 BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
@@ -1609,7 +1609,7 @@ static int uv_reveal_exec(bContext *C, wmOperator *op)
   if (EDBM_mesh_reveal(em, select)) {
 EDBM_update_generic(ob->data, true, false);
   }
-  return OPERATOR_FINISHED;
+  continue;
 }
 if (use_face_center) {
   if (em->selectmode == SCE_SELECT_FACE) {

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [c1d67abcd8f] blender-v2.93-release: Fix T88531: Mantaflow problem with geometry nodes

2021-06-08 Thread Philipp Oeser
Commit: c1d67abcd8f092c2d5e6dcea119690b750269599
Author: Philipp Oeser
Date:   Tue May 25 16:34:10 2021 +0200
Branches: blender-v2.93-release
https://developer.blender.org/rBc1d67abcd8f092c2d5e6dcea119690b750269599

Fix T88531: Mantaflow problem with geometry nodes

Objects modified by geometry nodes modifiers were not caught as being
"dynamic".

Now add this modifier type to the list of modifiers making them "dynamic"
in the eyes of mantaflow.

(noticed by @sebbas in chat)

Maniphest Tasks: T88531

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

===

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

===

diff --git a/source/blender/blenkernel/intern/fluid.c 
b/source/blender/blenkernel/intern/fluid.c
index 1cd5c30c2dd..493a267c2f0 100644
--- a/source/blender/blenkernel/intern/fluid.c
+++ b/source/blender/blenkernel/intern/fluid.c
@@ -632,7 +632,8 @@ static bool is_static_object(Object *ob)
  eModifierType_Explode,
  eModifierType_Ocean,
  eModifierType_ShapeKey,
- eModifierType_Softbody)) {
+ eModifierType_Softbody,
+ eModifierType_Nodes)) {
   return false;
 }
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [cc5392b4d93] blender-v2.93-release: Fix buffer overrun in paint_line_strokes_spacing

2021-06-08 Thread Campbell Barton
Commit: cc5392b4d93d289b538ec9d3fd7860c5bca8514b
Author: Campbell Barton
Date:   Tue Jun 1 12:49:20 2021 +1000
Branches: blender-v2.93-release
https://developer.blender.org/rBcc5392b4d93d289b538ec9d3fd7860c5bca8514b

Fix buffer overrun in paint_line_strokes_spacing

Error in 87cafe92ce2f99d8da620b80e1c26f8078554f93

===

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

===

diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c 
b/source/blender/editors/sculpt_paint/paint_stroke.c
index 49ddf2f82d8..992a0aeadfe 100644
--- a/source/blender/editors/sculpt_paint/paint_stroke.c
+++ b/source/blender/editors/sculpt_paint/paint_stroke.c
@@ -1191,7 +1191,7 @@ static void paint_line_strokes_spacing(bContext *C,
 
   const bool use_scene_spacing = paint_stroke_use_scene_spacing(brush, mode);
 
-  float mouse[2], dmouse[2];
+  float mouse[3], dmouse[2];
   float length;
   float d_world_space_position[3] = {0.0f};
   float world_space_position_old[3], world_space_position_new[3];

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [9d134104e47] blender-v2.93-release: Fix T88899: `__file__` not set for `text.as_module()`

2021-06-08 Thread Campbell Barton
Commit: 9d134104e476fbaf41617971bbacd4cf820881d1
Author: Campbell Barton
Date:   Mon Jun 7 14:04:26 2021 +1000
Branches: blender-v2.93-release
https://developer.blender.org/rB9d134104e476fbaf41617971bbacd4cf820881d1

Fix T88899: `__file__` not set for `text.as_module()`

===

M   release/scripts/modules/bpy_types.py

===

diff --git a/release/scripts/modules/bpy_types.py 
b/release/scripts/modules/bpy_types.py
index 4ea8c88e8d9..6222692cf38 100644
--- a/release/scripts/modules/bpy_types.py
+++ b/release/scripts/modules/bpy_types.py
@@ -560,9 +560,17 @@ class Text(bpy_types.ID):
 self.write(string)
 
 def as_module(self):
-from os.path import splitext
+import bpy
+from os.path import splitext, join
 from types import ModuleType
-mod = ModuleType(splitext(self.name)[0])
+name = self.name
+mod = ModuleType(splitext(name)[0])
+# This is a fake file-path, set this since some scripts check 
`__file__`,
+# error messages may include this as well.
+# NOTE: the file path may be a blank string if the file hasn't been 
saved.
+mod.__dict__.update({
+"__file__": join(bpy.data.filepath, name),
+})
 # TODO: We could use Text.compiled (C struct member)
 # if this is called often it will be much faster.
 exec(self.as_string(), mod.__dict__)

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [a170716208e] temp-lineart-contained: LineArt: Bound box visibility check when loading

2021-06-08 Thread YimingWu
Commit: a170716208e6572ec0f0a89058b1acef55f9cd7d
Author: YimingWu
Date:   Wed Jun 9 14:38:30 2021 +0800
Branches: temp-lineart-contained
https://developer.blender.org/rBa170716208e6572ec0f0a89058b1acef55f9cd7d

LineArt: Bound box visibility check when loading

===

M   release/datafiles/locale
M   source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c

===

diff --git a/release/datafiles/locale b/release/datafiles/locale
index 5ab29b1331d..2cef4877edc 16
--- a/release/datafiles/locale
+++ b/release/datafiles/locale
@@ -1 +1 @@
-Subproject commit 5ab29b1331d2103dae634b987f121c4599459d7f
+Subproject commit 2cef4877edc40875978c4e95322bb5193f5815bf
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c 
b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index d6fc6ee3d83..278b5dd90ba 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -2034,6 +2034,36 @@ static void 
lineart_geometry_load_assign_thread(LineartObjectLoadTaskInfo *olti_
   use_olti->pending = obi;
 }
 
+static bool lineart_geometry_check_visible(double (*model_view_proj)[4], 
Object *use_ob)
+{
+  BoundBox *bb = BKE_mesh_boundbox_get(use_ob);
+  double co[8][4];
+  double tmp[3];
+  for (int i = 0; i < 8; i++) {
+copy_v3db_v3fl(co[i], bb->vec[i]);
+copy_v3_v3_db(tmp, co[i]);
+mul_v4_m4v3_db(co[i], model_view_proj, tmp);
+  }
+
+  bool cond[6] = {true, true, true, true, true, true};
+  /* Beause for a point to be inside clip space, it must satisfy -Wc <= XYCc 
<= Wc, here if all
+   * verts falls to the same side of the clip space border, we know it's 
outside view. */
+  for (int i = 0; i < 8; i++) {
+cond[0] &= (co[i][0] < -co[i][3]);
+cond[1] &= (co[i][0] > co[i][3]);
+cond[2] &= (co[i][1] < -co[i][3]);
+cond[3] &= (co[i][1] > co[i][3]);
+cond[4] &= (co[i][2] < -co[i][3]);
+cond[5] &= (co[i][2] > co[i][3]);
+  }
+  for (int i = 0; i < 6; i++) {
+if (cond[i]) {
+  return false;
+}
+  }
+  return true;
+}
+
 static void lineart_main_load_geometries(
 Depsgraph *depsgraph,
 Scene *scene,
@@ -2049,6 +2079,8 @@ static void lineart_main_load_geometries(
   int fit = BKE_camera_sensor_fit(cam->sensor_fit, rb->w, rb->h);
   double asp = ((double)rb->w / (double)rb->h);
 
+  int bound_box_discard_count = 0;
+
   if (cam->type == CAM_PERSP) {
 if (fit == CAMERA_SENSOR_FIT_VERT && asp > 1) {
   sensor *= asp;
@@ -2108,14 +2140,26 @@ static void lineart_main_load_geometries(
   continue;
 }
 
+/* Prepare the matrix used for transforming this specific object 
(instance). This has to be
+ * done before mesh boundbox check because the function needs that.  */
+mul_m4db_m4db_m4fl_uniq(obi->model_view_proj, rb->view_projection, 
ob->obmat);
+mul_m4db_m4db_m4fl_uniq(obi->model_view, rb->view, ob->obmat);
+
 if (!(use_ob->type == OB_MESH || use_ob->type == OB_MBALL || use_ob->type 
== OB_CURVE ||
   use_ob->type == OB_SURF || use_ob->type == OB_FONT)) {
   continue;
 }
 if (use_ob->type == OB_MESH) {
+  if (!lineart_geometry_check_visible(obi->model_view_proj, use_ob)) {
+if (G.debug_value == 4000) {
+  bound_box_discard_count++;
+}
+continue;
+  }
   use_mesh = use_ob->data;
 }
 else {
+  /* Do not have curve boundbox api at the moment? */
   use_mesh = BKE_mesh_new_from_object(depsgraph, use_ob, true, true);
 }
 
@@ -2128,9 +2172,7 @@ static void lineart_main_load_geometries(
   obi->free_use_mesh = true;
 }
 
-/* Prepare the matrix used for transforming this specific object 
(instance).  */
-mul_m4db_m4db_m4fl_uniq(obi->model_view_proj, rb->view_projection, 
ob->obmat);
-mul_m4db_m4db_m4fl_uniq(obi->model_view, rb->view, ob->obmat);
+/* Make normal matrix.  */
 float imat[4][4];
 invert_m4_m4(imat, ob->obmat);
 transpose_m4(imat);
@@ -2174,6 +2216,7 @@ static void lineart_main_load_geometries(
   if (G.debug_value == 4000) {
 double t_elapsed = PIL_check_seconds_timer() - t_start;
 printf("Line art loading time: %lf\n", t_elapsed);
+printf("Discarded %d object from bound box check\n", 
bound_box_discard_count);
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [3ba16afa1e5] master: Fix failing test case sequence_transform.

2021-06-08 Thread Jeroen Bakker
Commit: 3ba16afa1e5065e9f61ee6921421efd8641807d3
Author: Jeroen Bakker
Date:   Wed Jun 9 08:12:04 2021 +0200
Branches: master
https://developer.blender.org/rB3ba16afa1e5065e9f61ee6921421efd8641807d3

Fix failing test case sequence_transform.

===

M   source/blender/sequencer/intern/render.c

===

diff --git a/source/blender/sequencer/intern/render.c 
b/source/blender/sequencer/intern/render.c
index 594e91c1deb..73a9569fcd5 100644
--- a/source/blender/sequencer/intern/render.c
+++ b/source/blender/sequencer/intern/render.c
@@ -544,8 +544,8 @@ static void sequencer_image_crop_transform_init(void 
*handle_v,
   handle->tot_line = tot_line;
 }
 
-static void sequencer_image_crop_transform_interpolation_coefs(
-const ImageTransformThreadData *data, float r_start_uv[2], float 
r_add_x[2], float r_add_y[2])
+static void sequencer_image_crop_transform_matrix(const 
ImageTransformThreadData *data,
+  float 
r_transform_matrix[3][3])
 {
   const StripTransform *transform = data->seq->strip->transform;
   const float scale_x = transform->scale_x * data->image_scale_factor;
@@ -555,37 +555,69 @@ static void 
sequencer_image_crop_transform_interpolation_coefs(
   const float translate_x = transform->xofs * data->preview_scale_factor + 
image_center_offs_x;
   const float translate_y = transform->yofs * data->preview_scale_factor + 
image_center_offs_y;
   const float pivot[2] = {data->ibuf_source->x / 2, data->ibuf_source->y / 2};
-  float transform_matrix[3][3];
-  loc_rot_size_to_mat3(transform_matrix,
+  loc_rot_size_to_mat3(r_transform_matrix,
(const float[]){translate_x, translate_y},
transform->rotation,
(const float[]){scale_x, scale_y});
-  transform_pivot_set_m3(transform_matrix, pivot);
-  invert_m3(transform_matrix);
+  transform_pivot_set_m3(r_transform_matrix, pivot);
+  invert_m3(r_transform_matrix);
+}
 
+static void sequencer_image_crop_transform_start_uv(const 
ImageTransformThreadData *data,
+const float 
transform_matrix[3][3],
+float r_start_uv[2])
+{
   float orig[2];
-  orig[0] = 0.0;
+  orig[0] = 0.0f;
   orig[1] = data->start_line;
   mul_v2_m3v2(r_start_uv, transform_matrix, orig);
+}
 
-  float uv_min[2];
-  uv_min[0] = 0;
-  uv_min[1] = 0;
-  mul_v2_m3v2(uv_min, transform_matrix, uv_min);
+static void sequencer_image_crop_transform_uv_min(const float 
transform_matrix[3][3],
+  float r_uv_min[2])
+{
+  float orig[2];
+  orig[0] = 0.0f;
+  orig[1] = 0.0f;
+  mul_v2_m3v2(r_uv_min, transform_matrix, orig);
+}
 
+static void sequencer_image_crop_transform_delta_x(const 
ImageTransformThreadData *data,
+   const float 
transform_matrix[3][3],
+   const float uv_min[2],
+   float r_add_x[2])
+{
   float uv_max_x[2];
   uv_max_x[0] = data->ibuf_out->x;
-  uv_max_x[1] = 0;
+  uv_max_x[1] = 0.0f;
   mul_v2_m3v2(r_add_x, transform_matrix, uv_max_x);
   sub_v2_v2(r_add_x, uv_min);
-  mul_v2_fl(r_add_x, 1.0 / data->ibuf_out->x);
+  mul_v2_fl(r_add_x, 1.0f / data->ibuf_out->x);
+}
 
+static void sequencer_image_crop_transform_delta_y(const 
ImageTransformThreadData *data,
+   const float 
transform_matrix[3][3],
+   const float uv_min[2],
+   float r_add_y[2])
+{
   float uv_max_y[2];
-  uv_max_y[0] = 0;
+  uv_max_y[0] = 0.0f;
   uv_max_y[1] = data->ibuf_out->y;
   mul_v2_m3v2(r_add_y, transform_matrix, uv_max_y);
   sub_v2_v2(r_add_y, uv_min);
-  mul_v2_fl(r_add_y, 1.0 / data->ibuf_out->y);
+  mul_v2_fl(r_add_y, 1.0f / data->ibuf_out->y);
+}
+
+static void sequencer_image_crop_transform_interpolation_coefs(
+const ImageTransformThreadData *data, float r_start_uv[2], float 
r_add_x[2], float r_add_y[2])
+{
+  float transform_matrix[3][3];
+  sequencer_image_crop_transform_matrix(data, transform_matrix);
+  sequencer_image_crop_transform_start_uv(data, transform_matrix, r_start_uv);
+  float uv_min[2];
+  sequencer_image_crop_transform_uv_min(transform_matrix, uv_min);
+  sequencer_image_crop_transform_delta_x(data, transform_matrix, uv_min, 
r_add_x);
+  sequencer_image_crop_transform_delta_y(data, transform_matrix, uv_min, 
r_add_y);
 }
 
 static void *sequencer_image_crop_transform_do_thread(void *data_v)
@@ -615,10 +647,9 @@ static void *sequencer_image_crop_transform_do_thread(void 
*data_v)
 copy_v2_v2(uv, last_uv);
 add_v2_v2(last_uv, add_y);
 for (int xi = 0; xi < width; xi++) {
-  add_v2_v2(uv,

[Bf-blender-cvs] [8c3f4f7edf9] master: Fix: Incorrect node bezier spline tangent calculation for end points

2021-06-08 Thread Hans Goudey
Commit: 8c3f4f7edf9d9769f07291d64bc22fa85e210e86
Author: Hans Goudey
Date:   Tue Jun 8 23:52:29 2021 -0500
Branches: master
https://developer.blender.org/rB8c3f4f7edf9d9769f07291d64bc22fa85e210e86

Fix: Incorrect node bezier spline tangent calculation for end points

The code was using the useless dangling handle at each end of the spline
rather than the handle pointing inwards.

===

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

===

diff --git a/source/blender/blenkernel/intern/spline_bezier.cc 
b/source/blender/blenkernel/intern/spline_bezier.cc
index 3c6cf2c78cf..3e421dcfc13 100644
--- a/source/blender/blenkernel/intern/spline_bezier.cc
+++ b/source/blender/blenkernel/intern/spline_bezier.cc
@@ -317,11 +317,11 @@ void BezierSpline::correct_end_tangents() const
 
   MutableSpan tangents(evaluated_tangents_cache_);
 
-  if (handle_positions_left_.first() != positions_.first()) {
-tangents.first() = (positions_.first() - 
handle_positions_left_.first()).normalized();
+  if (handle_positions_right_.first() != positions_.first()) {
+tangents.first() = (handle_positions_right_.first() - 
positions_.first()).normalized();
   }
-  if (handle_positions_right_.last() != positions_.last()) {
-tangents.last() = (handle_positions_right_.last() - 
positions_.last()).normalized();
+  if (handle_positions_left_.last() != positions_.last()) {
+tangents.last() = (positions_.last() - 
handle_positions_left_.last()).normalized();
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [c31f095edf3] soc-2021-adaptive-cloth: adaptive_remesh: create a new modifier

2021-06-08 Thread ishbosamiya
Commit: c31f095edf3502f69400453f2f10e29752c57592
Author: ishbosamiya
Date:   Wed Jun 9 10:11:24 2021 +0530
Branches: soc-2021-adaptive-cloth
https://developer.blender.org/rBc31f095edf3502f69400453f2f10e29752c57592

adaptive_remesh: create a new modifier

===

M   source/blender/makesdna/DNA_modifier_types.h
M   source/blender/makesrna/RNA_access.h
M   source/blender/makesrna/intern/rna_modifier.c
M   source/blender/modifiers/CMakeLists.txt
M   source/blender/modifiers/MOD_modifiertypes.h
A   source/blender/modifiers/intern/MOD_adaptive_remesh.cc
M   source/blender/modifiers/intern/MOD_util.c

===

diff --git a/source/blender/makesdna/DNA_modifier_types.h 
b/source/blender/makesdna/DNA_modifier_types.h
index c61e940190f..a4d7a98dd4a 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -98,6 +98,7 @@ typedef enum ModifierType {
   eModifierType_MeshToVolume = 58,
   eModifierType_VolumeDisplace = 59,
   eModifierType_VolumeToMesh = 60,
+  eModifierType_AdaptiveRemesh = 61,
   NUM_MODIFIER_TYPES,
 } ModifierType;
 
@@ -2343,6 +2344,10 @@ typedef enum VolumeToMeshFlag {
   VOLUME_TO_MESH_USE_SMOOTH_SHADE = 1 << 0,
 } VolumeToMeshFlag;
 
+typedef struct AdaptiveRemeshModifierData {
+  ModifierData modifier;
+} AdaptiveRemeshModifierData;
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/source/blender/makesrna/RNA_access.h 
b/source/blender/makesrna/RNA_access.h
index 379e3e77b6e..4b8618e1dcd 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -53,6 +53,7 @@ extern StructRNA RNA_ActionFCurves;
 extern StructRNA RNA_ActionGroup;
 extern StructRNA RNA_ActionGroups;
 extern StructRNA RNA_ActionPoseMarkers;
+extern StructRNA RNA_AdaptiveRemeshModifier;
 extern StructRNA RNA_Addon;
 extern StructRNA RNA_AddonPreferences;
 extern StructRNA RNA_AdjustmentSequence;
diff --git a/source/blender/makesrna/intern/rna_modifier.c 
b/source/blender/makesrna/intern/rna_modifier.c
index 674e5845ccb..ebe92fb8bbb 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -308,6 +308,11 @@ const EnumPropertyItem 
rna_enum_object_modifier_type_items[] = {
  "Spawn particles from the shape"},
 {eModifierType_Softbody, "SOFT_BODY", ICON_MOD_SOFT, "Soft Body", ""},
 {eModifierType_Surface, "SURFACE", ICON_MODIFIER, "Surface", ""},
+{eModifierType_AdaptiveRemesh,
+ "ADAPTIVEREMESH",
+ ICON_MOD_CLOTH,
+ "Adaptive Remesh",
+ ""}, /* TODO(ish): Use correct icon. */
 {0, NULL, 0, NULL, NULL},
 };
 
@@ -7222,6 +7227,21 @@ static void rna_def_modifier_volume_to_mesh(BlenderRNA 
*brna)
   RNA_define_lib_overridable(false);
 }
 
+static void rna_def_modifier_adaptive_remesh(BlenderRNA *brna)
+{
+  StructRNA *srna;
+  PropertyRNA *prop;
+
+  srna = RNA_def_struct(brna, "AdaptiveRemeshModifier", "Modifier");
+  RNA_def_struct_ui_text(srna, "Adaptive Remesh Modifier", "");
+  RNA_def_struct_sdna(srna, "AdaptiveRemeshModifierData");
+  RNA_def_struct_ui_icon(srna, ICON_MOD_CLOTH); /* TODO(ish): Use correct 
icon. */
+
+  RNA_define_lib_overridable(true);
+
+  RNA_define_lib_overridable(false);
+}
+
 void RNA_def_modifier(BlenderRNA *brna)
 {
   StructRNA *srna;
@@ -7363,6 +7383,7 @@ void RNA_def_modifier(BlenderRNA *brna)
   rna_def_modifier_mesh_to_volume(brna);
   rna_def_modifier_volume_displace(brna);
   rna_def_modifier_volume_to_mesh(brna);
+  rna_def_modifier_adaptive_remesh(brna);
 }
 
 #endif
diff --git a/source/blender/modifiers/CMakeLists.txt 
b/source/blender/modifiers/CMakeLists.txt
index 0138dd0c3ad..2b7c895f77b 100644
--- a/source/blender/modifiers/CMakeLists.txt
+++ b/source/blender/modifiers/CMakeLists.txt
@@ -47,6 +47,7 @@ set(INC_SYS
 )
 
 set(SRC
+  intern/MOD_adaptive_remesh.cc
   intern/MOD_armature.c
   intern/MOD_array.c
   intern/MOD_bevel.c
diff --git a/source/blender/modifiers/MOD_modifiertypes.h 
b/source/blender/modifiers/MOD_modifiertypes.h
index f36cb7ded9c..944bd87b764 100644
--- a/source/blender/modifiers/MOD_modifiertypes.h
+++ b/source/blender/modifiers/MOD_modifiertypes.h
@@ -89,6 +89,7 @@ extern ModifierTypeInfo modifierType_Nodes;
 extern ModifierTypeInfo modifierType_MeshToVolume;
 extern ModifierTypeInfo modifierType_VolumeDisplace;
 extern ModifierTypeInfo modifierType_VolumeToMesh;
+extern ModifierTypeInfo modifierType_AdaptiveRemesh;
 
 /* MOD_util.c */
 void modifier_type_init(ModifierTypeInfo *types[]);
diff --git a/source/blender/modifiers/intern/MOD_adaptive_remesh.cc 
b/source/blender/modifiers/intern/MOD_adaptive_remesh.cc
new file mode 100644
index 000..4904905eef8
--- /dev/null
+++ b/source/blender/modifiers/intern/MOD_adaptive_remesh.cc
@@ -0,0 +1,99 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the term

[Bf-blender-cvs] [8fa34714ae5] temp-lineart-contained: Merge remote-tracking branch 'origin/master' into temp-lineart-contained

2021-06-08 Thread YimingWu
Commit: 8fa34714ae5223a48963a4703fe78bef4a346e19
Author: YimingWu
Date:   Wed Jun 9 12:41:23 2021 +0800
Branches: temp-lineart-contained
https://developer.blender.org/rB8fa34714ae5223a48963a4703fe78bef4a346e19

Merge remote-tracking branch 'origin/master' into temp-lineart-contained

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [307f8c8e76b] master: Fix: Prevent small memory leak in VSE indexer

2021-06-08 Thread Sebastian Parborg
Commit: 307f8c8e76b37d0287d5dc18e1b1fd047299cadd
Author: Sebastian Parborg
Date:   Tue Jun 8 23:17:03 2021 +0200
Branches: master
https://developer.blender.org/rB307f8c8e76b37d0287d5dc18e1b1fd047299cadd

Fix: Prevent small memory leak in VSE indexer

We need to unref the packet to tell ffmpeg it is ok to free it after
use.

===

M   source/blender/imbuf/intern/indexer.c

===

diff --git a/source/blender/imbuf/intern/indexer.c 
b/source/blender/imbuf/intern/indexer.c
index 46b28086129..58357e52149 100644
--- a/source/blender/imbuf/intern/indexer.c
+++ b/source/blender/imbuf/intern/indexer.c
@@ -1026,6 +1026,7 @@ static int index_rebuild_ffmpeg(FFmpegIndexBuilderContext 
*context,
 index_rebuild_ffmpeg_proc_decoded_frame(context, next_packet, 
in_frame);
   }
 }
+av_packet_unref(next_packet);
   }
 
   /* process pictures still stuck in decoder engine after EOF

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [ab5b1388054] sculpt-dev: Merge branch 'master' into sculpt-dev

2021-06-08 Thread Pablo Dobarro
Commit: ab5b13880544da320d83139113a7b7f53ae3cc51
Author: Pablo Dobarro
Date:   Tue Jun 8 22:56:21 2021 +0200
Branches: sculpt-dev
https://developer.blender.org/rBab5b13880544da320d83139113a7b7f53ae3cc51

Merge branch 'master' into sculpt-dev

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [d4af8a8d26d] sculpt-dev: Sculpt: Make subdivision surface modifier use the On Cage option

2021-06-08 Thread Pablo Dobarro
Commit: d4af8a8d26d4bd8b5e899f1e73068655099bb86a
Author: Pablo Dobarro
Date:   Fri Jun 4 16:20:38 2021 +0200
Branches: sculpt-dev
https://developer.blender.org/rBd4af8a8d26d4bd8b5e899f1e73068655099bb86a

Sculpt: Make subdivision surface modifier use the On Cage option

===

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

===

diff --git a/source/blender/blenkernel/intern/crazyspace.c 
b/source/blender/blenkernel/intern/crazyspace.c
index 4e1ec9ba35e..f7e508cc997 100644
--- a/source/blender/blenkernel/intern/crazyspace.c
+++ b/source/blender/blenkernel/intern/crazyspace.c
@@ -351,7 +351,10 @@ static void crazyspace_init_verts_and_matrices(const Mesh 
*mesh,
 
 static bool crazyspace_modifier_supports_deform_matrices(ModifierData *md)
 {
-  if (ELEM(md->type, eModifierType_Subsurf, eModifierType_Multires)) {
+  if (md->type == eModifierType_Multires) {
+return true;
+  }
+  if (md->type == eModifierType_Subsurf && md->mode & eModifierMode_OnCage) {
 return true;
   }
   const ModifierTypeInfo *mti = BKE_modifier_get_info(md->type);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [f1ce835418f] temp-fix-tests-arm64: Revert "Fix (unreported): TextureOperation inputs have no resolution"

2021-06-08 Thread Manuel Castilla
Commit: f1ce835418f16fde63c636ebf5257bdfe3ee48c3
Author: Manuel Castilla
Date:   Tue Jun 8 21:56:55 2021 +0200
Branches: temp-fix-tests-arm64
https://developer.blender.org/rBf1ce835418f16fde63c636ebf5257bdfe3ee48c3

Revert "Fix (unreported): TextureOperation inputs have no resolution"

This reverts commit e9f2f17e8518f31706756b4ebe7c38a3582a3612.

===

M   source/blender/compositor/operations/COM_TextureOperation.cc
M   source/blender/compositor/operations/COM_TextureOperation.h

===

diff --git a/source/blender/compositor/operations/COM_TextureOperation.cc 
b/source/blender/compositor/operations/COM_TextureOperation.cc
index 7517ff8a137..e94c457f981 100644
--- a/source/blender/compositor/operations/COM_TextureOperation.cc
+++ b/source/blender/compositor/operations/COM_TextureOperation.cc
@@ -75,13 +75,16 @@ void TextureBaseOperation::deinitExecution()
 void TextureBaseOperation::determineResolution(unsigned int resolution[2],
unsigned int 
preferredResolution[2])
 {
-  /* Determine inputs resolutions. */
-  unsigned int temp[2];
-  NodeOperation::determineResolution(temp, preferredResolution);
-
-  /* We don't use inputs resolutions because they are only used as parameters, 
not image data. */
-  resolution[0] = preferredResolution[0];
-  resolution[1] = preferredResolution[1];
+  if (preferredResolution[0] == 0 || preferredResolution[1] == 0) {
+int width = this->m_rd->xsch * this->m_rd->size / 100;
+int height = this->m_rd->ysch * this->m_rd->size / 100;
+resolution[0] = width;
+resolution[1] = height;
+  }
+  else {
+resolution[0] = preferredResolution[0];
+resolution[1] = preferredResolution[1];
+  }
 }
 
 void TextureAlphaOperation::executePixelSampled(float output[4],
diff --git a/source/blender/compositor/operations/COM_TextureOperation.h 
b/source/blender/compositor/operations/COM_TextureOperation.h
index e5f56673694..e1e04611c6c 100644
--- a/source/blender/compositor/operations/COM_TextureOperation.h
+++ b/source/blender/compositor/operations/COM_TextureOperation.h
@@ -44,7 +44,7 @@ class TextureBaseOperation : public NodeOperation {
 
  protected:
   /**
-   * Determine the output resolution.
+   * Determine the output resolution. The resolution is retrieved from the 
Renderer
*/
   void determineResolution(unsigned int resolution[2],
unsigned int preferredResolution[2]) override;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [dcb278dd2c0] temp-fix-tests-arm64: Revert "Sequencer: Performance image crop transform."

2021-06-08 Thread Manuel Castilla
Commit: dcb278dd2c0934e6896f941bb803387934e5aa41
Author: Manuel Castilla
Date:   Tue Jun 8 22:26:27 2021 +0200
Branches: temp-fix-tests-arm64
https://developer.blender.org/rBdcb278dd2c0934e6896f941bb803387934e5aa41

Revert "Sequencer: Performance image crop transform."

This reverts commit 2e19649bb91bd2ee686eff8bde96b34d66ad1675.

===

M   source/blender/sequencer/intern/render.c

===

diff --git a/source/blender/sequencer/intern/render.c 
b/source/blender/sequencer/intern/render.c
index 594e91c1deb..0bad66c3d7a 100644
--- a/source/blender/sequencer/intern/render.c
+++ b/source/blender/sequencer/intern/render.c
@@ -544,9 +544,9 @@ static void sequencer_image_crop_transform_init(void 
*handle_v,
   handle->tot_line = tot_line;
 }
 
-static void sequencer_image_crop_transform_interpolation_coefs(
-const ImageTransformThreadData *data, float r_start_uv[2], float 
r_add_x[2], float r_add_y[2])
+static void *sequencer_image_crop_transform_do_thread(void *data_v)
 {
+  const ImageTransformThreadData *data = (ImageTransformThreadData *)data_v;
   const StripTransform *transform = data->seq->strip->transform;
   const float scale_x = transform->scale_x * data->image_scale_factor;
   const float scale_y = transform->scale_y * data->image_scale_factor;
@@ -563,40 +563,6 @@ static void 
sequencer_image_crop_transform_interpolation_coefs(
   transform_pivot_set_m3(transform_matrix, pivot);
   invert_m3(transform_matrix);
 
-  float orig[2];
-  orig[0] = 0.0;
-  orig[1] = data->start_line;
-  mul_v2_m3v2(r_start_uv, transform_matrix, orig);
-
-  float uv_min[2];
-  uv_min[0] = 0;
-  uv_min[1] = 0;
-  mul_v2_m3v2(uv_min, transform_matrix, uv_min);
-
-  float uv_max_x[2];
-  uv_max_x[0] = data->ibuf_out->x;
-  uv_max_x[1] = 0;
-  mul_v2_m3v2(r_add_x, transform_matrix, uv_max_x);
-  sub_v2_v2(r_add_x, uv_min);
-  mul_v2_fl(r_add_x, 1.0 / data->ibuf_out->x);
-
-  float uv_max_y[2];
-  uv_max_y[0] = 0;
-  uv_max_y[1] = data->ibuf_out->y;
-  mul_v2_m3v2(r_add_y, transform_matrix, uv_max_y);
-  sub_v2_v2(r_add_y, uv_min);
-  mul_v2_fl(r_add_y, 1.0 / data->ibuf_out->y);
-}
-
-static void *sequencer_image_crop_transform_do_thread(void *data_v)
-{
-  const ImageTransformThreadData *data = data_v;
-
-  float last_uv[2];
-  float add_x[2];
-  float add_y[2];
-  sequencer_image_crop_transform_interpolation_coefs(data_v, last_uv, add_x, 
add_y);
-
   /* Image crop is done by offsetting image boundary limits. */
   const StripCrop *c = data->seq->strip->crop;
   const int left = c->left * data->crop_scale_factor;
@@ -609,13 +575,10 @@ static void 
*sequencer_image_crop_transform_do_thread(void *data_v)
   const float source_pixel_range_min[2] = {left, bottom};
 
   const int width = data->ibuf_out->x;
-
-  float uv[2];
   for (int yi = data->start_line; yi < data->start_line + data->tot_line; 
yi++) {
-copy_v2_v2(uv, last_uv);
-add_v2_v2(last_uv, add_y);
 for (int xi = 0; xi < width; xi++) {
-  add_v2_v2(uv, add_x);
+  float uv[2] = {xi, yi};
+  mul_v2_m3v2(uv, transform_matrix, uv);
 
   if (source_pixel_range_min[0] >= uv[0] || uv[0] >= 
source_pixel_range_max[0] ||
   source_pixel_range_min[1] >= uv[1] || uv[1] >= 
source_pixel_range_max[1]) {

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [a450f8a7ae1] cycles-x: Fix Cycles X AOV writing not working

2021-06-08 Thread Brecht Van Lommel
Commit: a450f8a7ae18bd601c906213802118de61367b22
Author: Brecht Van Lommel
Date:   Tue Jun 8 19:10:13 2021 +0200
Branches: cycles-x
https://developer.blender.org/rBa450f8a7ae18bd601c906213802118de61367b22

Fix Cycles X AOV writing not working

===

M   intern/cycles/kernel/integrator/integrator_state.h
M   intern/cycles/kernel/svm/svm.h
M   intern/cycles/kernel/svm/svm_aov.h

===

diff --git a/intern/cycles/kernel/integrator/integrator_state.h 
b/intern/cycles/kernel/integrator/integrator_state.h
index 1dda6b67c23..a28df75959a 100644
--- a/intern/cycles/kernel/integrator/integrator_state.h
+++ b/intern/cycles/kernel/integrator/integrator_state.h
@@ -143,7 +143,7 @@ typedef struct IntegratorStateGPU {
 #  define INTEGRATOR_STATE_PASS kg, state
 
 #  define INTEGRATOR_STATE_PASS_NULL kg, NULL
-#  define INTEGRATOR_STATE_IS_NULL state == NULL
+#  define INTEGRATOR_STATE_IS_NULL (state == NULL)
 
 #  define INTEGRATOR_STATE(nested_struct, member) \
 (((const IntegratorState *)state)->nested_struct.member)
diff --git a/intern/cycles/kernel/svm/svm.h b/intern/cycles/kernel/svm/svm.h
index ea394abe599..aa77d3d44ba 100644
--- a/intern/cycles/kernel/svm/svm.h
+++ b/intern/cycles/kernel/svm/svm.h
@@ -220,7 +220,7 @@ CCL_NAMESPACE_BEGIN
 template
 ccl_device void svm_eval_nodes(INTEGRATOR_STATE_CONST_ARGS,
ShaderData *sd,
-   ccl_global float *buffer,
+   ccl_global float *render_buffer,
int path_flag)
 {
   float stack[SVM_STACK_SIZE];
@@ -567,15 +567,15 @@ ccl_device void 
svm_eval_nodes(INTEGRATOR_STATE_CONST_ARGS,
 }
 break;
   case NODE_AOV_START:
-if (!svm_node_aov_check(path_flag, buffer)) {
+if (!svm_node_aov_check(path_flag, render_buffer)) {
   return;
 }
 break;
   case NODE_AOV_COLOR:
-svm_node_aov_color(kg, sd, stack, node, buffer);
+svm_node_aov_color(INTEGRATOR_STATE_PASS, sd, stack, node, 
render_buffer);
 break;
   case NODE_AOV_VALUE:
-svm_node_aov_value(kg, sd, stack, node, buffer);
+svm_node_aov_value(INTEGRATOR_STATE_PASS, sd, stack, node, 
render_buffer);
 break;
 #endif /* NODES_GROUP(NODE_GROUP_LEVEL_4) */
   default:
diff --git a/intern/cycles/kernel/svm/svm_aov.h 
b/intern/cycles/kernel/svm/svm_aov.h
index cd5edc68607..403df254bd9 100644
--- a/intern/cycles/kernel/svm/svm_aov.h
+++ b/intern/cycles/kernel/svm/svm_aov.h
@@ -18,30 +18,45 @@
 
 CCL_NAMESPACE_BEGIN
 
-ccl_device_inline bool svm_node_aov_check(const int path_flag, ccl_global 
float *buffer)
+ccl_device_inline bool svm_node_aov_check(const int path_flag, ccl_global 
float *render_buffer)
 {
   bool is_primary = (path_flag & PATH_RAY_CAMERA) && (!(path_flag & 
PATH_RAY_SINGLE_PASS_DONE));
 
-  return ((buffer != NULL) && is_primary);
+  return ((render_buffer != NULL) && is_primary);
 }
 
-ccl_device void svm_node_aov_color(
-const KernelGlobals *kg, ShaderData *sd, float *stack, uint4 node, 
ccl_global float *buffer)
+ccl_device void svm_node_aov_color(INTEGRATOR_STATE_CONST_ARGS,
+   ShaderData *sd,
+   float *stack,
+   uint4 node,
+   ccl_global float *render_buffer)
 {
   float3 val = stack_load_float3(stack, node.y);
 
-  if (buffer) {
-kernel_write_pass_float4(buffer + kernel_data.film.pass_aov_color + 4 * 
node.z,
- make_float4(val.x, val.y, val.z, 1.0f));
+  if (render_buffer && !INTEGRATOR_STATE_IS_NULL) {
+const uint32_t render_pixel_index = INTEGRATOR_STATE(path, 
render_pixel_index);
+const uint64_t render_buffer_offset = (uint64_t)render_pixel_index *
+  kernel_data.film.pass_stride;
+ccl_global float *buffer = render_buffer + render_buffer_offset +
+   (kernel_data.film.pass_aov_color + 4 * node.z);
+kernel_write_pass_float4(buffer, make_float4(val.x, val.y, val.z, 1.0f));
   }
 }
 
-ccl_device void svm_node_aov_value(
-const KernelGlobals *kg, ShaderData *sd, float *stack, uint4 node, 
ccl_global float *buffer)
+ccl_device void svm_node_aov_value(INTEGRATOR_STATE_CONST_ARGS,
+   ShaderData *sd,
+   float *stack,
+   uint4 node,
+   ccl_global float *render_buffer)
 {
   float val = stack_load_float(stack, node.y);
 
-  if (buffer) {
+  if (render_buffer && !INTEGRATOR_STATE_IS_NULL) {
+const uint32_t render_pixel_index = INTEGRATOR_STATE(path, 
render_pixel_index);
+const uint64_t render_buffer_offset = (uint64_t)render_pixel_index *
+ 

[Bf-blender-cvs] [08f5ec2d2df] cycles-x: Fix Cycles X assert when writing Noisy Image pass

2021-06-08 Thread Brecht Van Lommel
Commit: 08f5ec2d2df28f828f9ed296759c0796b12d526d
Author: Brecht Van Lommel
Date:   Tue Jun 8 19:46:34 2021 +0200
Branches: cycles-x
https://developer.blender.org/rB08f5ec2d2df28f828f9ed296759c0796b12d526d

Fix Cycles X assert when writing Noisy Image pass

===

M   intern/cycles/integrator/pass_accessor.cpp

===

diff --git a/intern/cycles/integrator/pass_accessor.cpp 
b/intern/cycles/integrator/pass_accessor.cpp
index 5efe539ac4d..97269fbd51a 100644
--- a/intern/cycles/integrator/pass_accessor.cpp
+++ b/intern/cycles/integrator/pass_accessor.cpp
@@ -198,31 +198,34 @@ bool PassAccessor::get_render_tile_pixels(const 
RenderBuffers *render_buffers,
 }
   }
   else if (destination.num_components == 4) {
-DCHECK_EQ(pass_info.num_components, 4)
-<< "Number of components mismatch for pass type " << pass_info.type;
-
-/* RGBA */
-if (type == PASS_SHADOW) {
-  get_pass_shadow4(render_buffers, buffer_params, destination);
-}
-else if (type == PASS_MOTION) {
-  get_pass_motion(render_buffers, buffer_params, destination);
-}
-else if (type == PASS_CRYPTOMATTE) {
-  get_pass_cryptomatte(render_buffers, buffer_params, destination);
-}
-else if (type == PASS_DENOISING_COLOR) {
+if (type == PASS_DENOISING_COLOR) {
+  /* RGB to RGBA (alpha comes from combined pass). */
   get_pass_denoising_color(render_buffers, buffer_params, destination);
 }
-else if (type == PASS_SHADOW_CATCHER) {
-  get_pass_shadow_catcher(render_buffers, buffer_params, destination);
-}
-else if (type == PASS_SHADOW_CATCHER_MATTE &&
- pass_access_info_.use_approximate_shadow_catcher) {
-  get_pass_shadow_catcher_matte_with_shadow(render_buffers, buffer_params, 
destination);
-}
 else {
-  get_pass_float4(render_buffers, buffer_params, destination);
+  DCHECK_EQ(pass_info.num_components, 4)
+  << "Number of components mismatch for pass type " << pass_info.type;
+
+  /* RGBA */
+  if (type == PASS_SHADOW) {
+get_pass_shadow4(render_buffers, buffer_params, destination);
+  }
+  else if (type == PASS_MOTION) {
+get_pass_motion(render_buffers, buffer_params, destination);
+  }
+  else if (type == PASS_CRYPTOMATTE) {
+get_pass_cryptomatte(render_buffers, buffer_params, destination);
+  }
+  else if (type == PASS_SHADOW_CATCHER) {
+get_pass_shadow_catcher(render_buffers, buffer_params, destination);
+  }
+  else if (type == PASS_SHADOW_CATCHER_MATTE &&
+   pass_access_info_.use_approximate_shadow_catcher) {
+get_pass_shadow_catcher_matte_with_shadow(render_buffers, 
buffer_params, destination);
+  }
+  else {
+get_pass_float4(render_buffers, buffer_params, destination);
+  }
 }
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [8bd09b1d77a] master: Build: upgrade OpenImageDenoise to 1.4.0

2021-06-08 Thread Brecht Van Lommel
Commit: 8bd09b1d77a3b83f7725c6794132bcec5018506f
Author: Brecht Van Lommel
Date:   Thu May 20 19:14:27 2021 +0200
Branches: master
https://developer.blender.org/rB8bd09b1d77a3b83f7725c6794132bcec5018506f

Build: upgrade OpenImageDenoise to 1.4.0

CMake builder and install deps changes, precompiled libraries are still to be
committed.

Ref T88438, T88434

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

===

M   build_files/build_environment/cmake/versions.cmake
M   build_files/build_environment/install_deps.sh
M   build_files/build_environment/patches/oidn.diff

===

diff --git a/build_files/build_environment/cmake/versions.cmake 
b/build_files/build_environment/cmake/versions.cmake
index 4500245d42a..d93b8463b4b 100644
--- a/build_files/build_environment/cmake/versions.cmake
+++ b/build_files/build_environment/cmake/versions.cmake
@@ -432,9 +432,9 @@ set(USD_HASH 1dd1e2092d085ed393c1f7c450a4155a)
 set(USD_HASH_TYPE MD5)
 set(USD_FILE usd-v${USD_VERSION}.tar.gz)
 
-set(OIDN_VERSION 1.3.0)
+set(OIDN_VERSION 1.4.0)
 set(OIDN_URI 
https://github.com/OpenImageDenoise/oidn/releases/download/v${OIDN_VERSION}/oidn-${OIDN_VERSION}.src.tar.gz)
-set(OIDN_HASH 301a5a0958d375a942014df0679b9270)
+set(OIDN_HASH 421824019becc5b664a22a2b98332bc5)
 set(OIDN_HASH_TYPE MD5)
 set(OIDN_FILE oidn-${OIDN_VERSION}.src.tar.gz)
 
diff --git a/build_files/build_environment/install_deps.sh 
b/build_files/build_environment/install_deps.sh
index fd68129a0ff..808e154955d 100755
--- a/build_files/build_environment/install_deps.sh
+++ b/build_files/build_environment/install_deps.sh
@@ -553,10 +553,10 @@ EMBREE_FORCE_BUILD=false
 EMBREE_FORCE_REBUILD=false
 EMBREE_SKIP=false
 
-OIDN_VERSION="1.3.0"
-OIDN_VERSION_SHORT="1.3"
-OIDN_VERSION_MIN="1.3.0"
-OIDN_VERSION_MAX="1.4"
+OIDN_VERSION="1.4.0"
+OIDN_VERSION_SHORT="1.4"
+OIDN_VERSION_MIN="1.4.0"
+OIDN_VERSION_MAX="1.5"
 OIDN_FORCE_BUILD=false
 OIDN_FORCE_REBUILD=false
 OIDN_SKIP=false
diff --git a/build_files/build_environment/patches/oidn.diff 
b/build_files/build_environment/patches/oidn.diff
index 10d21d7764b..db1015b8958 100644
--- a/build_files/build_environment/patches/oidn.diff
+++ b/build_files/build_environment/patches/oidn.diff
@@ -1,33 +1,3 @@
-diff -Naur oidn-1.3.0/cmake/FindTBB.cmake 
external_openimagedenoise/cmake/FindTBB.cmake
 oidn-1.3.0/cmake/FindTBB.cmake 2021-02-04 16:20:26 -0700
-+++ external_openimagedenoise/cmake/FindTBB.cmake  2021-02-12 09:35:53 
-0700
-@@ -332,20 +332,22 @@
-   ${TBB_ROOT}/lib/${TBB_ARCH}/${TBB_VCVER}
-   ${TBB_ROOT}/lib
- )
--
- # On Windows, also search the DLL so that the client may install it.
- file(GLOB DLL_NAMES
-   ${TBB_ROOT}/bin/${TBB_ARCH}/${TBB_VCVER}/${LIB_NAME}.dll
-   ${TBB_ROOT}/bin/${LIB_NAME}.dll
-+  ${TBB_ROOT}/lib/${LIB_NAME}.dll
-   ${TBB_ROOT}/redist/${TBB_ARCH}/${TBB_VCVER}/${LIB_NAME}.dll
-   ${TBB_ROOT}/redist/${TBB_ARCH}/${TBB_VCVER}/${LIB_NAME_GLOB1}.dll
-   ${TBB_ROOT}/redist/${TBB_ARCH}/${TBB_VCVER}/${LIB_NAME_GLOB2}.dll
-   ${TBB_ROOT}/../redist/${TBB_ARCH}/tbb/${TBB_VCVER}/${LIB_NAME}.dll
-   ${TBB_ROOT}/../redist/${TBB_ARCH}_win/tbb/${TBB_VCVER}/${LIB_NAME}.dll
- )
--list(GET DLL_NAMES 0 DLL_NAME)
--get_filename_component(${BIN_DIR_VAR} "${DLL_NAME}" DIRECTORY)
--set(${DLL_VAR} "${DLL_NAME}" CACHE PATH "${COMPONENT_NAME} 
${BUILD_CONFIG} dll path")
-+if (DLL_NAMES) 
-+list(GET DLL_NAMES 0 DLL_NAME)
-+get_filename_component(${BIN_DIR_VAR} "${DLL_NAME}" DIRECTORY)
-+set(${DLL_VAR} "${DLL_NAME}" CACHE PATH "${COMPONENT_NAME} 
${BUILD_CONFIG} dll path")
-+endif()
-   elseif(APPLE)
- set(LIB_PATHS ${TBB_ROOT}/lib)
-   else()
 --- external_openimagedenoise/cmake/oidn_ispc.cmake2021-02-15 
17:29:34.0 +0100
 +++ external_openimagedenoise/cmake/oidn_ispc.cmake2   2021-02-15 
17:29:28.0 +0100
 @@ -98,7 +98,7 @@

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [f29a738e23c] master: PyAPI: use keyword only arguments

2021-06-08 Thread Campbell Barton
Commit: f29a738e23ce487fc9ae759326fc3409b82f8b26
Author: Campbell Barton
Date:   Tue Jun 8 18:03:14 2021 +1000
Branches: master
https://developer.blender.org/rBf29a738e23ce487fc9ae759326fc3409b82f8b26

PyAPI: use keyword only arguments

Use keyword only arguments for the following functions.

- addon_utils.module_bl_info 2nd arg `info_basis`.
- addon_utils.modules 1st `module_cache`, 2nd arg `refresh`.
- addon_utils.modules_refresh 1st arg `module_cache`.
- bl_app_template_utils.activate 1nd arg `template_id`.
- bl_app_template_utils.import_from_id 2nd arg `ignore_not_found`.
- bl_app_template_utils.import_from_path 2nd arg `ignore_not_found`.
- bl_keymap_utils.keymap_from_toolbar.generate 2nd & 3rd args 
`use_fallback_keys` & `use_reset`.
- bl_keymap_utils.platform_helpers.keyconfig_data_oskey_from_ctrl 2nd arg 
`filter_fn`.
- bl_ui_utils.bug_report_url.url_prefill_from_blender 1st arg `addon_info`.
- bmesh.types.BMFace.copy 1st & 2nd args `verts`, `edges`.
- bmesh.types.BMesh.calc_volume 1st arg `signed`.
- bmesh.types.BMesh.from_mesh 2nd..4th args `face_normals`, `use_shape_key`, 
`shape_key_index`.
- bmesh.types.BMesh.from_object 3rd & 4th args `cage`, `face_normals`.
- bmesh.types.BMesh.transform 2nd arg `filter`.
- bmesh.types.BMesh.update_edit_mesh 2nd & 3rd args `loop_triangles`, 
`destructive`.
- bmesh.types.{BMVertSeq,BMEdgeSeq,BMFaceSeq}.sort 1st & 2nd arg `key`, 
`reverse`.
- bmesh.utils.face_split 4th..6th args `coords`, `use_exist`, `example`.
- bpy.data.libraries.load 2nd..4th args `link`, `relative`, `assets_only`.
- bpy.data.user_map 1st..3rd args `subset`, `key_types, `value_types`.
- bpy.msgbus.subscribe_rna 5th arg `options`.
- bpy.path.abspath 2nd & 3rd args `start` & `library`.
- bpy.path.clean_name 2nd arg `replace`.
- bpy.path.ensure_ext 3rd arg `case_sensitive`.
- bpy.path.module_names 2nd arg `recursive`.
- bpy.path.relpath 2nd arg `start`.
- bpy.types.EditBone.transform 2nd & 3rd arg `scale`, `roll`.
- bpy.types.Operator.as_keywords 1st arg `ignore`.
- bpy.types.Struct.{keyframe_insert,keyframe_delete} 2nd..5th args `index`, 
`frame`, `group`, `options`.
- bpy.types.WindowManager.popup_menu 2nd & 3rd arg `title`, `icon`.
- bpy.types.WindowManager.popup_menu_pie 3rd & 4th arg `title`, `icon`.
- bpy.utils.app_template_paths 1st arg `subdir`.
- bpy.utils.app_template_paths 1st arg `subdir`.
- bpy.utils.blend_paths 1st..3rd args `absolute`, `packed`, `local`.
- bpy.utils.execfile 2nd arg `mod`.
- bpy.utils.keyconfig_set 2nd arg `report`.
- bpy.utils.load_scripts 1st & 2nd `reload_scripts` & `refresh_scripts`.
- bpy.utils.preset_find 3rd & 4th args `display_name`, `ext`.
- bpy.utils.resource_path 2nd & 3rd arg `major`, `minor`.
- bpy.utils.script_paths 1st..4th args `subdir`, `user_pref`, `check_all`, 
`use_user`.
- bpy.utils.smpte_from_frame 2nd & 3rd args `fps`, `fps_base`.
- bpy.utils.smpte_from_seconds 2nd & 3rd args `fps`, `fps_base`.
- bpy.utils.system_resource 2nd arg `subdir`.
- bpy.utils.time_from_frame 2nd & 3rd args `fps`, `fps_base`.
- bpy.utils.time_to_frame 2nd & 3rd args `fps`, `fps_base`.
- bpy.utils.units.to_string 4th..6th `precision`, `split_unit`, 
`compatible_unit`.
- bpy.utils.units.to_value 4th arg `str_ref_unit`.
- bpy.utils.user_resource 2nd & 3rd args `subdir`, `create`
- bpy_extras.view3d_utils.location_3d_to_region_2d 4th arg `default`.
- bpy_extras.view3d_utils.region_2d_to_origin_3d 4th arg `clamp`.
- gpu.offscreen.unbind 1st arg `restore`.
- gpu_extras.batch.batch_for_shader 4th arg `indices`.
- gpu_extras.batch.presets.draw_circle_2d 4th arg `segments`.
- gpu_extras.presets.draw_circle_2d 4th arg `segments`.
- imbuf.types.ImBuf.resize 2nd arg `resize`.
- imbuf.write 2nd arg `filepath`.
- mathutils.kdtree.KDTree.find 2nd arg `filter`.
- nodeitems_utils.NodeCategory 3rd & 4th arg `descriptions`, `items`.
- nodeitems_utils.NodeItem 2nd..4th args `label`, `settings`, `poll`.
- nodeitems_utils.NodeItemCustom 1st & 2nd arg `poll`, `draw`.
- rna_prop_ui.draw 5th arg `use_edit`.
- rna_prop_ui.rna_idprop_ui_get 2nd arg `create`.
- rna_prop_ui.rna_idprop_ui_prop_clear 3rd arg `remove`.
- rna_prop_ui.rna_idprop_ui_prop_get 3rd arg `create`.
- rna_xml.xml2rna 2nd arg `root_rna`.
- rna_xml.xml_file_write 4th arg `skip_typemap`.

===

M   doc/python_api/examples/gpu.7.py
M   doc/python_api/examples/gpu.8.py
M   intern/cycles/blender/addon/engine.py
M   release/scripts/modules/addon_utils.py
M   release/scripts/modules/bl_app_template_utils.py
M   release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py
M   release/scripts/modules/bl_keymap_utils/platform_helpers.py
M   release/scripts/modules/bl_ui_utils/bug_report_url.py
M   release/scripts/modules/bpy/path.py
M   release/scripts/modules/bpy/utils/__init__.py
M   release/scripts/modules/bpy_extras/io_utils.py
M   release/scripts/modules/bpy_extras/view3d_utils.py
M   release/scripts/modules/bpy_t

[Bf-blender-cvs] [21ac9d9cff9] temp-geometry-nodes-curve-deform-node: Curve Deform Node: Always show position axis

2021-06-08 Thread Hans Goudey
Commit: 21ac9d9cff935dac323d61a9ff524dc1d704ea59
Author: Hans Goudey
Date:   Tue Jun 8 12:09:02 2021 -0500
Branches: temp-geometry-nodes-curve-deform-node
https://developer.blender.org/rB21ac9d9cff935dac323d61a9ff524dc1d704ea59

Curve Deform Node: Always show position axis

===

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

===

diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_deform.cc 
b/source/blender/nodes/geometry/nodes/node_geo_curve_deform.cc
index 0f7f85756f5..0ed6264faa1 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_deform.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_deform.cc
@@ -51,12 +51,11 @@ static void geo_node_curve_deform_layout(uiLayout *layout, 
bContext *UNUSED(C),
   NodeGeometryCurveDeform &node_storage = *(NodeGeometryCurveDeform 
*)node->storage;
   const GeometryNodeCurveDeformMode mode = 
(GeometryNodeCurveDeformMode)node_storage.input_mode;
 
+  uiItemR(layout, ptr, "position_axis", UI_ITEM_R_EXPAND, nullptr, ICON_NONE);
+
   uiItemR(layout, ptr, "input_mode", UI_ITEM_R_EXPAND, nullptr, ICON_NONE);
 
-  if (mode == GEO_NODE_CURVE_DEFORM_POSITION) {
-uiItemR(layout, ptr, "position_axis", UI_ITEM_R_EXPAND, nullptr, 
ICON_NONE);
-  }
-  else {
+  if (mode == GEO_NODE_CURVE_DEFORM_ATTRIBUTE) {
 uiLayoutSetPropSep(layout, true);
 uiLayoutSetPropDecorate(layout, false);
 uiItemR(layout, ptr, "attribute_input_type", 0, IFACE_("Factor"), 
ICON_NONE);
@@ -103,7 +102,6 @@ static void spline_deform(const Spline &spline,
 
   parallel_for(positions.index_range(), 1024, [&](IndexRange range) {
 for (const int i : range) {
-
   const Spline::LookupResult interp = 
spline.lookup_data_from_index_factor(index_factors[i]);
   const int index = interp.evaluated_index;
   const int next_index = interp.next_evaluated_index;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [4aae9881636] temp-geometry-nodes-curve-deform-node: Merge branch 'master' into temp-geometry-nodes-curve-deform-node

2021-06-08 Thread Hans Goudey
Commit: 4aae9881636b44942912d26b5ab2d19c4a7b329f
Author: Hans Goudey
Date:   Tue Jun 8 11:48:18 2021 -0500
Branches: temp-geometry-nodes-curve-deform-node
https://developer.blender.org/rB4aae9881636b44942912d26b5ab2d19c4a7b329f

Merge branch 'master' into temp-geometry-nodes-curve-deform-node

===



===

diff --cc source/blender/blenkernel/BKE_node.h
index 89d9ebdc5b3,16da621a0fa..48c3d9b2d97
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@@ -1432,7 -1432,7 +1432,8 @@@ int ntreeTexExecTree(struct bNodeTree *
  #define GEO_NODE_MESH_TO_CURVE 1052
  #define GEO_NODE_DELETE_GEOMETRY 1053
  #define GEO_NODE_CURVE_LENGTH 1054
- #define GEO_NODE_CURVE_DEFORM 1055
+ #define GEO_NODE_SELECT_BY_MATERIAL 1055
++#define GEO_NODE_CURVE_DEFORM 1056
  
  /** \} */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [c18ff180e39] master: Cleanup: Apply clang-format (`make format`)

2021-06-08 Thread Julian Eisel
Commit: c18ff180e39527d76cbcaab996bb8079ca4efced
Author: Julian Eisel
Date:   Tue Jun 8 18:53:06 2021 +0200
Branches: master
https://developer.blender.org/rBc18ff180e39527d76cbcaab996bb8079ca4efced

Cleanup: Apply clang-format (`make format`)

===

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

===

diff --git a/source/blender/blenlib/intern/math_base_inline.c 
b/source/blender/blenlib/intern/math_base_inline.c
index d73afff64c8..c1db9ec1a69 100644
--- a/source/blender/blenlib/intern/math_base_inline.c
+++ b/source/blender/blenlib/intern/math_base_inline.c
@@ -807,9 +807,9 @@ MINLINE unsigned char unit_float_to_uchar_clamp(float val)
 
 MINLINE unsigned short unit_float_to_ushort_clamp(float val)
 {
-  return (unsigned short)((val >= 1.0f - 0.5f / 65535) ? 65535 :
-  (val <= 0.0f)? 0 :
- (val * 65535.0f + 
0.5f));
+  return (unsigned short)((val >= 1.0f - 0.5f / 65535) ?
+  65535 :
+  (val <= 0.0f) ? 0 : (val * 65535.0f + 0.5f));
 }
 #define unit_float_to_ushort_clamp(val) \
   ((CHECK_TYPE_INLINE(val, float)), unit_float_to_ushort_clamp(val))

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [22ee056c3ab] master: Geometry Nodes: Rename bounding box mesh output to "Bounding Box"

2021-06-08 Thread Hans Goudey
Commit: 22ee056c3abb0b58ca482d57afa51ae61cbed575
Author: Hans Goudey
Date:   Tue Jun 8 11:11:49 2021 -0500
Branches: master
https://developer.blender.org/rB22ee056c3abb0b58ca482d57afa51ae61cbed575

Geometry Nodes: Rename bounding box mesh output to "Bounding Box"

This was decided by the geometry nodes team, because the
important part of this output is not that it's a mesh.

===

M   source/blender/blenloader/intern/versioning_300.c
M   source/blender/nodes/geometry/nodes/node_geo_bounding_box.cc

===

diff --git a/source/blender/blenloader/intern/versioning_300.c 
b/source/blender/blenloader/intern/versioning_300.c
index 284a30a280d..93e2af1b68e 100644
--- a/source/blender/blenloader/intern/versioning_300.c
+++ b/source/blender/blenloader/intern/versioning_300.c
@@ -159,6 +159,33 @@ static void version_switch_node_input_prefix(Main *bmain)
   FOREACH_NODETREE_END;
 }
 
+static void version_node_socket_name(bNodeTree *ntree,
+ const int node_type,
+ const char *old_name,
+ const char *new_name)
+{
+  LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
+if (node->type == node_type) {
+  LISTBASE_FOREACH (bNodeSocket *, socket, &node->inputs) {
+if (STREQ(socket->name, old_name)) {
+  strcpy(socket->name, new_name);
+}
+if (STREQ(socket->identifier, old_name)) {
+  strcpy(socket->identifier, new_name);
+}
+  }
+  LISTBASE_FOREACH (bNodeSocket *, socket, &node->outputs) {
+if (STREQ(socket->name, old_name)) {
+  strcpy(socket->name, new_name);
+}
+if (STREQ(socket->identifier, old_name)) {
+  strcpy(socket->identifier, new_name);
+}
+  }
+}
+  }
+}
+
 /* NOLINTNEXTLINE: readability-function-size */
 void blo_do_versions_300(FileData *fd, Library *UNUSED(lib), Main *bmain)
 {
@@ -211,5 +238,11 @@ void blo_do_versions_300(FileData *fd, Library 
*UNUSED(lib), Main *bmain)
*/
   {
 /* Keep this block, even when empty. */
+FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
+  if (ntree->type == NTREE_GEOMETRY) {
+version_node_socket_name(ntree, GEO_NODE_BOUNDING_BOX, "Mesh", 
"Bounding Box");
+  }
+}
+FOREACH_NODETREE_END;
   }
 }
diff --git a/source/blender/nodes/geometry/nodes/node_geo_bounding_box.cc 
b/source/blender/nodes/geometry/nodes/node_geo_bounding_box.cc
index f1731052515..83d3558a7cd 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_bounding_box.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_bounding_box.cc
@@ -25,7 +25,7 @@ static bNodeSocketTemplate geo_node_bounding_box_in[] = {
 };
 
 static bNodeSocketTemplate geo_node_bounding_box_out[] = {
-{SOCK_GEOMETRY, N_("Mesh")},
+{SOCK_GEOMETRY, N_("Bounding Box")},
 {SOCK_VECTOR, N_("Min")},
 {SOCK_VECTOR, N_("Max")},
 {-1, ""},
@@ -149,7 +149,7 @@ static void geo_node_bounding_box_exec(GeoNodeExecParams 
params)
   }
 
   if (min == float3(FLT_MAX)) {
-params.set_output("Mesh", GeometrySet());
+params.set_output("Bounding Box", GeometrySet());
 params.set_output("Min", float3(0));
 params.set_output("Max", float3(0));
   }
@@ -158,7 +158,7 @@ static void geo_node_bounding_box_exec(GeoNodeExecParams 
params)
 const float3 center = min + scale / 2.0f;
 Mesh *mesh = create_cube_mesh(1.0f);
 transform_mesh(mesh, center, float3(0), scale);
-params.set_output("Mesh", GeometrySet::create_with_mesh(mesh));
+params.set_output("Bounding Box", GeometrySet::create_with_mesh(mesh));
 params.set_output("Min", min);
 params.set_output("Max", max);
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [f5a2d932249] master: Geometry Nodes: Support curve instances in the bounding box node

2021-06-08 Thread Hans Goudey
Commit: f5a2d932249ad9639bdc1f8ebd73120d9d71ad20
Author: Hans Goudey
Date:   Tue Jun 8 10:51:52 2021 -0500
Branches: master
https://developer.blender.org/rBf5a2d932249ad9639bdc1f8ebd73120d9d71ad20

Geometry Nodes: Support curve instances in the bounding box node

Currently curve instances are misleading, since `CurveEval` is created
from scratch from the original `Curve`, but this won't always be true.

===

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

===

diff --git a/source/blender/nodes/geometry/nodes/node_geo_bounding_box.cc 
b/source/blender/nodes/geometry/nodes/node_geo_bounding_box.cc
index b6fa4c0d48f..f1731052515 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_bounding_box.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_bounding_box.cc
@@ -14,6 +14,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
+#include "BKE_spline.hh"
 #include "BKE_volume.h"
 
 #include "node_geometry_util.hh"
@@ -81,6 +82,28 @@ static void compute_min_max_from_volume_and_transforms(const 
VolumeComponent &vo
 #endif
 }
 
+static void compute_min_max_from_curve_and_transforms(const CurveComponent 
&curve_component,
+  Span 
transforms,
+  float3 &r_min,
+  float3 &r_max)
+{
+  const CurveEval *curve = curve_component.get_for_read();
+  if (curve == nullptr) {
+return;
+  }
+  for (const SplinePtr &spline : curve->splines()) {
+Span positions = spline->evaluated_positions();
+
+for (const float4x4 &transform : transforms) {
+  for (const int i : positions.index_range()) {
+const float3 position = positions[i];
+const float3 transformed_position = transform * position;
+minmax_v3v3_v3(r_min, r_max, transformed_position);
+  }
+}
+  }
+}
+
 static void compute_geometry_set_instances_boundbox(const GeometrySet 
&geometry_set,
 float3 &r_min,
 float3 &r_max)
@@ -104,6 +127,10 @@ static void compute_geometry_set_instances_boundbox(const 
GeometrySet &geometry_
   compute_min_max_from_volume_and_transforms(
   *set.get_component_for_read(), transforms, r_min, 
r_max);
 }
+if (set.has()) {
+  compute_min_max_from_curve_and_transforms(
+  *set.get_component_for_read(), transforms, r_min, 
r_max);
+}
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [790d11899ad] soc-2021-uv-editor-improvements: Merge branch 'master' into soc-2021-uv-editor-improvements

2021-06-08 Thread Siddhartha Jejurkar
Commit: 790d11899ad3b6df9a0cdb0c0a4962bbc1340ad5
Author: Siddhartha Jejurkar
Date:   Tue Jun 8 20:58:04 2021 +0530
Branches: soc-2021-uv-editor-improvements
https://developer.blender.org/rB790d11899ad3b6df9a0cdb0c0a4962bbc1340ad5

Merge branch 'master' into soc-2021-uv-editor-improvements

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [9b867b1cf70] cycles-x: Cycles X: restore baking of more passes

2021-06-08 Thread Brecht Van Lommel
Commit: 9b867b1cf707ae393f02ea6d17da3e376d8ef7da
Author: Brecht Van Lommel
Date:   Fri Jun 4 18:41:35 2021 +0200
Branches: cycles-x
https://developer.blender.org/rB9b867b1cf707ae393f02ea6d17da3e376d8ef7da

Cycles X: restore baking of more passes

The idea is to map baking settings to render passes. Still various passes
missing. In particular AO and Shadow (also missing for regular render) and
the complete filter options for light baking.

Some details of the implementation:
* The pass accessor can now read e.g. roughness into an RGBA image, which
  is convenient for baking.
* ShaderEvalType is now only used for displace/background baking, no longer
  part of the kernel and much smaller. Instead passes are used.
* Roughness render pass added for baking.
* Normals are baked as -1..1 just like the render pass, the Blender side
  was updated since it expected 0..1 previously.

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

===

M   intern/cycles/blender/addon/ui.py
M   intern/cycles/blender/blender_session.cpp
M   intern/cycles/integrator/pass_accessor.cpp
M   intern/cycles/integrator/shader_eval.cpp
M   intern/cycles/integrator/shader_eval.h
M   intern/cycles/kernel/integrator/integrator_init_from_bake.h
M   intern/cycles/kernel/kernel_bake.h
M   intern/cycles/kernel/kernel_passes.h
M   intern/cycles/kernel/kernel_shader.h
M   intern/cycles/kernel/kernel_types.h
M   intern/cycles/render/bake.cpp
M   intern/cycles/render/bake.h
M   intern/cycles/render/film.cpp
M   intern/cycles/render/pass.cpp
M   source/blender/render/intern/bake.c

===

diff --git a/intern/cycles/blender/addon/ui.py 
b/intern/cycles/blender/addon/ui.py
index 2d59de13fc0..8c8e5792374 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -1671,7 +1671,6 @@ class CYCLES_RENDER_PT_bake_influence(CyclesButtonsPanel, 
Panel):
 col.prop(cbk, "use_pass_diffuse")
 col.prop(cbk, "use_pass_glossy")
 col.prop(cbk, "use_pass_transmission")
-col.prop(cbk, "use_pass_ambient_occlusion")
 col.prop(cbk, "use_pass_emit")
 
 elif cscene.bake_type in {'DIFFUSE', 'GLOSSY', 'TRANSMISSION'}:
diff --git a/intern/cycles/blender/blender_session.cpp 
b/intern/cycles/blender/blender_session.cpp
index 8ee976fceab..0b5c171b0cb 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -273,48 +273,6 @@ void BlenderSession::free_session()
   delete session;
 }
 
-static ShaderEvalType get_shader_type(const string &pass_type)
-{
-  const char *shader_type = pass_type.c_str();
-
-  /* data passes */
-  if (strcmp(shader_type, "NORMAL") == 0)
-return SHADER_EVAL_NORMAL;
-  else if (strcmp(shader_type, "UV") == 0)
-return SHADER_EVAL_UV;
-  else if (strcmp(shader_type, "ROUGHNESS") == 0)
-return SHADER_EVAL_ROUGHNESS;
-  else if (strcmp(shader_type, "DIFFUSE_COLOR") == 0)
-return SHADER_EVAL_DIFFUSE_COLOR;
-  else if (strcmp(shader_type, "GLOSSY_COLOR") == 0)
-return SHADER_EVAL_GLOSSY_COLOR;
-  else if (strcmp(shader_type, "TRANSMISSION_COLOR") == 0)
-return SHADER_EVAL_TRANSMISSION_COLOR;
-  else if (strcmp(shader_type, "EMIT") == 0)
-return SHADER_EVAL_EMISSION;
-
-  /* light passes */
-  else if (strcmp(shader_type, "AO") == 0)
-return SHADER_EVAL_AO;
-  else if (strcmp(shader_type, "COMBINED") == 0)
-return SHADER_EVAL_COMBINED;
-  else if (strcmp(shader_type, "SHADOW") == 0)
-return SHADER_EVAL_SHADOW;
-  else if (strcmp(shader_type, "DIFFUSE") == 0)
-return SHADER_EVAL_DIFFUSE;
-  else if (strcmp(shader_type, "GLOSSY") == 0)
-return SHADER_EVAL_GLOSSY;
-  else if (strcmp(shader_type, "TRANSMISSION") == 0)
-return SHADER_EVAL_TRANSMISSION;
-
-  /* extra */
-  else if (strcmp(shader_type, "ENVIRONMENT") == 0)
-return SHADER_EVAL_ENVIRONMENT;
-
-  else
-return SHADER_EVAL_BAKE;
-}
-
 void BlenderSession::do_write_update_render_tile(bool do_update_only)
 {
   const int2 tile_offset = session->get_render_tile_offset();
@@ -587,48 +545,93 @@ void BlenderSession::render(BL::Depsgraph &b_depsgraph_)
   session->update_render_tile_cb = function_null;
 }
 
-static int bake_pass_filter_get(const int pass_filter)
+static PassType bake_type_to_pass(const string &bake_type_str, const int 
bake_filter)
 {
-  int flag = BAKE_FILTER_NONE;
-
-  if ((pass_filter & BL::BakeSettings::pass_filter_DIRECT) != 0)
-flag |= BAKE_FILTER_DIRECT;
-  if ((pass_filter & BL::BakeSettings::pass_filter_INDIRECT) != 0)
-flag |= BAKE_FILTER_INDIRECT;
-  if ((pass_filter & BL::BakeSettings::pass_filter_COLOR) != 0)
-flag |= BAKE_FILTER_COLOR;
-
-  if ((pass_filter & BL::BakeSettings::pass_filter_DIFFUSE) != 0)
-flag |= BAKE_FILTER_DIFFUSE;
-  if ((pass_filter & BL::BakeSettings::pass_f

[Bf-blender-cvs] [a31bd2609f0] master: Cleanup: Remove duplicate call to function

2021-06-08 Thread Hans Goudey
Commit: a31bd2609f04368136dada7c4024c7547e8723f5
Author: Hans Goudey
Date:   Tue Jun 8 09:55:14 2021 -0500
Branches: master
https://developer.blender.org/rBa31bd2609f04368136dada7c4024c7547e8723f5

Cleanup: Remove duplicate call to function

Missed in rBa2ebbeb836ae765

===

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

===

diff --git 
a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cylinder.cc 
b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cylinder.cc
index c7b9fb920f8..1767f765da4 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cylinder.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cylinder.cc
@@ -76,7 +76,6 @@ static void 
geo_node_mesh_primitive_cylinder_exec(GeoNodeExecParams params)
 
   /* The cylinder is a special case of the cone mesh where the top and bottom 
radius are equal. */
   Mesh *mesh = create_cylinder_or_cone_mesh(radius, radius, depth, verts_num, 
fill_type);
-  BKE_id_material_eval_ensure_default_slot(&mesh->id);
 
   params.set_output("Geometry", GeometrySet::create_with_mesh(mesh));
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [6a422b6624b] soc-2021-uv-editor-improvements: Test commit. Add missing tooltips for pivot options in UV Editor.

2021-06-08 Thread SIDD017
Commit: 6a422b6624ba514d2b7df858950df23ddbbe4381
Author: SIDD017
Date:   Tue Jun 8 19:39:20 2021 +0530
Branches: soc-2021-uv-editor-improvements
https://developer.blender.org/rB6a422b6624ba514d2b7df858950df23ddbbe4381

Test commit. Add missing tooltips for pivot options in UV Editor.

===

M   source/blender/makesrna/intern/rna_space.c

===

diff --git a/source/blender/makesrna/intern/rna_space.c 
b/source/blender/makesrna/intern/rna_space.c
index bb356e4b532..b22474aa4e3 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -1755,9 +1755,17 @@ static const EnumPropertyItem 
*rna_SpaceImageEditor_pivot_itemf(bContext *UNUSED
 bool 
*UNUSED(r_free))
 {
   static const EnumPropertyItem pivot_items[] = {
-  {V3D_AROUND_CENTER_BOUNDS, "CENTER", ICON_PIVOT_BOUNDBOX, "Bounding Box 
Center", ""},
-  {V3D_AROUND_CENTER_MEDIAN, "MEDIAN", ICON_PIVOT_MEDIAN, "Median Point", 
""},
-  {V3D_AROUND_CURSOR, "CURSOR", ICON_PIVOT_CURSOR, "2D Cursor", ""},
+  {V3D_AROUND_CENTER_BOUNDS,
+   "CENTER",
+   ICON_PIVOT_BOUNDBOX,
+   "Bounding Box Center",
+   "Pivot around bounding box center of selected UVs"},
+  {V3D_AROUND_CENTER_MEDIAN,
+   "MEDIAN",
+   ICON_PIVOT_MEDIAN,
+   "Median Point",
+   "Pivot around the median point of selected UVs"},
+  {V3D_AROUND_CURSOR, "CURSOR", ICON_PIVOT_CURSOR, "2D Cursor", "Pivot 
around the 2D Cursor"},
   {V3D_AROUND_LOCAL_ORIGINS,
"INDIVIDUAL_ORIGINS",
ICON_PIVOT_INDIVIDUAL,

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [2e19649bb91] master: Sequencer: Performance image crop transform.

2021-06-08 Thread Jeroen Bakker
Commit: 2e19649bb91bd2ee686eff8bde96b34d66ad1675
Author: Jeroen Bakker
Date:   Tue Jun 8 16:46:29 2021 +0200
Branches: master
https://developer.blender.org/rB2e19649bb91bd2ee686eff8bde96b34d66ad1675

Sequencer: Performance image crop transform.

During transforming an image, a matrix multiplication per pixel was done.
The matrix in itself is always linear so it could be replaced by two additions.

During testing in debug builds playing back a movie went from 20fps to
300 fps.

Reviewed By: zeddb

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

===

M   source/blender/sequencer/intern/render.c

===

diff --git a/source/blender/sequencer/intern/render.c 
b/source/blender/sequencer/intern/render.c
index 0bad66c3d7a..594e91c1deb 100644
--- a/source/blender/sequencer/intern/render.c
+++ b/source/blender/sequencer/intern/render.c
@@ -544,9 +544,9 @@ static void sequencer_image_crop_transform_init(void 
*handle_v,
   handle->tot_line = tot_line;
 }
 
-static void *sequencer_image_crop_transform_do_thread(void *data_v)
+static void sequencer_image_crop_transform_interpolation_coefs(
+const ImageTransformThreadData *data, float r_start_uv[2], float 
r_add_x[2], float r_add_y[2])
 {
-  const ImageTransformThreadData *data = (ImageTransformThreadData *)data_v;
   const StripTransform *transform = data->seq->strip->transform;
   const float scale_x = transform->scale_x * data->image_scale_factor;
   const float scale_y = transform->scale_y * data->image_scale_factor;
@@ -563,6 +563,40 @@ static void *sequencer_image_crop_transform_do_thread(void 
*data_v)
   transform_pivot_set_m3(transform_matrix, pivot);
   invert_m3(transform_matrix);
 
+  float orig[2];
+  orig[0] = 0.0;
+  orig[1] = data->start_line;
+  mul_v2_m3v2(r_start_uv, transform_matrix, orig);
+
+  float uv_min[2];
+  uv_min[0] = 0;
+  uv_min[1] = 0;
+  mul_v2_m3v2(uv_min, transform_matrix, uv_min);
+
+  float uv_max_x[2];
+  uv_max_x[0] = data->ibuf_out->x;
+  uv_max_x[1] = 0;
+  mul_v2_m3v2(r_add_x, transform_matrix, uv_max_x);
+  sub_v2_v2(r_add_x, uv_min);
+  mul_v2_fl(r_add_x, 1.0 / data->ibuf_out->x);
+
+  float uv_max_y[2];
+  uv_max_y[0] = 0;
+  uv_max_y[1] = data->ibuf_out->y;
+  mul_v2_m3v2(r_add_y, transform_matrix, uv_max_y);
+  sub_v2_v2(r_add_y, uv_min);
+  mul_v2_fl(r_add_y, 1.0 / data->ibuf_out->y);
+}
+
+static void *sequencer_image_crop_transform_do_thread(void *data_v)
+{
+  const ImageTransformThreadData *data = data_v;
+
+  float last_uv[2];
+  float add_x[2];
+  float add_y[2];
+  sequencer_image_crop_transform_interpolation_coefs(data_v, last_uv, add_x, 
add_y);
+
   /* Image crop is done by offsetting image boundary limits. */
   const StripCrop *c = data->seq->strip->crop;
   const int left = c->left * data->crop_scale_factor;
@@ -575,10 +609,13 @@ static void 
*sequencer_image_crop_transform_do_thread(void *data_v)
   const float source_pixel_range_min[2] = {left, bottom};
 
   const int width = data->ibuf_out->x;
+
+  float uv[2];
   for (int yi = data->start_line; yi < data->start_line + data->tot_line; 
yi++) {
+copy_v2_v2(uv, last_uv);
+add_v2_v2(last_uv, add_y);
 for (int xi = 0; xi < width; xi++) {
-  float uv[2] = {xi, yi};
-  mul_v2_m3v2(uv, transform_matrix, uv);
+  add_v2_v2(uv, add_x);
 
   if (source_pixel_range_min[0] >= uv[0] || uv[0] >= 
source_pixel_range_max[0] ||
   source_pixel_range_min[1] >= uv[1] || uv[1] >= 
source_pixel_range_max[1]) {

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [7124c663407] master: Fix T87703: Failed assert when dragging object data-block into 3D View

2021-06-08 Thread Julian Eisel
Commit: 7124c663407c4c0ccca167107799165c01950a1f
Author: Julian Eisel
Date:   Tue Jun 8 16:36:42 2021 +0200
Branches: master
https://developer.blender.org/rB7124c663407c4c0ccca167107799165c01950a1f

Fix T87703: Failed assert when dragging object data-block into 3D View

Talked with Bastien and we ended up looking into this. Issue is that the
dupliation through drag & drop should also be considered a
"sub-process", like Shift+D duplicating does. Added a comment explaining
why this is needed.

===

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

===

diff --git a/source/blender/editors/object/object_add.c 
b/source/blender/editors/object/object_add.c
index ef500be0133..12aaa9c2d9f 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -3483,7 +3483,17 @@ static int object_add_named_exec(bContext *C, wmOperator 
*op)
   }
 
   /* prepare dupli */
-  basen = object_add_duplicate_internal(bmain, scene, view_layer, ob, dupflag, 
0);
+  basen = object_add_duplicate_internal(
+  bmain,
+  scene,
+  view_layer,
+  ob,
+  dupflag,
+  /* Sub-process flag because the new-ID remapping 
(#BKE_libblock_relink_to_newid()) in this
+   * function will only work if the object is already linked in the view 
layer, which is not
+   * the case here. So we have to do the new-ID relinking ourselves 
(#copy_object_set_idnew()).
+   */
+  LIB_ID_DUPLICATE_IS_SUBPROCESS);
 
   if (basen == NULL) {
 BKE_report(op->reports, RPT_ERROR, "Object could not be duplicated");

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [ef07d5a2978] temp-attribute-processor: fix

2021-06-08 Thread Jacques Lucke
Commit: ef07d5a297868ec74ec8f229c2f886a999d5e3bf
Author: Jacques Lucke
Date:   Tue Jun 8 16:42:41 2021 +0200
Branches: temp-attribute-processor
https://developer.blender.org/rBef07d5a297868ec74ec8f229c2f886a999d5e3bf

fix

===

M   release/scripts/startup/nodeitems_builtins.py

===

diff --git a/release/scripts/startup/nodeitems_builtins.py 
b/release/scripts/startup/nodeitems_builtins.py
index 7876295857d..e3917cfd347 100644
--- a/release/scripts/startup/nodeitems_builtins.py
+++ b/release/scripts/startup/nodeitems_builtins.py
@@ -39,6 +39,7 @@ class SortedNodeCategory(NodeCategory):
 if isinstance(item, NodeItemCustom):
 new_items.extend(sorted(section, key=sort_key))
 new_items.append(item)
+section.clear()
 else:
 section.append(item)
 new_items.extend(sorted(section, key=sort_key))

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [b9c8bb42549] temp-attribute-processor: Merge branch 'master' into temp-attribute-processor

2021-06-08 Thread Jacques Lucke
Commit: b9c8bb425495bde50b91faf0cd8bce191f8f4577
Author: Jacques Lucke
Date:   Tue Jun 8 16:32:51 2021 +0200
Branches: temp-attribute-processor
https://developer.blender.org/rBb9c8bb425495bde50b91faf0cd8bce191f8f4577

Merge branch 'master' into temp-attribute-processor

===



===

diff --cc source/blender/blenkernel/BKE_node.h
index 7da9baee095,16da621a0fa..31549351792
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@@ -1432,7 -1432,7 +1432,8 @@@ int ntreeTexExecTree(struct bNodeTree *
  #define GEO_NODE_MESH_TO_CURVE 1052
  #define GEO_NODE_DELETE_GEOMETRY 1053
  #define GEO_NODE_CURVE_LENGTH 1054
- #define GEO_NODE_ATTRIBUTE_PROCESSOR 1055
+ #define GEO_NODE_SELECT_BY_MATERIAL 1055
++#define GEO_NODE_ATTRIBUTE_PROCESSOR 1056
  
  /** \} */
  
diff --cc source/blender/bmesh/CMakeLists.txt
index 4bd88ae62d7,ec282888ffa..59dc1e5a14f
--- a/source/blender/bmesh/CMakeLists.txt
+++ b/source/blender/bmesh/CMakeLists.txt
@@@ -102,10 -102,12 +102,14 @@@ set(SR
intern/bmesh_mesh_convert.h
intern/bmesh_mesh_duplicate.c
intern/bmesh_mesh_duplicate.h
+   intern/bmesh_mesh_normals.c
+   intern/bmesh_mesh_normals.h
+   intern/bmesh_mesh_partial_update.c
+   intern/bmesh_mesh_partial_update.h
intern/bmesh_mesh_tessellate.c
intern/bmesh_mesh_tessellate.h
 +  intern/bmesh_mesh_partial_update.c
 +  intern/bmesh_mesh_partial_update.h
intern/bmesh_mesh_validate.c
intern/bmesh_mesh_validate.h
intern/bmesh_mods.c

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [09ec88413bf] temp-attribute-processor: fix

2021-06-08 Thread Jacques Lucke
Commit: 09ec88413bf995a0622f35dcf59e249384ce572b
Author: Jacques Lucke
Date:   Tue Jun 8 16:36:11 2021 +0200
Branches: temp-attribute-processor
https://developer.blender.org/rB09ec88413bf995a0622f35dcf59e249384ce572b

fix

===

M   source/blender/bmesh/CMakeLists.txt

===

diff --git a/source/blender/bmesh/CMakeLists.txt 
b/source/blender/bmesh/CMakeLists.txt
index 59dc1e5a14f..ec282888ffa 100644
--- a/source/blender/bmesh/CMakeLists.txt
+++ b/source/blender/bmesh/CMakeLists.txt
@@ -108,8 +108,6 @@ set(SRC
   intern/bmesh_mesh_partial_update.h
   intern/bmesh_mesh_tessellate.c
   intern/bmesh_mesh_tessellate.h
-  intern/bmesh_mesh_partial_update.c
-  intern/bmesh_mesh_partial_update.h
   intern/bmesh_mesh_validate.c
   intern/bmesh_mesh_validate.h
   intern/bmesh_mods.c

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [259b9c73d06] master: GPU: Thread safe index buffer builders.

2021-06-08 Thread Jeroen Bakker
Commit: 259b9c73d067bb51a6e86ff8eadd3de30c74e5ac
Author: Jeroen Bakker
Date:   Tue Jun 8 16:35:33 2021 +0200
Branches: master
https://developer.blender.org/rB259b9c73d067bb51a6e86ff8eadd3de30c74e5ac

GPU: Thread safe index buffer builders.

Current index builder is designed to be used in a single thread.
This makes all index buffer extractions single threaded.
This patch adds a thread safe solution enabling multithreaded
building of index buffers.

To reduce locking the solution would provide a task/thread local
index buffer builder (called sub builder).
When a thread is finished this thread local index buffer builder
can be joined with the initial index buffer builder.

`GPU_indexbuf_subbuilder_init`: Initialized a sub builder. The
index list is shared between the parent and sub buffer, but the
counters are localized. Ensuring that updating counters would
not need any locking.

`GPU_indexbuf_subbuilder_finish`: merge the information of the
sub builder back to the parent builder. Needs to be invoked outside
the worker thread, or when sure that all worker threads have been
finished. Internal the function is not thread safe.

For testing purposes the extract_points extractor has been migrated to
the new API. Herefore changes to the mesh extractor were needed.

* When creating tasks, the task number of current task is stored in
  ExtractTaskData including the total number of tasks.
* Adding two functions  in `MeshExtract`.
** `task_init` will initialize the task specific userdata.
** `task_finish` should merge back the task specific userdata back.
* adding task_id parameter to the iteration functions so they can
  access the correct task data without any need for locking.

There is no noticeable change in end user performance.

Reviewed By: mano-wii

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

===

M   source/blender/draw/intern/draw_cache_extract_mesh.cc
M   source/blender/draw/intern/draw_cache_extract_mesh_private.h
M   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_points.cc
M   source/blender/gpu/CMakeLists.txt
M   source/blender/gpu/GPU_index_buffer.h
M   source/blender/gpu/intern/gpu_index_buffer.cc
A   source/blender/gpu/tests/gpu_index_buffer_test.cc

===

diff --git a/source/blender/draw/intern/draw_cache_extract_mesh.cc 
b/source/blender/draw/intern/draw_cache_extract_mesh.cc
index 8d6064179ad..7b2c0da4dd9 100644
--- a/source/blender/draw/intern/draw_cache_extract_mesh.cc
+++ b/source/blender/draw/intern/draw_cache_extract_mesh.cc
@@ -24,11 +24,15 @@
  */
 #include "MEM_guardedalloc.h"
 
+#include 
+
 #include "atomic_ops.h"
 
 #include "DNA_mesh_types.h"
 #include "DNA_scene_types.h"
 
+#include "BLI_array.hh"
+#include "BLI_math_bits.h"
 #include "BLI_task.h"
 #include "BLI_vector.hh"
 
@@ -53,6 +57,8 @@ namespace blender::draw {
 /* -- */
 /** \name Mesh Elements Extract Struct
  * \{ */
+using TaskId = int;
+using TaskLen = int;
 
 struct ExtractorRunData {
   /* Extractor where this run data belongs to. */
@@ -62,11 +68,23 @@ struct ExtractorRunData {
   /* User data during iteration. Created in MeshExtract.init and passed along 
to other MeshExtract
* functions. */
   void *user_data = nullptr;
+  std::optional> task_user_datas;
 
   ExtractorRunData(const MeshExtract *extractor) : extractor(extractor)
   {
   }
 
+  void init_task_user_datas(const TaskLen task_len)
+  {
+task_user_datas = Array(task_len);
+  }
+
+  void *&operator[](const TaskId task_id)
+  {
+BLI_assert(task_user_datas);
+return (*task_user_datas)[task_id];
+  }
+
 #ifdef WITH_CXX_GUARDEDALLOC
   MEM_CXX_CLASS_ALLOC_FUNCS("DRAW:ExtractorRunData")
 #endif
@@ -111,7 +129,7 @@ class ExtractorRunDatas : public Vector {
 }
   }
 
-  eMRIterType iter_types()
+  eMRIterType iter_types() const
   {
 eMRIterType iter_type = static_cast(0);
 
@@ -122,6 +140,13 @@ class ExtractorRunDatas : public Vector {
 return iter_type;
   }
 
+  const uint iter_types_len() const
+  {
+const eMRIterType iter_type = iter_types();
+uint bits = static_cast(iter_type);
+return count_bits_i(bits);
+  }
+
   eMRDataType data_types()
   {
 eMRDataType data_type = static_cast(0);
@@ -158,7 +183,8 @@ BLI_INLINE void extract_init(const MeshRenderData *mr,
 
 BLI_INLINE void extract_iter_looptri_bm(const MeshRenderData *mr,
 const ExtractTriBMesh_Params *params,
-const ExtractorRunDatas 
&all_extractors)
+const ExtractorRunDatas 
&all_extractors,
+const TaskId task_id)
 {
   ExtractorRunDatas extractors;
   all_extractors.filter_into(extractors, MR_ITER_LOOPTRI);
@@ -166,7 +192,7 @@ BLI_INLINE void extract_it

[Bf-blender-cvs] [063f93d4a61] temp-T88822-gpu-thread-safe-index-builder: Added back optional include.

2021-06-08 Thread Jeroen Bakker
Commit: 063f93d4a615a83f04fc2397a734bce17c5a7f01
Author: Jeroen Bakker
Date:   Tue Jun 8 16:30:28 2021 +0200
Branches: temp-T88822-gpu-thread-safe-index-builder
https://developer.blender.org/rB063f93d4a615a83f04fc2397a734bce17c5a7f01

Added back optional include.

===

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

===

diff --git a/source/blender/draw/intern/draw_cache_extract_mesh.cc 
b/source/blender/draw/intern/draw_cache_extract_mesh.cc
index 3d0d2adc310..7b2c0da4dd9 100644
--- a/source/blender/draw/intern/draw_cache_extract_mesh.cc
+++ b/source/blender/draw/intern/draw_cache_extract_mesh.cc
@@ -24,6 +24,8 @@
  */
 #include "MEM_guardedalloc.h"
 
+#include 
+
 #include "atomic_ops.h"
 
 #include "DNA_mesh_types.h"

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [b17a2c87c81] temp-T88822-gpu-thread-safe-index-builder: Merge branch 'master' into temp-T88822-gpu-thread-safe-index-builder

2021-06-08 Thread Jeroen Bakker
Commit: b17a2c87c813e75be78c2f23b1add2d1fe53350c
Author: Jeroen Bakker
Date:   Tue Jun 8 16:27:37 2021 +0200
Branches: temp-T88822-gpu-thread-safe-index-builder
https://developer.blender.org/rBb17a2c87c813e75be78c2f23b1add2d1fe53350c

Merge branch 'master' into temp-T88822-gpu-thread-safe-index-builder

===



===

diff --cc source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_points.cc
index 7d3a69fab7c,d749a3ab8d1..9220198d799
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_points.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_points.cc
@@@ -176,9 -158,9 +176,10 @@@ constexpr MeshExtract create_extractor_
extractor.iter_ledge_mesh = extract_points_iter_ledge_mesh;
extractor.iter_lvert_bm = extract_points_iter_lvert_bm;
extractor.iter_lvert_mesh = extract_points_iter_lvert_mesh;
 +  extractor.task_finish = extract_points_task_finish;
extractor.finish = extract_points_finish;
 +  extractor.use_threading = true;
+   extractor.data_type = MR_DATA_NONE;
 -  extractor.use_threading = false;
extractor.mesh_buffer_offset = offsetof(MeshBufferCache, ibo.points);
return extractor;
  }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [08b0de45f32] master: Geometry Nodes: new Select by Material node

2021-06-08 Thread Jacques Lucke
Commit: 08b0de45f323ee30cea2322dc7d3bc492d6518ec
Author: Jacques Lucke
Date:   Tue Jun 8 16:01:54 2021 +0200
Branches: master
https://developer.blender.org/rB08b0de45f323ee30cea2322dc7d3bc492d6518ec

Geometry Nodes: new Select by Material node

This node creates a boolean face attribute that is "true" for
every face that has the given material.

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

===

M   release/scripts/startup/nodeitems_builtins.py
M   source/blender/blenkernel/BKE_node.h
M   source/blender/blenkernel/intern/node.cc
M   source/blender/nodes/CMakeLists.txt
M   source/blender/nodes/NOD_geometry.h
M   source/blender/nodes/NOD_static_types.h
A   source/blender/nodes/geometry/nodes/node_geo_select_by_material.cc

===

diff --git a/release/scripts/startup/nodeitems_builtins.py 
b/release/scripts/startup/nodeitems_builtins.py
index 5e245d81de4..e7b93dcc5ea 100644
--- a/release/scripts/startup/nodeitems_builtins.py
+++ b/release/scripts/startup/nodeitems_builtins.py
@@ -524,6 +524,7 @@ geometry_node_categories = [
 ]),
 GeometryNodeCategory("GEO_MATERIAL", "Material", items=[
 NodeItem("GeometryNodeMaterialAssign"),
+NodeItem("GeometryNodeSelectByMaterial"),
 NodeItem("GeometryNodeMaterialReplace"),
 ]),
 GeometryNodeCategory("GEO_MESH", "Mesh", items=[
diff --git a/source/blender/blenkernel/BKE_node.h 
b/source/blender/blenkernel/BKE_node.h
index 380e75f0924..16da621a0fa 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -1432,6 +1432,7 @@ int ntreeTexExecTree(struct bNodeTree *ntree,
 #define GEO_NODE_MESH_TO_CURVE 1052
 #define GEO_NODE_DELETE_GEOMETRY 1053
 #define GEO_NODE_CURVE_LENGTH 1054
+#define GEO_NODE_SELECT_BY_MATERIAL 1055
 
 /** \} */
 
diff --git a/source/blender/blenkernel/intern/node.cc 
b/source/blender/blenkernel/intern/node.cc
index 2a509fd7df4..10f1f40f390 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -5078,6 +5078,7 @@ static void registerGeometryNodes()
   register_node_type_geo_point_translate();
   register_node_type_geo_points_to_volume();
   register_node_type_geo_sample_texture();
+  register_node_type_geo_select_by_material();
   register_node_type_geo_subdivide();
   register_node_type_geo_subdivision_surface();
   register_node_type_geo_switch();
diff --git a/source/blender/nodes/CMakeLists.txt 
b/source/blender/nodes/CMakeLists.txt
index 8baa891df5c..7aaf28869de 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -189,6 +189,7 @@ set(SRC
   geometry/nodes/node_geo_point_separate.cc
   geometry/nodes/node_geo_point_translate.cc
   geometry/nodes/node_geo_points_to_volume.cc
+  geometry/nodes/node_geo_select_by_material.cc
   geometry/nodes/node_geo_subdivide.cc
   geometry/nodes/node_geo_subdivision_surface.cc
   geometry/nodes/node_geo_switch.cc
diff --git a/source/blender/nodes/NOD_geometry.h 
b/source/blender/nodes/NOD_geometry.h
index 3c43b53da5a..df14fcfe5b4 100644
--- a/source/blender/nodes/NOD_geometry.h
+++ b/source/blender/nodes/NOD_geometry.h
@@ -78,6 +78,7 @@ void register_node_type_geo_point_separate(void);
 void register_node_type_geo_point_translate(void);
 void register_node_type_geo_points_to_volume(void);
 void register_node_type_geo_sample_texture(void);
+void register_node_type_geo_select_by_material(void);
 void register_node_type_geo_subdivide(void);
 void register_node_type_geo_subdivision_surface(void);
 void register_node_type_geo_switch(void);
diff --git a/source/blender/nodes/NOD_static_types.h 
b/source/blender/nodes/NOD_static_types.h
index 19b671de49d..bfd99a2bb60 100644
--- a/source/blender/nodes/NOD_static_types.h
+++ b/source/blender/nodes/NOD_static_types.h
@@ -316,6 +316,7 @@ DefNode(GeometryNode, GEO_NODE_POINT_SCALE, 
def_geo_point_scale, "POINT_SCALE",
 DefNode(GeometryNode, GEO_NODE_POINT_SEPARATE, 0, "POINT_SEPARATE", 
PointSeparate, "Point Separate", "")
 DefNode(GeometryNode, GEO_NODE_POINT_TRANSLATE, def_geo_point_translate, 
"POINT_TRANSLATE", PointTranslate, "Point Translate", "")
 DefNode(GeometryNode, GEO_NODE_POINTS_TO_VOLUME, def_geo_points_to_volume, 
"POINTS_TO_VOLUME", PointsToVolume, "Points to Volume", "")
+DefNode(GeometryNode, GEO_NODE_SELECT_BY_MATERIAL, 0, "SELECT_BY_MATERIAL", 
SelectByMaterial, "Select by Material", "")
 DefNode(GeometryNode, GEO_NODE_SUBDIVIDE, 0, "SUBDIVIDE", Subdivide, 
"Subdivide", "")
 DefNode(GeometryNode, GEO_NODE_SUBDIVISION_SURFACE, 0, "SUBDIVISION_SURFACE", 
SubdivisionSurface, "Subdivision Surface", "")
 DefNode(GeometryNode, GEO_NODE_SWITCH, def_geo_switch, "SWITCH", Switch, 
"Switch", "")
diff --git a/source/blender/nodes/geometry/nodes/node_geo_select_by_material.cc 
b/source/blender/nodes/geometry/nodes/node_geo_select_by_material.

[Bf-blender-cvs] [2246d456aa8] master: Animation: Allow selection of FCurve + its keys

2021-06-08 Thread Maxime Casas
Commit: 2246d456aa848f0e6b41ed90ff44869e79cb8def
Author: Maxime Casas
Date:   Tue Jun 8 15:32:47 2021 +0200
Branches: master
https://developer.blender.org/rB2246d456aa848f0e6b41ed90ff44869e79cb8def

Animation: Allow selection of FCurve + its keys

Selection of an FCurve with box/circle select now selects the entire
curve and all its keys:

- Box selecting a curve selects all the keyframes of the curve.
- Ctrl + box selecting of the curve deselects all the keyframes of the
  curve.
- Shift + box selecting of the curve extends the keyframe selection,
  adding all the keyframes of the curves that were just selected to the
  selection.
- In all cases, if the selection area contains a key, nothing is
  performed on the curves themselves (the action only impacts the
  selected keys).

Reviewed By: sybren, #animation_rigging

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

===

M   source/blender/editors/space_graph/graph_select.c

===

diff --git a/source/blender/editors/space_graph/graph_select.c 
b/source/blender/editors/space_graph/graph_select.c
index 4ab4ef518fb..b9c235873a7 100644
--- a/source/blender/editors/space_graph/graph_select.c
+++ b/source/blender/editors/space_graph/graph_select.c
@@ -512,16 +512,19 @@ static rctf initialize_box_select_coords(const 
bAnimContext *ac, const rctf *rec
   return rectf;
 }
 
-static ListBase initialize_box_select_anim_data(const SpaceGraph *sipo, 
bAnimContext *ac)
+static int initialize_animdata_selection_filter(const SpaceGraph *sipo)
 {
-  ListBase anim_data = {NULL, NULL};
-
   int filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_CURVE_VISIBLE | 
ANIMFILTER_NODUPLIS);
   if (sipo->flag & SIPO_SELCUVERTSONLY) {
 filter |= ANIMFILTER_FOREDIT | ANIMFILTER_SELEDIT;
   }
-  ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
+  return filter;
+}
 
+static ListBase initialize_box_select_anim_data(const int filter, bAnimContext 
*ac)
+{
+  ListBase anim_data = {NULL, NULL};
+  ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
   return anim_data;
 }
 
@@ -573,8 +576,11 @@ static void initialize_box_select_key_editing_data(const 
SpaceGraph *sipo,
  * which means that they may be inadvertently moved as well. However, 
incl_handles overrides
  * this, and allow handles to be considered independently too.
  * Also, for convenience, handles should get same status as keyframe (if it 
was within bounds).
+ *
+ * This function returns true if there was any change in the selection of a 
key (selecting or
+ * deselecting any key returns true, otherwise it returns false).
  */
-static void box_select_graphkeys(bAnimContext *ac,
+static bool box_select_graphkeys(bAnimContext *ac,
  const rctf *rectf_view,
  short mode,
  short selectmode,
@@ -583,7 +589,8 @@ static void box_select_graphkeys(bAnimContext *ac,
 {
   const rctf rectf = initialize_box_select_coords(ac, rectf_view);
   SpaceGraph *sipo = (SpaceGraph *)ac->sl;
-  ListBase anim_data = initialize_box_select_anim_data(sipo, ac);
+  const int filter = initialize_animdata_selection_filter(sipo);
+  ListBase anim_data = initialize_box_select_anim_data(filter, ac);
   rctf scaled_rectf;
   KeyframeEditData ked;
   int mapping_flag;
@@ -597,6 +604,9 @@ static void box_select_graphkeys(bAnimContext *ac,
   /* Try selecting the keyframes. */
   bAnimListElem *ale = NULL;
 
+  /* This variable will be set to true if any key is selected or deselected. */
+  bool any_key_selection_changed = false;
+
   /* First loop over data, doing box select. try selecting keys only. */
   for (ale = anim_data.first; ale; ale = ale->next) {
 AnimData *adt = ANIM_nla_mapping_get(ac, ale);
@@ -634,7 +644,7 @@ static void box_select_graphkeys(bAnimContext *ac,
 if (ANIM_fcurve_keyframes_loop(&ked, fcu, NULL, ok_cb, NULL)) {
   /* select keyframes that are in the appropriate places */
   ANIM_fcurve_keyframes_loop(&ked, fcu, ok_cb, select_cb, NULL);
-
+  any_key_selection_changed = true;
   /* Only change selection of channel when the visibility of keyframes
* doesn't depend on this. */
   if ((sipo->flag & SIPO_SELCUVERTSONLY) == 0) {
@@ -653,6 +663,125 @@ static void box_select_graphkeys(bAnimContext *ac,
 
   /* Cleanup. */
   ANIM_animdata_freelist(&anim_data);
+
+  return any_key_selection_changed;
+}
+
+/* This function is used to set all the keyframes of a given curve as 
selectable
+ * by the "select_cb" function inside of "box_select_graphcurves".
+ */
+static short ok_bezier_always_ok(KeyframeEditData *UNUSED(ked), BezTriple 
*UNUSED(bezt))
+{
+  return KEYFRAME_OK_KEY | KEYFRAME_OK_H1 | KEYFRAME_OK_H2;
+}
+
+/* Checks whether the given rectangle intersects the given fcurve's calculated 
curve (i.e. not
+ * only keyframes, but als

[Bf-blender-cvs] [9553ba13730] master: Fix compile error with 'WITH_CXX_GUARDEDALLOC'

2021-06-08 Thread Germano Cavalcante
Commit: 9553ba1373007a93dd45e477c03c085526140e19
Author: Germano Cavalcante
Date:   Tue Jun 8 10:18:16 2021 -0300
Branches: master
https://developer.blender.org/rB9553ba1373007a93dd45e477c03c085526140e19

Fix compile error with 'WITH_CXX_GUARDEDALLOC'

Seen with msvc

===

M   source/blender/compositor/intern/COM_MemoryProxy.h
M   source/blender/compositor/intern/COM_WorkPackage.h

===

diff --git a/source/blender/compositor/intern/COM_MemoryProxy.h 
b/source/blender/compositor/intern/COM_MemoryProxy.h
index 931fd8d2622..6814afada74 100644
--- a/source/blender/compositor/intern/COM_MemoryProxy.h
+++ b/source/blender/compositor/intern/COM_MemoryProxy.h
@@ -18,6 +18,10 @@
 
 #pragma once
 
+#ifdef WITH_CXX_GUARDEDALLOC
+#  include "MEM_guardedalloc.h"
+#endif
+
 #include "COM_defines.h"
 
 namespace blender::compositor {
diff --git a/source/blender/compositor/intern/COM_WorkPackage.h 
b/source/blender/compositor/intern/COM_WorkPackage.h
index 4d503022120..f0f53f300a5 100644
--- a/source/blender/compositor/intern/COM_WorkPackage.h
+++ b/source/blender/compositor/intern/COM_WorkPackage.h
@@ -18,6 +18,10 @@
 
 #pragma once
 
+#ifdef WITH_CXX_GUARDEDALLOC
+#  include "MEM_guardedalloc.h"
+#endif
+
 #include "COM_Enums.h"
 
 #include "BLI_rect.h"

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [fb18bd674d8] soc-2021-knife-tools: Merge remote-tracking branch 'origin/master' into soc-2021-knife-tools

2021-06-08 Thread Cian Jinks
Commit: fb18bd674d8c828766faaff30ff3953ad02f255c
Author: Cian Jinks
Date:   Tue Jun 8 14:31:03 2021 +0100
Branches: soc-2021-knife-tools
https://developer.blender.org/rBfb18bd674d8c828766faaff30ff3953ad02f255c

Merge remote-tracking branch 'origin/master' into soc-2021-knife-tools

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [9d3ee99dd08] soc-2021-knife-tools: Cleanup: Return function parameters missing r_

2021-06-08 Thread Cian Jinks
Commit: 9d3ee99dd08291b6a79d903f8433aff0b8078320
Author: Cian Jinks
Date:   Tue Jun 8 14:29:04 2021 +0100
Branches: soc-2021-knife-tools
https://developer.blender.org/rB9d3ee99dd08291b6a79d903f8433aff0b8078320

Cleanup: Return function parameters missing r_

===

M   source/blender/editors/mesh/editmesh_knife.c

===

diff --git a/source/blender/editors/mesh/editmesh_knife.c 
b/source/blender/editors/mesh/editmesh_knife.c
index d21d672d83e..4cce2e65c0b 100644
--- a/source/blender/editors/mesh/editmesh_knife.c
+++ b/source/blender/editors/mesh/editmesh_knife.c
@@ -2181,9 +2181,9 @@ static void knife_pos_data_clear(KnifePosData *kpd)
  * \{ */
 
 static BMFace *knife_find_closest_face(KnifeTool_OpData *kcd,
-   float co[3],
-   float cageco[3],
-   bool *is_space)
+   bool *is_space,
+   float r_co[3],
+   float r_cageco[3])
 {
   BMFace *f;
   float dist = KMAXDIST;
@@ -2196,7 +2196,7 @@ static BMFace *knife_find_closest_face(KnifeTool_OpData 
*kcd,
   sub_v3_v3v3(ray, origin_ofs, origin);
   normalize_v3_v3(ray_normal, ray);
 
-  f = BKE_bmbvh_ray_cast(kcd->bmbvh, origin, ray_normal, 0.0f, NULL, co, 
cageco);
+  f = BKE_bmbvh_ray_cast(kcd->bmbvh, origin, ray_normal, 0.0f, NULL, r_co, 
r_cageco);
 
   if (f && kcd->only_select && BM_elem_flag_test(f, BM_ELEM_SELECT) == 0) {
 f = NULL;
@@ -2221,9 +2221,9 @@ static BMFace *knife_find_closest_face(KnifeTool_OpData 
*kcd,
   /* cheat for now; just put in the origin instead
* of a true coordinate on the face.
* This just puts a point 1.0f in front of the view. */
-  add_v3_v3v3(co, origin, ray);
+  add_v3_v3v3(r_co, origin, ray);
   /* Use this value for the cage location too as it's used to find near 
edges/vertices. */
-  copy_v3_v3(cageco, co);
+  copy_v3_v3(r_cageco, r_co);
 }
   }
 
@@ -2591,7 +2591,7 @@ static bool knife_snap_update_from_mval(KnifeTool_OpData 
*kcd, const float mval[
 
   {
 kcd->curr.bmface = knife_find_closest_face(
-kcd, kcd->curr.co, kcd->curr.cage, &kcd->curr.is_space);
+kcd, &kcd->curr.is_space, kcd->curr.co, kcd->curr.cage);
 
 if (kcd->curr.bmface) {
   kcd->curr.edge = knife_find_closest_edge_of_face(

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [a2ebbeb836a] master: Fix T88934: Crash with line node count input < 0

2021-06-08 Thread Hans Goudey
Commit: a2ebbeb836ae765e98daaf502d49f545f43916fd
Author: Hans Goudey
Date:   Tue Jun 8 08:27:13 2021 -0500
Branches: master
https://developer.blender.org/rBa2ebbeb836ae765e98daaf502d49f545f43916fd

Fix T88934: Crash with line node count input < 0

Some of the primitive nodes can return null in an error condition.
This is confusing mixed with adding a maderial slot in calling
functions. This is the second crash caused by that confusion. It's
simpler to add the slot right when allocating the mesh, and it will
lend itself better to copy & paste coding in the future.

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

===

M   source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_circle.cc
M   source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cone.cc
M   source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cube.cc
M   
source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_ico_sphere.cc
M   source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_line.cc
M   source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc

===

diff --git 
a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_circle.cc 
b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_circle.cc
index f19d533d0b0..2915a17d2c8 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_circle.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_circle.cc
@@ -120,6 +120,7 @@ static Mesh *create_circle_mesh(const float radius,
0,
circle_corner_total(fill_type, verts_num),
circle_face_total(fill_type, verts_num));
+  BKE_id_material_eval_ensure_default_slot(&mesh->id);
   MutableSpan verts{mesh->mvert, mesh->totvert};
   MutableSpan loops{mesh->mloop, mesh->totloop};
   MutableSpan edges{mesh->medge, mesh->totedge};
@@ -215,7 +216,6 @@ static void 
geo_node_mesh_primitive_circle_exec(GeoNodeExecParams params)
   }
 
   Mesh *mesh = create_circle_mesh(radius, verts_num, fill_type);
-  BKE_id_material_eval_ensure_default_slot(&mesh->id);
 
   BLI_assert(BKE_mesh_is_valid(mesh));
 
diff --git 
a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cone.cc 
b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cone.cc
index 4c1521aa6f1..925ed0f8da8 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cone.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cone.cc
@@ -309,6 +309,7 @@ Mesh *create_cylinder_or_cone_mesh(const float radius_top,
   0,
   corner_total(fill_type, verts_num, top_is_point, bottom_is_point),
   face_total(fill_type, verts_num, top_is_point, bottom_is_point));
+  BKE_id_material_eval_ensure_default_slot(&mesh->id);
   MutableSpan verts{mesh->mvert, mesh->totvert};
   MutableSpan loops{mesh->mloop, mesh->totloop};
   MutableSpan edges{mesh->medge, mesh->totedge};
@@ -562,7 +563,6 @@ static void 
geo_node_mesh_primitive_cone_exec(GeoNodeExecParams params)
 
   Mesh *mesh = create_cylinder_or_cone_mesh(
   radius_top, radius_bottom, depth, verts_num, fill_type);
-  BKE_id_material_eval_ensure_default_slot(&mesh->id);
 
   /* Transform the mesh so that the base of the cone is at the origin. */
   BKE_mesh_translate(mesh, float3(0.0f, 0.0f, depth * 0.5f), false);
diff --git 
a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cube.cc 
b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cube.cc
index b34913df843..9651301cb34 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cube.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cube.cc
@@ -54,6 +54,7 @@ Mesh *create_cube_mesh(const float size)
   BMeshToMeshParams params{};
   params.calc_object_remap = false;
   Mesh *mesh = (Mesh *)BKE_id_new_nomain(ID_ME, nullptr);
+  BKE_id_material_eval_ensure_default_slot(&mesh->id);
   BM_mesh_bm_to_me(nullptr, bm, mesh, ¶ms);
   BM_mesh_free(bm);
 
@@ -65,7 +66,6 @@ static void 
geo_node_mesh_primitive_cube_exec(GeoNodeExecParams params)
   const float size = params.extract_input("Size");
 
   Mesh *mesh = create_cube_mesh(size);
-  BKE_id_material_eval_ensure_default_slot(&mesh->id);
   params.set_output("Geometry", GeometrySet::create_with_mesh(mesh));
 }
 
diff --git 
a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_ico_sphere.cc 
b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_ico_sphere.cc
index 5f7d8150022..a3a1b72006c 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_ico_sphere.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_ico_sphere.cc
@@ -56,6 +56,7 @@ static Mesh *create_ico_sphere_mesh(const int subdivisions, 
const float radius)
   BMeshToMeshParams params{};
   params.calc_object

[Bf-blender-cvs] [5b014911a51] master: Revert "Cleanup: use cpp new/delete."

2021-06-08 Thread Jeroen Bakker
Commit: 5b014911a51651d736671da1a0ca96bfe0cd8eba
Author: Jeroen Bakker
Date:   Tue Jun 8 15:08:09 2021 +0200
Branches: master
https://developer.blender.org/rB5b014911a51651d736671da1a0ca96bfe0cd8eba

Revert "Cleanup: use cpp new/delete."

This reverts commit 43464c94f4def8689dd99a9e459f5ff77420d27b.

===

M   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_points.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_tris.cc
M   source/blender/gpu/GPU_index_buffer.h

===

diff --git 
a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc 
b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
index 58f841943fc..20b0ec738ee 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
@@ -35,23 +35,16 @@ namespace blender::draw {
 struct MeshExtract_EditUvElem_Data {
   GPUIndexBufBuilder elb;
   bool sync_selection;
-
-  MeshExtract_EditUvElem_Data(const MeshRenderData *mr)
-  {
-sync_selection = (mr->toolsettings->uv_flag & UV_SYNC_SELECTION) != 0;
-  }
-
-#ifdef WITH_CXX_GUARDEDALLOC
-  MEM_CXX_CLASS_ALLOC_FUNCS("DRW:MeshExtract_EditUvElem_Data")
-#endif
 };
 
 static void *extract_edituv_tris_init(const MeshRenderData *mr,
   struct MeshBatchCache *UNUSED(cache),
   void *UNUSED(ibo))
 {
-  MeshExtract_EditUvElem_Data *data = new MeshExtract_EditUvElem_Data(mr);
+  MeshExtract_EditUvElem_Data *data = static_cast(
+  MEM_callocN(sizeof(*data), __func__));
   GPU_indexbuf_init(&data->elb, GPU_PRIM_TRIS, mr->tri_len, mr->loop_len);
+  data->sync_selection = (mr->toolsettings->uv_flag & UV_SYNC_SELECTION) != 0;
   return data;
 }
 
@@ -100,7 +93,7 @@ static void extract_edituv_tris_finish(const MeshRenderData 
*UNUSED(mr),
   MeshExtract_EditUvElem_Data *data = static_cast(_data);
   GPUIndexBuf *ibo = static_cast(buf);
   GPU_indexbuf_build_in_place(&data->elb, ibo);
-  delete data;
+  MEM_freeN(data);
 }
 
 constexpr MeshExtract create_extractor_edituv_tris()
@@ -126,8 +119,10 @@ static void *extract_edituv_lines_init(const 
MeshRenderData *mr,
struct MeshBatchCache *UNUSED(cache),
void *UNUSED(ibo))
 {
-  MeshExtract_EditUvElem_Data *data = new MeshExtract_EditUvElem_Data(mr);
+  MeshExtract_EditUvElem_Data *data = static_cast(
+  MEM_callocN(sizeof(*data), __func__));
   GPU_indexbuf_init(&data->elb, GPU_PRIM_LINES, mr->loop_len, mr->loop_len);
+  data->sync_selection = (mr->toolsettings->uv_flag & UV_SYNC_SELECTION) != 0;
   return data;
 }
 
@@ -189,7 +184,7 @@ static void extract_edituv_lines_finish(const 
MeshRenderData *UNUSED(mr),
   MeshExtract_EditUvElem_Data *data = static_cast(_data);
   GPUIndexBuf *ibo = static_cast(buf);
   GPU_indexbuf_build_in_place(&data->elb, ibo);
-  delete data;
+  MEM_freeN(data);
 }
 
 constexpr MeshExtract create_extractor_edituv_lines()
@@ -215,8 +210,10 @@ static void *extract_edituv_points_init(const 
MeshRenderData *mr,
 struct MeshBatchCache *UNUSED(cache),
 void *UNUSED(ibo))
 {
-  MeshExtract_EditUvElem_Data *data = new MeshExtract_EditUvElem_Data(mr);
+  MeshExtract_EditUvElem_Data *data = static_cast(
+  MEM_callocN(sizeof(*data), __func__));
   GPU_indexbuf_init(&data->elb, GPU_PRIM_POINTS, mr->loop_len, mr->loop_len);
+  data->sync_selection = (mr->toolsettings->uv_flag & UV_SYNC_SELECTION) != 0;
   return data;
 }
 
@@ -272,7 +269,7 @@ static void extract_edituv_points_finish(const 
MeshRenderData *UNUSED(mr),
   MeshExtract_EditUvElem_Data *data = static_cast(_data);
   GPUIndexBuf *ibo = static_cast(buf);
   GPU_indexbuf_build_in_place(&data->elb, ibo);
-  delete data;
+  MEM_freeN(data);
 }
 
 constexpr MeshExtract create_extractor_edituv_points()
@@ -298,8 +295,10 @@ static void *extract_edituv_fdots_init(const 
MeshRenderData *mr,
struct MeshBatchCache *UNUSED(cache),
void *UNUSED(ibo))
 {
-  MeshExtract_EditUvElem_Data *data = new MeshExtract_EditUvElem_Data(mr);
+  MeshExtract_EditUvElem_Data *data = static_cast(
+  MEM_callocN(sizeof(*data), __func__));
   GPU_indexbuf_init(&data->elb, GPU_PRIM_POINTS, mr->poly_len, mr->poly_len);
+  data->sync_selection = (mr->toolsettings->uv_flag & UV_SYNC_SELECTION) != 0;
   return data;
 }
 
@@ -367,7 +366,7 @@ static void extract_edituv_fdots_finish(const 
MeshRen

[Bf-blender-cvs] [340c535dbfa] master: Cleanup: Separate compile unit edituv.

2021-06-08 Thread Jeroen Bakker
Commit: 340c535dbfa209283529b259e77e8f971f078d16
Author: Jeroen Bakker
Date:   Tue Jun 8 11:56:30 2021 +0200
Branches: master
https://developer.blender.org/rB340c535dbfa209283529b259e77e8f971f078d16

Cleanup: Separate compile unit edituv.

===

M   source/blender/draw/CMakeLists.txt
M   source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
A   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc

===

diff --git a/source/blender/draw/CMakeLists.txt 
b/source/blender/draw/CMakeLists.txt
index 3289a7bd2dd..3938242eb6e 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -54,6 +54,7 @@ set(SRC
   intern/draw_cache_extract_mesh_extractors.c
   intern/draw_cache_extract_mesh_render_data.c
   intern/draw_cache_extract_mesh.cc
+  intern/mesh_extractors/extract_mesh_ibo_edituv.cc
   intern/mesh_extractors/extract_mesh_ibo_fdots.cc
   intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc
   intern/mesh_extractors/extract_mesh_ibo_lines_paint_mask.cc
diff --git a/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c 
b/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
index 2bd8c228cff..b79f80866ec 100644
--- a/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
+++ b/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
@@ -105,336 +105,6 @@ const MeshExtract *mesh_extract_override_get(const 
MeshExtract *extractor,
 
 /** \} */
 
-/* -- */
-/** \name Extract Edit UV Triangles Indices
- * \{ */
-
-typedef struct MeshExtract_EditUvElem_Data {
-  GPUIndexBufBuilder elb;
-  bool sync_selection;
-} MeshExtract_EditUvElem_Data;
-
-static void *extract_edituv_tris_init(const MeshRenderData *mr,
-  struct MeshBatchCache *UNUSED(cache),
-  void *UNUSED(ibo))
-{
-  MeshExtract_EditUvElem_Data *data = MEM_callocN(sizeof(*data), __func__);
-  GPU_indexbuf_init(&data->elb, GPU_PRIM_TRIS, mr->tri_len, mr->loop_len);
-  data->sync_selection = (mr->toolsettings->uv_flag & UV_SYNC_SELECTION) != 0;
-  return data;
-}
-
-BLI_INLINE void edituv_tri_add(
-MeshExtract_EditUvElem_Data *data, bool hidden, bool selected, int v1, int 
v2, int v3)
-{
-  if (!hidden && (data->sync_selection || selected)) {
-GPU_indexbuf_add_tri_verts(&data->elb, v1, v2, v3);
-  }
-}
-
-static void extract_edituv_tris_iter_looptri_bm(const MeshRenderData 
*UNUSED(mr),
-BMLoop **elt,
-const int UNUSED(elt_index),
-void *data)
-{
-  edituv_tri_add(data,
- BM_elem_flag_test(elt[0]->f, BM_ELEM_HIDDEN),
- BM_elem_flag_test(elt[0]->f, BM_ELEM_SELECT),
- BM_elem_index_get(elt[0]),
- BM_elem_index_get(elt[1]),
- BM_elem_index_get(elt[2]));
-}
-
-static void extract_edituv_tris_iter_looptri_mesh(const MeshRenderData *mr,
-  const MLoopTri *mlt,
-  const int UNUSED(elt_index),
-  void *data)
-{
-  const MPoly *mp = &mr->mpoly[mlt->poly];
-  edituv_tri_add(data,
- (mp->flag & ME_HIDE) != 0,
- (mp->flag & ME_FACE_SEL) != 0,
- mlt->tri[0],
- mlt->tri[1],
- mlt->tri[2]);
-}
-
-static void extract_edituv_tris_finish(const MeshRenderData *UNUSED(mr),
-   struct MeshBatchCache *UNUSED(cache),
-   void *buf,
-   void *data)
-{
-  GPUIndexBuf *ibo = buf;
-  MeshExtract_EditUvElem_Data *extract_data = data;
-  GPU_indexbuf_build_in_place(&extract_data->elb, ibo);
-  MEM_freeN(extract_data);
-}
-
-const MeshExtract extract_edituv_tris = {
-.init = extract_edituv_tris_init,
-.iter_looptri_bm = extract_edituv_tris_iter_looptri_bm,
-.iter_looptri_mesh = extract_edituv_tris_iter_looptri_mesh,
-.finish = extract_edituv_tris_finish,
-.data_type = 0,
-.use_threading = false,
-.mesh_buffer_offset = offsetof(MeshBufferCache, ibo.edituv_tris)};
-
-/** \} */
-
-/* -- */
-/** \name Extract Edit UV Line Indices around faces
- * \{ */
-
-static void *extract_edituv_lines_init(const MeshRenderData *mr,
-   struct MeshBatchCache *UNUSED(cache),
-   void *UNUSED(ibo))
-{
-  MeshExtract_EditUvElem_Data *data = MEM_callocN(sizeof(*data), __func__);
-  GPU_indexbuf_init(&data->elb, GPU_PRIM_L

[Bf-blender-cvs] [43464c94f4d] master: Cleanup: use cpp new/delete.

2021-06-08 Thread Jeroen Bakker
Commit: 43464c94f4def8689dd99a9e459f5ff77420d27b
Author: Jeroen Bakker
Date:   Tue Jun 8 13:12:49 2021 +0200
Branches: master
https://developer.blender.org/rB43464c94f4def8689dd99a9e459f5ff77420d27b

Cleanup: use cpp new/delete.

===

M   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_points.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_tris.cc
M   source/blender/gpu/GPU_index_buffer.h

===

diff --git 
a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc 
b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
index 5d9e94dcbcf..69ded192449 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
@@ -35,16 +35,23 @@ namespace blender::draw {
 struct MeshExtract_EditUvElem_Data {
   GPUIndexBufBuilder elb;
   bool sync_selection;
+
+  MeshExtract_EditUvElem_Data(const MeshRenderData *mr)
+  {
+sync_selection = (mr->toolsettings->uv_flag & UV_SYNC_SELECTION) != 0;
+  }
+
+#ifdef WITH_CXX_GUARDEDALLOC
+  MEM_CXX_CLASS_ALLOC_FUNCS("DRW:MeshExtract_EditUvElem_Data")
+#endif
 };
 
 static void *extract_edituv_tris_init(const MeshRenderData *mr,
   struct MeshBatchCache *UNUSED(cache),
   void *UNUSED(ibo))
 {
-  MeshExtract_EditUvElem_Data *data = static_cast(
-  MEM_callocN(sizeof(*data), __func__));
+  MeshExtract_EditUvElem_Data *data = new MeshExtract_EditUvElem_Data(mr);
   GPU_indexbuf_init(&data->elb, GPU_PRIM_TRIS, mr->tri_len, mr->loop_len);
-  data->sync_selection = (mr->toolsettings->uv_flag & UV_SYNC_SELECTION) != 0;
   return data;
 }
 
@@ -93,7 +100,7 @@ static void extract_edituv_tris_finish(const MeshRenderData 
*UNUSED(mr),
   MeshExtract_EditUvElem_Data *data = static_cast(_data);
   GPUIndexBuf *ibo = static_cast(buf);
   GPU_indexbuf_build_in_place(&data->elb, ibo);
-  MEM_freeN(data);
+  delete data;
 }
 
 constexpr MeshExtract create_extractor_edituv_tris()
@@ -119,10 +126,8 @@ static void *extract_edituv_lines_init(const 
MeshRenderData *mr,
struct MeshBatchCache *UNUSED(cache),
void *UNUSED(ibo))
 {
-  MeshExtract_EditUvElem_Data *data = static_cast(
-  MEM_callocN(sizeof(*data), __func__));
+  MeshExtract_EditUvElem_Data *data = new MeshExtract_EditUvElem_Data(mr);
   GPU_indexbuf_init(&data->elb, GPU_PRIM_LINES, mr->loop_len, mr->loop_len);
-  data->sync_selection = (mr->toolsettings->uv_flag & UV_SYNC_SELECTION) != 0;
   return data;
 }
 
@@ -183,7 +188,7 @@ static void extract_edituv_lines_finish(const 
MeshRenderData *UNUSED(mr),
   MeshExtract_EditUvElem_Data *data = static_cast(_data);
   GPUIndexBuf *ibo = static_cast(buf);
   GPU_indexbuf_build_in_place(&data->elb, ibo);
-  MEM_freeN(data);
+  delete data;
 }
 
 constexpr MeshExtract create_extractor_edituv_lines()
@@ -209,10 +214,8 @@ static void *extract_edituv_points_init(const 
MeshRenderData *mr,
 struct MeshBatchCache *UNUSED(cache),
 void *UNUSED(ibo))
 {
-  MeshExtract_EditUvElem_Data *data = static_cast(
-  MEM_callocN(sizeof(*data), __func__));
+  MeshExtract_EditUvElem_Data *data = new MeshExtract_EditUvElem_Data(mr);
   GPU_indexbuf_init(&data->elb, GPU_PRIM_POINTS, mr->loop_len, mr->loop_len);
-  data->sync_selection = (mr->toolsettings->uv_flag & UV_SYNC_SELECTION) != 0;
   return data;
 }
 
@@ -268,7 +271,7 @@ static void extract_edituv_points_finish(const 
MeshRenderData *UNUSED(mr),
   MeshExtract_EditUvElem_Data *data = static_cast(_data);
   GPUIndexBuf *ibo = static_cast(buf);
   GPU_indexbuf_build_in_place(&data->elb, ibo);
-  MEM_freeN(data);
+  delete data;
 }
 
 constexpr MeshExtract create_extractor_edituv_points()
@@ -294,10 +297,8 @@ static void *extract_edituv_fdots_init(const 
MeshRenderData *mr,
struct MeshBatchCache *UNUSED(cache),
void *UNUSED(ibo))
 {
-  MeshExtract_EditUvElem_Data *data = static_cast(
-  MEM_callocN(sizeof(*data), __func__));
+  MeshExtract_EditUvElem_Data *data = new MeshExtract_EditUvElem_Data(mr);
   GPU_indexbuf_init(&data->elb, GPU_PRIM_POINTS, mr->poly_len, mr->poly_len);
-  data->sync_selection = (mr->toolsettings->uv_flag & UV_SYNC_SELECTION) != 0;
   return data;
 }
 
@@ -365,7 +366,7 @@ static void extract_edituv_fdots_finish(const 
MeshRenderData *UNUSED(mr),
   MeshExtract_EditUvElem_Data *data = static_cast(

[Bf-blender-cvs] [088ea59b7e1] master: Cleanup: Separate compile unit lines_adjacency.

2021-06-08 Thread Jeroen Bakker
Commit: 088ea59b7e1db0a80cd19c4fc670eea24cac8fc0
Author: Jeroen Bakker
Date:   Tue Jun 8 11:37:15 2021 +0200
Branches: master
https://developer.blender.org/rB088ea59b7e1db0a80cd19c4fc670eea24cac8fc0

Cleanup: Separate compile unit lines_adjacency.

===

M   source/blender/draw/CMakeLists.txt
M   source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
A   
source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc

===

diff --git a/source/blender/draw/CMakeLists.txt 
b/source/blender/draw/CMakeLists.txt
index 8ae6b3505d1..3289a7bd2dd 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -55,6 +55,7 @@ set(SRC
   intern/draw_cache_extract_mesh_render_data.c
   intern/draw_cache_extract_mesh.cc
   intern/mesh_extractors/extract_mesh_ibo_fdots.cc
+  intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc
   intern/mesh_extractors/extract_mesh_ibo_lines_paint_mask.cc
   intern/mesh_extractors/extract_mesh_ibo_lines.cc
   intern/mesh_extractors/extract_mesh_ibo_points.cc
diff --git a/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c 
b/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
index 3ce2ed0fe2c..2bd8c228cff 100644
--- a/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
+++ b/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
@@ -105,158 +105,6 @@ const MeshExtract *mesh_extract_override_get(const 
MeshExtract *extractor,
 
 /** \} */
 
-/* -- */
-/** \name Extract Line Adjacency Indices
- * \{ */
-
-#define NO_EDGE INT_MAX
-
-typedef struct MeshExtract_LineAdjacency_Data {
-  GPUIndexBufBuilder elb;
-  EdgeHash *eh;
-  bool is_manifold;
-  /* Array to convert vert index to any loop index of this vert. */
-  uint vert_to_loop[0];
-} MeshExtract_LineAdjacency_Data;
-
-static void *extract_lines_adjacency_init(const MeshRenderData *mr,
-  struct MeshBatchCache *UNUSED(cache),
-  void *UNUSED(buf))
-{
-  /* Similar to poly_to_tri_count().
-   * There is always (loop + triangle - 1) edges inside a polygon.
-   * Accumulate for all polys and you get : */
-  uint tess_edge_len = mr->loop_len + mr->tri_len - mr->poly_len;
-
-  size_t vert_to_loop_size = sizeof(uint) * mr->vert_len;
-
-  MeshExtract_LineAdjacency_Data *data = MEM_callocN(sizeof(*data) + 
vert_to_loop_size, __func__);
-  GPU_indexbuf_init(&data->elb, GPU_PRIM_LINES_ADJ, tess_edge_len, 
mr->loop_len);
-  data->eh = BLI_edgehash_new_ex(__func__, tess_edge_len);
-  data->is_manifold = true;
-  return data;
-}
-
-BLI_INLINE void lines_adjacency_triangle(
-uint v1, uint v2, uint v3, uint l1, uint l2, uint l3, 
MeshExtract_LineAdjacency_Data *data)
-{
-  GPUIndexBufBuilder *elb = &data->elb;
-  /* Iterate around the triangle's edges. */
-  for (int e = 0; e < 3; e++) {
-SHIFT3(uint, v3, v2, v1);
-SHIFT3(uint, l3, l2, l1);
-
-bool inv_indices = (v2 > v3);
-void **pval;
-bool value_is_init = BLI_edgehash_ensure_p(data->eh, v2, v3, &pval);
-int v_data = POINTER_AS_INT(*pval);
-if (!value_is_init || v_data == NO_EDGE) {
-  /* Save the winding order inside the sign bit. Because the
-   * Edge-hash sort the keys and we need to compare winding later. */
-  int value = (int)l1 + 1; /* 0 cannot be signed so add one. */
-  *pval = POINTER_FROM_INT((inv_indices) ? -value : value);
-  /* Store loop indices for remaining non-manifold edges. */
-  data->vert_to_loop[v2] = l2;
-  data->vert_to_loop[v3] = l3;
-}
-else {
-  /* HACK Tag as not used. Prevent overhead of BLI_edgehash_remove. */
-  *pval = POINTER_FROM_INT(NO_EDGE);
-  bool inv_opposite = (v_data < 0);
-  uint l_opposite = (uint)abs(v_data) - 1;
-  /* TODO Make this part thread-safe. */
-  if (inv_opposite == inv_indices) {
-/* Don't share edge if triangles have non matching winding. */
-GPU_indexbuf_add_line_adj_verts(elb, l1, l2, l3, l1);
-GPU_indexbuf_add_line_adj_verts(elb, l_opposite, l2, l3, l_opposite);
-data->is_manifold = false;
-  }
-  else {
-GPU_indexbuf_add_line_adj_verts(elb, l1, l2, l3, l_opposite);
-  }
-}
-  }
-}
-
-static void extract_lines_adjacency_iter_looptri_bm(const MeshRenderData 
*UNUSED(mr),
-BMLoop **elt,
-const int 
UNUSED(elt_index),
-void *data)
-{
-  if (!BM_elem_flag_test(elt[0]->f, BM_ELEM_HIDDEN)) {
-lines_adjacency_triangle(BM_elem_index_get(elt[0]->v),
- BM_elem_index_get(elt[1]->v),
- BM_elem_index_get(elt[2

[Bf-blender-cvs] [23fd576cf8a] master: Cleanup: replace NULL with nullptr.

2021-06-08 Thread Jeroen Bakker
Commit: 23fd576cf8adb4269d40110e0d5e893e464af6a1
Author: Jeroen Bakker
Date:   Tue Jun 8 13:14:18 2021 +0200
Branches: master
https://developer.blender.org/rB23fd576cf8adb4269d40110e0d5e893e464af6a1

Cleanup: replace NULL with nullptr.

===

M   source/blender/draw/intern/draw_cache_impl_curve.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc
M   
source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc
M   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_tris.cc

===

diff --git a/source/blender/draw/intern/draw_cache_impl_curve.cc 
b/source/blender/draw/intern/draw_cache_impl_curve.cc
index ee6a47e3dc6..9ca452cdacc 100644
--- a/source/blender/draw/intern/draw_cache_impl_curve.cc
+++ b/source/blender/draw/intern/draw_cache_impl_curve.cc
@@ -843,8 +843,8 @@ static void 
curve_create_edit_data_and_handles(CurveRenderData *rdata,
   int edges_len_capacity = curve_render_data_overlay_edges_len_get(rdata) * 2;
   int vbo_len_used = 0;
 
-#define DRW_TEST_ASSIGN_VBO(v) (v = (DRW_vbo_requested(v) ? (v) : NULL))
-#define DRW_TEST_ASSIGN_IBO(v) (v = (DRW_ibo_requested(v) ? (v) : NULL))
+#define DRW_TEST_ASSIGN_VBO(v) (v = (DRW_vbo_requested(v) ? (v) : nullptr))
+#define DRW_TEST_ASSIGN_IBO(v) (v = (DRW_ibo_requested(v) ? (v) : nullptr))
 
   if (DRW_TEST_ASSIGN_VBO(vbo_pos)) {
 GPU_vertbuf_init_with_format(vbo_pos, &format_pos);
diff --git 
a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc 
b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
index 69ded192449..58f841943fc 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
@@ -171,7 +171,8 @@ static void extract_edituv_lines_iter_poly_mesh(const 
MeshRenderData *mr,
 
 const int ml_index_last = mp->totloop + mp->loopstart - 1;
 const int ml_index_next = (ml_index == ml_index_last) ? mp->loopstart : 
(ml_index + 1);
-const bool real_edge = (mr->e_origindex == NULL || mr->e_origindex[ml->e] 
!= ORIGINDEX_NONE);
+const bool real_edge = (mr->e_origindex == nullptr ||
+mr->e_origindex[ml->e] != ORIGINDEX_NONE);
 edituv_edge_add(data,
 (mp->flag & ME_HIDE) != 0 || !real_edge,
 (mp->flag & ME_FACE_SEL) != 0,
diff --git 
a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc 
b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc
index 299c4332573..48e57b45963 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc
@@ -73,7 +73,7 @@ static void extract_lines_iter_poly_mesh(const MeshRenderData 
*mr,
   /* Using poly & loop iterator would complicate accessing the adjacent loop. 
*/
   const MLoop *mloop = mr->mloop;
   const MEdge *medge = mr->medge;
-  if (mr->use_hide || (mr->extract_type == MR_EXTRACT_MAPPED) || 
(mr->e_origindex != NULL)) {
+  if (mr->use_hide || (mr->extract_type == MR_EXTRACT_MAPPED) || 
(mr->e_origindex != nullptr)) {
 const int ml_index_last = mp->loopstart + (mp->totloop - 1);
 int ml_index = ml_index_last, ml_index_next = mp->loopstart;
 do {
@@ -190,7 +190,7 @@ static void extract_lines_with_lines_loose_finish(const 
MeshRenderData *mr,
   GPUIndexBuf *ibo = static_cast(buf);
   GPU_indexbuf_build_in_place(elb, ibo);
   extract_lines_loose_subbuffer(mr, cache);
-  delete(elb);
+  delete (elb);
 }
 
 constexpr MeshExtract create_extractor_lines_with_lines_loose()
diff --git 
a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc
 
b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc
index 127d18bb62d..6140ae86c96 100644
--- 
a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc
+++ 
b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc
@@ -164,7 +164,7 @@ static void extract_lines_adjacency_finish(const 
MeshRenderData *UNUSED(mr),
 }
   }
   BLI_edgehashIterator_free(ehi);
-  BLI_edgehash_free(data->eh, NULL);
+  BLI_edgehash_free(data->eh, nullptr);
 
   cache->is_manifold = data->is_manifold;
 
diff --git 
a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_tris.cc 
b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_tris.cc
index ca99aa2ee38..a52fb69e904 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_tris.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_tris.cc
@@ -150,7 +150,7 @@ static void extract_tris_finish(const MeshRenderData *mr,
 for (int i = 0; i < mr->mat_len; i++) {
   /* These IBOs have not be

[Bf-blender-cvs] [322a6144972] master: Cleanup: replace typedef structs with structs.

2021-06-08 Thread Jeroen Bakker
Commit: 322a6144972a855b18ed80a3cdb45c44d036663f
Author: Jeroen Bakker
Date:   Tue Jun 8 12:02:43 2021 +0200
Branches: master
https://developer.blender.org/rB322a6144972a855b18ed80a3cdb45c44d036663f

Cleanup: replace typedef structs with structs.

===

M   
source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc
M   
source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_paint_mask.cc

===

diff --git 
a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc
 
b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc
index 570ea46ce8d..127d18bb62d 100644
--- 
a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc
+++ 
b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc
@@ -36,13 +36,13 @@ namespace blender::draw {
 
 #define NO_EDGE INT_MAX
 
-typedef struct MeshExtract_LineAdjacency_Data {
+struct MeshExtract_LineAdjacency_Data {
   GPUIndexBufBuilder elb;
   EdgeHash *eh;
   bool is_manifold;
   /* Array to convert vert index to any loop index of this vert. */
   uint vert_to_loop[0];
-} MeshExtract_LineAdjacency_Data;
+};
 
 static void *extract_lines_adjacency_init(const MeshRenderData *mr,
   struct MeshBatchCache *UNUSED(cache),
diff --git 
a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_paint_mask.cc
 
b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_paint_mask.cc
index 95d355e0437..6bbd0188f65 100644
--- 
a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_paint_mask.cc
+++ 
b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_paint_mask.cc
@@ -34,11 +34,11 @@ namespace blender::draw {
 /** \name Extract Paint Mask Line Indices
  * \{ */
 
-typedef struct MeshExtract_LinePaintMask_Data {
+struct MeshExtract_LinePaintMask_Data {
   GPUIndexBufBuilder elb;
   /** One bit per edge set if face is selected. */
   BLI_bitmap select_map[0];
-} MeshExtract_LinePaintMask_Data;
+};
 
 static void *extract_lines_paint_mask_init(const MeshRenderData *mr,
struct MeshBatchCache 
*UNUSED(cache),

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [cac9828ae38] master: Cleanup: Separate compile unit lines_paint_mask.

2021-06-08 Thread Jeroen Bakker
Commit: cac9828ae382017fb0d09b48c5187ffcd9bb3126
Author: Jeroen Bakker
Date:   Tue Jun 8 11:21:38 2021 +0200
Branches: master
https://developer.blender.org/rBcac9828ae382017fb0d09b48c5187ffcd9bb3126

Cleanup: Separate compile unit lines_paint_mask.

===

M   source/blender/draw/CMakeLists.txt
M   source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
A   
source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_paint_mask.cc

===

diff --git a/source/blender/draw/CMakeLists.txt 
b/source/blender/draw/CMakeLists.txt
index 1768a53db98..8ae6b3505d1 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -55,6 +55,7 @@ set(SRC
   intern/draw_cache_extract_mesh_render_data.c
   intern/draw_cache_extract_mesh.cc
   intern/mesh_extractors/extract_mesh_ibo_fdots.cc
+  intern/mesh_extractors/extract_mesh_ibo_lines_paint_mask.cc
   intern/mesh_extractors/extract_mesh_ibo_lines.cc
   intern/mesh_extractors/extract_mesh_ibo_points.cc
   intern/mesh_extractors/extract_mesh_ibo_tris.cc
diff --git a/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c 
b/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
index 0b46d0b6c7d..3ce2ed0fe2c 100644
--- a/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
+++ b/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
@@ -105,89 +105,6 @@ const MeshExtract *mesh_extract_override_get(const 
MeshExtract *extractor,
 
 /** \} */
 
-/* -- */
-/** \name Extract Paint Mask Line Indices
- * \{ */
-
-typedef struct MeshExtract_LinePaintMask_Data {
-  GPUIndexBufBuilder elb;
-  /** One bit per edge set if face is selected. */
-  BLI_bitmap select_map[0];
-} MeshExtract_LinePaintMask_Data;
-
-static void *extract_lines_paint_mask_init(const MeshRenderData *mr,
-   struct MeshBatchCache 
*UNUSED(cache),
-   void *UNUSED(ibo))
-{
-  size_t bitmap_size = BLI_BITMAP_SIZE(mr->edge_len);
-  MeshExtract_LinePaintMask_Data *data = MEM_callocN(sizeof(*data) + 
bitmap_size, __func__);
-  GPU_indexbuf_init(&data->elb, GPU_PRIM_LINES, mr->edge_len, mr->loop_len);
-  return data;
-}
-
-static void extract_lines_paint_mask_iter_poly_mesh(const MeshRenderData *mr,
-const MPoly *mp,
-const int UNUSED(mp_index),
-void *_data)
-{
-  MeshExtract_LinePaintMask_Data *data = _data;
-  const MLoop *mloop = mr->mloop;
-  const int ml_index_end = mp->loopstart + mp->totloop;
-  for (int ml_index = mp->loopstart; ml_index < ml_index_end; ml_index += 1) {
-const MLoop *ml = &mloop[ml_index];
-
-const int e_index = ml->e;
-const MEdge *me = &mr->medge[e_index];
-if (!((mr->use_hide && (me->flag & ME_HIDE)) ||
-  ((mr->extract_type == MR_EXTRACT_MAPPED) && (mr->e_origindex) &&
-   (mr->e_origindex[e_index] == ORIGINDEX_NONE {
-
-  const int ml_index_last = mp->totloop + mp->loopstart - 1;
-  const int ml_index_other = (ml_index == ml_index_last) ? mp->loopstart : 
(ml_index + 1);
-  if (mp->flag & ME_FACE_SEL) {
-if (BLI_BITMAP_TEST_AND_SET_ATOMIC(data->select_map, e_index)) {
-  /* Hide edge as it has more than 2 selected loop. */
-  GPU_indexbuf_set_line_restart(&data->elb, e_index);
-}
-else {
-  /* First selected loop. Set edge visible, overwriting any unselected 
loop. */
-  GPU_indexbuf_set_line_verts(&data->elb, e_index, ml_index, 
ml_index_other);
-}
-  }
-  else {
-/* Set these unselected loop only if this edge has no other selected 
loop. */
-if (!BLI_BITMAP_TEST(data->select_map, e_index)) {
-  GPU_indexbuf_set_line_verts(&data->elb, e_index, ml_index, 
ml_index_other);
-}
-  }
-}
-else {
-  GPU_indexbuf_set_line_restart(&data->elb, e_index);
-}
-  }
-}
-
-static void extract_lines_paint_mask_finish(const MeshRenderData *UNUSED(mr),
-struct MeshBatchCache 
*UNUSED(cache),
-void *buf,
-void *_data)
-{
-  GPUIndexBuf *ibo = buf;
-  MeshExtract_LinePaintMask_Data *data = _data;
-  GPU_indexbuf_build_in_place(&data->elb, ibo);
-  MEM_freeN(data);
-}
-
-const MeshExtract extract_lines_paint_mask = {
-.init = extract_lines_paint_mask_init,
-.iter_poly_mesh = extract_lines_paint_mask_iter_poly_mesh,
-.finish = extract_lines_paint_mask_finish,
-.data_type = 0,
-.use_threading = false,
-.mesh_buffer_offset = offsetof(MeshBufferCache, ibo.lines_paint_mask)};
-
-/*

[Bf-blender-cvs] [9e9d45ae16f] master: Cleanup: Separate fdots extraction in own compile unit.

2021-06-08 Thread Jeroen Bakker
Commit: 9e9d45ae16f1845dbdf7d600b5614127e98d6f04
Author: Jeroen Bakker
Date:   Tue Jun 8 11:06:30 2021 +0200
Branches: master
https://developer.blender.org/rB9e9d45ae16f1845dbdf7d600b5614127e98d6f04

Cleanup: Separate fdots extraction in own compile unit.

===

M   source/blender/draw/CMakeLists.txt
M   source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
A   source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc

===

diff --git a/source/blender/draw/CMakeLists.txt 
b/source/blender/draw/CMakeLists.txt
index c07832959ac..1768a53db98 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -54,6 +54,7 @@ set(SRC
   intern/draw_cache_extract_mesh_extractors.c
   intern/draw_cache_extract_mesh_render_data.c
   intern/draw_cache_extract_mesh.cc
+  intern/mesh_extractors/extract_mesh_ibo_fdots.cc
   intern/mesh_extractors/extract_mesh_ibo_lines.cc
   intern/mesh_extractors/extract_mesh_ibo_points.cc
   intern/mesh_extractors/extract_mesh_ibo_tris.cc
diff --git a/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c 
b/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
index 5bea8b085d8..0b46d0b6c7d 100644
--- a/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
+++ b/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c
@@ -105,83 +105,6 @@ const MeshExtract *mesh_extract_override_get(const 
MeshExtract *extractor,
 
 /** \} */
 
-/* -- */
-/** \name Extract Face-dots Indices
- * \{ */
-
-static void *extract_fdots_init(const MeshRenderData *mr,
-struct MeshBatchCache *UNUSED(cache),
-void *UNUSED(buf))
-{
-  GPUIndexBufBuilder *elb = MEM_mallocN(sizeof(*elb), __func__);
-  GPU_indexbuf_init(elb, GPU_PRIM_POINTS, mr->poly_len, mr->poly_len);
-  return elb;
-}
-
-static void extract_fdots_iter_poly_bm(const MeshRenderData *UNUSED(mr),
-   BMFace *f,
-   const int f_index,
-   void *elb)
-{
-  if (!BM_elem_flag_test(f, BM_ELEM_HIDDEN)) {
-GPU_indexbuf_set_point_vert(elb, f_index, f_index);
-  }
-  else {
-GPU_indexbuf_set_point_restart(elb, f_index);
-  }
-}
-
-static void extract_fdots_iter_poly_mesh(const MeshRenderData *mr,
- const MPoly *mp,
- const int mp_index,
- void *elb)
-{
-  if (mr->use_subsurf_fdots) {
-/* Check #ME_VERT_FACEDOT. */
-const MLoop *mloop = mr->mloop;
-const int ml_index_end = mp->loopstart + mp->totloop;
-for (int ml_index = mp->loopstart; ml_index < ml_index_end; ml_index += 1) 
{
-  const MLoop *ml = &mloop[ml_index];
-  const MVert *mv = &mr->mvert[ml->v];
-  if ((mv->flag & ME_VERT_FACEDOT) && !(mr->use_hide && (mp->flag & 
ME_HIDE))) {
-GPU_indexbuf_set_point_vert(elb, mp_index, mp_index);
-return;
-  }
-}
-GPU_indexbuf_set_point_restart(elb, mp_index);
-  }
-  else {
-if (!(mr->use_hide && (mp->flag & ME_HIDE))) {
-  GPU_indexbuf_set_point_vert(elb, mp_index, mp_index);
-}
-else {
-  GPU_indexbuf_set_point_restart(elb, mp_index);
-}
-  }
-}
-
-static void extract_fdots_finish(const MeshRenderData *UNUSED(mr),
- struct MeshBatchCache *UNUSED(cache),
- void *buf,
- void *elb)
-{
-  GPUIndexBuf *ibo = buf;
-  GPU_indexbuf_build_in_place(elb, ibo);
-  MEM_freeN(elb);
-}
-
-const MeshExtract extract_fdots = {
-.init = extract_fdots_init,
-.iter_poly_bm = extract_fdots_iter_poly_bm,
-.iter_poly_mesh = extract_fdots_iter_poly_mesh,
-.finish = extract_fdots_finish,
-.data_type = 0,
-.use_threading = false,
-.mesh_buffer_offset = offsetof(MeshBufferCache, ibo.fdots),
-};
-
-/** \} */
-
 /* -- */
 /** \name Extract Paint Mask Line Indices
  * \{ */
diff --git 
a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc 
b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc
new file mode 100644
index 000..9bd918dc9a5
--- /dev/null
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc
@@ -0,0 +1,119 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without e

[Bf-blender-cvs] [9c3ac44c894] xr-controller-support: Merge branch 'master' into xr-controller-support

2021-06-08 Thread Peter Kim
Commit: 9c3ac44c894f62283265bf9b18556a3e60ab62bd
Author: Peter Kim
Date:   Tue Jun 8 19:35:24 2021 +0900
Branches: xr-controller-support
https://developer.blender.org/rB9c3ac44c894f62283265bf9b18556a3e60ab62bd

Merge branch 'master' into xr-controller-support

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [819a7e79001] xr-controller-support: Update pipeline config

2021-06-08 Thread Peter Kim
Commit: 819a7e7900196c37585fd0170625a48d3156e6c0
Author: Peter Kim
Date:   Tue Jun 8 19:31:24 2021 +0900
Branches: xr-controller-support
https://developer.blender.org/rB819a7e7900196c37585fd0170625a48d3156e6c0

Update pipeline config

===

M   build_files/config/pipeline_config.json

===

diff --git a/build_files/config/pipeline_config.json 
b/build_files/config/pipeline_config.json
index c9a5e25eaaf..c4dcb8f9417 100644
--- a/build_files/config/pipeline_config.json
+++ b/build_files/config/pipeline_config.json
@@ -5,7 +5,7 @@
 {
 "submodules":
 [
-{ "path": "release/scripts/addons", "branch": "master", 
"commit_id": "HEAD" },
+{ "path": "release/scripts/addons", "branch": 
"xr-controller-support", "commit_id": "HEAD" },
 { "path": "release/scripts/addons_contrib", "branch": 
"master", "commit_id": "HEAD" },
 { "path": "release/datafiles/locale", "branch": "master", 
"commit_id": "HEAD" },
 { "path": "source/tools", "branch": "master", "commit_id": 
"HEAD" }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [89d0cc3a0ce] master: Fix T88719: Attribute Remove node input field does nothing

2021-06-08 Thread Jacques Lucke
Commit: 89d0cc3a0ce013f4a68d8858d4ed9792bd23b43b
Author: Jacques Lucke
Date:   Tue Jun 8 11:50:18 2021 +0200
Branches: master
https://developer.blender.org/rB89d0cc3a0ce013f4a68d8858d4ed9792bd23b43b

Fix T88719: Attribute Remove node input field does nothing

An unlinked multi-input socket was not handled correctly.

===

M   source/blender/modifiers/intern/MOD_nodes_evaluator.cc

===

diff --git a/source/blender/modifiers/intern/MOD_nodes_evaluator.cc 
b/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
index 27d3da911a1..7f80afde99b 100644
--- a/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
+++ b/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
@@ -1474,6 +1474,13 @@ Vector 
NodeParamsProvider::extract_multi_input(StringRef identi
 }
 BLI_assert_unreachable();
   });
+  if (ret_values.is_empty()) {
+/* If the socket is not linked, we just use the value from the socket 
itself. */
+BLI_assert(multi_value.items.size() == 1);
+MultiInputValueItem &item = multi_value.items[0];
+BLI_assert(item.origin == socket);
+ret_values.append({*input_state.type, item.value});
+  }
   multi_value.items.clear();
   return ret_values;
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [9d7466739cc] temp-lineart-contained: Merge remote-tracking branch 'origin/master' into temp-lineart-contained

2021-06-08 Thread YimingWu
Commit: 9d7466739cc448f075b7eb934ae6ebbf819ea915
Author: YimingWu
Date:   Tue Jun 8 17:25:18 2021 +0800
Branches: temp-lineart-contained
https://developer.blender.org/rB9d7466739cc448f075b7eb934ae6ebbf819ea915

Merge remote-tracking branch 'origin/master' into temp-lineart-contained

===



===

diff --cc source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index bfe154317ed,98b24be0d54..d6fc6ee3d83
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@@ -494,9 -481,8 +492,9 @@@ static void lineart_main_occlusion_begi
rb->intersection.last = rb->intersection.first;
rb->material.last = rb->material.first;
rb->edge_mark.last = rb->edge_mark.first;
 +  rb->floating.last = rb->floating.first;
  
-   TaskPool *tp = BLI_task_pool_create(NULL, TASK_PRIORITY_HIGH);
 -  TaskPool *tp = BLI_task_pool_create(NULL, TASK_PRIORITY_HIGH, 
TASK_ISOLATION_ON);
++  TaskPool *tp = BLI_task_pool_create(NULL, TASK_PRIORITY_HIGH, 
TASK_ISOLATION_OFF);
  
for (i = 0; i < thread_count; i++) {
  rti[i].thread_id = i;
@@@ -2144,7 -1987,7 +2142,7 @@@ static void lineart_main_load_geometrie
}
DEG_OBJECT_ITER_END;
  
-   TaskPool *tp = BLI_task_pool_create(NULL, TASK_PRIORITY_HIGH);
 -  TaskPool *tp = BLI_task_pool_create(NULL, TASK_PRIORITY_HIGH, 
TASK_ISOLATION_ON);
++  TaskPool *tp = BLI_task_pool_create(NULL, TASK_PRIORITY_HIGH, 
TASK_ISOLATION_OFF);
  
for (int i = 0; i < thread_count; i++) {
  olti[i].rb = rb;
@@@ -4038,26 -3830,11 +4035,24 @@@ bool MOD_lineart_compute_feature_lines(
  t_start = PIL_check_seconds_timer();
}
  
-   BKE_scene_camera_switch_update(scene);
- 
 -  if (!scene->camera) {
 -return false;
 +  if (lmd->calculation_flags & LRT_USE_CUSTOM_CAMERA) {
 +if (!lmd->source_camera ||
 +(use_camera = DEG_get_evaluated_object(depsgraph, 
lmd->source_camera))->type !=
 +OB_CAMERA) {
 +  return false;
 +}
}
 +  else {
 +if (!scene->camera) {
 +  return false;
 +}
 +use_camera = scene->camera;
 +  }
 +
 +  LineartCache *lc = lineart_init_cache();
 +  (*cached_result) = lc;
  
 -  rb = lineart_create_render_buffer(scene, lmd);
 +  rb = lineart_create_render_buffer(scene, lmd, use_camera, scene->camera, 
lc);
  
/* Triangle thread testing data size varies depending on the thread count.
 * See definition of LineartTriangleThread for details. */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [02e28f5684f] override-recursive-resync: Merge branch 'master' into override-recursive-resync

2021-06-08 Thread Bastien Montagne
Commit: 02e28f5684fe22ee43e2f453ae9e68f0bd8ac550
Author: Bastien Montagne
Date:   Tue Jun 8 11:24:56 2021 +0200
Branches: override-recursive-resync
https://developer.blender.org/rB02e28f5684fe22ee43e2f453ae9e68f0bd8ac550

Merge branch 'master' into override-recursive-resync

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [e54a4b355ef] master: CMake: Fix `FindClang` not finding system clang on linux in some cases.

2021-06-08 Thread Bastien Montagne
Commit: e54a4b355efba1bf72e15c7af061a150a7782f8c
Author: Bastien Montagne
Date:   Tue Jun 8 11:14:52 2021 +0200
Branches: master
https://developer.blender.org/rBe54a4b355efba1bf72e15c7af061a150a7782f8c

CMake: Fix `FindClang` not finding system clang on linux in some cases.

In Debian e.g. Clang is part of LLVM, so we need to also check its root
directory sometimes to find Clang files.

===

M   build_files/cmake/Modules/FindClang.cmake

===

diff --git a/build_files/cmake/Modules/FindClang.cmake 
b/build_files/cmake/Modules/FindClang.cmake
index b5c2cfbc28d..41df6e106b2 100644
--- a/build_files/cmake/Modules/FindClang.cmake
+++ b/build_files/cmake/Modules/FindClang.cmake
@@ -20,8 +20,24 @@ if(NOT CLANG_ROOT_DIR AND NOT $ENV{CLANG_ROOT_DIR} STREQUAL 
"")
   set(CLANG_ROOT_DIR $ENV{CLANG_ROOT_DIR})
 endif()
 
+if(NOT LLVM_ROOT_DIR)
+  if(DEFINED LLVM_VERSION)
+message(running llvm-config-${LLVM_VERSION})
+find_program(LLVM_CONFIG llvm-config-${LLVM_VERSION})
+  endif()
+  if(NOT LLVM_CONFIG)
+find_program(LLVM_CONFIG llvm-config)
+  endif()
+
+  execute_process(COMMAND ${LLVM_CONFIG} --prefix
+  OUTPUT_VARIABLE LLVM_ROOT_DIR
+  OUTPUT_STRIP_TRAILING_WHITESPACE)
+  set(LLVM_ROOT_DIR ${LLVM_ROOT_DIR} CACHE PATH "Path to the LLVM 
installation")
+endif()
+
 set(_CLANG_SEARCH_DIRS
   ${CLANG_ROOT_DIR}
+  ${LLVM_ROOT_DIR}
   /opt/lib/clang
 )

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [2f47c365595] greasepencil-object: Merge branch 'master' into greasepencil-object

2021-06-08 Thread Antonio Vazquez
Commit: 2f47c365595f16d4091bef32de4455d9e42cd596
Author: Antonio Vazquez
Date:   Tue Jun 8 11:15:27 2021 +0200
Branches: greasepencil-object
https://developer.blender.org/rB2f47c365595f16d4091bef32de4455d9e42cd596

Merge branch 'master' into greasepencil-object

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [933c2cffd64] master: Geometry Nodes: enable multi-threading in evaluator again

2021-06-08 Thread Jacques Lucke
Commit: 933c2cffd6407008671d9ba942109377bbf26f2e
Author: Jacques Lucke
Date:   Tue Jun 8 10:43:57 2021 +0200
Branches: master
https://developer.blender.org/rB933c2cffd6407008671d9ba942109377bbf26f2e

Geometry Nodes: enable multi-threading in evaluator again

This reverts rB223c6e1ead2940a89465ff66765d16ac14a992b7
because T88598 is resolved now.

===

M   source/blender/modifiers/intern/MOD_nodes_evaluator.cc

===

diff --git a/source/blender/modifiers/intern/MOD_nodes_evaluator.cc 
b/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
index 10ef2f4d8eb..27d3da911a1 100644
--- a/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
+++ b/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
@@ -380,8 +380,7 @@ class GeometryNodesEvaluator {
 
   void execute()
   {
-/* Disable threading until T88598 is resolved. */
-task_pool_ = BLI_task_pool_create_no_threads(this);
+task_pool_ = BLI_task_pool_create(this, TASK_PRIORITY_HIGH, 
TASK_ISOLATION_OFF);
 
 this->create_states_for_reachable_nodes();
 this->forward_group_inputs();

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [ed1fc9d96bb] master: BLI: support disabling task isolation in task pool

2021-06-08 Thread Jacques Lucke
Commit: ed1fc9d96bbac2ac3d4282400a9717e19e84211d
Author: Jacques Lucke
Date:   Tue Jun 8 09:37:45 2021 +0200
Branches: master
https://developer.blender.org/rBed1fc9d96bbac2ac3d4282400a9717e19e84211d

BLI: support disabling task isolation in task pool

Under some circumstances using task isolation can cause deadlocks.
Previously, our task pool implementation would run all tasks in an
isolated region. Now using task isolation is optional and can be
turned on/off for individual task pools.

Task pools that spawn new tasks recursively should never enable
task isolation. There is a new check that finds these cases at runtime.
Right now this check is disabled, so that this commit is a pure refactor.
It will be enabled in an upcoming commit.

This fixes T88598.

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

===

M   source/blender/blenkernel/intern/editmesh_tangent.c
M   source/blender/blenkernel/intern/lib_override.c
M   source/blender/blenkernel/intern/mesh_evaluate.c
M   source/blender/blenkernel/intern/mesh_tangent.c
M   source/blender/blenkernel/intern/ocean.c
M   source/blender/blenkernel/intern/particle.c
M   source/blender/blenkernel/intern/particle_distribute.c
M   source/blender/blenlib/BLI_task.h
M   source/blender/blenlib/intern/task_iterator.c
M   source/blender/blenlib/intern/task_pool.cc
M   source/blender/blenlib/tests/BLI_linklist_lockfree_test.cc
M   source/blender/compositor/intern/COM_WorkScheduler.cc
M   source/blender/depsgraph/intern/eval/deg_eval.cc
M   source/blender/editors/mesh/editmesh_undo.c
M   source/blender/editors/render/render_opengl.c
M   source/blender/editors/sculpt_paint/paint_image_proj.c
M   source/blender/editors/space_clip/clip_editor.c
M   source/blender/editors/space_clip/clip_ops.c
M   source/blender/editors/space_file/filelist.c
M   source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
M   source/blender/imbuf/intern/imageprocess.c

===

diff --git a/source/blender/blenkernel/intern/editmesh_tangent.c 
b/source/blender/blenkernel/intern/editmesh_tangent.c
index d849f4ab37d..088a2087a96 100644
--- a/source/blender/blenkernel/intern/editmesh_tangent.c
+++ b/source/blender/blenkernel/intern/editmesh_tangent.c
@@ -362,7 +362,7 @@ void BKE_editmesh_loop_tangent_calc(BMEditMesh *em,
 /* Calculation */
 if (em->tottri != 0) {
   TaskPool *task_pool;
-  task_pool = BLI_task_pool_create(NULL, TASK_PRIORITY_LOW);
+  task_pool = BLI_task_pool_create(NULL, TASK_PRIORITY_LOW, 
TASK_ISOLATION_ON);
 
   tangent_mask_curr = 0;
   /* Calculate tangent layers */
diff --git a/source/blender/blenkernel/intern/lib_override.c 
b/source/blender/blenkernel/intern/lib_override.c
index c93971e7b11..6b2ffa3b944 100644
--- a/source/blender/blenkernel/intern/lib_override.c
+++ b/source/blender/blenkernel/intern/lib_override.c
@@ -2335,7 +2335,8 @@ bool BKE_lib_override_library_main_operations_create(Main 
*bmain, const bool for
   }
 
   struct LibOverrideOpCreateData create_pool_data = {.bmain = bmain, .changed 
= false};
-  TaskPool *task_pool = BLI_task_pool_create(&create_pool_data, 
TASK_PRIORITY_HIGH);
+  TaskPool *task_pool = BLI_task_pool_create(
+  &create_pool_data, TASK_PRIORITY_HIGH, TASK_ISOLATION_ON);
 
   FOREACH_MAIN_ID_BEGIN (bmain, id) {
 if (!ID_IS_LINKED(id) && ID_IS_OVERRIDE_LIBRARY_REAL(id) &&
diff --git a/source/blender/blenkernel/intern/mesh_evaluate.c 
b/source/blender/blenkernel/intern/mesh_evaluate.c
index 616ec79c099..345546bc9cf 100644
--- a/source/blender/blenkernel/intern/mesh_evaluate.c
+++ b/source/blender/blenkernel/intern/mesh_evaluate.c
@@ -1715,7 +1715,8 @@ void BKE_mesh_normals_loop_split(const MVert *mverts,
 loop_split_generator(NULL, &common_data);
   }
   else {
-TaskPool *task_pool = BLI_task_pool_create(&common_data, 
TASK_PRIORITY_HIGH);
+TaskPool *task_pool = BLI_task_pool_create(
+&common_data, TASK_PRIORITY_HIGH, TASK_ISOLATION_ON);
 
 loop_split_generator(task_pool, &common_data);
 
diff --git a/source/blender/blenkernel/intern/mesh_tangent.c 
b/source/blender/blenkernel/intern/mesh_tangent.c
index 2e22e521a13..6a7ff0851f5 100644
--- a/source/blender/blenkernel/intern/mesh_tangent.c
+++ b/source/blender/blenkernel/intern/mesh_tangent.c
@@ -656,7 +656,7 @@ void BKE_mesh_calc_loop_tangent_ex(const MVert *mvert,
 
 /* Calculation */
 if (looptri_len != 0) {
-  TaskPool *task_pool = BLI_task_pool_create(NULL, TASK_PRIORITY_LOW);
+  TaskPool *task_pool = BLI_task_pool_create(NULL, TASK_PRIORITY_LOW, 
TASK_ISOLATION_ON);
 
   tangent_mask_curr = 0;
   /* Calculate tangent layers */
diff --git a/source/blender/blenkernel/intern/ocean.c 
b/source/blender/blenkernel/intern/ocean.c
index 9d53dad8d03..9b9ed0adcf4 100644
--- a/source/blender/blenk

[Bf-blender-cvs] [496045fc30f] master: BMesh: simplify normal calculation, resolve partial update error

2021-06-08 Thread Campbell Barton
Commit: 496045fc30f72be8d2ca32394ed233266f043152
Author: Campbell Barton
Date:   Tue Jun 8 15:54:21 2021 +1000
Branches: master
https://developer.blender.org/rB496045fc30f72be8d2ca32394ed233266f043152

BMesh: simplify normal calculation, resolve partial update error

Simplify vertex normal calculation by moving the main normal
accumulation function to operate on vertices instead of faces.

Using faces had the down side that it needed to zero, accumulate and
normalize the vertex normals in 3 separate passes, accumulating also
needed a spin-lock for thread since the face would write it's normal
to all of it's vertices which could be shared with other faces.

Now a single loop over vertices is performed without locking.
This gives 5-6% speedup calculating all normals.

This also simplifies partial updates, fixing a problem where
all connected faces were being read from when calculating normals.
While this could have been resolved separately,
it's simpler to operate on vertices directly.

===

M   source/blender/bmesh/intern/bmesh_mesh_normals.c
M   source/blender/bmesh/intern/bmesh_mesh_partial_update.c
M   source/blender/bmesh/intern/bmesh_mesh_partial_update.h

===

diff --git a/source/blender/bmesh/intern/bmesh_mesh_normals.c 
b/source/blender/bmesh/intern/bmesh_mesh_normals.c
index e5501100ce3..f0a791bae19 100644
--- a/source/blender/bmesh/intern/bmesh_mesh_normals.c
+++ b/source/blender/bmesh/intern/bmesh_mesh_normals.c
@@ -35,8 +35,6 @@
 #include "BKE_global.h"
 #include "BKE_mesh.h"
 
-#include "atomic_ops.h"
-
 #include "intern/bmesh_private.h"
 
 /*  */
@@ -59,19 +57,28 @@ typedef struct BMEdgesCalcVectorsData {
   float (*edgevec)[3];
 } BMEdgesCalcVectorsData;
 
-static void mesh_edges_calc_vectors_cb(void *userdata, MempoolIterData *mp_e)
+static void bm_edge_calc_vectors_cb(void *userdata, MempoolIterData *mp_e)
 {
-  BMEdgesCalcVectorsData *data = userdata;
   BMEdge *e = (BMEdge *)mp_e;
-
-  if (e->l) {
-const float *v1_co = data->vcos ? data->vcos[BM_elem_index_get(e->v1)] : 
e->v1->co;
-const float *v2_co = data->vcos ? data->vcos[BM_elem_index_get(e->v2)] : 
e->v2->co;
-sub_v3_v3v3(data->edgevec[BM_elem_index_get(e)], v2_co, v1_co);
-normalize_v3(data->edgevec[BM_elem_index_get(e)]);
+  /* The edge vector will not be needed when the edge has no radial. */
+  if (e->l != NULL) {
+float(*edgevec)[3] = userdata;
+float *e_diff = edgevec[BM_elem_index_get(e)];
+sub_v3_v3v3(e_diff, e->v2->co, e->v1->co);
+normalize_v3(e_diff);
   }
-  else {
-/* the edge vector will not be needed when the edge has no radial */
+}
+
+static void bm_edge_calc_vectors_with_coords_cb(void *userdata, 
MempoolIterData *mp_e)
+{
+  BMEdge *e = (BMEdge *)mp_e;
+  /* The edge vector will not be needed when the edge has no radial. */
+  if (e->l != NULL) {
+BMEdgesCalcVectorsData *data = userdata;
+float *e_diff = data->edgevec[BM_elem_index_get(e)];
+sub_v3_v3v3(
+e_diff, data->vcos[BM_elem_index_get(e->v2)], 
data->vcos[BM_elem_index_get(e->v1)]);
+normalize_v3(e_diff);
   }
 }
 
@@ -79,118 +86,123 @@ static void bm_mesh_edges_calc_vectors(BMesh *bm, float 
(*edgevec)[3], const flo
 {
   BM_mesh_elem_index_ensure(bm, BM_EDGE | (vcos ? BM_VERT : 0));
 
-  BMEdgesCalcVectorsData data = {
-  .vcos = vcos,
-  .edgevec = edgevec,
-  };
-
-  BM_iter_parallel(
-  bm, BM_EDGES_OF_MESH, mesh_edges_calc_vectors_cb, &data, bm->totedge >= 
BM_OMP_LIMIT);
+  if (vcos == NULL) {
+BM_iter_parallel(
+bm, BM_EDGES_OF_MESH, bm_edge_calc_vectors_cb, edgevec, bm->totedge >= 
BM_OMP_LIMIT);
+  }
+  else {
+BMEdgesCalcVectorsData data = {
+.edgevec = edgevec,
+.vcos = vcos,
+};
+BM_iter_parallel(bm,
+ BM_EDGES_OF_MESH,
+ bm_edge_calc_vectors_with_coords_cb,
+ &data,
+ bm->totedge >= BM_OMP_LIMIT);
+  }
 }
 
-typedef struct BMVertsCalcNormalsData {
+typedef struct BMVertsCalcNormalsWithCoordsData {
   /* Read-only data. */
   const float (*fnos)[3];
   const float (*edgevec)[3];
   const float (*vcos)[3];
 
-  /* Read-write data, protected by an atomic-based fake spin-lock like system. 
*/
+  /* Write data. */
   float (*vnos)[3];
-} BMVertsCalcNormalsData;
+} BMVertsCalcNormalsWithCoordsData;
 
-static void mesh_verts_calc_normals_accum(
-BMFace *f,
-const float *f_no,
-const float (*edgevec)[3],
-
-/* Read-write data, protected by an atomic-based fake spin-lock like 
system. */
-float (*vnos)[3])
+BLI_INLINE void bm_vert_calc_normals_accum_loop(const BMLoop *l_iter,
+const float (*edgevec)[3],
+const float f_no[3],
+