projects
/
xscreensaver
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
http://www.jwz.org/xscreensaver/xscreensaver-5.13.tar.gz
[xscreensaver]
/
hacks
/
glx
/
carousel.c
diff --git
a/hacks/glx/carousel.c
b/hacks/glx/carousel.c
index bc9dfb655bfce299b540b71abacc716e03a946c9..9b512646e2fcf0d5154d6ebcab2d4f1823563f99 100644
(file)
--- a/
hacks/glx/carousel.c
+++ b/
hacks/glx/carousel.c
@@
-1,4
+1,4
@@
-/* carousel, Copyright (c) 2005-20
06
Jamie Zawinski <jwz@jwz.org>
+/* carousel, Copyright (c) 2005-20
11
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
* Loads a sequence of images and rotates them around.
*
* Permission to use, copy, modify, distribute, and sell this software and its
@@
-12,7
+12,7
@@
* Created: 21-Feb-2005
*/
* Created: 21-Feb-2005
*/
-#define DEF_FONT "-*-
times
-bold-r-normal-*-240-*"
+#define DEF_FONT "-*-
helvetica
-bold-r-normal-*-240-*"
#define DEFAULTS "*count: 7 \n" \
"*delay: 10000 \n" \
"*wireframe: False \n" \
#define DEFAULTS "*count: 7 \n" \
"*delay: 10000 \n" \
"*wireframe: False \n" \
@@
-50,6
+50,14
@@
# include <X11/Intrinsic.h> /* for XrmDatabase in -debug mode */
# endif
# 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 {
double x, y, w, h;
} rect;
@@
-80,6
+88,7
@@
typedef struct {
typedef struct {
GLXContext *glx_context;
typedef struct {
GLXContext *glx_context;
+ GLfloat anisotropic;
rotator *rot;
trackball_state *trackball;
Bool button_down_p;
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);
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);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
@@
-272,11
+285,15
@@
image_loaded_cb (const char *filename, XRectangle *geom,
free (frame->loading.title);
frame->loading.title = (filename ? strdup (filename) : 0);
free (frame->loading.title);
frame->loading.title = (filename ? strdup (filename) : 0);
+# if 0 /* xscreensaver-getimage returns paths relative to the image directory
+ now, so leave the sub-directory part in.
+ */
if (frame->loading.title) /* strip filename to part after last /. */
{
char *s = strrchr (frame->loading.title, '/');
if (s) strcpy (frame->loading.title, s+1);
}
if (frame->loading.title) /* strip filename to part after last /. */
{
char *s = strrchr (frame->loading.title, '/');
if (s) strcpy (frame->loading.title, s+1);
}
+# endif /* 0 */
if (debug_p)
fprintf (stderr, "%s: loaded %4d x %-4d %4d x %-4d \"%s\"\n",
if (debug_p)
fprintf (stderr, "%s: loaded %4d x %-4d %4d x %-4d \"%s\"\n",
@@
-435,7
+452,9
@@
carousel_handle_event (ModeInfo *mi, XEvent *event)
}
else if (event->xany.type == ButtonPress &&
(event->xbutton.button == Button4 ||
}
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);
{
gltrackball_mousewheel (ss->trackball, event->xbutton.button, 5,
!event->xbutton.state);
@@
-481,7
+500,6
@@
loading_msg (ModeInfo *mi, int n)
carousel_state *ss = &sss[MI_SCREEN(mi)];
int wire = MI_IS_WIREFRAME(mi);
char text[100];
carousel_state *ss = &sss[MI_SCREEN(mi)];
int wire = MI_IS_WIREFRAME(mi);
char text[100];
- GLfloat scale;
if (wire) return;
if (wire) return;
@@
-494,8
+512,6
@@
loading_msg (ModeInfo *mi, int n)
if (ss->loading_sw == 0) /* only do this once, so that the string doesn't move. */
ss->loading_sw = texture_string_width (ss->texfont, text, &ss->loading_sh);
if (ss->loading_sw == 0) /* only do this once, so that the string doesn't move. */
ss->loading_sw = texture_string_width (ss->texfont, text, &ss->loading_sh);
- scale = ss->loading_sh / (GLfloat) MI_HEIGHT(mi);
-
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
@@
-543,6
+559,7
@@
init_carousel (ModeInfo *mi)
if ((ss->glx_context = init_GL(mi)) != NULL) {
reshape_carousel (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
if ((ss->glx_context = init_GL(mi)) != NULL) {
reshape_carousel (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+ clear_gl_error(); /* WTF? sometimes "invalid op" from glViewport! */
} else {
MI_CLEARWINDOW(mi);
}
} else {
MI_CLEARWINDOW(mi);
}
@@
-578,6
+595,12
@@
init_carousel (ModeInfo *mi)
ss->trackball = gltrackball_init ();
}
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);
glDisable (GL_LIGHTING);
glEnable (GL_DEPTH_TEST);
glDisable (GL_CULL_FACE);