[Bf-blender-cvs] [c7fecab2efd] blender2.8: Object Mode: Use eval_ctx mode for drawing, paint & modifiers
Campbell Barton
noreply at git.blender.org
Tue Feb 6 08:01:11 CET 2018
Commit: c7fecab2efd3b28a18b56dbd321616728d8b7cce
Author: Campbell Barton
Date: Tue Feb 6 17:06:20 2018 +1100
Branches: blender2.8
https://developer.blender.org/rBc7fecab2efd3b28a18b56dbd321616728d8b7cce
Object Mode: Use eval_ctx mode for drawing, paint & modifiers
===================================================================
M source/blender/blenkernel/BKE_object.h
M source/blender/blenkernel/BKE_paint.h
M source/blender/blenkernel/BKE_particle.h
M source/blender/blenkernel/intern/DerivedMesh.c
M source/blender/blenkernel/intern/object.c
M source/blender/blenkernel/intern/paint.c
M source/blender/blenkernel/intern/particle.c
M source/blender/blenkernel/intern/particle_system.c
M source/blender/draw/intern/draw_view.c
M source/blender/editors/armature/pose_select.c
M source/blender/editors/include/ED_armature.h
M source/blender/editors/interface/interface_handlers.c
M source/blender/editors/mesh/editmesh_select.c
M source/blender/editors/object/object_vgroup.c
M source/blender/editors/sculpt_paint/paint_image.c
M source/blender/editors/space_buttons/CMakeLists.txt
M source/blender/editors/space_buttons/buttons_context.c
M source/blender/editors/space_view3d/drawmesh.c
M source/blender/editors/space_view3d/drawobject.c
M source/blender/editors/space_view3d/view3d_buttons.c
M source/blender/editors/space_view3d/view3d_draw.c
M source/blender/editors/space_view3d/view3d_draw_legacy.c
M source/blender/editors/space_view3d/view3d_edit.c
M source/blender/editors/space_view3d/view3d_intern.h
M source/blender/editors/space_view3d/view3d_select.c
M source/blender/editors/transform/transform_generics.c
M source/blender/gpu/GPU_draw.h
M source/blender/gpu/intern/gpu_draw.c
M source/blender/makesrna/intern/rna_scene.c
M source/blender/makesrna/intern/rna_scene_api.c
M source/blender/modifiers/intern/MOD_subsurf.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index d98c52aa91a..71ffa630e61 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -79,9 +79,9 @@ void BKE_object_make_proxy(struct Object *ob, struct Object *target, struct Obje
void BKE_object_copy_proxy_drivers(struct Object *ob, struct Object *target);
bool BKE_object_exists_check(struct Object *obtest);
-bool BKE_object_is_in_editmode(struct Object *ob);
+bool BKE_object_is_in_editmode(const struct Object *ob);
bool BKE_object_is_in_editmode_vgroup(struct Object *ob);
-bool BKE_object_is_in_wpaint_select_vert(struct Object *ob);
+bool BKE_object_is_in_wpaint_select_vert(const struct EvaluationContext *eval_ctx, const struct Object *ob);
typedef enum eObjectVisibilityCheck {
OB_VISIBILITY_CHECK_FOR_VIEWPORT,
@@ -113,9 +113,9 @@ void BKE_object_lod_add(struct Object *ob);
void BKE_object_lod_sort(struct Object *ob);
bool BKE_object_lod_remove(struct Object *ob, int level);
void BKE_object_lod_update(struct Object *ob, const float camera_position[3]);
-bool BKE_object_lod_is_usable(struct Object *ob, struct ViewLayer *view_layer);
-struct Object *BKE_object_lod_meshob_get(struct Object *ob, struct ViewLayer *view_layer);
-struct Object *BKE_object_lod_matob_get(struct Object *ob, struct ViewLayer *view_layer);
+bool BKE_object_lod_is_usable(struct Object *ob, struct ViewLayer *view_layer, const short object_mode);
+struct Object *BKE_object_lod_meshob_get(struct Object *ob, struct ViewLayer *view_layer, const short object_mode);
+struct Object *BKE_object_lod_matob_get(struct Object *ob, struct ViewLayer *view_layer, const short object_mode);
void BKE_object_copy_data(struct Main *bmain, struct Object *ob_dst, const struct Object *ob_src, const int flag);
struct Object *BKE_object_copy(struct Main *bmain, const struct Object *ob);
diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h
index 7fd08ba541f..5ca0843e667 100644
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@ -126,7 +126,8 @@ void BKE_paint_cavity_curve_preset(struct Paint *p, int preset);
short BKE_paint_object_mode_from_paint_mode(ePaintMode mode);
struct Paint *BKE_paint_get_active_from_paintmode(struct Scene *sce, ePaintMode mode);
-struct Paint *BKE_paint_get_active(struct Scene *sce, struct ViewLayer *view_layer);
+struct Paint *BKE_paint_get_active(
+ struct Scene *sce, struct ViewLayer *view_layer, const short object_mode);
struct Paint *BKE_paint_get_active_from_context(const struct bContext *C);
ePaintMode BKE_paintmode_get_active_from_context(const struct bContext *C);
struct Brush *BKE_paint_brush(struct Paint *paint);
@@ -142,9 +143,12 @@ bool BKE_paint_proj_mesh_data_check(struct Scene *scene, struct Object *ob, bool
/* testing face select mode
* Texture paint could be removed since selected faces are not used
* however hiding faces is useful */
-bool BKE_paint_select_face_test(struct Object *ob);
-bool BKE_paint_select_vert_test(struct Object *ob);
-bool BKE_paint_select_elem_test(struct Object *ob);
+bool BKE_paint_select_face_test(
+ const struct EvaluationContext *eval_ctx, struct Object *ob);
+bool BKE_paint_select_vert_test(
+ const struct EvaluationContext *eval_ctx, struct Object *ob);
+bool BKE_paint_select_elem_test(
+ const struct EvaluationContext *eval_ctx, struct Object *ob);
/* partial visibility */
bool paint_is_face_hidden(const struct MLoopTri *lt, const struct MVert *mvert, const struct MLoop *mloop);
diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h
index 8bc521c515f..9492f7e32fa 100644
--- a/source/blender/blenkernel/BKE_particle.h
+++ b/source/blender/blenkernel/BKE_particle.h
@@ -298,7 +298,8 @@ void psys_set_current_num(Object *ob, int index);
struct LatticeDeformData *psys_create_lattice_deform_data(struct ParticleSimulationData *sim);
-bool psys_in_edit_mode(struct ViewLayer *view_layer, struct ParticleSystem *psys);
+bool psys_in_edit_mode(
+ const struct EvaluationContext *eval_ctx, struct ViewLayer *view_layer, struct ParticleSystem *psys);
bool psys_check_enabled(struct Object *ob, struct ParticleSystem *psys, const bool use_render_params);
bool psys_check_edited(struct ParticleSystem *psys);
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index d71735ca8c4..5229cb35645 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -51,6 +51,8 @@
#include "BLI_linklist.h"
#include "BLI_task.h"
+#include "DEG_depsgraph.h"
+
#include "BKE_cdderivedmesh.h"
#include "BKE_colorband.h"
#include "BKE_editmesh.h"
@@ -1776,17 +1778,19 @@ static void mesh_calc_modifiers(
MultiresModifierData *mmd = get_multires_modifier(scene, ob, 0);
const bool has_multires = (mmd && mmd->sculptlvl != 0);
bool multires_applied = false;
- const bool sculpt_mode = ob->mode & OB_MODE_SCULPT && ob->sculpt && !useRenderParams;
+ const bool sculpt_mode = eval_ctx->object_mode & OB_MODE_SCULPT && ob->sculpt && !useRenderParams;
const bool sculpt_dyntopo = (sculpt_mode && ob->sculpt->bm) && !useRenderParams;
const int draw_flag = dm_drawflag_calc(scene->toolsettings, me);
/* Generic preview only in object mode! */
- const bool do_mod_mcol = (ob->mode == OB_MODE_OBJECT);
+ const bool do_mod_mcol = (eval_ctx->object_mode == OB_MODE_OBJECT);
#if 0 /* XXX Will re-enable this when we have global mod stack options. */
const bool do_final_wmcol = (scene->toolsettings->weights_preview == WP_WPREVIEW_FINAL) && do_wmcol;
#endif
const bool do_final_wmcol = false;
- const bool do_init_wmcol = ((dataMask & CD_MASK_PREVIEW_MLOOPCOL) && (ob->mode & OB_MODE_WEIGHT_PAINT) && !do_final_wmcol);
+ const bool do_init_wmcol = (
+ (dataMask & CD_MASK_PREVIEW_MLOOPCOL) &&
+ (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) && !do_final_wmcol);
/* XXX Same as above... For now, only weights preview in WPaint mode. */
const bool do_mod_wmcol = do_init_wmcol;
@@ -2624,7 +2628,7 @@ static bool calc_modifiers_skip_orco(const EvaluationContext *eval_ctx,
if (U.opensubdiv_compute_type == USER_OPENSUBDIV_COMPUTE_NONE) {
return false;
}
- else if ((ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) != 0) {
+ else if ((eval_ctx->object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) != 0) {
return false;
}
else if ((DEG_get_eval_flags_for_id(eval_ctx->depsgraph, &ob->id) & DAG_EVAL_NEED_CPU) != 0) {
@@ -2665,7 +2669,7 @@ static void mesh_build_data(
ob->lastDataMask = dataMask;
ob->lastNeedMapping = need_mapping;
- if ((ob->mode & OB_MODE_ALL_SCULPT) && ob->sculpt) {
+ if ((eval_ctx->object_mode & OB_MODE_ALL_SCULPT) && ob->sculpt) {
/* create PBVH immediately (would be created on the fly too,
* but this avoids waiting on first stroke) */
@@ -2703,7 +2707,9 @@ static void editbmesh_build_data(
BLI_assert(!(em->derivedFinal->dirty & DM_DIRTY_NORMALS));
}
-static CustomDataMask object_get_datamask(const Scene *scene, Object *ob, bool *r_need_mapping)
+static CustomDataMask object_get_datamask(
+ const EvaluationContext *eval_ctx,
+ const Scene *scene, Object *ob, bool *r_need_mapping)
{
/* TODO(sergey): Avoid this linear list lookup. */
ViewLayer *view_layer = BKE_view_layer_context_active_PLACEHOLDER(scene);
@@ -2715,28 +2721,28 @@ static CustomDataMask object_get_datamask(const Scene *scene, Object *ob, bool *
}
if (ob == actob) {
- bool editing = BKE_paint_select_face_test(ob);
+ bool editing = BKE_paint_select_face_test(eval_ctx, ob);
/* weight paint and face select need original indices because of selection buffer drawing */
if (r_need_mapping) {
- *r_need_mapping = (editing || (ob->mode & (OB_MODE_WEIGHT_PAINT | OB_MODE_VERTEX_PAINT)));
+ *r_need_mapping = (editing || (eval_ctx->object_mode & (OB_MODE_WEIGHT_PAINT | OB_MODE_VERTEX_PAINT)));
}
/* check if we need tfaces & mcols due to face select or texture paint */
- if ((ob->mode & OB_MODE_TEXTURE_PAINT) || editing) {
+ if ((eval_ctx->object_mode & OB_MODE_TEXTURE_PAINT) || editing) {
mask |= CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL;
}
/* check if we need mcols due to vertex paint or weightpaint */
- if (ob->mode & OB_MODE_VERTEX_PAINT) {
+ if (eval_ctx->object_mode & OB_MODE_VERTEX_PAINT) {
mask |= CD_MASK_MLOOPCOL;
}
- if (ob->mode & OB_MODE_WEIGHT_PAINT) {
+ if (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) {
mask |= CD_MASK_PREVIEW_MLOOPCOL;
}
- if (ob->mode & OB_MODE_EDIT)
+ if (eval_ctx->object_mode & OB_MODE_EDIT)
mask |= CD_MASK_MVERT_SKIN;
}
@@ -2748,7 +2754,7 @@ void makeDerivedMesh(
CustomDataMask dataMask, const bool build_shapekey_layers)
{
bool need_mapping;
- dataMask |= object_get_datamask(scene, ob, &need_mapping);
+ dataMask |= object_get_datamask(eval_ctx, scene, ob, &need_mapping);
if (em) {
editbmesh_build_data(eval_ctx, scene, ob, em, dataMask);
@@ -2767,7 +2773,7 @@ DerivedMesh *mesh_get_derived_final(
* the data we need, rebuild the derived mesh
*/
bool need_mapping;
- dataMask |= object_get_datamask(scene, ob, &need_mapping);
+ dataMask |= object_get_datamask(eval_ctx, scene, ob, &need_mapping);
if (!ob->derivedFinal ||
((dataMask & ob->lastDataMask) != dataMask) ||
@@ -2787,7 +2793,7 @@ DerivedMesh *mesh_get_derived_deform(const struct EvaluationContext *eval_ctx, S
*/
bool need_mapping;
- dataMask |= object_get_datamask(scene, ob, &need_mapping);
+ dataMask |= object_get_datamask(eval_ctx, scene, ob, &need_mapping);
if (!ob->derivedDeform ||
((dataMask & ob->lastDataMask) != dataMask) ||
@@ -2906,7 +2912,7 @@ DerivedMesh *editbmesh_get_derived_cage_and_final(
/* if there's no derived mesh or the last data mask used doesn't include
* the data we need, rebuild the derived mesh
*/
- dataMask |= object_get_datamask(scene, obedit, NULL);
+ dataMask |= object_get_datamask(eval_ctx, scene,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list