summaryrefslogtreecommitdiff
path: root/progs/demos/teapot.c
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2010-05-21 09:32:38 -0700
committerEric Anholt <eric@anholt.net>2010-05-21 12:20:39 -0700
commit68fc4b415e322f6744299e39864fbc377c6eff74 (patch)
tree4bafffd8b0105174f3c5c0ae327a005be9145990 /progs/demos/teapot.c
parente4f4489e3fc0b36d72821b55794fb843b2b7fa5f (diff)
Remove demos that have moved to git+ssh://git.freedesktop.org/git/mesa/demos.
The remaining programs are ones I've had difficulty finding a build environment for to make the build system or are unit tests that should probably live next to their code instead. Hopefully people can bring over the build for remaining pieces they care about.
Diffstat (limited to 'progs/demos/teapot.c')
-rw-r--r--progs/demos/teapot.c685
1 files changed, 0 insertions, 685 deletions
diff --git a/progs/demos/teapot.c b/progs/demos/teapot.c
deleted file mode 100644
index 04a675f36e..0000000000
--- a/progs/demos/teapot.c
+++ /dev/null
@@ -1,685 +0,0 @@
-/*
- * This program is under the GNU GPL.
- * Use at your own risk.
- *
- * written by David Bucciarelli (tech.hmw@plus.it)
- * Humanware s.r.l.
- */
-
-#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 "readtex.h"
-
-#ifdef XMESA
-#include "GL/xmesa.h"
-static int fullscreen=1;
-#endif
-
-static int WIDTH=640;
-static int HEIGHT=480;
-
-static GLint T0 = 0;
-static GLint Frames = 0;
-
-#define BASESIZE 10.0
-
-#define BASERES 12
-#define TEAPOTRES 3
-
-#ifndef M_PI
-#define M_PI 3.1415926535
-#endif
-
-extern void shadowmatrix(GLfloat [4][4], GLfloat [4], GLfloat [4]);
-extern void findplane(GLfloat [4], GLfloat [3], GLfloat [3], GLfloat [3]);
-
-
-static int win=0;
-
-static float obs[3]={5.0,0.0,1.0};
-static float dir[3];
-static float v=0.0;
-static float alpha=-90.0;
-static float beta=90.0;
-
-static GLfloat baseshadow[4][4];
-static GLfloat lightpos[4]={2.3,0.0,3.0,1.0};
-static GLfloat lightdir[3]={-2.3,0.0,-3.0};
-static GLfloat lightalpha=0.0;
-
-static int fog=1;
-static int bfcull=1;
-static int usetex=1;
-static int help=1;
-static int joyavailable=0;
-static int joyactive=0;
-
-static GLuint t1id,t2id;
-static GLuint teapotdlist,basedlist,lightdlist;
-
-
-
-/******************** begin shadow code ********************/
-
-/* Taken from the projshadow.c - by Tom McReynolds, SGI */
-
-/* Modified by David Bucciarelli */
-
-enum {
- X, Y, Z, W
-};
-enum {
- A, B, C, D
-};
-
-/* create a matrix that will project the desired shadow */
-void
-shadowmatrix(GLfloat shadowMat[4][4],
- GLfloat groundplane[4],
- GLfloat lightpos[4])
-{
- GLfloat dot;
-
- /* find dot product between light position vector and ground plane normal */
- dot = groundplane[X] * lightpos[X] +
- groundplane[Y] * lightpos[Y] +
- groundplane[Z] * lightpos[Z] +
- groundplane[W] * lightpos[W];
-
- shadowMat[0][0] = dot - lightpos[X] * groundplane[X];
- shadowMat[1][0] = 0.f - lightpos[X] * groundplane[Y];
- shadowMat[2][0] = 0.f - lightpos[X] * groundplane[Z];
- shadowMat[3][0] = 0.f - lightpos[X] * groundplane[W];
-
- shadowMat[X][1] = 0.f - lightpos[Y] * groundplane[X];
- shadowMat[1][1] = dot - lightpos[Y] * groundplane[Y];
- shadowMat[2][1] = 0.f - lightpos[Y] * groundplane[Z];
- shadowMat[3][1] = 0.f - lightpos[Y] * groundplane[W];
-
- shadowMat[X][2] = 0.f - lightpos[Z] * groundplane[X];
- shadowMat[1][2] = 0.f - lightpos[Z] * groundplane[Y];
- shadowMat[2][2] = dot - lightpos[Z] * groundplane[Z];
- shadowMat[3][2] = 0.f - lightpos[Z] * groundplane[W];
-
- shadowMat[X][3] = 0.f - lightpos[W] * groundplane[X];
- shadowMat[1][3] = 0.f - lightpos[W] * groundplane[Y];
- shadowMat[2][3] = 0.f - lightpos[W] * groundplane[Z];
- shadowMat[3][3] = dot - lightpos[W] * groundplane[W];
-
-}
-
-/* find the plane equation given 3 points */
-void
-findplane(GLfloat plane[4],
- GLfloat v0[3], GLfloat v1[3], GLfloat v2[3])
-{
- GLfloat vec0[3], vec1[3];
-
- /* need 2 vectors to find cross product */
- vec0[X] = v1[X] - v0[X];
- vec0[Y] = v1[Y] - v0[Y];
- vec0[Z] = v1[Z] - v0[Z];
-
- vec1[X] = v2[X] - v0[X];
- vec1[Y] = v2[Y] - v0[Y];
- vec1[Z] = v2[Z] - v0[Z];
-
- /* find cross product to get A, B, and C of plane equation */
- plane[A] = vec0[Y] * vec1[Z] - vec0[Z] * vec1[Y];
- plane[B] = -(vec0[X] * vec1[Z] - vec0[Z] * vec1[X]);
- plane[C] = vec0[X] * vec1[Y] - vec0[Y] * vec1[X];
-
- plane[D] = -(plane[A] * v0[X] + plane[B] * v0[Y] + plane[C] * v0[Z]);
-}
-
-/******************** end shadow code ********************/
-
-
-static void calcposobs(void)
-{
- 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];
-}
-
-static void special(int k, int x, int y)
-{
- switch(k) {
- case GLUT_KEY_LEFT:
- alpha-=2.0;
- break;
- case GLUT_KEY_RIGHT:
- alpha+=2.0;
- break;
- case GLUT_KEY_DOWN:
- beta-=2.0;
- break;
- case GLUT_KEY_UP:
- beta+=2.0;
- break;
- }
-}
-
-static void cleanup(void)
-{
- glDeleteTextures(1, &t1id);
- glDeleteTextures(1, &t2id);
- glDeleteLists(teapotdlist, 1);
- glDeleteLists(basedlist, 1);
- glDeleteLists(lightdlist, 1);
-}
-
-static void key(unsigned char k, int x, int y)
-{
- switch(k) {
- case 27:
- cleanup();
- exit(0);
- break;
-
- case 'a':
- v+=0.005;
- break;
- case 'z':
- v-=0.005;
- break;
-
- case 'j':
- joyactive=(!joyactive);
- break;
- case 'h':
- help=(!help);
- break;
- case 'f':
- fog=(!fog);
- break;
- case 't':
- usetex=(!usetex);
- break;
- case 'b':
- if(bfcull) {
- glDisable(GL_CULL_FACE);
- bfcull=0;
- } else {
- glEnable(GL_CULL_FACE);
- bfcull=1;
- }
- break;
-#ifdef XMESA
- case ' ':
- XMesaSetFXmode(fullscreen ? XMESA_FX_FULLSCREEN : XMESA_FX_WINDOW);
- fullscreen=(!fullscreen);
- break;
-#endif
- }
-}
-
-static void reshape(int w, int h)
-{
- WIDTH=w;
- HEIGHT=h;
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(45.0,w/(float)h,0.2,40.0);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glViewport(0,0,w,h);
-}
-
-static void printstring(void *font, char *string)
-{
- int len,i;
-
- len=(int)strlen(string);
- for(i=0;i<len;i++)
- glutBitmapCharacter(font,string[i]);
-}
-
-static void printhelp(void)
-{
- glEnable(GL_BLEND);
- glColor4f(0.5,0.5,0.5,0.5);
- glRecti(40,40,600,440);
- glDisable(GL_BLEND);
-
- glColor3f(1.0,0.0,0.0);
- glRasterPos2i(300,420);
- printstring(GLUT_BITMAP_TIMES_ROMAN_24,"Help");
-
- glRasterPos2i(60,390);
- printstring(GLUT_BITMAP_TIMES_ROMAN_24,"h - Toggle Help");
- glRasterPos2i(60,360);
- printstring(GLUT_BITMAP_TIMES_ROMAN_24,"t - Toggle Textures");
- glRasterPos2i(60,330);
- printstring(GLUT_BITMAP_TIMES_ROMAN_24,"f - Toggle Fog");
- glRasterPos2i(60,300);
- printstring(GLUT_BITMAP_TIMES_ROMAN_24,"b - Toggle Back face culling");
- glRasterPos2i(60,270);
- printstring(GLUT_BITMAP_TIMES_ROMAN_24,"Arrow Keys - Rotate");
- glRasterPos2i(60,240);
- printstring(GLUT_BITMAP_TIMES_ROMAN_24,"a - Increase velocity");
- glRasterPos2i(60,210);
- printstring(GLUT_BITMAP_TIMES_ROMAN_24,"z - Decrease velocity");
-
- glRasterPos2i(60,180);
- if(joyavailable)
- printstring(GLUT_BITMAP_TIMES_ROMAN_24,"j - Toggle jostick control (Joystick control available)");
- else
- printstring(GLUT_BITMAP_TIMES_ROMAN_24,"(No Joystick control available)");
-}
-
-static void drawbase(void)
-{
- static const GLfloat amb[4] = { 1, .5, 0.2, 1 };
- static const GLfloat diff[4] = { 1, .4, 0.2, 1 };
- int i,j;
- float x,y,dx,dy;
-
- glBindTexture(GL_TEXTURE_2D,t1id);
-
- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, amb);
- glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff);
- dx=BASESIZE/BASERES;
- dy=-BASESIZE/BASERES;
- for(y=BASESIZE/2.0,j=0;j<BASERES;y+=dy,j++) {
- glBegin(GL_QUAD_STRIP);
- glColor3f(1.0,1.0,1.0);
- glNormal3f(0.0,0.0,1.0);
- for(x=-BASESIZE/2.0,i=0;i<BASERES;x+=dx,i++) {
- glTexCoord2f(x,y);
- glVertex3f(x,y,0.0);
-
- glTexCoord2f(x,y+dy);
- glVertex3f(x,y+dy,0.0);
- }
- glEnd();
- }
-}
-
-static void drawteapot(void)
-{
- static const GLfloat amb[4] = { 0.2, 0.2, 0.2, 1 };
- static const GLfloat diff[4] = { 0.8, 0.3, 0.5, 1 };
- static float xrot=0.0;
- static float zrot=0.0;
-
- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, amb);
- glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff);
-
- glPushMatrix();
- glRotatef(lightalpha,0.0,0.0,1.0);
- glMultMatrixf((GLfloat *)baseshadow);
- glRotatef(-lightalpha,0.0,0.0,1.0);
-
- glTranslatef(0.0,0.0,1.0);
- glRotatef(xrot,1.0,0.0,0.0);
- glRotatef(zrot,0.0,0.0,1.0);
-
- glDisable(GL_TEXTURE_2D);
- glDisable(GL_DEPTH_TEST);
- glDisable(GL_LIGHTING);
-
- glColor3f(0.0,0.0,0.0);
- glCallList(teapotdlist);
-
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_LIGHTING);
- if(usetex)
- glEnable(GL_TEXTURE_2D);
-
- glPopMatrix();
-
- glPushMatrix();
- glTranslatef(0.0,0.0,1.0);
- glRotatef(xrot,1.0,0.0,0.0);
- glRotatef(zrot,0.0,0.0,1.0);
-
- glCallList(teapotdlist);
- glPopMatrix();
-
- xrot+=2.0;
- zrot+=1.0;
-}
-
-static void drawlight1(void)
-{
- glPushMatrix();
- glRotatef(lightalpha,0.0,0.0,1.0);
- glLightfv(GL_LIGHT0,GL_POSITION,lightpos);
- glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,lightdir);
-
- glPopMatrix();
-}
-
-static void drawlight2(void)
-{
- glPushMatrix();
- glRotatef(lightalpha,0.0,0.0,1.0);
- glTranslatef(lightpos[0],lightpos[1],lightpos[2]);
-
- glDisable(GL_TEXTURE_2D);
- glCallList(lightdlist);
- if(usetex)
- glEnable(GL_TEXTURE_2D);
-
- glPopMatrix();
-
- lightalpha+=1.0;
-}
-
-static void dojoy(void)
-{
-#ifdef WIN32
- static UINT max[2]={0,0};
- static UINT min[2]={0xffffffff,0xffffffff},center[2];
- MMRESULT res;
- JOYINFO joy;
-
- res=joyGetPos(JOYSTICKID1,&joy);
-
- if(res==JOYERR_NOERROR) {
- joyavailable=1;
-
- if(max[0]<joy.wXpos)
- max[0]=joy.wXpos;
- if(min[0]>joy.wXpos)
- min[0]=joy.wXpos;
- center[0]=(max[0]+min[0])/2;
-
- if(max[1]<joy.wYpos)
- max[1]=joy.wYpos;
- if(min[1]>joy.wYpos)
- min[1]=joy.wYpos;
- center[1]=(max[1]+min[1])/2;
-
- if(joyactive) {
- if(fabs(center[0]-(float)joy.wXpos)>0.1*(max[0]-min[0]))
- alpha-=2.5*(center[0]-(float)joy.wXpos)/(max[0]-min[0]);
- if(fabs(center[1]-(float)joy.wYpos)>0.1*(max[1]-min[1]))
- beta+=2.5*(center[1]-(float)joy.wYpos)/(max[1]-min[1]);
-
- if(joy.wButtons & JOY_BUTTON1)
- v+=0.005;
- if(joy.wButtons & JOY_BUTTON2)
- v-=0.005;
- }
- } else
- joyavailable=0;
-#endif
-}
-
-static void draw(void)
-{
- static char frbuf[80] = "";
-
- dojoy();
-
- glEnable(GL_DEPTH_TEST);
- glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
-
- if(usetex)
- glEnable(GL_TEXTURE_2D);
- else
- glDisable(GL_TEXTURE_2D);
-
- if(fog)
- glEnable(GL_FOG);
- else
- glDisable(GL_FOG);
-
- glEnable(GL_LIGHTING);
-
- glShadeModel(GL_SMOOTH);
-
- glPushMatrix();
- calcposobs();
-
- gluLookAt(obs[0],obs[1],obs[2],
- obs[0]+dir[0],obs[1]+dir[1],obs[2]+dir[2],
- 0.0,0.0,1.0);
-
- drawlight1();
- glCallList(basedlist);
- drawteapot();
- drawlight2();
- glPopMatrix();
-
- glDisable(GL_LIGHTING);
- glDisable(GL_TEXTURE_2D);
- glDisable(GL_DEPTH_TEST);
- glDisable(GL_FOG);
- glShadeModel(GL_FLAT);
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(-0.5,639.5,-0.5,479.5,-1.0,1.0);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-
- glColor3f(1.0,0.0,0.0);
- glRasterPos2i(10,10);
- printstring(GLUT_BITMAP_HELVETICA_18,frbuf);
- glRasterPos2i(350,470);
- printstring(GLUT_BITMAP_HELVETICA_10,"Teapot V1.2 Written by David Bucciarelli (tech.hmw@plus.it)");
-
- if(help)
- printhelp();
-
- reshape(WIDTH,HEIGHT);
-
- glutSwapBuffers();
-
- Frames++;
-
- {
- GLint t = glutGet(GLUT_ELAPSED_TIME);
- if (t - T0 >= 2000) {
- GLfloat seconds = (t - T0) / 1000.0;
- GLfloat fps = Frames / seconds;
- sprintf(frbuf, "Frame rate: %f", fps);
- T0 = t;
- Frames = 0;
- }
- }
-}
-
-static void inittextures(void)
-{
- glGenTextures(1,&t1id);
- glBindTexture(GL_TEXTURE_2D,t1id);
-
- glPixelStorei(GL_UNPACK_ALIGNMENT,4);
- if (!LoadRGBMipmaps("../images/tile.rgb", GL_RGB)) {
- fprintf(stderr,"Error reading a texture.\n");
- exit(-1);
- }
-
- glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
- glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
-
- glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);
- glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
-
- glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);
-
- glGenTextures(1,&t2id);
- glBindTexture(GL_TEXTURE_2D,t2id);
-
- glPixelTransferf(GL_RED_SCALE, 0.75);
- glPixelTransferf(GL_RED_BIAS, 0.25);
- glPixelTransferf(GL_GREEN_SCALE, 0.75);
- glPixelTransferf(GL_GREEN_BIAS, 0.25);
- glPixelTransferf(GL_BLUE_SCALE, 0.75);
- glPixelTransferf(GL_BLUE_BIAS, 0.25);
-
- if (!LoadRGBMipmaps("../images/bw.rgb", GL_RGB)) {
- fprintf(stderr,"Error reading a texture.\n");
- exit(-1);
- }
-
- glPixelTransferf(GL_RED_SCALE, 1.0);
- glPixelTransferf(GL_RED_BIAS, 0.0);
- glPixelTransferf(GL_GREEN_SCALE, 1.0);
- glPixelTransferf(GL_GREEN_BIAS, 0.0);
- glPixelTransferf(GL_BLUE_SCALE, 1.0);
- glPixelTransferf(GL_BLUE_BIAS, 0.0);
-
-
- glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
- glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
-
- glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,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 initlight(void)
-{
- float matamb[4] ={0.5, 0.5, 0.5, 1.0};
- float matdiff[4]={0.9, 0.2, 0.2, 1.0};
- float matspec[4]={1.0,1.0,1.0,1.0};
-
- float lamb[4] ={1.5, 1.5, 1.5, 1.0};
- float ldiff[4]={1.0, 1.0, 1.0, 1.0};
- float lspec[4]={1.0, 1.0, 1.0, 1.0};
-
- glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,70.0);
- glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,20.0);
- glLightfv(GL_LIGHT0,GL_AMBIENT,lamb);
- glLightfv(GL_LIGHT0,GL_DIFFUSE,ldiff);
- glLightfv(GL_LIGHT0,GL_SPECULAR,lspec);
-
- glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 15.0);
- glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, matdiff);
- glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, matspec);
- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, matamb);
-
- glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lamb);
- glEnable(GL_LIGHT0);
-}
-
-static void initdlists(void)
-{
- GLUquadricObj *lcone,*lbase;
- GLfloat plane[4];
- GLfloat v0[3]={0.0,0.0,0.0};
- GLfloat v1[3]={1.0,0.0,0.0};
- GLfloat v2[3]={0.0,1.0,0.0};
-
- findplane(plane,v0,v1,v2);
- shadowmatrix(baseshadow,plane,lightpos);
-
- teapotdlist=glGenLists(1);
- glNewList(teapotdlist,GL_COMPILE);
- glRotatef(90.0,1.0,0.0,0.0);
- glCullFace(GL_FRONT);
- glBindTexture(GL_TEXTURE_2D,t2id);
- glutSolidTeapot(0.75);
- glCullFace(GL_BACK);
- glEndList();
-
- basedlist=glGenLists(1);
- glNewList(basedlist,GL_COMPILE);
- drawbase();
- glEndList();
-
- lightdlist=glGenLists(1);
- glNewList(lightdlist,GL_COMPILE);
- glDisable(GL_LIGHTING);
-
- lcone=gluNewQuadric();
- lbase=gluNewQuadric();
- glRotatef(45.0,0.0,1.0,0.0);
-
- glColor3f(1.0,1.0,1.0);
- glCullFace(GL_FRONT);
- gluDisk(lbase,0.0,0.2,12.0,1.0);
- glCullFace(GL_BACK);
-
- glColor3f(0.5,0.0,0.0);
- gluCylinder(lcone,0.2,0.0,0.5,12,1);
-
- gluDeleteQuadric(lcone);
- gluDeleteQuadric(lbase);
-
- glEnable(GL_LIGHTING);
- glEndList();
-}
-
-int main(int ac, char **av)
-{
- float fogcolor[4]={0.025,0.025,0.025,1.0};
-
- fprintf(stderr,"Teapot V1.2\nWritten by David Bucciarelli (tech.hmw@plus.it)\n");
-
- /*
- if(!SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS)) {
- fprintf(stderr,"Error setting the process class.\n");
- return 0;
- }
-
- if(!SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL)) {
- fprintf(stderr,"Error setting the process priority.\n");
- return 0;
- }
- */
-
- glutInitWindowSize(WIDTH,HEIGHT);
- glutInit(&ac,av);
-
- glutInitDisplayMode(GLUT_RGB|GLUT_DEPTH|GLUT_DOUBLE);
-
- if(!(win=glutCreateWindow("Teapot"))) {
- fprintf(stderr,"Error, couldn't open window\n");
- return -1;
- }
-
- reshape(WIDTH,HEIGHT);
-
- glShadeModel(GL_SMOOTH);
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_CULL_FACE);
- glEnable(GL_TEXTURE_2D);
-
- glEnable(GL_FOG);
- glFogi(GL_FOG_MODE,GL_EXP2);
- glFogfv(GL_FOG_COLOR,fogcolor);
-
- glFogf(GL_FOG_DENSITY,0.04);
- glHint(GL_FOG_HINT,GL_NICEST);
- glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
-
- calcposobs();
-
- inittextures();
- initlight();
-
- initdlists();
-
- glClearColor(fogcolor[0],fogcolor[1],fogcolor[2],fogcolor[3]);
-
- glutReshapeFunc(reshape);
- glutDisplayFunc(draw);
- glutKeyboardFunc(key);
- glutSpecialFunc(special);
- glutIdleFunc(draw);
-
- glutMainLoop();
- cleanup();
-
- return 0;
-}