[Bf-blender-cvs] [eda0ebc7b3d] blender2.8: GPUTexture: Add Mipmap Control functions.

Clément Foucault noreply at git.blender.org
Tue Apr 18 13:28:00 CEST 2017


Commit: eda0ebc7b3d3d2a4716bbb19881a0f0e35a56235
Author: Clément Foucault
Date:   Tue Apr 18 11:21:17 2017 +0200
Branches: blender2.8
https://developer.blender.org/rBeda0ebc7b3d3d2a4716bbb19881a0f0e35a56235

GPUTexture: Add Mipmap Control functions.

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

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

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

diff --git a/source/blender/gpu/GPU_texture.h b/source/blender/gpu/GPU_texture.h
index cbfab98cfbf..755ddcc07f5 100644
--- a/source/blender/gpu/GPU_texture.h
+++ b/source/blender/gpu/GPU_texture.h
@@ -176,8 +176,10 @@ void GPU_texture_bind(GPUTexture *tex, int number);
 void GPU_texture_unbind(GPUTexture *tex);
 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_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 6af238aaff4..525a2b3d5dc 100644
--- a/source/blender/gpu/intern/gpu_texture.c
+++ b/source/blender/gpu/intern/gpu_texture.c
@@ -722,6 +722,25 @@ int GPU_texture_bound_number(GPUTexture *tex)
 	return tex->number;
 }
 
+void GPU_texture_generate_mipmap(GPUTexture *tex)
+{
+	if (tex->number >= GPU_max_textures()) {
+		fprintf(stderr, "Not enough texture slots.\n");
+		return;
+	}
+
+	if (tex->number == -1)
+		return;
+
+	if (tex->number != 0)
+		glActiveTexture(GL_TEXTURE0 + tex->number);
+
+	glGenerateMipmap(tex->target_base);
+
+	if (tex->number != 0)
+		glActiveTexture(GL_TEXTURE0);
+}
+
 void GPU_texture_compare_mode(GPUTexture *tex, bool use_compare)
 {
 	if (tex->number >= GPU_max_textures()) {
@@ -764,6 +783,26 @@ void GPU_texture_filter_mode(GPUTexture *tex, bool use_filter)
 		glActiveTexture(GL_TEXTURE0);
 }
 
+void GPU_texture_mipmap_mode(GPUTexture *tex, bool use_mipmap)
+{
+	if (tex->number >= GPU_max_textures()) {
+		fprintf(stderr, "Not enough texture slots.\n");
+		return;
+	}
+
+	if (tex->number == -1)
+		return;
+
+	if (tex->number != 0)
+		glActiveTexture(GL_TEXTURE0 + tex->number);
+
+	GLenum mipmap = use_mipmap ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR;
+	glTexParameteri(tex->target_base, GL_TEXTURE_MIN_FILTER, mipmap);
+
+	if (tex->number != 0)
+		glActiveTexture(GL_TEXTURE0);
+}
+
 void GPU_texture_wrap_mode(GPUTexture *tex, bool use_repeat)
 {
 	if (tex->number >= GPU_max_textures()) {




More information about the Bf-blender-cvs mailing list