http://www.tienza.es/crux/src/www.jwz.org/xscreensaver/xscreensaver-5.05.tar.gz
[xscreensaver] / hacks / glx / carousel.c
index bc9dfb655bfce299b540b71abacc716e03a946c9..464035b5c3260c2ed8c7bbbbda3269cbb61889c0 100644 (file)
@@ -1,4 +1,4 @@
-/* carousel, Copyright (c) 2005-2006 Jamie Zawinski <jwz@jwz.org>
+/* carousel, Copyright (c) 2005-2008 Jamie Zawinski <jwz@jwz.org>
  * Loads a sequence of images and rotates them around.
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
 #  include <X11/Intrinsic.h>     /* for XrmDatabase in -debug mode */
 # endif
 
+/* Should be in <GL/glext.h> */
+# ifndef  GL_TEXTURE_MAX_ANISOTROPY_EXT
+#  define GL_TEXTURE_MAX_ANISOTROPY_EXT     0x84FE
+# endif
+# ifndef  GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT
+#  define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
+# endif
+
 typedef struct {
   double x, y, w, h;
 } rect;
@@ -80,6 +88,7 @@ typedef struct {
 
 typedef struct {
   GLXContext *glx_context;
+  GLfloat anisotropic;
   rotator *rot;
   trackball_state *trackball;
   Bool button_down_p;
@@ -259,6 +268,10 @@ image_loaded_cb (const char *filename, XRectangle *geom,
   glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
                    mipmap_p ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR);
 
+  if (ss->anisotropic >= 1.0)
+    glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 
+                     ss->anisotropic);
+
   glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
   glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
 
@@ -435,7 +448,9 @@ carousel_handle_event (ModeInfo *mi, XEvent *event)
     }
   else if (event->xany.type == ButtonPress &&
            (event->xbutton.button == Button4 ||
-            event->xbutton.button == Button5))
+            event->xbutton.button == Button5 ||
+            event->xbutton.button == Button6 ||
+            event->xbutton.button == Button7))
     {
       gltrackball_mousewheel (ss->trackball, event->xbutton.button, 5,
                               !event->xbutton.state);
@@ -578,6 +593,12 @@ init_carousel (ModeInfo *mi)
     ss->trackball = gltrackball_init ();
   }
 
+  if (strstr ((char *) glGetString(GL_EXTENSIONS),
+              "GL_EXT_texture_filter_anisotropic"))
+    glGetFloatv (GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &ss->anisotropic);
+  else
+    ss->anisotropic = 0.0;
+
   glDisable (GL_LIGHTING);
   glEnable (GL_DEPTH_TEST);
   glDisable (GL_CULL_FACE);