diff options
-rw-r--r-- | libre/mesa-demos-libre/LICENSE | 82 | ||||
-rw-r--r-- | libre/mesa-demos-libre/PKGBUILD | 46 | ||||
-rwxr-xr-x | libre/mesa-demos-libre/mesa-demos-libre.patch | 1192 |
3 files changed, 1320 insertions, 0 deletions
diff --git a/libre/mesa-demos-libre/LICENSE b/libre/mesa-demos-libre/LICENSE new file mode 100644 index 000000000..ae33d2709 --- /dev/null +++ b/libre/mesa-demos-libre/LICENSE @@ -0,0 +1,82 @@ +Disclaimer + +Mesa is a 3-D graphics library with an API which is very similar to +that of OpenGL* +To the extent that Mesa utilizes the OpenGL command syntax or state +machine, it is being used with authorization from Silicon Graphics, +Inc.(SGI). However, the author does not possess an OpenGL license +from SGI, and makes no claim that Mesa is in any way a compatible +replacement for OpenGL or associated with SGI. Those who want a +licensed implementation of OpenGL should contact a licensed +vendor. + +Please do not refer to the library as MesaGL (for legal +reasons). It's just Mesa or The Mesa 3-D graphics +library + +* OpenGL is a trademark of Silicon Graphics Incorporated. + +License / Copyright Information + +The Mesa distribution consists of several components. Different copyrights +and licenses apply to different components. For example, GLUT is copyrighted +by Mark Kilgard, some demo programs are copyrighted by SGI, some of the Mesa +device drivers are copyrighted by their authors. See below for a list of +Mesa's main components and the license for each. + +The core Mesa library is licensed according to the terms of the MIT license. +This allows integration with the XFree86, Xorg and DRI projects. + +The default Mesa license is as follows: + +Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Attention, Contributors + +When contributing to the Mesa project you must agree to the licensing terms +of the component to which you're contributing. +The following section lists the primary components of the Mesa distribution +and their respective licenses. + + +Mesa Component Licenses + +Component Location Primary Author License +---------------------------------------------------------------------------- +Main Mesa code src/mesa/ Brian Paul Mesa (MIT) + +Device drivers src/mesa/drivers/* See drivers See drivers + +Ext headers include/GL/glext.h SGI SGI Free B + include/GL/glxext.h + +GLUT src/glut/ Mark Kilgard Mark's copyright + +Mesa GLU library src/glu/mesa/ Brian Paul GNU-LGPL + +SGI GLU library src/glu/sgi/ SGI SGI Free B + +demo programs progs/demos/ various see source files + +X demos progs/xdemos/ Brian Paul see source files + +SGI demos progs/samples/ SGI SGI copyright + +RedBook demos progs/redbook/ SGI SGI copyright diff --git a/libre/mesa-demos-libre/PKGBUILD b/libre/mesa-demos-libre/PKGBUILD new file mode 100644 index 000000000..46f7a75e8 --- /dev/null +++ b/libre/mesa-demos-libre/PKGBUILD @@ -0,0 +1,46 @@ +# $Id$ +# Maintainer: Joseph Yaworski <jy@dervormund.info> + +pkgname='mesa-demos-libre' +pkgver=8.0.1 +pkgrel=1 +arch=(i686 x86_64) +pkgdesc="Mesa demos and tools, libre" +url="http://mesa3d.sourceforge.net" +license=('custom') +depends=('glew>=1.5.6') +provides=("mesa-demos=$pkgver") +replaces=('mesa-demos') +conflicts=('mesa<7.9', 'mesa-demos') +source=(http://repo.parabolagnulinux.org/other/$pkgname-$pkgver.tar.bz2 + mesa-demos-libre.patch + LICENSE) + +mksource() { + + wget ftp://ftp.freedesktop.org/pub/mesa/demos/${pkgver}/mesa-demos-${pkgver}.tar.bz2 \ + -O - | tar xvf - + + pushd mesa-demos-$pkgver + patch -Np1 -i ../mesa-demos-libre.patch + popd + + tar cjf ${pkgname}-${pkgver}.tar.bz2 mesa-demos-${pkgver}/ + +} + +build() { + cd "${srcdir}/mesa-demos-${pkgver}" + ./configure --prefix=/usr + make +} + +package() { + cd "${srcdir}/mesa-demos-${pkgver}" + make DESTDIR="${pkgdir}" install + install -m755 -d "${pkgdir}/usr/share/licenses/mesa-demos" + install -m755 "${srcdir}/LICENSE" "${pkgdir}/usr/share/licenses/mesa-demos/" +} +md5sums=('665a4ad12bff27ca2b655dd16554d36c' + '1858e95d40ac9e5e0b59753ce9e673e3' + '5c65a0fe315dd347e09b1f2826a1df5a') diff --git a/libre/mesa-demos-libre/mesa-demos-libre.patch b/libre/mesa-demos-libre/mesa-demos-libre.patch new file mode 100755 index 000000000..c5261f8e9 --- /dev/null +++ b/libre/mesa-demos-libre/mesa-demos-libre.patch @@ -0,0 +1,1192 @@ +diff -rauNp Desktop/mesa-demos-8.0.1//src/demos/Makefile.am mesa-demos-8.0.1//src/demos/Makefile.am +--- Desktop/mesa-demos-8.0.1//src/demos/Makefile.am 2010-07-13 14:46:40.000000000 -0400 ++++ mesa-demos-8.0.1/src/demos/Makefile.am 2011-06-04 15:34:18.000000000 -0400 +@@ -62,7 +62,6 @@ bin_PROGRAMS = \ + morph3d \ + multiarb \ + paltex \ +- pointblast \ + projtex \ + ray \ + readpix \ +@@ -71,7 +70,6 @@ bin_PROGRAMS = \ + shadowtex \ + singlebuffer \ + spectex \ +- spriteblast \ + stex3d \ + teapot \ + terrain \ +diff -rauNp Desktop/mesa-demos-8.0.1//src/demos/Makefile.in mesa-demos-8.0.1//src/demos/Makefile.in +--- Desktop/mesa-demos-8.0.1//src/demos/Makefile.in 2010-07-13 14:53:23.000000000 -0400 ++++ mesa-demos-8.0.1/src/demos/Makefile.in 2011-06-04 15:35:32.000000000 -0400 +@@ -73,11 +73,10 @@ host_triplet = @host@ + @HAVE_GLUT_TRUE@ ipers$(EXEEXT) isosurf$(EXEEXT) \ + @HAVE_GLUT_TRUE@ lodbias$(EXEEXT) morph3d$(EXEEXT) \ + @HAVE_GLUT_TRUE@ multiarb$(EXEEXT) paltex$(EXEEXT) \ +-@HAVE_GLUT_TRUE@ pointblast$(EXEEXT) projtex$(EXEEXT) \ +-@HAVE_GLUT_TRUE@ ray$(EXEEXT) readpix$(EXEEXT) reflect$(EXEEXT) \ +-@HAVE_GLUT_TRUE@ renormal$(EXEEXT) shadowtex$(EXEEXT) \ +-@HAVE_GLUT_TRUE@ singlebuffer$(EXEEXT) spectex$(EXEEXT) \ +-@HAVE_GLUT_TRUE@ spriteblast$(EXEEXT) stex3d$(EXEEXT) \ ++@HAVE_GLUT_TRUE@ projtex$(EXEEXT) ray$(EXEEXT) readpix$(EXEEXT) \ ++@HAVE_GLUT_TRUE@ reflect$(EXEEXT) renormal$(EXEEXT) \ ++@HAVE_GLUT_TRUE@ shadowtex$(EXEEXT) singlebuffer$(EXEEXT) \ ++@HAVE_GLUT_TRUE@ spectex$(EXEEXT) stex3d$(EXEEXT) \ + @HAVE_GLUT_TRUE@ teapot$(EXEEXT) terrain$(EXEEXT) \ + @HAVE_GLUT_TRUE@ tessdemo$(EXEEXT) texcyl$(EXEEXT) \ + @HAVE_GLUT_TRUE@ texenv$(EXEEXT) textures$(EXEEXT) \ +@@ -188,9 +187,6 @@ multiarb_DEPENDENCIES = ../util/libutil. + paltex_SOURCES = paltex.c + paltex_OBJECTS = paltex.$(OBJEXT) + paltex_LDADD = $(LDADD) +-pointblast_SOURCES = pointblast.c +-pointblast_OBJECTS = pointblast.$(OBJEXT) +-pointblast_LDADD = $(LDADD) + projtex_SOURCES = projtex.c + projtex_OBJECTS = projtex.$(OBJEXT) + projtex_DEPENDENCIES = ../util/libutil.la +@@ -215,9 +211,6 @@ singlebuffer_LDADD = $(LDADD) + spectex_SOURCES = spectex.c + spectex_OBJECTS = spectex.$(OBJEXT) + spectex_LDADD = $(LDADD) +-spriteblast_SOURCES = spriteblast.c +-spriteblast_OBJECTS = spriteblast.$(OBJEXT) +-spriteblast_LDADD = $(LDADD) + stex3d_SOURCES = stex3d.c + stex3d_OBJECTS = stex3d.$(OBJEXT) + stex3d_LDADD = $(LDADD) +@@ -285,21 +278,20 @@ SOURCES = arbfplight.c arbfslight.c arbo + fbo_firecube.c fbotexture.c fire.c fogcoord.c fplight.c \ + fslight.c gamma.c gearbox.c gears.c geartrain.c glinfo.c \ + gloss.c gltestperf.c ipers.c isosurf.c lodbias.c morph3d.c \ +- multiarb.c paltex.c pointblast.c projtex.c ray.c readpix.c \ +- reflect.c renormal.c shadowtex.c singlebuffer.c spectex.c \ +- spriteblast.c stex3d.c teapot.c terrain.c tessdemo.c texcyl.c \ +- texenv.c textures.c trispd.c $(tunnel_SOURCES) tunnel2.c \ +- vao_demo.c winpos.c ++ multiarb.c paltex.c projtex.c ray.c readpix.c reflect.c \ ++ renormal.c shadowtex.c singlebuffer.c spectex.c stex3d.c \ ++ teapot.c terrain.c tessdemo.c texcyl.c texenv.c textures.c \ ++ trispd.c $(tunnel_SOURCES) tunnel2.c vao_demo.c winpos.c + DIST_SOURCES = arbfplight.c arbfslight.c arbocclude.c bounce.c \ + clearspd.c copypix.c cubemap.c dinoshade.c dissolve.c \ + drawpix.c engine.c fbo_firecube.c fbotexture.c fire.c \ + fogcoord.c fplight.c fslight.c gamma.c gearbox.c gears.c \ + geartrain.c glinfo.c gloss.c gltestperf.c ipers.c isosurf.c \ +- lodbias.c morph3d.c multiarb.c paltex.c pointblast.c projtex.c \ +- ray.c readpix.c reflect.c renormal.c shadowtex.c \ +- singlebuffer.c spectex.c spriteblast.c stex3d.c teapot.c \ +- terrain.c tessdemo.c texcyl.c texenv.c textures.c trispd.c \ +- $(tunnel_SOURCES) tunnel2.c vao_demo.c winpos.c ++ lodbias.c morph3d.c multiarb.c paltex.c projtex.c ray.c \ ++ readpix.c reflect.c renormal.c shadowtex.c singlebuffer.c \ ++ spectex.c stex3d.c teapot.c terrain.c tessdemo.c texcyl.c \ ++ texenv.c textures.c trispd.c $(tunnel_SOURCES) tunnel2.c \ ++ vao_demo.c winpos.c + ETAGS = etags + CTAGS = ctags + DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +@@ -653,9 +645,6 @@ multiarb$(EXEEXT): $(multiarb_OBJECTS) $ + paltex$(EXEEXT): $(paltex_OBJECTS) $(paltex_DEPENDENCIES) + @rm -f paltex$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(paltex_OBJECTS) $(paltex_LDADD) $(LIBS) +-pointblast$(EXEEXT): $(pointblast_OBJECTS) $(pointblast_DEPENDENCIES) +- @rm -f pointblast$(EXEEXT) +- $(AM_V_CCLD)$(LINK) $(pointblast_OBJECTS) $(pointblast_LDADD) $(LIBS) + projtex$(EXEEXT): $(projtex_OBJECTS) $(projtex_DEPENDENCIES) + @rm -f projtex$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(projtex_OBJECTS) $(projtex_LDADD) $(LIBS) +@@ -680,9 +669,6 @@ singlebuffer$(EXEEXT): $(singlebuffer_OB + spectex$(EXEEXT): $(spectex_OBJECTS) $(spectex_DEPENDENCIES) + @rm -f spectex$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(spectex_OBJECTS) $(spectex_LDADD) $(LIBS) +-spriteblast$(EXEEXT): $(spriteblast_OBJECTS) $(spriteblast_DEPENDENCIES) +- @rm -f spriteblast$(EXEEXT) +- $(AM_V_CCLD)$(LINK) $(spriteblast_OBJECTS) $(spriteblast_LDADD) $(LIBS) + stex3d$(EXEEXT): $(stex3d_OBJECTS) $(stex3d_DEPENDENCIES) + @rm -f stex3d$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(stex3d_OBJECTS) $(stex3d_LDADD) $(LIBS) +@@ -756,7 +742,6 @@ distclean-compile: + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/morph3d.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiarb.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paltex.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pointblast.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/projtex.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ray.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readpix.Po@am__quote@ +@@ -765,7 +750,6 @@ distclean-compile: + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shadowtex.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/singlebuffer.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spectex.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spriteblast.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stex3d.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/teapot.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/terrain.Po@am__quote@ +diff -rauNp Desktop/mesa-demos-8.0.1//src/demos/pointblast.c mesa-demos-8.0.1//src/demos/pointblast.c +--- Desktop/mesa-demos-8.0.1//src/demos/pointblast.c 2010-07-07 13:57:15.000000000 -0400 ++++ mesa-demos-8.0.1/src/demos/pointblast.c 1969-12-31 19:00:00.000000000 -0500 +@@ -1,504 +0,0 @@ +- +-/* Copyright (c) Mark J. Kilgard, 1997. */ +- +-/* This program is freely distributable without licensing fees +- and is provided without guarantee or warrantee expressed or +- implied. This program is -not- in the public domain. */ +- +-/* This example demonstrates how to render particle effects +- with OpenGL. A cloud of pinkish/orange particles explodes with the +- particles bouncing off the ground. When the EXT_point_parameters +- is present , the particle size is attenuated based on eye distance. */ +- +- +-#include <stdio.h> +-#include <stdlib.h> +-#include <string.h> +-#include <math.h> /* for cos(), sin(), and sqrt() */ +-#ifdef _WIN32 +-#include <windows.h> +-#endif +-#include <GL/glew.h> +-#include <GL/glut.h> +- +-/* Some <math.h> files do not define M_PI... */ +-#ifndef M_PI +-#define M_PI 3.14159265 +-#endif +- +-#if 0 /* For debugging. */ +-#undef GL_EXT_point_parameters +-#endif +- +-static GLfloat angle = -150; /* in degrees */ +-static int spin = 0; +-static int moving, begin; +-static int newModel = 1; +-static float theTime; +-static int repeat = 1; +-static int blend = 1; +-int useMipmaps = 1; +-int linearFiltering = 1; +- +-static GLfloat constant[3] = { 1/5.0, 0.0, 0.0 }; +-static GLfloat linear[3] = { 0.0, 1/5.0, 0.0 }; +-static GLfloat theQuad[3] = { 0.25, 0.0, 1/60.0 }; +- +-#define MAX_POINTS 2000 +- +-static int numPoints = 200; +- +-static GLfloat pointList[MAX_POINTS][3]; +-static GLfloat pointTime[MAX_POINTS]; +-static GLfloat pointVelocity[MAX_POINTS][2]; +-static GLfloat pointDirection[MAX_POINTS][2]; +-static int colorList[MAX_POINTS]; +-static int animate = 1, motion = 0; +- +-static GLfloat colorSet[][4] = { +- /* Shades of red. */ +- { 0.7, 0.2, 0.4, 0.5 }, +- { 0.8, 0.0, 0.7, 0.5 }, +- { 1.0, 0.0, 0.0, 0.5 }, +- { 0.9, 0.3, 0.6, 0.5 }, +- { 1.0, 0.4, 0.0, 0.5 }, +- { 1.0, 0.0, 0.5, 0.5 }, +-}; +- +-#define NUM_COLORS (sizeof(colorSet)/sizeof(colorSet[0])) +- +-#define DEAD (NUM_COLORS+1) +- +- +-#if 0 /* drand48 might be better on Unix machines */ +-#define RANDOM_RANGE(lo, hi) ((lo) + (hi - lo) * drand48()) +-#else +-static float float_rand(void) { return rand() / (float) RAND_MAX; } +-#define RANDOM_RANGE(lo, hi) ((lo) + (hi - lo) * float_rand()) +-#endif +- +-#define MEAN_VELOCITY 3.0 +-#define GRAVITY 2.0 +- +-/* Modeling units of ground extent in each X and Z direction. */ +-#define EDGE 12 +- +-static void +-makePointList(void) +-{ +- float angle, velocity, direction; +- int i; +- +- motion = 1; +- for (i=0; i<numPoints; i++) { +- pointList[i][0] = 0.0; +- pointList[i][1] = 0.0; +- pointList[i][2] = 0.0; +- pointTime[i] = 0.0; +- angle = (RANDOM_RANGE(60.0, 70.0)) * M_PI/180.0; +- direction = RANDOM_RANGE(0.0, 360.0) * M_PI/180.0; +- pointDirection[i][0] = cos(direction); +- pointDirection[i][1] = sin(direction); +- velocity = MEAN_VELOCITY + RANDOM_RANGE(-0.8, 1.0); +- pointVelocity[i][0] = velocity * cos(angle); +- pointVelocity[i][1] = velocity * sin(angle); +- colorList[i] = rand() % NUM_COLORS; +- } +- theTime = 0.0; +-} +- +-static void +-updatePointList(void) +-{ +- float distance; +- int i; +- +- static double t0 = -1.; +- double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; +- if (t0 < 0.0) +- t0 = t; +- dt = t - t0; +- t0 = t; +- +- motion = 0; +- for (i=0; i<numPoints; i++) { +- distance = pointVelocity[i][0] * theTime; +- +- /* X and Z */ +- pointList[i][0] = pointDirection[i][0] * distance; +- pointList[i][2] = pointDirection[i][1] * distance; +- +- /* Z */ +- pointList[i][1] = +- (pointVelocity[i][1] - 0.5 * GRAVITY * pointTime[i])*pointTime[i]; +- +- /* If we hit the ground, bounce the point upward again. */ +- if (pointList[i][1] <= 0.0) { +- if (distance > EDGE) { +- /* Particle has hit ground past the distance duration of +- the particles. Mark particle as dead. */ +- colorList[i] = NUM_COLORS; /* Not moving. */ +- continue; +- } +- +- pointVelocity[i][1] *= 0.8; /* 80% of previous up velocity. */ +- pointTime[i] = 0.0; /* Reset the particles sense of up time. */ +- } +- motion = 1; +- pointTime[i] += dt; +- } +- theTime += dt; +- if (!motion && !spin) { +- if (repeat) { +- makePointList(); +- } else { +- glutIdleFunc(NULL); +- } +- } +-} +- +-static void +-idle(void) +-{ +- updatePointList(); +- if (spin) { +- angle += 0.3; +- newModel = 1; +- } +- glutPostRedisplay(); +-} +- +-static void +-visible(int vis) +-{ +- if (vis == GLUT_VISIBLE) { +- if (animate && (motion || spin)) { +- glutIdleFunc(idle); +- } +- } else { +- glutIdleFunc(NULL); +- } +-} +- +-static void +-recalcModelView(void) +-{ +- glPopMatrix(); +- glPushMatrix(); +- glRotatef(angle, 0.0, 1.0, 0.0); +- newModel = 0; +-} +- +-static void +-redraw(void) +-{ +- int i; +- +- glDepthMask(GL_TRUE); +- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +- if (newModel) +- recalcModelView(); +- +- +- /* Draw the floor. */ +-/* glEnable(GL_TEXTURE_2D);*/ +- glColor3f(0.5, 1.0, 0.5); +- glBegin(GL_QUADS); +- glTexCoord2f(0.0, 0.0); +- glVertex3f(-EDGE, -0.05, -EDGE); +- glTexCoord2f(20.0, 0.0); +- glVertex3f(EDGE, -0.05, -EDGE); +- glTexCoord2f(20.0, 20.0); +- glVertex3f(EDGE, -0.05, EDGE); +- glTexCoord2f(0.0, 20.0); +- glVertex3f(-EDGE, -0.05, EDGE); +- glEnd(); +- +- /* Allow particles to blend with each other. */ +- glDepthMask(GL_FALSE); +- +- if (blend) +- glEnable(GL_BLEND); +- +- glDisable(GL_TEXTURE_2D); +- glBegin(GL_POINTS); +- for (i=0; i<numPoints; i++) { +- /* Draw alive particles. */ +- if (colorList[i] != DEAD) { +- glColor4fv(colorSet[colorList[i]]); +- glVertex3fv(pointList[i]); +- } +- } +- glEnd(); +- +- glDisable(GL_BLEND); +- +- glutSwapBuffers(); +-} +- +-/* ARGSUSED2 */ +-static void +-mouse(int button, int state, int x, int y) +-{ +- /* Scene can be spun around Y axis using left +- mouse button movement. */ +- if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { +- moving = 1; +- begin = x; +- } +- if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) { +- moving = 0; +- } +-} +- +-/* ARGSUSED1 */ +-static void +-mouseMotion(int x, int y) +-{ +- if (moving) { +- angle = angle + (x - begin); +- begin = x; +- newModel = 1; +- glutPostRedisplay(); +- } +-} +- +-static void +-menu(int option) +-{ +- switch (option) { +- case 0: +- makePointList(); +- break; +-#ifdef GL_ARB_point_parameters +- case 1: +- glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, constant); +- break; +- case 2: +- glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, linear); +- break; +- case 3: +- glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, theQuad); +- break; +-#endif +- case 4: +- blend = 1; +- break; +- case 5: +- blend = 0; +- break; +-#ifdef GL_ARB_point_parameters +- case 6: +- glPointParameterfARB(GL_POINT_FADE_THRESHOLD_SIZE_ARB, 1.0); +- break; +- case 7: +- glPointParameterfARB(GL_POINT_FADE_THRESHOLD_SIZE_ARB, 10.0); +- break; +-#endif +- case 8: +- glEnable(GL_POINT_SMOOTH); +- break; +- case 9: +- glDisable(GL_POINT_SMOOTH); +- break; +- case 10: +- glPointSize(2.0); +- break; +- case 11: +- glPointSize(4.0); +- break; +- case 12: +- glPointSize(8.0); +- break; +- case 13: +- spin = 1 - spin; +- if (animate && (spin || motion)) { +- glutIdleFunc(idle); +- } else { +- glutIdleFunc(NULL); +- } +- break; +- case 14: +- numPoints = 200; +- break; +- case 15: +- numPoints = 500; +- break; +- case 16: +- numPoints = 1000; +- break; +- case 17: +- numPoints = 2000; +- break; +- case 666: +- exit(0); +- } +- glutPostRedisplay(); +-} +- +-/* ARGSUSED1 */ +-static void +-key(unsigned char c, int x, int y) +-{ +- switch (c) { +- case 13: +- animate = 1 - animate; /* toggle. */ +- if (animate && (motion || spin)) { +- glutIdleFunc(idle); +- } else { +- glutIdleFunc(NULL); +- } +- break; +- case ' ': +- animate = 1; +- makePointList(); +- glutIdleFunc(idle); +- break; +- case 27: +- exit(0); +- } +-} +- +-/* Nice floor texture tiling pattern. */ +-static char *circles[] = { +- "....xxxx........", +- "..xxxxxxxx......", +- ".xxxxxxxxxx.....", +- ".xxx....xxx.....", +- "xxx......xxx....", +- "xxx......xxx....", +- "xxx......xxx....", +- "xxx......xxx....", +- ".xxx....xxx.....", +- ".xxxxxxxxxx.....", +- "..xxxxxxxx......", +- "....xxxx........", +- "................", +- "................", +- "................", +- "................", +-}; +- +-static void +-makeFloorTexture(void) +-{ +- GLubyte floorTexture[16][16][3]; +- GLubyte *loc; +- int s, t; +- +- /* Setup RGB image for the texture. */ +- loc = (GLubyte*) floorTexture; +- for (t = 0; t < 16; t++) { +- for (s = 0; s < 16; s++) { +- if (circles[t][s] == 'x') { +- /* Nice blue. */ +- loc[0] = 0x1f; +- loc[1] = 0x1f; +- loc[2] = 0x8f; +- } else { +- /* Light gray. */ +- loc[0] = 0xca; +- loc[1] = 0xca; +- loc[2] = 0xca; +- } +- loc += 3; +- } +- } +- +- glPixelStorei(GL_UNPACK_ALIGNMENT, 1); +- +- if (useMipmaps) { +- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, +- GL_LINEAR_MIPMAP_LINEAR); +- gluBuild2DMipmaps(GL_TEXTURE_2D, 3, 16, 16, +- GL_RGB, GL_UNSIGNED_BYTE, floorTexture); +- } else { +- if (linearFiltering) { +- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); +- } else { +- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); +- } +- glTexImage2D(GL_TEXTURE_2D, 0, 3, 16, 16, 0, +- GL_RGB, GL_UNSIGNED_BYTE, floorTexture); +- } +-} +- +-int +-main(int argc, char **argv) +-{ +- int i; +- +- glutInitWindowSize(300, 300); +- glutInit(&argc, argv); +- glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_MULTISAMPLE); +- +- for (i=1; i<argc; i++) { +- if(!strcmp("-noms", argv[i])) { +- glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); +- printf("forcing no multisampling\n"); +- } else if(!strcmp("-nomipmaps", argv[i])) { +- useMipmaps = 0; +- } else if(!strcmp("-nearest", argv[i])) { +- linearFiltering = 0; +- } +- } +- +- glutCreateWindow("point burst"); +- glewInit(); +- glutDisplayFunc(redraw); +- glutMouseFunc(mouse); +- glutMotionFunc(mouseMotion); +- glutVisibilityFunc(visible); +- glutKeyboardFunc(key); +- glutCreateMenu(menu); +- glutAddMenuEntry("Reset time", 0); +- glutAddMenuEntry("Constant", 1); +- glutAddMenuEntry("Linear", 2); +- glutAddMenuEntry("Quadratic", 3); +- glutAddMenuEntry("Blend on", 4); +- glutAddMenuEntry("Blend off", 5); +- glutAddMenuEntry("Threshold 1", 6); +- glutAddMenuEntry("Threshold 10", 7); +- glutAddMenuEntry("Point smooth on", 8); +- glutAddMenuEntry("Point smooth off", 9); +- glutAddMenuEntry("Point size 2", 10); +- glutAddMenuEntry("Point size 4", 11); +- glutAddMenuEntry("Point size 8", 12); +- glutAddMenuEntry("Toggle spin", 13); +- glutAddMenuEntry("200 points ", 14); +- glutAddMenuEntry("500 points ", 15); +- glutAddMenuEntry("1000 points ", 16); +- glutAddMenuEntry("2000 points ", 17); +- glutAddMenuEntry("Quit", 666); +- glutAttachMenu(GLUT_RIGHT_BUTTON); +- +- if (!glutExtensionSupported("GL_ARB_point_parameters")) { +- fprintf(stderr, "Sorry, GL_ARB_point_parameters is not supported.\n"); +- return -1; +- } +- +- glShadeModel(GL_FLAT); +- glEnable(GL_DEPTH_TEST); +- glEnable(GL_POINT_SMOOTH); +- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +- glPointSize(8.0); +-#if GL_ARB_point_parameters +- glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, theQuad); +-#endif +- glMatrixMode(GL_PROJECTION); +- gluPerspective( /* field of view in degree */ 40.0, +- /* aspect ratio */ 1.0, +- /* Z near */ 0.5, /* Z far */ 40.0); +- glMatrixMode(GL_MODELVIEW); +- gluLookAt(0.0, 1.0, 8.0, /* eye location */ +- 0.0, 1.0, 0.0, /* center is at (0,0,0) */ +- 0.0, 1.0, 0.); /* up is in postivie Y direction */ +- glPushMatrix(); /* dummy push so we can pop on model +- recalc */ +- +- makePointList(); +- makeFloorTexture(); +- +- glutMainLoop(); +- return 0; /* ANSI C requires main to return int. */ +-} +diff -rauNp Desktop/mesa-demos-8.0.1//src/demos/spriteblast.c mesa-demos-8.0.1//src/demos/spriteblast.c +--- Desktop/mesa-demos-8.0.1//src/demos/spriteblast.c 2010-07-07 13:57:15.000000000 -0400 ++++ mesa-demos-8.0.1/src/demos/spriteblast.c 1969-12-31 19:00:00.000000000 -0500 +@@ -1,555 +0,0 @@ +- +-/* Copyright (c) Mark J. Kilgard, 1997. */ +- +-/* This program is freely distributable without licensing fees +- and is provided without guarantee or warrantee expressed or +- implied. This program is -not- in the public domain. */ +- +-/* This example demonstrates how to render particle effects +- with OpenGL. A cloud of pinkish/orange particles explodes with the +- particles bouncing off the ground. When the EXT_point_parameters +- is present , the particle size is attenuated based on eye distance. */ +- +- +-/* Modified by Brian Paul to test GL_ARB_point_sprite */ +- +- +-#include <stdio.h> +-#include <stdlib.h> +-#include <string.h> +-#include <math.h> /* for cos(), sin(), and sqrt() */ +-#ifdef _WIN32 +-#include <windows.h> +-#endif +-#include <GL/glew.h> +-#include <GL/glut.h> +- +-/* Some <math.h> files do not define M_PI... */ +-#ifndef M_PI +-#define M_PI 3.14159265 +-#endif +- +-#if 0 /* For debugging. */ +-#undef GL_EXT_point_parameters +-#endif +- +-static GLfloat angle = -150; /* in degrees */ +-static int spin = 0; +-static int moving, begin; +-static float theTime; +-static int repeat = 1; +-static int blend = 1; +-int useMipmaps = 1; +-int linearFiltering = 1; +- +-static GLfloat constant[3] = { .2, 0.0, 0.0 }; +-static GLfloat linear[3] = { .0, .1, 0.0 }; +-static GLfloat theQuad[3] = { .005, 0.1, 1/600.0 }; +- +-#define MAX_POINTS 2000 +- +-static int numPoints = 200; +- +-static GLfloat pointList[MAX_POINTS][3]; +-static GLfloat pointTime[MAX_POINTS]; +-static GLfloat pointVelocity[MAX_POINTS][2]; +-static GLfloat pointDirection[MAX_POINTS][2]; +-static int colorList[MAX_POINTS]; +-static int animate = 1, motion = 0, org = 0, sprite = 1, smooth = 1; +- +-static GLfloat colorSet[][4] = { +- /* Shades of red. */ +- { 0.7, 0.2, 0.4, 0.5 }, +- { 0.8, 0.0, 0.7, 0.5 }, +- { 1.0, 0.0, 0.0, 0.5 }, +- { 0.9, 0.3, 0.6, 0.5 }, +- { 1.0, 0.4, 0.0, 0.5 }, +- { 1.0, 0.0, 0.5, 0.5 }, +-}; +- +-#define NUM_COLORS (sizeof(colorSet)/sizeof(colorSet[0])) +- +-#define DEAD (NUM_COLORS+1) +- +- +-/* GL */ +-static GLint spritePattern[16][16] = { +- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, +- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, +- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, +- { 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0 }, +- { 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0 }, +- { 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0 }, +- { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0 }, +- { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0 }, +- { 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0 }, +- { 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0 }, +- { 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0 }, +- { 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0 }, +- { 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0 }, +- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, +- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, +- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } +-}; +- +- +- +- +-#if 0 /* drand48 might be better on Unix machines */ +-#define RANDOM_RANGE(lo, hi) ((lo) + (hi - lo) * drand48()) +-#else +-static float float_rand(void) { return rand() / (float) RAND_MAX; } +-#define RANDOM_RANGE(lo, hi) ((lo) + (hi - lo) * float_rand()) +-#endif +- +-#define MEAN_VELOCITY 3.0 +-#define GRAVITY 2.0 +- +-/* Modeling units of ground extent in each X and Z direction. */ +-#define EDGE 12 +- +-static void +-makePointList(void) +-{ +- float angle, velocity, direction; +- int i; +- +- motion = 1; +- for (i=0; i<numPoints; i++) { +- pointList[i][0] = 0.0; +- pointList[i][1] = 0.0; +- pointList[i][2] = 0.0; +- pointTime[i] = 0.0; +- angle = (RANDOM_RANGE(60.0, 70.0)) * M_PI/180.0; +- direction = RANDOM_RANGE(0.0, 360.0) * M_PI/180.0; +- pointDirection[i][0] = cos(direction); +- pointDirection[i][1] = sin(direction); +- velocity = MEAN_VELOCITY + RANDOM_RANGE(-0.8, 1.0); +- pointVelocity[i][0] = velocity * cos(angle); +- pointVelocity[i][1] = velocity * sin(angle); +- colorList[i] = rand() % NUM_COLORS; +- } +- theTime = 0.0; +-} +- +-static void +-updatePointList(void) +-{ +- float distance; +- int i; +- +- static double t0 = -1.; +- double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; +- if (t0 < 0.0) +- t0 = t; +- dt = t - t0; +- t0 = t; +- +- motion = 0; +- for (i=0; i<numPoints; i++) { +- distance = pointVelocity[i][0] * theTime; +- +- /* X and Z */ +- pointList[i][0] = pointDirection[i][0] * distance; +- pointList[i][2] = pointDirection[i][1] * distance; +- +- /* Z */ +- pointList[i][1] = +- (pointVelocity[i][1] - 0.5 * GRAVITY * pointTime[i])*pointTime[i]; +- +- /* If we hit the ground, bounce the point upward again. */ +- if (pointList[i][1] <= 0.0) { +- if (distance > EDGE) { +- /* Particle has hit ground past the distance duration of +- the particles. Mark particle as dead. */ +- colorList[i] = NUM_COLORS; /* Not moving. */ +- continue; +- } +- +- pointVelocity[i][1] *= 0.8; /* 80% of previous up velocity. */ +- pointTime[i] = 0.0; /* Reset the particles sense of up time. */ +- } +- motion = 1; +- pointTime[i] += dt; +- } +- theTime += dt; +- if (!motion && !spin) { +- if (repeat) { +- makePointList(); +- } else { +- glutIdleFunc(NULL); +- } +- } +-} +- +-static void +-idle(void) +-{ +- updatePointList(); +- if (spin) { +- angle += 0.3; +- } +- glutPostRedisplay(); +-} +- +-static void +-visible(int vis) +-{ +- if (vis == GLUT_VISIBLE) { +- if (animate && (motion || spin)) { +- glutIdleFunc(idle); +- } +- } else { +- glutIdleFunc(NULL); +- } +-} +- +-static void +-redraw(void) +-{ +- int i; +- +- glDepthMask(GL_TRUE); +- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +- +- glPushMatrix(); +- glRotatef(15.0, 1.0, 0.0, 0.0); +- glRotatef(angle, 0.0, 1.0, 0.0); +- +- +- /* Draw the floor. */ +-/* glEnable(GL_TEXTURE_2D);*/ +- glColor3f(0.1, 0.5, 1.0); +- glBegin(GL_QUADS); +- glTexCoord2f(0.0, 0.0); +- glVertex3f(-EDGE, -0.05, -EDGE); +- glTexCoord2f(20.0, 0.0); +- glVertex3f(EDGE, -0.05, -EDGE); +- glTexCoord2f(20.0, 20.0); +- glVertex3f(EDGE, -0.05, EDGE); +- glTexCoord2f(0.0, 20.0); +- glVertex3f(-EDGE, -0.05, EDGE); +- glEnd(); +- +- /* Allow particles to blend with each other. */ +- glDepthMask(GL_FALSE); +- +- if (blend) +- glEnable(GL_BLEND); +- +- if (sprite) { +- glEnable(GL_TEXTURE_2D); +-#ifdef GL_ARB_point_sprite +- glEnable(GL_POINT_SPRITE_ARB); +-#endif +- } +- +- glColor3f(1,1,1); +- glBegin(GL_POINTS); +- for (i=0; i<numPoints; i++) { +- /* Draw alive particles. */ +- if (colorList[i] != DEAD) { +- if (!sprite) glColor4fv(colorSet[colorList[i]]); +- glVertex3fv(pointList[i]); +- } +- } +- glEnd(); +- +- glDisable(GL_TEXTURE_2D); +-#ifdef GL_ARB_point_sprite +- glDisable(GL_POINT_SPRITE_ARB); +-#endif +- glDisable(GL_BLEND); +- +- glPopMatrix(); +- +- glutSwapBuffers(); +-} +- +-/* ARGSUSED2 */ +-static void +-mouse(int button, int state, int x, int y) +-{ +- /* Scene can be spun around Y axis using left +- mouse button movement. */ +- if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { +- moving = 1; +- begin = x; +- } +- if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) { +- moving = 0; +- } +-} +- +-/* ARGSUSED1 */ +-static void +-mouseMotion(int x, int y) +-{ +- if (moving) { +- angle = angle + (x - begin); +- begin = x; +- glutPostRedisplay(); +- } +-} +- +-static void +-menu(int option) +-{ +- switch (option) { +- case 0: +- makePointList(); +- break; +-#ifdef GL_ARB_point_parameters +- case 1: +- glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, constant); +- break; +- case 2: +- glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, linear); +- break; +- case 3: +- glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, theQuad); +- break; +-#endif +- case 4: +- blend = 1; +- break; +- case 5: +- blend = 0; +- break; +-#ifdef GL_ARB_point_parameters +- case 6: +- glPointParameterfARB(GL_POINT_FADE_THRESHOLD_SIZE_ARB, 1.0); +- break; +- case 7: +- glPointParameterfARB(GL_POINT_FADE_THRESHOLD_SIZE_ARB, 10.0); +- break; +-#endif +- case 8: +- glEnable(GL_POINT_SMOOTH); +- smooth = 1; +- break; +- case 9: +- glDisable(GL_POINT_SMOOTH); +- smooth = 0; +- break; +- case 10: +- glPointSize(16.0); +- break; +- case 11: +- glPointSize(32.0); +- break; +- case 12: +- glPointSize(64.0); +- break; +- case 13: +- spin = 1 - spin; +- if (animate && (spin || motion)) { +- glutIdleFunc(idle); +- } else { +- glutIdleFunc(NULL); +- } +- break; +- case 14: +- numPoints = 200; +- break; +- case 15: +- numPoints = 500; +- break; +- case 16: +- numPoints = 1000; +- break; +- case 17: +- numPoints = 2000; +- break; +- case 666: +- exit(0); +- } +- glutPostRedisplay(); +-} +- +-/* ARGSUSED1 */ +-static void +-key(unsigned char c, int x, int y) +-{ +- switch (c) { +- case 13: +- animate = 1 - animate; /* toggle. */ +- if (animate && (motion || spin)) { +- glutIdleFunc(idle); +- } else { +- glutIdleFunc(NULL); +- } +- break; +- case ' ': +- animate = 1; +- makePointList(); +- glutIdleFunc(idle); +- break; +- case 'o': +- case 'O': +- org ^= 1; +-#ifdef GL_VERSION_2_0 +-#ifdef GL_ARB_point_parameters +- glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN, +- org ? GL_LOWER_LEFT : GL_UPPER_LEFT); +-#endif +-#endif +- glutPostRedisplay(); +- break; +- case 't': +- case 'T': +- sprite ^= 1; +- glutPostRedisplay(); +- break; +- case 's': +- case 'S': +- (smooth ^= 1) ? glEnable(GL_POINT_SMOOTH) : glDisable(GL_POINT_SMOOTH); +- glutPostRedisplay(); +- break; +- case '0': +- glPointSize(1.0); +- glutPostRedisplay(); +- break; +- case '1': +- glPointSize(16.0); +- glutPostRedisplay(); +- break; +- case '2': +- glPointSize(32.0); +- glutPostRedisplay(); +- break; +- case '3': +- glPointSize(64.0); +- glutPostRedisplay(); +- break; +- case '4': +- glPointSize(128.0); +- glutPostRedisplay(); +- break; +- case 27: +- exit(0); +- } +-} +- +- +- +-static void +-makeSprite(void) +-{ +- GLubyte texture[16][16][4]; +- int i, j; +- +- if (!glutExtensionSupported("GL_ARB_point_sprite")) { +- printf("Sorry, this demo requires GL_ARB_point_sprite.\n"); +- exit(0); +- } +- if (!glutExtensionSupported("GL_ARB_point_parameters")) { +- printf("Sorry, this demo requires GL_ARB_point_parameters.\n"); +- exit(0); +- } +- +- for (i = 0; i < 16; i++) { +- for (j = 0; j < 16; j++) { +- if (spritePattern[i][j]) { +- texture[i][j][0] = 255; +- texture[i][j][1] = 255; +- texture[i][j][2] = 255; +- texture[i][j][3] = 255; +- } +- else { +- texture[i][j][0] = 255; +- texture[i][j][1] = 0; +- texture[i][j][2] = 0; +- texture[i][j][3] = 0; +- } +- } +- } +- +- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, +- texture); +- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); +- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); +-#ifdef GL_ARB_point_sprite +- glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE); +-#endif +-} +- +- +-static void +-reshape(int width, int height) +-{ +- GLfloat h = (GLfloat) height / (GLfloat) width; +- +- glViewport(0, 0, (GLint) width, (GLint) height); +- glMatrixMode(GL_PROJECTION); +- glLoadIdentity(); +- glFrustum(-1.0, 1.0, -h, h, 2.0, 30.0); +- glMatrixMode(GL_MODELVIEW); +- glLoadIdentity(); +- glTranslatef(0.0, 0.0, -10.0); +-} +- +-int +-main(int argc, char **argv) +-{ +- int i; +- +- glutInitWindowSize(600,300); +- glutInit(&argc, argv); +- glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_MULTISAMPLE); +- +- for (i=1; i<argc; i++) { +- if(!strcmp("-noms", argv[i])) { +- glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); +- printf("forcing no multisampling\n"); +- } else if(!strcmp("-nomipmaps", argv[i])) { +- useMipmaps = 0; +- } else if(!strcmp("-nearest", argv[i])) { +- linearFiltering = 0; +- } +- } +- glutCreateWindow("sprite blast"); +- glewInit(); +- glutReshapeFunc(reshape); +- glutDisplayFunc(redraw); +- glutMouseFunc(mouse); +- glutMotionFunc(mouseMotion); +- glutVisibilityFunc(visible); +- glutKeyboardFunc(key); +- glutCreateMenu(menu); +- glutAddMenuEntry("Reset time", 0); +- glutAddMenuEntry("Constant", 1); +- glutAddMenuEntry("Linear", 2); +- glutAddMenuEntry("Quadratic", 3); +- glutAddMenuEntry("Blend on", 4); +- glutAddMenuEntry("Blend off", 5); +- glutAddMenuEntry("Threshold 1", 6); +- glutAddMenuEntry("Threshold 10", 7); +- glutAddMenuEntry("Point smooth on", 8); +- glutAddMenuEntry("Point smooth off", 9); +- glutAddMenuEntry("Point size 16", 10); +- glutAddMenuEntry("Point size 32", 11); +- glutAddMenuEntry("Point size 64", 12); +- glutAddMenuEntry("Toggle spin", 13); +- glutAddMenuEntry("200 points ", 14); +- glutAddMenuEntry("500 points ", 15); +- glutAddMenuEntry("1000 points ", 16); +- glutAddMenuEntry("2000 points ", 17); +- glutAddMenuEntry("Quit", 666); +- glutAttachMenu(GLUT_RIGHT_BUTTON); +- +- makePointList(); +- makeSprite(); +- +- glShadeModel(GL_FLAT); +- glEnable(GL_DEPTH_TEST); +- glEnable(GL_POINT_SMOOTH); +- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +- glPointSize(32.0); +-#ifdef GL_ARB_point_parameters +- glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, theQuad); +-#endif +- +- glutMainLoop(); +- return 0; /* ANSI C requires main to return int. */ +-} |