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
path: root/source
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2013-05-13 17:32:42 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2013-05-13 17:32:42 +0400
commit2914d152411cc1dda353f0806d0f579e9c471730 (patch)
treef8fb08b3c3fc875eb5f84cc90f8d2ea43c434ed0 /source
parent51c615e1bc40cccea21be332fad5c236d00cff9c (diff)
Fix #35337: sculpt performance regression, partial redraw was not working anymore
due to paint cursor redraw problem.
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/screen/area.c8
-rw-r--r--source/blender/editors/sculpt_paint/paint_stroke.c3
-rw-r--r--source/blender/windowmanager/WM_api.h2
-rw-r--r--source/blender/windowmanager/intern/wm_draw.c6
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c3
5 files changed, 19 insertions, 3 deletions
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index 188340e70a3..749fa40a76c 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -454,6 +454,14 @@ void ED_region_do_draw(bContext *C, ARegion *ar)
ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_PIXEL);
+ /* for debugging unneeded area redraws and partial redraw */
+#if 0
+ glEnable(GL_BLEND);
+ glColor4f(drand48(), drand48(), drand48(), 0.1f);
+ glRectf(ar->drawrct.xmin - 1, ar->drawrct.ymin - 1, ar->drawrct.xmax + 1, ar->drawrct.ymax + 1);
+ glDisable(GL_BLEND);
+#endif
+
ar->do_draw = FALSE;
memset(&ar->drawrct, 0, sizeof(ar->drawrct));
diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c
index 945fa14d613..95cbc4b78b4 100644
--- a/source/blender/editors/sculpt_paint/paint_stroke.c
+++ b/source/blender/editors/sculpt_paint/paint_stroke.c
@@ -255,6 +255,7 @@ static void paint_brush_update(bContext *C, Brush *brush, PaintMode mode,
static void paint_brush_stroke_add_step(bContext *C, wmOperator *op, const wmEvent *event, const float mouse_in[2])
{
Scene *scene = CTX_data_scene(C);
+ wmWindow *window = CTX_wm_window(C);
ARegion *ar = CTX_wm_region(C);
Paint *paint = BKE_paint_get_active_from_context(C);
PaintMode mode = BKE_paintmode_get_active_from_context(C);
@@ -328,7 +329,7 @@ static void paint_brush_stroke_add_step(bContext *C, wmOperator *op, const wmEve
/* always redraw region if brush is shown */
if (ar && (paint->flags & PAINT_SHOW_BRUSH))
- ED_region_tag_redraw(ar);
+ WM_paint_cursor_tag_redraw(window, ar);
}
/* Returns zero if no sculpt changes should be made, non-zero otherwise */
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 166aef48ec7..cfa914091f1 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -63,6 +63,7 @@ struct wmDropBox;
struct wmDrag;
struct ImBuf;
struct ImageFormatData;
+struct ARegion;
typedef struct wmJob wmJob;
@@ -130,6 +131,7 @@ void *WM_paint_cursor_activate(struct wmWindowManager *wm,
void *customdata);
void WM_paint_cursor_end(struct wmWindowManager *wm, void *handle);
+void WM_paint_cursor_tag_redraw(struct wmWindow *win, struct ARegion *ar);
void WM_cursor_warp (struct wmWindow *win, int x, int y);
float WM_cursor_pressure (const struct wmWindow *win);
diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c
index 005d02647a4..438004b5d76 100644
--- a/source/blender/windowmanager/intern/wm_draw.c
+++ b/source/blender/windowmanager/intern/wm_draw.c
@@ -798,6 +798,12 @@ void wm_tag_redraw_overlay(wmWindow *win, ARegion *ar)
}
}
+void WM_paint_cursor_tag_redraw(wmWindow *win, ARegion *ar)
+{
+ win->screen->do_draw_paintcursor = TRUE;
+ wm_tag_redraw_overlay(win, ar);
+}
+
void wm_draw_update(bContext *C)
{
wmWindowManager *wm = CTX_wm_manager(C);
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index f79ac1c9083..89dc6ccc038 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -2002,8 +2002,7 @@ static void wm_paintcursor_tag(bContext *C, wmPaintCursor *pc, ARegion *ar)
for (; pc; pc = pc->next) {
if (pc->poll == NULL || pc->poll(C)) {
wmWindow *win = CTX_wm_window(C);
- win->screen->do_draw_paintcursor = TRUE;
- wm_tag_redraw_overlay(win, ar);
+ WM_paint_cursor_tag_redraw(win, ar);
}
}
}