-/* 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;
typedef struct {
GLXContext *glx_context;
+ GLfloat anisotropic;
rotator *rot;
trackball_state *trackball;
Bool button_down_p;
if (wire)
image_loaded_cb (0, 0, 0, 0, 0, 0, frame);
else
- load_texture_async (mi->xgwa.screen, mi->window, *ss->glx_context,
- (MI_WIDTH(mi) / 2) - 1,
- (MI_HEIGHT(mi) / 2) - 1,
- mipmap_p, frame->loading.texid,
- image_loaded_cb, frame);
+ {
+ int w = (MI_WIDTH(mi) / 2) - 1;
+ int h = (MI_HEIGHT(mi) / 2) - 1;
+ if (w <= 10) w = 10;
+ if (h <= 10) h = 10;
+ load_texture_async (mi->xgwa.screen, mi->window, *ss->glx_context, w, h,
+ mipmap_p, frame->loading.texid,
+ image_loaded_cb, frame);
+ }
}
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);
}
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);
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);