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 <campbell@blender.org>2022-03-07 14:32:06 +0300
committerCampbell Barton <campbell@blender.org>2022-03-07 14:32:46 +0300
commit548eabbaa14fb6bcdc927333b7d912eea0c61a59 (patch)
tree7a0a76c85498136459a7233026d9d258878360cf /source/blender/windowmanager
parent638c0bd2341708a652b4dd211e6f1e7358cb6dca (diff)
Revert "Revert "Fix Crash: Switching to wireframe mode.""
This reverts commit 25fc5876d3bb37018adcfe1a1b943b90d45f5f9a. Committed this unintentionally, looking into an alternate fix.
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r--source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
index 4b802ae3a0a..f1ac19f4651 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
@@ -580,6 +580,14 @@ static int gizmo_find_intersected_3d_intern(wmGizmo **visible_gizmos,
/* Fast-path (occlusion queries). */
GPU_SELECT_ALL);
+ /* When switching between modes and the mouse pointer is over a gizmo, the highlight test is
+ * performed before the viewport is fully initialized (region->draw_buffer = NULL).
+ * When this is the case we should not use depth testing. */
+ GPUViewport *gpu_viewport = WM_draw_region_get_viewport(region);
+ if (use_depth_test && gpu_viewport == NULL) {
+ return -1;
+ }
+
if (GPU_select_is_cached()) {
GPU_select_begin(buffer, ARRAY_SIZE(buffer), &rect, gpu_select_mode, 0);
GPU_select_cache_load_id();
@@ -597,8 +605,7 @@ static int gizmo_find_intersected_3d_intern(wmGizmo **visible_gizmos,
* because all future passes the will use the cached depths. */
GPUFrameBuffer *depth_read_fb = NULL;
if (use_depth_test) {
- GPUViewport *viewport = WM_draw_region_get_viewport(CTX_wm_region(C));
- GPUTexture *depth_tx = GPU_viewport_depth_texture(viewport);
+ GPUTexture *depth_tx = GPU_viewport_depth_texture(gpu_viewport);
GPU_framebuffer_ensure_config(&depth_read_fb,
{
GPU_ATTACHMENT_TEXTURE(depth_tx),