[Bf-blender-cvs] [6b9c41719bd] master: Fix T65798: Incorrect auto-tex space for Curves

Sergey Sharybin noreply at git.blender.org
Mon Jul 1 12:42:45 CEST 2019


Commit: 6b9c41719bdf7514b9f9ca88e8fb09d3270cf1f2
Author: Sergey Sharybin
Date:   Mon Jul 1 12:39:00 2019 +0200
Branches: master
https://developer.blender.org/rB6b9c41719bdf7514b9f9ca88e8fb09d3270cf1f2

Fix T65798: Incorrect auto-tex space for Curves

There are several aspects to the fix:

- Always calculate bounding box for meshes and curves from dependency
  graph evaluation function.

  There is a reason why mesh was tagged for geometry update, so can not
  be spare here in attempts to avoid calculation.

- Remove texture space evaluation from RNA accessor.

  Such data is to be evaluated by a dependency graph.

  Don't see a reason to be different here: we never force evaluation of
  any kind from RNA.

- Copy bounding box and texture space to original object for active
  dependency graph.

  This matches object-level bounding box and allows to remove bounding
  box evaluation from RNA.

===================================================================

M	source/blender/blenkernel/intern/curve.c
M	source/blender/blenkernel/intern/mesh.c
M	source/blender/makesrna/intern/rna_mesh.c

===================================================================

diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index 5945fa4bf33..0fb6b8005d4 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -54,6 +54,7 @@
 #include "BKE_material.h"
 
 #include "DEG_depsgraph.h"
+#include "DEG_depsgraph_query.h"
 
 #include "CLG_log.h"
 
@@ -5431,8 +5432,18 @@ void BKE_curve_rect_from_textbox(const struct Curve *cu,
 void BKE_curve_eval_geometry(Depsgraph *depsgraph, Curve *curve)
 {
   DEG_debug_print_eval(depsgraph, __func__, curve->id.name, curve);
-  if (curve->bb == NULL || (curve->bb->flag & BOUNDBOX_DIRTY)) {
-    BKE_curve_texspace_calc(curve);
+  BKE_curve_texspace_calc(curve);
+  if (DEG_is_active(depsgraph)) {
+    Curve *curve_orig = (Curve *)DEG_get_original_id(&curve->id);
+    BoundBox *bb = curve->bb;
+    if (bb != NULL) {
+      if (curve_orig->bb == NULL) {
+        curve_orig->bb = MEM_mallocN(sizeof(*curve_orig->bb), __func__);
+      }
+      *curve_orig->bb = *bb;
+      copy_v3_v3(curve_orig->loc, curve->loc);
+      copy_v3_v3(curve_orig->size, curve->size);
+    }
   }
 }
 
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 755a8036e8e..35f96e50e3a 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -50,6 +50,7 @@
 #include "BKE_editmesh.h"
 
 #include "DEG_depsgraph.h"
+#include "DEG_depsgraph_query.h"
 
 enum {
   MESHCMP_DVERT_WEIGHTMISMATCH = 1,
@@ -1995,9 +1996,7 @@ void BKE_mesh_split_faces(Mesh *mesh, bool free_loop_normals)
 void BKE_mesh_eval_geometry(Depsgraph *depsgraph, Mesh *mesh)
 {
   DEG_debug_print_eval(depsgraph, __func__, mesh->id.name, mesh);
-  if (mesh->bb == NULL || (mesh->bb->flag & BOUNDBOX_DIRTY)) {
-    BKE_mesh_texspace_calc(mesh);
-  }
+  BKE_mesh_texspace_calc(mesh);
   /* Clear autospace flag in evaluated mesh, so that texspace does not get recomputed when bbox is
    * (e.g. after modifiers, etc.) */
   mesh->texflag &= ~ME_AUTOSPACE;
@@ -2009,4 +2008,16 @@ void BKE_mesh_eval_geometry(Depsgraph *depsgraph, Mesh *mesh)
     BKE_id_free(NULL, mesh->runtime.mesh_eval);
     mesh->runtime.mesh_eval = NULL;
   }
+  if (DEG_is_active(depsgraph)) {
+    Mesh *mesh_orig = (Mesh *)DEG_get_original_id(&mesh->id);
+    BoundBox *bb = mesh->bb;
+    if (bb != NULL) {
+      if (mesh_orig->bb == NULL) {
+        mesh_orig->bb = MEM_mallocN(sizeof(*mesh_orig->bb), __func__);
+      }
+      *mesh_orig->bb = *bb;
+      copy_v3_v3(mesh_orig->loc, mesh->loc);
+      copy_v3_v3(mesh_orig->size, mesh->size);
+    }
+  }
 }
diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c
index c51097fc8c3..ba4f3c53692 100644
--- a/source/blender/makesrna/intern/rna_mesh.c
+++ b/source/blender/makesrna/intern/rna_mesh.c
@@ -496,22 +496,12 @@ static int rna_Mesh_texspace_editable(PointerRNA *ptr, const char **UNUSED(r_inf
 static void rna_Mesh_texspace_size_get(PointerRNA *ptr, float values[3])
 {
   Mesh *me = (Mesh *)ptr->data;
-
-  if (me->bb == NULL || (me->bb->flag & BOUNDBOX_DIRTY)) {
-    BKE_mesh_texspace_calc(me);
-  }
-
   copy_v3_v3(values, me->size);
 }
 
 static void rna_Mesh_texspace_loc_get(PointerRNA *ptr, float values[3])
 {
   Mesh *me = (Mesh *)ptr->data;
-
-  if (me->bb == NULL || (me->bb->flag & BOUNDBOX_DIRTY)) {
-    BKE_mesh_texspace_calc(me);
-  }
-
   copy_v3_v3(values, me->loc);
 }



More information about the Bf-blender-cvs mailing list