Merge branch 'mesa_7_5_branch'
[mesa.git] / progs / demos / tunnel2.c
index e82c2c604dc0fdac89849b8c73a6cbf4a7af26cc..0288ea0f8ceaede6de5f4e5aee1d99f825ec1a55 100644 (file)
 #include <stdio.h>
 #include <stdlib.h>
 #include <math.h>
-#include <time.h>
+#include <string.h>
 
 #ifdef WIN32
 #include <windows.h>
 #endif
 
 #include <GL/glut.h>
-#include "../util/readtex.c"
-#include "tunneldat.c"
+#include "readtex.h"
+#include "tunneldat.h"
 
 #ifdef FX
 #endif
@@ -31,7 +31,7 @@ static int fullscreen = 1;
 #endif
 
 #ifdef FX
-GLboolean fxMesaSelectCurrentBoard(int);
+GLint fxMesaSelectCurrentBoard(int);
 #endif
 
 static int WIDTHC0 = 640;
@@ -49,26 +49,13 @@ static GLint Frames = 0;
 #define M_PI 3.1415926535
 #endif
 
-extern int striplength_skin_13[];
-extern float stripdata_skin_13[];
-
-extern int striplength_skin_12[];
-extern float stripdata_skin_12[];
-
-extern int striplength_skin_11[];
-extern float stripdata_skin_11[];
-
-extern int striplength_skin_9[];
-extern float stripdata_skin_9[];
-
-
 static float obs[3] = { 1000.0, 0.0, 2.0 };
 static float dir[3];
-static float v = 0.5;
+static float v = 30.;
 static float alpha = 90.0;
 static float beta = 90.0;
 
-static int fog = 0;
+static int fog = 1;
 static int bfcull = 1;
 static int usetex = 1;
 static int cstrip = 0;
@@ -110,14 +97,14 @@ inittextures(void)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
-                  GL_LINEAR_MIPMAP_NEAREST);
+                  GL_LINEAR_MIPMAP_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
 
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
 }
 
 static void
-drawobjs(int *l, float *f)
+drawobjs(const int *l, const float *f)
 {
    int mend, j;
 
@@ -171,13 +158,27 @@ drawobjs(int *l, float *f)
 static void
 calcposobs(void)
 {
+   static double t0 = -1.;
+   double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
+   if (t0 < 0.0)
+      t0 = t;
+   dt = t - t0;
+   t0 = t;
+
    dir[0] = sin(alpha * M_PI / 180.0);
    dir[1] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0);
    dir[2] = cos(beta * M_PI / 180.0);
 
-   obs[0] += v * dir[0];
-   obs[1] += v * dir[1];
-   obs[2] += v * dir[2];
+   if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5)
+      dir[0] = 0;
+   if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5)
+      dir[1] = 0;
+   if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5)
+      dir[2] = 0;
+
+   obs[0] += v * dir[0] * dt;
+   obs[1] += v * dir[1] * dt;
+   obs[2] += v * dir[2] * dt;
 }
 
 static void
@@ -199,19 +200,29 @@ special(int k, int x, int y)
    }
 }
 
+static void
+cleanup(void)
+{
+   glDeleteTextures(1, &t1id);
+   glDeleteTextures(1, &t2id);
+}
+
 static void
 key(unsigned char k, int x, int y)
 {
    switch (k) {
    case 27:
+      glutDestroyWindow(channel[0]);
+      glutDestroyWindow(channel[1]);
+      cleanup();
       exit(0);
       break;
 
    case 'a':
-      v += 0.01;
+      v += 5.;
       break;
    case 'z':
-      v -= 0.01;
+      v -= 5.;
       break;
 
 #ifdef XMESA
@@ -323,15 +334,15 @@ printhelp(void)
    printstring(GLUT_BITMAP_TIMES_ROMAN_24, "Help");
 
    glRasterPos2i(60, 390);
-   printstring(GLUT_BITMAP_TIMES_ROMAN_24, "h - Togle Help");
+   printstring(GLUT_BITMAP_TIMES_ROMAN_24, "h - Toggle Help");
    glRasterPos2i(60, 360);
-   printstring(GLUT_BITMAP_TIMES_ROMAN_24, "t - Togle Textures");
+   printstring(GLUT_BITMAP_TIMES_ROMAN_24, "t - Toggle Textures");
    glRasterPos2i(60, 330);
-   printstring(GLUT_BITMAP_TIMES_ROMAN_24, "f - Togle Fog");
+   printstring(GLUT_BITMAP_TIMES_ROMAN_24, "f - Toggle Fog");
    glRasterPos2i(60, 300);
-   printstring(GLUT_BITMAP_TIMES_ROMAN_24, "m - Togle strips");
+   printstring(GLUT_BITMAP_TIMES_ROMAN_24, "m - Toggle strips");
    glRasterPos2i(60, 270);
-   printstring(GLUT_BITMAP_TIMES_ROMAN_24, "b - Togle Back face culling");
+   printstring(GLUT_BITMAP_TIMES_ROMAN_24, "b - Toggle Back face culling");
    glRasterPos2i(60, 240);
    printstring(GLUT_BITMAP_TIMES_ROMAN_24, "Arrow Keys - Rotate");
    glRasterPos2i(60, 210);
@@ -342,7 +353,7 @@ printhelp(void)
    glRasterPos2i(60, 150);
    if (joyavailable)
       printstring(GLUT_BITMAP_TIMES_ROMAN_24,
-                 "j - Togle jostick control (Joystick control available)");
+                 "j - Toggle jostick control (Joystick control available)");
    else
       printstring(GLUT_BITMAP_TIMES_ROMAN_24,
                  "(No Joystick control available)");
@@ -547,8 +558,6 @@ main(int ac, char **av)
 {
    fprintf(stderr,
           "Tunnel2 V1.0\nWritten by David Bucciarelli (tech.hmw@plus.it)\n");
-   fprintf(stderr,
-          "You need TWO Voodoo Graphics boards in order to run this demo !\n");
 
    glutInitWindowPosition(0, 0);
    glutInitWindowSize(WIDTHC0, HEIGHTC0);
@@ -557,7 +566,7 @@ main(int ac, char **av)
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
 
 #ifdef FX
-   if (!fxMesaSelectCurrentBoard(0)) {
+   if (fxMesaSelectCurrentBoard(0) < 0) {
       fprintf(stderr, "The first Voodoo Graphics board is missing !?!?\n");
       return -1;
    }
@@ -576,7 +585,7 @@ main(int ac, char **av)
    glutSpecialFunc(special);
 
 #ifdef FX
-   if (!fxMesaSelectCurrentBoard(1)) {
+   if (fxMesaSelectCurrentBoard(1) < 0) {
       fprintf(stderr, "The second Voodoo Graphics board is missing !\n");
       exit(-1);
    }
@@ -601,6 +610,7 @@ main(int ac, char **av)
    calcposobs();
 
    glutMainLoop();
+   cleanup();
 
    return 0;
 }