From http://www.jwz.org/xscreensaver/xscreensaver-5.16.tar.gz
[xscreensaver] / hacks / glx / stairs.c
index 9381f6fadae7246c78943d50e2e4ef1cb367e78e..0bd61c2e62ac0ee19bfe7372e1e2cacf52fe83d8 100644 (file)
@@ -68,7 +68,13 @@ static const char sccsid[] = "@(#)stairs.c   4.07 97/11/24 xlockmore";
 
 #ifdef USE_GL
 
+#if 0
 #include "e_textures.h"
+#else
+#include "xpm-ximage.h"
+#include "../images/wood.xpm"
+#endif
+
 #include "sphere.h"
 #include "gltrackball.h"
 
@@ -387,9 +393,9 @@ stairs_handle_event (ModeInfo *mi, XEvent *event)
 
 
 static void
-pinit(void)
+pinit(ModeInfo *mi)
 {
-    int status;
+  /* int status; */
        glClearDepth(1.0);
        glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
        glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
@@ -413,6 +419,7 @@ pinit(void)
 
        glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
 
+#if 0
     clear_gl_error();
     status = gluBuild2DMipmaps(GL_TEXTURE_2D, 3,
                                WoodTextureWidth, WoodTextureHeight,
@@ -426,6 +433,22 @@ pinit(void)
         exit (1);
       }
     check_gl_error("mipmapping");
+#else
+    {
+      XImage *img = xpm_to_ximage (mi->dpy,
+                                   mi->xgwa.visual,
+                                   mi->xgwa.colormap,
+                                   wood_texture);
+         glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA,
+                    img->width, img->height, 0,
+                    GL_RGBA,
+                    /* GL_UNSIGNED_BYTE, */
+                    GL_UNSIGNED_INT_8_8_8_8_REV,
+                    img->data);
+      check_gl_error("texture");
+      XDestroyImage (img);
+    }
+#endif
 
        glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
@@ -461,7 +484,7 @@ init_stairs (ModeInfo * mi)
                glDrawBuffer(GL_BACK);
                if (!glIsList(sp->objects))
                        sp->objects = glGenLists(1);
-               pinit();
+               pinit(mi);
        } else {
                MI_CLEARWINDOW(mi);
        }
@@ -495,6 +518,7 @@ draw_stairs (ModeInfo * mi)
        }
 
     gltrackball_rotate (sp->trackball);
+    glRotatef(current_device_rotation(), 0, 0, 1);
 
     glTranslatef(0, 0.5, 0);
        glRotatef(44.5, 1, 0, 0);