[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