From 96eab0875597bad3e0470f67cb2ba8269cd06b03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Wed, 3 Jun 2020 16:23:13 +0200 Subject: DRW: Always unbind texture after drawing This fix issues with the image editor --- source/blender/draw/intern/draw_manager_exec.c | 6 +++++- source/blender/gpu/intern/gpu_texture.c | 27 ++++++++++++-------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c index 9cb4ffc99b0..144ce573460 100644 --- a/source/blender/draw/intern/draw_manager_exec.c +++ b/source/blender/draw/intern/draw_manager_exec.c @@ -1109,7 +1109,11 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state) if (shader_changed) { if (DST.shader) { GPU_shader_unbind(); - GPU_texture_unbind_all(); + + /* Unbinding can be costly. Skip in normal condition. */ + if (G.debug & G_DEBUG_GPU) { + GPU_texture_unbind_all(); + } } GPU_shader_bind(shgroup->shader); DST.shader = shgroup->shader; diff --git a/source/blender/gpu/intern/gpu_texture.c b/source/blender/gpu/intern/gpu_texture.c index 1e5f7d753b2..1d870ed2fdc 100644 --- a/source/blender/gpu/intern/gpu_texture.c +++ b/source/blender/gpu/intern/gpu_texture.c @@ -1771,22 +1771,19 @@ void GPU_texture_unbind(GPUTexture *tex) void GPU_texture_unbind_all(void) { - /* Unbinding can be costly. Skip in normal condition. */ - if (G.debug & G_DEBUG_GPU) { - for (int i = 0; i < GPU_max_textures(); i++) { - glActiveTexture(GL_TEXTURE0 + i); - glBindTexture(GL_TEXTURE_2D, 0); - glBindTexture(GL_TEXTURE_2D_ARRAY, 0); - glBindTexture(GL_TEXTURE_1D, 0); - glBindTexture(GL_TEXTURE_1D_ARRAY, 0); - glBindTexture(GL_TEXTURE_3D, 0); - glBindTexture(GL_TEXTURE_CUBE_MAP, 0); - glBindTexture(GL_TEXTURE_BUFFER, 0); - if (GPU_arb_texture_cube_map_array_is_supported()) { - glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY_ARB, 0); - } - glBindSampler(i, 0); + for (int i = 0; i < GPU_max_textures(); i++) { + glActiveTexture(GL_TEXTURE0 + i); + glBindTexture(GL_TEXTURE_2D, 0); + glBindTexture(GL_TEXTURE_2D_ARRAY, 0); + glBindTexture(GL_TEXTURE_1D, 0); + glBindTexture(GL_TEXTURE_1D_ARRAY, 0); + glBindTexture(GL_TEXTURE_3D, 0); + glBindTexture(GL_TEXTURE_CUBE_MAP, 0); + glBindTexture(GL_TEXTURE_BUFFER, 0); + if (GPU_arb_texture_cube_map_array_is_supported()) { + glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY_ARB, 0); } + glBindSampler(i, 0); } } -- cgit v1.2.3