diff options
author | Peter Kim <pk15950@gmail.com> | 2022-02-11 14:51:27 +0300 |
---|---|---|
committer | Peter Kim <pk15950@gmail.com> | 2022-02-11 14:51:27 +0300 |
commit | 2d231f837a48933c0e819cdc6e78d977152bdd69 (patch) | |
tree | 9d0b9c0bd9fe2d2724af866ace830d74d13090cf /source/blender/gpu | |
parent | fd98241cb80c63ed0b3515cb4976ad786d7540c8 (diff) | |
parent | 675f38aca7073234a2ce0b36597d95f8a153ef7c (diff) |
Merge branch 'blender-v3.1-release'
Diffstat (limited to 'source/blender/gpu')
-rw-r--r-- | source/blender/gpu/GPU_viewport.h | 4 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_viewport.c | 12 |
2 files changed, 13 insertions, 3 deletions
diff --git a/source/blender/gpu/GPU_viewport.h b/source/blender/gpu/GPU_viewport.h index daf817adbe8..be989635f84 100644 --- a/source/blender/gpu/GPU_viewport.h +++ b/source/blender/gpu/GPU_viewport.h @@ -63,7 +63,9 @@ void GPU_viewport_colorspace_set(GPUViewport *viewport, /** * Should be called from DRW after DRW_opengl_context_enable. */ -void GPU_viewport_bind_from_offscreen(GPUViewport *viewport, struct GPUOffScreen *ofs); +void GPU_viewport_bind_from_offscreen(GPUViewport *viewport, + struct GPUOffScreen *ofs, + bool is_xr_surface); /** * Clear vars assigned from offscreen, so we don't free data owned by `GPUOffScreen`. */ diff --git a/source/blender/gpu/intern/gpu_viewport.c b/source/blender/gpu/intern/gpu_viewport.c index d910153e912..fd4a87bc544 100644 --- a/source/blender/gpu/intern/gpu_viewport.c +++ b/source/blender/gpu/intern/gpu_viewport.c @@ -183,7 +183,9 @@ void GPU_viewport_bind(GPUViewport *viewport, int view, const rcti *rect) viewport->active_view = view; } -void GPU_viewport_bind_from_offscreen(GPUViewport *viewport, struct GPUOffScreen *ofs) +void GPU_viewport_bind_from_offscreen(GPUViewport *viewport, + struct GPUOffScreen *ofs, + bool is_xr_surface) { GPUTexture *color, *depth; GPUFrameBuffer *fb; @@ -192,7 +194,13 @@ void GPU_viewport_bind_from_offscreen(GPUViewport *viewport, struct GPUOffScreen GPU_offscreen_viewport_data_get(ofs, &fb, &color, &depth); - gpu_viewport_textures_free(viewport); + /* XR surfaces will already check for texture size changes and free if necessary (see + * #wm_xr_session_surface_offscreen_ensure()), so don't free here as it has a significant + * performance impact (leads to texture re-creation in #gpu_viewport_textures_create() every VR + * drawing iteration).*/ + if (!is_xr_surface) { + gpu_viewport_textures_free(viewport); + } /* This is the only texture we can share. */ viewport->depth_tx = depth; |