From 50b95211bf5263671cc577bd34fbf0ff04381aa8 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 27 Feb 2018 13:33:59 +1100 Subject: [PATCH 1/2] Fix T54106: Save blend ignores 'check_existing' --- source/blender/windowmanager/intern/wm_files.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index 2d72bcf4d58..71d6ec673e6 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -2144,11 +2144,13 @@ static int wm_save_mainfile_invoke(bContext *C, wmOperator *op, const wmEvent *U char path[FILE_MAX]; RNA_string_get(op->ptr, "filepath", path); - if (BLI_exists(path)) { + if (RNA_boolean_get(op->ptr, "check_existing") && BLI_exists(path)) { ret = WM_operator_confirm_message_ex(C, op, IFACE_("Save Over?"), ICON_QUESTION, path); } else { ret = wm_save_as_mainfile_exec(C, op); + /* Without this there is no feedback the file was saved. */ + BKE_reportf(op->reports, RPT_INFO, "Saved \"%s\"", BLI_path_basename(path)); } } else { From 4de50d757233009ccd5db8538fd036a62ce58648 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 27 Feb 2018 20:16:53 +1100 Subject: [PATCH 2/2] GPU_select: utility function to finalize selection Needed for depth picking in 2.8 --- source/blender/gpu/GPU_select.h | 1 + source/blender/gpu/intern/gpu_select.c | 23 +++++++++++++++++++ source/blender/gpu/intern/gpu_select_pick.c | 18 +++++++++++---- .../blender/gpu/intern/gpu_select_private.h | 1 + 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/source/blender/gpu/GPU_select.h b/source/blender/gpu/GPU_select.h index cf5b8bf7d8f..53f480bccd7 100644 --- a/source/blender/gpu/GPU_select.h +++ b/source/blender/gpu/GPU_select.h @@ -47,6 +47,7 @@ enum { void GPU_select_begin(unsigned int *buffer, unsigned int bufsize, const struct rcti *input, char mode, int oldhits); bool GPU_select_load_id(unsigned int id); +void GPU_select_finalize(void); unsigned int GPU_select_end(void); bool GPU_select_query_check_active(void); diff --git a/source/blender/gpu/intern/gpu_select.c b/source/blender/gpu/intern/gpu_select.c index 632b0cfee1b..e2837d96b0f 100644 --- a/source/blender/gpu/intern/gpu_select.c +++ b/source/blender/gpu/intern/gpu_select.c @@ -149,6 +149,29 @@ bool GPU_select_load_id(unsigned int id) } } +/** + * Needed when GL context of #GPU_select_end + * can't be used to finalize selection operations + * (because of context changes). + */ +void GPU_select_finalize(void) +{ + if (!g_select_state.select_is_active) + return; + + switch (g_select_state.algorithm) { + case ALGO_GL_LEGACY: + case ALGO_GL_QUERY: + { + break; + } + default: /* ALGO_GL_PICK */ + { + gpu_select_pick_finalize(); + } + } +} + /** * Cleanup and flush selection results to buffer. * Return number of hits and hits in buffer. diff --git a/source/blender/gpu/intern/gpu_select_pick.c b/source/blender/gpu/intern/gpu_select_pick.c index 0a77420fa25..d7a3ad07558 100644 --- a/source/blender/gpu/intern/gpu_select_pick.c +++ b/source/blender/gpu/intern/gpu_select_pick.c @@ -526,6 +526,19 @@ bool gpu_select_pick_load_id(unsigned int id) return true; } + /** + * (Optional), call before 'gpu_select_pick_end' if GL context is not kept. + * is not compatible with regular select case. + * */ +void gpu_select_pick_finalize(void) +{ + GPUPickState *ps = &g_pick_state; + if (ps->gl.is_init) { + /* force finishing last pass */ + gpu_select_pick_load_id(ps->gl.prev_id); + } +} + unsigned int gpu_select_pick_end(void) { GPUPickState *ps = &g_pick_state; @@ -535,10 +548,7 @@ unsigned int gpu_select_pick_end(void) #endif if (ps->is_cached == false) { - if (ps->gl.is_init) { - /* force finishing last pass */ - gpu_select_pick_load_id(ps->gl.prev_id); - } + gpu_select_pick_finalize(); glPopAttrib(); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); diff --git a/source/blender/gpu/intern/gpu_select_private.h b/source/blender/gpu/intern/gpu_select_private.h index 8935bd7b253..8368aaa9edc 100644 --- a/source/blender/gpu/intern/gpu_select_private.h +++ b/source/blender/gpu/intern/gpu_select_private.h @@ -35,6 +35,7 @@ /* gpu_select_pick */ void gpu_select_pick_begin(unsigned int (*buffer)[4], unsigned int bufsize, const rcti *input, char mode); bool gpu_select_pick_load_id(unsigned int id); +void gpu_select_pick_finalize(void); unsigned int gpu_select_pick_end(void); void gpu_select_pick_cache_begin(void);