[Bf-blender-cvs] [fe2ff3fc893] blender2.8: GPUTexture: Support for nearest sampling with mipmaps.

Clément Foucault noreply at git.blender.org
Thu Jun 22 04:01:03 CEST 2017


Commit: fe2ff3fc89332ddf8374b72e2f05f3f7015f8cbd
Author: Clément Foucault
Date:   Thu Jun 22 01:53:51 2017 +0200
Branches: blender2.8
https://developer.blender.org/rBfe2ff3fc89332ddf8374b72e2f05f3f7015f8cbd

GPUTexture: Support for nearest sampling with mipmaps.

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

M	source/blender/draw/intern/draw_manager.c
M	source/blender/gpu/GPU_texture.h
M	source/blender/gpu/intern/gpu_texture.c

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

diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 6d41893e50e..d01f7f5823e 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -390,11 +390,13 @@ static void drw_texture_get_format(DRWTextureFormat format, GPUTextureFormat *da
 static void drw_texture_set_parameters(GPUTexture *tex, DRWTextureFlag flags)
 {
 	GPU_texture_bind(tex, 0);
-	GPU_texture_filter_mode(tex, flags & DRW_TEX_FILTER);
 	if (flags & DRW_TEX_MIPMAP) {
-		GPU_texture_mipmap_mode(tex, true);
+		GPU_texture_mipmap_mode(tex, true, flags & DRW_TEX_FILTER);
 		DRW_texture_generate_mipmaps(tex);
 	}
+	else {
+		GPU_texture_filter_mode(tex, flags & DRW_TEX_FILTER);
+	}
 	GPU_texture_wrap_mode(tex, flags & DRW_TEX_WRAP);
 	GPU_texture_compare_mode(tex, flags & DRW_TEX_COMPARE);
 	GPU_texture_unbind(tex);
diff --git a/source/blender/gpu/GPU_texture.h b/source/blender/gpu/GPU_texture.h
index 01390760beb..6d6c195c175 100644
--- a/source/blender/gpu/GPU_texture.h
+++ b/source/blender/gpu/GPU_texture.h
@@ -181,7 +181,7 @@ int GPU_texture_bound_number(GPUTexture *tex);
 void GPU_texture_generate_mipmap(GPUTexture *tex);
 void GPU_texture_compare_mode(GPUTexture *tex, bool use_compare);
 void GPU_texture_filter_mode(GPUTexture *tex, bool use_filter);
-void GPU_texture_mipmap_mode(GPUTexture *tex, bool use_mipmap);
+void GPU_texture_mipmap_mode(GPUTexture *tex, bool use_mipmap, bool use_filter);
 void GPU_texture_wrap_mode(GPUTexture *tex, bool use_repeat);
 
 struct GPUFrameBuffer *GPU_texture_framebuffer(GPUTexture *tex);
diff --git a/source/blender/gpu/intern/gpu_texture.c b/source/blender/gpu/intern/gpu_texture.c
index 3ac1571bf82..a8d0dccb896 100644
--- a/source/blender/gpu/intern/gpu_texture.c
+++ b/source/blender/gpu/intern/gpu_texture.c
@@ -856,7 +856,7 @@ void GPU_texture_filter_mode(GPUTexture *tex, bool use_filter)
 		glActiveTexture(GL_TEXTURE0);
 }
 
-void GPU_texture_mipmap_mode(GPUTexture *tex, bool use_mipmap)
+void GPU_texture_mipmap_mode(GPUTexture *tex, bool use_mipmap, bool use_filter)
 {
 	if (tex->number >= GPU_max_textures()) {
 		fprintf(stderr, "Not enough texture slots.\n");
@@ -869,7 +869,9 @@ void GPU_texture_mipmap_mode(GPUTexture *tex, bool use_mipmap)
 	if (tex->number != 0)
 		glActiveTexture(GL_TEXTURE0 + tex->number);
 
-	GLenum mipmap = use_mipmap ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR;
+	GLenum mipmap = (use_filter)
+	       ? use_mipmap ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR
+	       : use_mipmap ? GL_NEAREST_MIPMAP_LINEAR : GL_NEAREST;
 	glTexParameteri(tex->target_base, GL_TEXTURE_MIN_FILTER, mipmap);
 
 	if (tex->number != 0)




More information about the Bf-blender-cvs mailing list