Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2019-07-02 17:48:28 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2019-07-02 17:51:17 +0300
commit87c39f11231b165ce913673676f57d6a013c23c4 (patch)
treed733a5905886bbf706e6fa26a1b0a25b23928192 /source/blender
parent65bc59a56d0b5c2e012daf84de834fac2909cfc2 (diff)
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. - 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.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/intern/curve.c16
-rw-r--r--source/blender/blenkernel/intern/mesh.c18
2 files changed, 29 insertions, 5 deletions
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index 5945fa4bf33..8a2450efa55 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,19 @@ 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);
+ copy_v3_v3(curve_orig->rot, curve->rot);
+ }
}
}
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 755a8036e8e..e6fbc386b77 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,17 @@ 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);
+ copy_v3_v3(mesh_orig->rot, mesh->rot);
+ }
+ }
}