diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-05-13 17:32:42 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-05-13 17:32:42 +0400 |
commit | 2914d152411cc1dda353f0806d0f579e9c471730 (patch) | |
tree | f8fb08b3c3fc875eb5f84cc90f8d2ea43c434ed0 | |
parent | 51c615e1bc40cccea21be332fad5c236d00cff9c (diff) |
Fix #35337: sculpt performance regression, partial redraw was not working anymore
due to paint cursor redraw problem.
-rw-r--r-- | source/blender/editors/screen/area.c | 8 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_stroke.c | 3 | ||||
-rw-r--r-- | source/blender/windowmanager/WM_api.h | 2 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_draw.c | 6 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 3 |
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); } } } |