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:
authorCampbell Barton <ideasman42@gmail.com>2018-11-05 08:18:43 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-11-05 08:18:43 +0300
commit1b928c2d9a4b4b4a57046176912e0ae6d77f9a1d (patch)
treec19777cbf0b7108f7440a62eea228355488d29b9 /source/blender/blenkernel/intern/paint.c
parent56917bcf731c6d3568d920a6ccbec524c25aaea1 (diff)
Paint: add tool offset & mode to runtime data
It was getting too impractical to call BKE_paint_brush_tool_info which needed to lookup the scene pointers. Now each store tool offset and brush mode in 'Paint.runtime'
Diffstat (limited to 'source/blender/blenkernel/intern/paint.c')
-rw-r--r--source/blender/blenkernel/intern/paint.c64
1 files changed, 28 insertions, 36 deletions
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index e6ef18efcc9..e2e926736c7 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -302,55 +302,36 @@ void BKE_paint_brush_set(Paint *p, Brush *br)
}
}
-bool BKE_paint_brush_tool_info(
- const Scene *scene, const struct Paint *paint,
- uint *r_tool_offset, eObjectMode *r_ob_mode)
+void BKE_paint_runtime_init(const ToolSettings *ts, Paint *paint)
{
- ToolSettings *ts = scene->toolsettings;
if (paint == &ts->imapaint.paint) {
- if (r_tool_offset != NULL) {
- *r_tool_offset = offsetof(Brush, imagepaint_tool);
- }
- if (r_ob_mode != NULL) {
- *r_ob_mode = OB_MODE_TEXTURE_PAINT;
- }
+ paint->runtime.tool_offset = offsetof(Brush, imagepaint_tool);
+ paint->runtime.ob_mode = OB_MODE_TEXTURE_PAINT;
}
else if (paint == &ts->sculpt->paint) {
- if (r_tool_offset != NULL) {
- *r_tool_offset = offsetof(Brush, sculpt_tool);
- }
- if (r_ob_mode != NULL) {
- *r_ob_mode = OB_MODE_SCULPT;
- }
+ paint->runtime.tool_offset = offsetof(Brush, sculpt_tool);
+ paint->runtime.ob_mode = OB_MODE_SCULPT;
}
else if (paint == &ts->vpaint->paint) {
- if (r_tool_offset != NULL) {
- *r_tool_offset = offsetof(Brush, vertexpaint_tool);
- }
- if (r_ob_mode != NULL) {
- *r_ob_mode = OB_MODE_VERTEX_PAINT;
- }
+ paint->runtime.tool_offset = offsetof(Brush, vertexpaint_tool);
+ paint->runtime.ob_mode = OB_MODE_VERTEX_PAINT;
}
else if (paint == &ts->wpaint->paint) {
- if (r_tool_offset != NULL) {
- *r_tool_offset = offsetof(Brush, vertexpaint_tool);
- }
- if (r_ob_mode != NULL) {
- *r_ob_mode = OB_MODE_WEIGHT_PAINT;
- }
+ paint->runtime.tool_offset = offsetof(Brush, vertexpaint_tool);
+ paint->runtime.ob_mode = OB_MODE_WEIGHT_PAINT;
}
else if (paint == &ts->gp_paint->paint) {
- if (r_tool_offset != NULL) {
- *r_tool_offset = offsetof(Brush, gpencil_tool);
- }
- if (r_ob_mode != NULL) {
- *r_ob_mode = OB_MODE_GPENCIL_PAINT;
- }
+ paint->runtime.tool_offset = offsetof(Brush, gpencil_tool);
+ paint->runtime.ob_mode = OB_MODE_GPENCIL_PAINT;
+ }
+ else if (paint == &ts->uvsculpt->paint) {
+ /* We don't use these yet. */
+ paint->runtime.tool_offset = 0;
+ paint->runtime.ob_mode = 0;
}
else {
- return false;
+ BLI_assert(0);
}
- return true;
}
@@ -585,6 +566,15 @@ bool BKE_paint_ensure(const ToolSettings *ts, struct Paint **r_paint)
&ts->vpaint->paint,
&ts->wpaint->paint,
&ts->uvsculpt->paint));
+
+#ifdef DEBUG
+ struct Paint paint_test = **r_paint;
+ BKE_paint_runtime_init(ts, *r_paint);
+ /* Swap so debug doesn't hide errors when release fails. */
+ SWAP(Paint, **r_paint, paint_test);
+ BLI_assert(paint_test.runtime.ob_mode == (*r_paint)->runtime.ob_mode);
+ BLI_assert(paint_test.runtime.tool_offset == (*r_paint)->runtime.tool_offset);
+#endif
return true;
}
@@ -613,6 +603,8 @@ bool BKE_paint_ensure(const ToolSettings *ts, struct Paint **r_paint)
paint->flags |= PAINT_SHOW_BRUSH;
+ BKE_paint_runtime_init(ts, paint);
+
*r_paint = paint;
return false;
}