[Bf-blender-cvs] [b3a90691703] blender2.8: GPUTexture: Fix problem with glGenerateMipmap

Clément Foucault noreply at git.blender.org
Sat Sep 15 00:11:30 CEST 2018


Commit: b3a90691703c85fdad9e205722ee061f9c9645e8
Author: Clément Foucault
Date:   Sat Sep 15 00:10:27 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBb3a90691703c85fdad9e205722ee061f9c9645e8

GPUTexture: Fix problem with glGenerateMipmap

Fix T56789: There was issue with certain driver with glGenerateMipmap and
GPU_DEPTH_COMPONENT24.
In this case we just create a complete texture with mipmaps manually
without downsampling / initializing the data.

===================================================================

M	source/blender/gpu/intern/gpu_texture.c

===================================================================

diff --git a/source/blender/gpu/intern/gpu_texture.c b/source/blender/gpu/intern/gpu_texture.c
index 3e4a57c8f64..0ef1700b348 100644
--- a/source/blender/gpu/intern/gpu_texture.c
+++ b/source/blender/gpu/intern/gpu_texture.c
@@ -1226,7 +1226,21 @@ void GPU_texture_generate_mipmap(GPUTexture *tex)
 	WARN_NOT_BOUND(tex);
 
 	glActiveTexture(GL_TEXTURE0 + tex->number);
-	glGenerateMipmap(tex->target_base);
+
+	if (GPU_texture_depth(tex)) {
+		/* Some drivers have bugs when using glGenerateMipmap with depth textures (see T56789).
+		 * In this case we just create a complete texture with mipmaps manually without downsampling.
+		 * You must initialize the texture levels using other methods like GPU_framebuffer_recursive_downsample(). */
+		int levels = 1 + floor(log2(max_ii(tex->w, tex->h)));
+		GPUDataFormat data_format = gpu_get_data_format_from_tex_format(tex->format);
+		for (int i = 1; i < levels; ++i) {
+			GPU_texture_add_mipmap(tex, data_format, i, NULL);
+		}
+		glBindTexture(tex->target, tex->bindcode);
+	}
+	else {
+		glGenerateMipmap(tex->target_base);
+	}
 }
 
 void GPU_texture_compare_mode(GPUTexture *tex, bool use_compare)



More information about the Bf-blender-cvs mailing list