[compiz] [PATCH] Always use mipmaps in cube plugin

Bartosz Taudul wolf.pld at gmail.com
Wed Jun 27 15:50:44 PDT 2007


On Wed, Jun 27, 2007 at 04:11:32PM +0200, dragoran wrote:
> I think he was talking about the anisotropic filtering patch ;)
Here they are. The compiz-anisotropic patch adds support for anisotropic
filtering to the core and the compiz-cube-anisotropic patch exposes that
functionality in cube plugin.

wolf
-- 
  Bartek   .  
  Taudul   :  
          .:....................................................................
w o l f @ p l d - l i n u x . o r g            .:. http://wolf.valkyrie.one.pl/
-------------- next part --------------
diff -ruN compiz./include/compiz.h compiz/include/compiz.h
--- compiz./include/compiz.h	2007-06-09 22:11:05.000000000 +0200
+++ compiz/include/compiz.h	2007-06-27 23:35:09.429822645 +0200
@@ -885,7 +885,8 @@
     unsigned int      lastPing;
     CompTimeoutHandle pingHandle;
 
-    GLenum textureFilter;
+    GLenum       textureFilter;
+    unsigned int textureAnisotropic;
 
     Window activeWindow;
 
@@ -1865,6 +1866,8 @@
     int		      fbo;
     int		      fragmentProgram;
     int		      maxTextureUnits;
+    Bool              anisotropicFiltering;
+    int               maxAnisotropy;
     Cursor	      invisibleCursor;
     XRectangle        *exposeRects;
     int		      sizeExpose;
diff -ruN compiz./src/display.c compiz/src/display.c
--- compiz./src/display.c	2007-06-09 22:11:05.000000000 +0200
+++ compiz/src/display.c	2007-06-27 23:36:41.415789608 +0200
@@ -1971,8 +1971,9 @@
 
     d->dirtyPluginList = TRUE;
 
-    d->textureFilter = GL_LINEAR;
-    d->below	     = None;
+    d->textureFilter      = GL_LINEAR;
+    d->below	          = None;
+    d->textureAnisotropic = FALSE;
 
     d->activeWindow = 0;
 
diff -ruN compiz./src/screen.c compiz/src/screen.c
--- compiz./src/screen.c	2007-06-09 22:11:05.000000000 +0200
+++ compiz/src/screen.c	2007-06-27 23:40:05.384672877 +0200
@@ -1861,6 +1861,13 @@
 	    s->fbo = 1;
     }
 
+    s->anisotropicFiltering = FALSE;
+    if (strstr (glExtensions, "GL_EXT_texture_filter_anisotropic"))
+    {
+        glGetIntegerv (GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &s->maxAnisotropy);
+        s->anisotropicFiltering = TRUE;
+    }
+
     fbConfigs = (*s->getFBConfigs) (dpy,
 				    screenNum,
 				    &nElements);
diff -ruN compiz./src/texture.c compiz/src/texture.c
--- compiz./src/texture.c	2007-06-09 22:11:05.000000000 +0200
+++ compiz/src/texture.c	2007-06-27 23:46:43.823888475 +0200
@@ -465,6 +465,23 @@
 	    texture->oldMipmaps = FALSE;
 	}
     }
+
+    if (screen->display->textureAnisotropic)
+    {
+        glTexParameteri (texture->target,
+                         GL_TEXTURE_MAX_ANISOTROPY_EXT,
+                         screen->maxAnisotropy);
+    }
+    else
+    {
+        if (screen->anisotropicFiltering)	/* may be not supported */
+        {
+            /* disable anisotropic filtering */
+            glTexParameteri (texture->target,
+                             GL_TEXTURE_MAX_ANISOTROPY_EXT,
+                             1);
+        }
+    }
 }
 
 void
-------------- next part --------------
diff -ruN compiz./include/cube.h compiz/include/cube.h
--- compiz./include/cube.h	2007-06-22 16:17:02.000000000 +0200
+++ compiz/include/cube.h	2007-06-28 00:06:10.145958731 +0200
@@ -59,7 +59,8 @@
 #define CUBE_SCREEN_OPTION_INACTIVE_OPACITY        16
 #define CUBE_SCREEN_OPTION_FADE_TIME               17
 #define CUBE_SCREEN_OPTION_TRANSPARENT_MANUAL_ONLY 18
-#define CUBE_SCREEN_OPTION_NUM                     19
+#define CUBE_SCREEN_OPTION_ANISOTROPIC             19
+#define CUBE_SCREEN_OPTION_NUM                     20
 
 typedef void (*CubeGetRotationProc) (CompScreen *s,
 				     float      *x,
diff -ruN compiz./metadata/cube.xml.in compiz/metadata/cube.xml.in
--- compiz./metadata/cube.xml.in	2007-06-22 16:17:02.000000000 +0200
+++ compiz/metadata/cube.xml.in	2007-06-28 00:02:15.681727720 +0200
@@ -124,6 +124,11 @@
 		<_long>Generate mipmaps when possible for higher quality scaling</_long>
 		<default>true</default>
 	    </option>
+	    <option name="anisotropic" type="bool">
+		<_short>Anisotropic Filtering</_short>
+                <_long>Use anisotropic filtering to enhance cube sides at steep angles</_long>
+	        <default>true</default>
+	    </option>
 	    <option name="backgrounds" type="list">
 		<_short>Background Images</_short>
 		<_long>Background images</_long>
diff -ruN compiz./plugins/cube.c compiz/plugins/cube.c
--- compiz./plugins/cube.c	2007-06-27 01:21:28.000000000 +0200
+++ compiz/plugins/cube.c	2007-06-28 00:13:49.575869817 +0200
@@ -1335,6 +1335,7 @@
     int		      hsize, xMove = 0;
     float	      size;
     GLenum            filter = s->display->textureFilter;
+    Bool              anisotropic = s->display->textureAnisotropic;
     PaintOrder        paintOrder;
     Bool	      clear;
     Bool              wasCulled = FALSE;
@@ -1437,6 +1438,10 @@
     if (cs->opt[CUBE_SCREEN_OPTION_MIPMAP].value.b)
 	s->display->textureFilter = GL_LINEAR_MIPMAP_LINEAR;
 
+    /* anisotropic filtering is not needed for unfolded cube */
+    if (!cs->grabIndex && cs->opt[CUBE_SCREEN_OPTION_ANISOTROPIC].value.b)
+	s->display->textureAnisotropic = TRUE;
+
     if (cs->invert == 1)
     {
 	/* Outside cube - start with FTB faces */
@@ -1519,6 +1524,7 @@
 			       size, hsize, paintOrder);
 
     s->display->textureFilter = filter;
+    s->display->textureAnisotropic = anisotropic;
 
     if (wasCulled)
 	glEnable (GL_CULL_FACE);
@@ -2033,7 +2039,8 @@
     { "active_opacity", "float", "<min>0.0</min><max>100.0</max>", 0, 0 },
     { "inactive_opacity", "float", "<min>0.0</min><max>100.0</max>", 0, 0 },
     { "fade_time", "float", "<min>0.0</min>", 0, 0 },
-    { "transparent_manual_only", "bool", 0, 0, 0 }
+    { "transparent_manual_only", "bool", 0, 0, 0 },
+    { "anisotropic", "bool", 0, 0, 0 }
 };
 
 static Bool


More information about the compiz mailing list