http://ftp.nluug.nl/pub/os/Linux/distr/pardusrepo/sources/xscreensaver-5.02.tar.gz
[xscreensaver] / hacks / glx / carousel.c
index bc9dfb655bfce299b540b71abacc716e03a946c9..d5de4924a4aa031485d6b5bd02037f59214654c8 100644 (file)
@@ -1,4 +1,4 @@
-/* carousel, Copyright (c) 2005-2006 Jamie Zawinski <jwz@jwz.org>
+/* carousel, Copyright (c) 2005-2007 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);
 
@@ -578,6 +591,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);