[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17034] trunk/blender/source/blender/gpu/ intern/gpu_draw.c: Fix for opengl errors being thrown when creating textures, it was

Brecht Van Lommel brecht at blender.org
Sun Oct 12 02:41:28 CEST 2008


Revision: 17034
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17034
Author:   blendix
Date:     2008-10-12 02:41:28 +0200 (Sun, 12 Oct 2008)

Log Message:
-----------
Fix for opengl errors being thrown when creating textures, it was
setting the magnification to GL_LINEAR_MIPMAP_NEAREST but that is
only valid for minifaction, should be GL_LINEAR instead. OpenGL
driver should refuse setting this so should be harmless, but better
to fix it anyway.

Modified Paths:
--------------
    trunk/blender/source/blender/gpu/intern/gpu_draw.c

Modified: trunk/blender/source/blender/gpu/intern/gpu_draw.c
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_draw.c	2008-10-12 00:13:25 UTC (rev 17033)
+++ trunk/blender/source/blender/gpu/intern/gpu_draw.c	2008-10-12 00:41:28 UTC (rev 17034)
@@ -220,12 +220,24 @@
 	return GTS.domipmap && (!(G.f & G_TEXTUREPAINT));
 }
 
-static GLenum gpu_get_mipmap_filter()
+static GLenum gpu_get_mipmap_filter(int mag)
 {
-	/* linearmipmap is off by default
-	 * when mipmapping is off, use unfiltered display */
-	return GTS.linearmipmap? GL_LINEAR_MIPMAP_LINEAR :
-				(GTS.domipmap ? GL_LINEAR_MIPMAP_NEAREST : GL_NEAREST);
+	/* linearmipmap is off by default *when mipmapping is off,
+	 * use unfiltered display */
+	if(mag) {
+		if(GTS.linearmipmap || GTS.domipmap)
+			return GL_LINEAR;
+		else
+			return GL_NEAREST;
+	}
+	else {
+		if(GTS.linearmipmap)
+			return GL_LINEAR_MIPMAP_LINEAR;
+		else if(GTS.domipmap)
+			return GL_LINEAR_MIPMAP_NEAREST;
+		else
+			return GL_NEAREST;
+	}
 }
 
 /* Set OpenGL state for an MTFace */
@@ -479,12 +491,12 @@
 	if (!gpu_get_mipmap()) {
 		glTexImage2D(GL_TEXTURE_2D, 0,  GL_RGBA,  rectw, recth, 0, GL_RGBA, GL_UNSIGNED_BYTE, rect);
 		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gpu_get_mipmap_filter());
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gpu_get_mipmap_filter(1));
 	}
 	else {
 		gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, rectw, recth, GL_RGBA, GL_UNSIGNED_BYTE, rect);
-		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gpu_get_mipmap_filter());
-		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gpu_get_mipmap_filter());
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gpu_get_mipmap_filter(0));
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gpu_get_mipmap_filter(1));
 
 		ima->tpageflag |= IMA_MIPMAP_COMPLETE;
 	}
@@ -576,8 +588,8 @@
 			if(ima->bindcode) {
 				if(ima->tpageflag & IMA_MIPMAP_COMPLETE) {
 					glBindTexture(GL_TEXTURE_2D, ima->bindcode);
-					glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gpu_get_mipmap_filter());
-					glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gpu_get_mipmap_filter());
+					glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gpu_get_mipmap_filter(0));
+					glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gpu_get_mipmap_filter(1));
 				}
 				else
 					GPU_free_image(ima);
@@ -590,7 +602,7 @@
 			if(ima->bindcode) {
 				glBindTexture(GL_TEXTURE_2D, ima->bindcode);
 				glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-				glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gpu_get_mipmap_filter());
+				glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gpu_get_mipmap_filter(1));
 			}
 		}
 	}





More information about the Bf-blender-cvs mailing list