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:
authorGermano Cavalcante <germano.costa@ig.com.br>2020-03-09 16:02:11 +0300
committerGermano Cavalcante <germano.costa@ig.com.br>2020-03-09 16:02:11 +0300
commita922a097ef5c453bf4bc515494a3ab5f402946e2 (patch)
tree892f229d05ed6e88afc7d107bf58147f6031dd16 /source/blender/editors/transform/transform_snap_object.c
parent3a10c61a7d088712e66ae6cc775f8260dc91518b (diff)
Transform Snap Object: Remove depsgraph when creating context
Currently, this change does not bring functional changes. But it is necessary to extend the use of the snap system for gizmos, since, after a Undo, the `depsgraph` pointed by the `snap_context` has its memory invalidated. Reviewed By: campbellbarton Differential Revision: https://developer.blender.org/D7013
Diffstat (limited to 'source/blender/editors/transform/transform_snap_object.c')
-rw-r--r--source/blender/editors/transform/transform_snap_object.c114
1 files changed, 85 insertions, 29 deletions
diff --git a/source/blender/editors/transform/transform_snap_object.c b/source/blender/editors/transform/transform_snap_object.c
index c9970e7e49c..841bc11edf1 100644
--- a/source/blender/editors/transform/transform_snap_object.c
+++ b/source/blender/editors/transform/transform_snap_object.c
@@ -112,7 +112,6 @@ typedef struct SnapObjectData {
struct SnapObjectContext {
Main *bmain;
Scene *scene;
- Depsgraph *depsgraph;
int flag;
@@ -373,11 +372,12 @@ typedef void (*IterSnapObjsCallback)(SnapObjectContext *sctx,
* \param snap_select: from enum #eSnapSelect.
*/
static void iter_snap_objects(SnapObjectContext *sctx,
+ Depsgraph *depsgraph,
const struct SnapObjectParams *params,
IterSnapObjsCallback sob_callback,
void *data)
{
- ViewLayer *view_layer = DEG_get_input_view_layer(sctx->depsgraph);
+ ViewLayer *view_layer = DEG_get_input_view_layer(depsgraph);
const View3D *v3d = sctx->v3d_data.v3d;
const eSnapSelect snap_select = params->snap_select;
const bool use_object_edit_cage = params->use_object_edit_cage;
@@ -408,10 +408,10 @@ static void iter_snap_objects(SnapObjectContext *sctx,
}
}
- Object *obj_eval = DEG_get_evaluated_object(sctx->depsgraph, base->object);
+ Object *obj_eval = DEG_get_evaluated_object(depsgraph, base->object);
if (obj_eval->transflag & OB_DUPLI) {
DupliObject *dupli_ob;
- ListBase *lb = object_duplilist(sctx->depsgraph, sctx->scene, obj_eval);
+ ListBase *lb = object_duplilist(depsgraph, sctx->scene, obj_eval);
for (dupli_ob = lb->first; dupli_ob; dupli_ob = dupli_ob->next) {
sob_callback(
sctx, use_object_edit_cage, use_backface_culling, dupli_ob->ob, dupli_ob->mat, data);
@@ -1113,6 +1113,7 @@ static void raycast_obj_cb(SnapObjectContext *sctx,
* \param r_hit_list: List of #SnapObjectHitDepth (caller must free).
*/
static bool raycastObjects(SnapObjectContext *sctx,
+ Depsgraph *depsgraph,
const struct SnapObjectParams *params,
const float ray_start[3],
const float ray_dir[3],
@@ -1141,7 +1142,7 @@ static bool raycastObjects(SnapObjectContext *sctx,
.ret = false,
};
- iter_snap_objects(sctx, params, raycast_obj_cb, &data);
+ iter_snap_objects(sctx, depsgraph, params, raycast_obj_cb, &data);
return data.ret;
}
@@ -2813,6 +2814,7 @@ static void sanp_obj_cb(SnapObjectContext *sctx,
* \param r_obmat: Object matrix (may not be #Object.obmat with dupli-instances).
*/
static short snapObjectsRay(SnapObjectContext *sctx,
+ Depsgraph *depsgraph,
SnapData *snapdata,
const struct SnapObjectParams *params,
/* read/write args */
@@ -2835,7 +2837,7 @@ static short snapObjectsRay(SnapObjectContext *sctx,
.ret = 0,
};
- iter_snap_objects(sctx, params, sanp_obj_cb, &data);
+ iter_snap_objects(sctx, depsgraph, params, sanp_obj_cb, &data);
return data.ret;
}
@@ -2846,10 +2848,7 @@ static short snapObjectsRay(SnapObjectContext *sctx,
/** \name Public Object Snapping API
* \{ */
-SnapObjectContext *ED_transform_snap_object_context_create(Main *bmain,
- Scene *scene,
- Depsgraph *depsgraph,
- int flag)
+SnapObjectContext *ED_transform_snap_object_context_create(Main *bmain, Scene *scene, int flag)
{
SnapObjectContext *sctx = MEM_callocN(sizeof(*sctx), __func__);
@@ -2857,7 +2856,6 @@ SnapObjectContext *ED_transform_snap_object_context_create(Main *bmain,
sctx->bmain = bmain;
sctx->scene = scene;
- sctx->depsgraph = depsgraph;
sctx->cache.object_map = BLI_ghash_ptr_new(__func__);
/* Initialize as needed (edit-mode only). */
@@ -2869,13 +2867,12 @@ SnapObjectContext *ED_transform_snap_object_context_create(Main *bmain,
SnapObjectContext *ED_transform_snap_object_context_create_view3d(Main *bmain,
Scene *scene,
- Depsgraph *depsgraph,
int flag,
/* extra args for view3d */
const ARegion *region,
const View3D *v3d)
{
- SnapObjectContext *sctx = ED_transform_snap_object_context_create(bmain, scene, depsgraph, flag);
+ SnapObjectContext *sctx = ED_transform_snap_object_context_create(bmain, scene, flag);
sctx->use_v3d = true;
sctx->v3d_data.region = region;
@@ -2916,6 +2913,7 @@ void ED_transform_snap_object_context_set_editmesh_callbacks(
}
bool ED_transform_snap_object_project_ray_ex(SnapObjectContext *sctx,
+ Depsgraph *depsgraph,
const struct SnapObjectParams *params,
const float ray_start[3],
const float ray_normal[3],
@@ -2926,8 +2924,18 @@ bool ED_transform_snap_object_project_ray_ex(SnapObjectContext *sctx,
Object **r_ob,
float r_obmat[4][4])
{
- return raycastObjects(
- sctx, params, ray_start, ray_normal, ray_depth, r_loc, r_no, r_index, r_ob, r_obmat, NULL);
+ return raycastObjects(sctx,
+ depsgraph,
+ params,
+ ray_start,
+ ray_normal,
+ ray_depth,
+ r_loc,
+ r_no,
+ r_index,
+ r_ob,
+ r_obmat,
+ NULL);
}
/**
@@ -2938,6 +2946,7 @@ bool ED_transform_snap_object_project_ray_ex(SnapObjectContext *sctx,
* \param r_hit_list: List of #SnapObjectHitDepth (caller must free).
*/
bool ED_transform_snap_object_project_ray_all(SnapObjectContext *sctx,
+ Depsgraph *depsgraph,
const struct SnapObjectParams *params,
const float ray_start[3],
const float ray_normal[3],
@@ -2953,8 +2962,18 @@ bool ED_transform_snap_object_project_ray_all(SnapObjectContext *sctx,
float ray_depth_prev = ray_depth;
#endif
- bool retval = raycastObjects(
- sctx, params, ray_start, ray_normal, &ray_depth, NULL, NULL, NULL, NULL, NULL, r_hit_list);
+ bool retval = raycastObjects(sctx,
+ depsgraph,
+ params,
+ ray_start,
+ ray_normal,
+ &ray_depth,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ r_hit_list);
/* meant to be readonly for 'all' hits, ensure it is */
#ifdef DEBUG
@@ -2976,6 +2995,7 @@ bool ED_transform_snap_object_project_ray_all(SnapObjectContext *sctx,
* \return Snap success
*/
static bool transform_snap_context_project_ray_impl(SnapObjectContext *sctx,
+ Depsgraph *depsgraph,
const struct SnapObjectParams *params,
const float ray_start[3],
const float ray_normal[3],
@@ -2987,12 +3007,13 @@ static bool transform_snap_context_project_ray_impl(SnapObjectContext *sctx,
/* try snap edge, then face if it fails */
ret = ED_transform_snap_object_project_ray_ex(
- sctx, params, ray_start, ray_normal, ray_depth, r_co, r_no, NULL, NULL, NULL);
+ sctx, depsgraph, params, ray_start, ray_normal, ray_depth, r_co, r_no, NULL, NULL, NULL);
return ret;
}
bool ED_transform_snap_object_project_ray(SnapObjectContext *sctx,
+ Depsgraph *depsgraph,
const struct SnapObjectParams *params,
const float ray_origin[3],
const float ray_direction[3],
@@ -3007,11 +3028,12 @@ bool ED_transform_snap_object_project_ray(SnapObjectContext *sctx,
}
return transform_snap_context_project_ray_impl(
- sctx, params, ray_origin, ray_direction, ray_depth, r_co, r_no);
+ sctx, depsgraph, params, ray_origin, ray_direction, ray_depth, r_co, r_no);
}
static short transform_snap_context_project_view3d_mixed_impl(
SnapObjectContext *sctx,
+ Depsgraph *depsgraph,
const unsigned short snap_to_flag,
const struct SnapObjectParams *params,
const float mval[2],
@@ -3041,7 +3063,7 @@ static short transform_snap_context_project_view3d_mixed_impl(
if (snap_to_flag & SCE_SNAP_MODE_FACE || use_occlusion_test) {
float ray_start[3], ray_normal[3];
- if (!ED_view3d_win_to_ray_clipped_ex(sctx->depsgraph,
+ if (!ED_view3d_win_to_ray_clipped_ex(depsgraph,
sctx->v3d_data.region,
sctx->v3d_data.v3d,
mval,
@@ -3054,8 +3076,18 @@ static short transform_snap_context_project_view3d_mixed_impl(
float dummy_ray_depth = BVH_RAYCAST_DIST_MAX;
- has_hit = raycastObjects(
- sctx, params, ray_start, ray_normal, &dummy_ray_depth, loc, no, &index, &ob, obmat, NULL);
+ has_hit = raycastObjects(sctx,
+ depsgraph,
+ params,
+ ray_start,
+ ray_normal,
+ &dummy_ray_depth,
+ loc,
+ no,
+ &index,
+ &ob,
+ obmat,
+ NULL);
if (has_hit && (snap_to_flag & SCE_SNAP_MODE_FACE)) {
retval = SCE_SNAP_MODE_FACE;
@@ -3129,7 +3161,8 @@ static short transform_snap_context_project_view3d_mixed_impl(
snapdata.has_occlusion_plane = true;
}
- elem_test = snapObjectsRay(sctx, &snapdata, params, &dist_px_tmp, loc, no, &index, &ob, obmat);
+ elem_test = snapObjectsRay(
+ sctx, depsgraph, &snapdata, params, &dist_px_tmp, loc, no, &index, &ob, obmat);
if (elem_test) {
elem = elem_test;
}
@@ -3176,6 +3209,7 @@ static short transform_snap_context_project_view3d_mixed_impl(
}
short ED_transform_snap_object_project_view3d_ex(SnapObjectContext *sctx,
+ Depsgraph *depsgraph,
const unsigned short snap_to,
const struct SnapObjectParams *params,
const float mval[2],
@@ -3187,8 +3221,18 @@ short ED_transform_snap_object_project_view3d_ex(SnapObjectContext *sctx,
Object **r_ob,
float r_obmat[4][4])
{
- return transform_snap_context_project_view3d_mixed_impl(
- sctx, snap_to, params, mval, prev_co, dist_px, r_loc, r_no, r_index, r_ob, r_obmat);
+ return transform_snap_context_project_view3d_mixed_impl(sctx,
+ depsgraph,
+ snap_to,
+ params,
+ mval,
+ prev_co,
+ dist_px,
+ r_loc,
+ r_no,
+ r_index,
+ r_ob,
+ r_obmat);
}
/**
@@ -3205,6 +3249,7 @@ short ED_transform_snap_object_project_view3d_ex(SnapObjectContext *sctx,
* \return Snap success
*/
bool ED_transform_snap_object_project_view3d(SnapObjectContext *sctx,
+ Depsgraph *depsgraph,
const unsigned short snap_to,
const struct SnapObjectParams *params,
const float mval[2],
@@ -3213,14 +3258,25 @@ bool ED_transform_snap_object_project_view3d(SnapObjectContext *sctx,
float r_loc[3],
float r_no[3])
{
- return ED_transform_snap_object_project_view3d_ex(
- sctx, snap_to, params, mval, prev_co, dist_px, r_loc, r_no, NULL, NULL, NULL) != 0;
+ return ED_transform_snap_object_project_view3d_ex(sctx,
+ depsgraph,
+ snap_to,
+ params,
+ mval,
+ prev_co,
+ dist_px,
+ r_loc,
+ r_no,
+ NULL,
+ NULL,
+ NULL) != 0;
}
/**
* see: #ED_transform_snap_object_project_ray_all
*/
bool ED_transform_snap_object_project_all_view3d_ex(SnapObjectContext *sctx,
+ Depsgraph *depsgraph,
const struct SnapObjectParams *params,
const float mval[2],
float ray_depth,
@@ -3229,7 +3285,7 @@ bool ED_transform_snap_object_project_all_view3d_ex(SnapObjectContext *sctx,
{
float ray_start[3], ray_normal[3];
- if (!ED_view3d_win_to_ray_clipped_ex(sctx->depsgraph,
+ if (!ED_view3d_win_to_ray_clipped_ex(depsgraph,
sctx->v3d_data.region,
sctx->v3d_data.v3d,
mval,
@@ -3241,7 +3297,7 @@ bool ED_transform_snap_object_project_all_view3d_ex(SnapObjectContext *sctx,
}
return ED_transform_snap_object_project_ray_all(
- sctx, params, ray_start, ray_normal, ray_depth, sort, r_hit_list);
+ sctx, depsgraph, params, ray_start, ray_normal, ray_depth, sort, r_hit_list);
}
/** \} */