forked from bartvdbraak/blender
Fix #35337: sculpt performance regression, partial redraw was not working anymore
due to paint cursor redraw problem.
This commit is contained in:
parent
51c615e1bc
commit
2914d15241
@ -454,6 +454,14 @@ void ED_region_do_draw(bContext *C, ARegion *ar)
|
|||||||
|
|
||||||
ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_PIXEL);
|
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;
|
ar->do_draw = FALSE;
|
||||||
memset(&ar->drawrct, 0, sizeof(ar->drawrct));
|
memset(&ar->drawrct, 0, sizeof(ar->drawrct));
|
||||||
|
|
||||||
|
@ -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])
|
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);
|
Scene *scene = CTX_data_scene(C);
|
||||||
|
wmWindow *window = CTX_wm_window(C);
|
||||||
ARegion *ar = CTX_wm_region(C);
|
ARegion *ar = CTX_wm_region(C);
|
||||||
Paint *paint = BKE_paint_get_active_from_context(C);
|
Paint *paint = BKE_paint_get_active_from_context(C);
|
||||||
PaintMode mode = BKE_paintmode_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 */
|
/* always redraw region if brush is shown */
|
||||||
if (ar && (paint->flags & PAINT_SHOW_BRUSH))
|
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 */
|
/* Returns zero if no sculpt changes should be made, non-zero otherwise */
|
||||||
|
@ -63,6 +63,7 @@ struct wmDropBox;
|
|||||||
struct wmDrag;
|
struct wmDrag;
|
||||||
struct ImBuf;
|
struct ImBuf;
|
||||||
struct ImageFormatData;
|
struct ImageFormatData;
|
||||||
|
struct ARegion;
|
||||||
|
|
||||||
typedef struct wmJob wmJob;
|
typedef struct wmJob wmJob;
|
||||||
|
|
||||||
@ -130,6 +131,7 @@ void *WM_paint_cursor_activate(struct wmWindowManager *wm,
|
|||||||
void *customdata);
|
void *customdata);
|
||||||
|
|
||||||
void WM_paint_cursor_end(struct wmWindowManager *wm, void *handle);
|
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);
|
void WM_cursor_warp (struct wmWindow *win, int x, int y);
|
||||||
float WM_cursor_pressure (const struct wmWindow *win);
|
float WM_cursor_pressure (const struct wmWindow *win);
|
||||||
|
@ -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)
|
void wm_draw_update(bContext *C)
|
||||||
{
|
{
|
||||||
wmWindowManager *wm = CTX_wm_manager(C);
|
wmWindowManager *wm = CTX_wm_manager(C);
|
||||||
|
@ -2002,8 +2002,7 @@ static void wm_paintcursor_tag(bContext *C, wmPaintCursor *pc, ARegion *ar)
|
|||||||
for (; pc; pc = pc->next) {
|
for (; pc; pc = pc->next) {
|
||||||
if (pc->poll == NULL || pc->poll(C)) {
|
if (pc->poll == NULL || pc->poll(C)) {
|
||||||
wmWindow *win = CTX_wm_window(C);
|
wmWindow *win = CTX_wm_window(C);
|
||||||
win->screen->do_draw_paintcursor = TRUE;
|
WM_paint_cursor_tag_redraw(win, ar);
|
||||||
wm_tag_redraw_overlay(win, ar);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user