From 10e284a716db2b0c81d5ae5e7a1997fe30b0e902 Mon Sep 17 00:00:00 2001 From: jschauma Date: Thu, 5 Dec 2002 15:20:22 +0000 Subject: Initial import of graphics/MesaDemos: MesaLib is a 3-D graphics library with an API which is very similar to that of OpenGL*. This package provides examples and demos of Mesa's capabilities, among them the examples from the ``Red Book'' (_OpenGL Programming Guide_, published by Addison-Wesley; ISBN 0-201-63274-8). --- graphics/MesaDemos/DESCR | 4 + graphics/MesaDemos/Makefile | 28 ++++ graphics/MesaDemos/PLIST | 290 ++++++++++++++++++++++++++++++++++++ graphics/MesaDemos/distinfo | 9 ++ graphics/MesaDemos/patches/patch-aa | 24 +++ graphics/MesaDemos/patches/patch-ab | 45 ++++++ graphics/MesaDemos/patches/patch-ac | 23 +++ 7 files changed, 423 insertions(+) create mode 100644 graphics/MesaDemos/DESCR create mode 100644 graphics/MesaDemos/Makefile create mode 100644 graphics/MesaDemos/PLIST create mode 100644 graphics/MesaDemos/distinfo create mode 100644 graphics/MesaDemos/patches/patch-aa create mode 100644 graphics/MesaDemos/patches/patch-ab create mode 100644 graphics/MesaDemos/patches/patch-ac (limited to 'graphics/MesaDemos') diff --git a/graphics/MesaDemos/DESCR b/graphics/MesaDemos/DESCR new file mode 100644 index 00000000000..ff7eb99db80 --- /dev/null +++ b/graphics/MesaDemos/DESCR @@ -0,0 +1,4 @@ +MesaLib is a 3-D graphics library with an API which is very similar to that of +OpenGL*. This package provides examples and demos of Mesa's capabilities, +among them the examples from the ``Red Book'' (_OpenGL Programming Guide_, +published by Addison-Wesley; ISBN 0-201-63274-8). diff --git a/graphics/MesaDemos/Makefile b/graphics/MesaDemos/Makefile new file mode 100644 index 00000000000..80e8f0c5ceb --- /dev/null +++ b/graphics/MesaDemos/Makefile @@ -0,0 +1,28 @@ +# $NetBSD: Makefile,v 1.1.1.1 2002/12/05 15:20:22 jschauma Exp $ + +PKGNAME= MesaDemos-${MESA_VERSION} +DISTFILES= ${DISTNAME}${EXTRACT_SUFX} +DISTFILES+= ${DISTNAME:S/MesaLib/MesaDemos/}${EXTRACT_SUFX} +WRKSRC= ${WRKDIR}/${DISTNAME:S/Lib//} +MAINTAINER= jschauma@netbsd.org +COMMENT= OpenGL examples and Demos + +.include "../Mesa/Makefile.common" + +USE_BUILDLINK2= yes +USE_X11BASE= yes +BUILD_DIRS= ${WRKSRC}/book ${WRKSRC}/demos ${WRKSRC}/samples +MAKEFILE= Makefile.X11 +ALL_TARGET= netbsd +MAKE_ENV+= X11PREFIX=${X11PREFIX} + +do-install: +.for dir in book demos images samples + ${INSTALL_DATA_DIR} ${PREFIX}/share/examples/${PKGNAME}/${dir} + cd ${WRKSRC}/${dir} && ${PAX} -s ,^./.*Makefile.*,, -s ,^./CVS.*,, \ + -rw . ${PREFIX}/share/examples/${PKGNAME}/${dir} +.endfor + + +.include "../../graphics/Mesa/buildlink2.mk" +.include "../../mk/bsd.pkg.mk" diff --git a/graphics/MesaDemos/PLIST b/graphics/MesaDemos/PLIST new file mode 100644 index 00000000000..dcfa97b3248 --- /dev/null +++ b/graphics/MesaDemos/PLIST @@ -0,0 +1,290 @@ +@comment $NetBSD: PLIST,v 1.1.1.1 2002/12/05 15:20:22 jschauma Exp $ +share/examples/${PKGNAME}/book/README +share/examples/${PKGNAME}/book/aaindex +share/examples/${PKGNAME}/book/aaindex.c +share/examples/${PKGNAME}/book/aapoly +share/examples/${PKGNAME}/book/aapoly.c +share/examples/${PKGNAME}/book/aargb +share/examples/${PKGNAME}/book/aargb.c +share/examples/${PKGNAME}/book/accanti +share/examples/${PKGNAME}/book/accanti.c +share/examples/${PKGNAME}/book/accpersp +share/examples/${PKGNAME}/book/accpersp.c +share/examples/${PKGNAME}/book/alpha +share/examples/${PKGNAME}/book/alpha.c +share/examples/${PKGNAME}/book/alpha3D +share/examples/${PKGNAME}/book/alpha3D.c +share/examples/${PKGNAME}/book/anti +share/examples/${PKGNAME}/book/anti.c +share/examples/${PKGNAME}/book/bezcurve +share/examples/${PKGNAME}/book/bezcurve.c +share/examples/${PKGNAME}/book/bezmesh +share/examples/${PKGNAME}/book/bezmesh.c +share/examples/${PKGNAME}/book/checker +share/examples/${PKGNAME}/book/checker.c +share/examples/${PKGNAME}/book/clip +share/examples/${PKGNAME}/book/clip.c +share/examples/${PKGNAME}/book/colormat +share/examples/${PKGNAME}/book/colormat.c +share/examples/${PKGNAME}/book/cube +share/examples/${PKGNAME}/book/cube.c +share/examples/${PKGNAME}/book/depthcue +share/examples/${PKGNAME}/book/depthcue.c +share/examples/${PKGNAME}/book/dof +share/examples/${PKGNAME}/book/dof.c +share/examples/${PKGNAME}/book/double +share/examples/${PKGNAME}/book/double.c +share/examples/${PKGNAME}/book/drawf +share/examples/${PKGNAME}/book/drawf.c +share/examples/${PKGNAME}/book/feedback +share/examples/${PKGNAME}/book/feedback.c +share/examples/${PKGNAME}/book/fog +share/examples/${PKGNAME}/book/fog.c +share/examples/${PKGNAME}/book/fogindex +share/examples/${PKGNAME}/book/fogindex.c +share/examples/${PKGNAME}/book/font +share/examples/${PKGNAME}/book/font.c +share/examples/${PKGNAME}/book/hello +share/examples/${PKGNAME}/book/hello.c +share/examples/${PKGNAME}/book/image +share/examples/${PKGNAME}/book/image.c +share/examples/${PKGNAME}/book/jitter.h +share/examples/${PKGNAME}/book/light +share/examples/${PKGNAME}/book/light.c +share/examples/${PKGNAME}/book/lines +share/examples/${PKGNAME}/book/lines.c +share/examples/${PKGNAME}/book/list +share/examples/${PKGNAME}/book/list.c +share/examples/${PKGNAME}/book/material +share/examples/${PKGNAME}/book/material.c +share/examples/${PKGNAME}/book/mipmap +share/examples/${PKGNAME}/book/mipmap.c +share/examples/${PKGNAME}/book/model +share/examples/${PKGNAME}/book/model.c +share/examples/${PKGNAME}/book/movelight +share/examples/${PKGNAME}/book/movelight.c +share/examples/${PKGNAME}/book/nurbs +share/examples/${PKGNAME}/book/nurbs.c +share/examples/${PKGNAME}/book/pickdepth +share/examples/${PKGNAME}/book/pickdepth.c +share/examples/${PKGNAME}/book/picksquare +share/examples/${PKGNAME}/book/picksquare.c +share/examples/${PKGNAME}/book/plane +share/examples/${PKGNAME}/book/plane.c +share/examples/${PKGNAME}/book/planet +share/examples/${PKGNAME}/book/planet.c +share/examples/${PKGNAME}/book/polyoff +share/examples/${PKGNAME}/book/polyoff.c +share/examples/${PKGNAME}/book/polys +share/examples/${PKGNAME}/book/polys.c +share/examples/${PKGNAME}/book/quadric +share/examples/${PKGNAME}/book/quadric.c +share/examples/${PKGNAME}/book/robot +share/examples/${PKGNAME}/book/robot.c +share/examples/${PKGNAME}/book/sccolorlight +share/examples/${PKGNAME}/book/sccolorlight.c +share/examples/${PKGNAME}/book/scene +share/examples/${PKGNAME}/book/scene.c +share/examples/${PKGNAME}/book/scenebamb +share/examples/${PKGNAME}/book/scenebamb.c +share/examples/${PKGNAME}/book/sceneflat +share/examples/${PKGNAME}/book/sceneflat.c +share/examples/${PKGNAME}/book/select +share/examples/${PKGNAME}/book/select.c +share/examples/${PKGNAME}/book/smooth +share/examples/${PKGNAME}/book/smooth.c +share/examples/${PKGNAME}/book/stencil +share/examples/${PKGNAME}/book/stencil.c +share/examples/${PKGNAME}/book/stroke +share/examples/${PKGNAME}/book/stroke.c +share/examples/${PKGNAME}/book/surface +share/examples/${PKGNAME}/book/surface.c +share/examples/${PKGNAME}/book/teaambient +share/examples/${PKGNAME}/book/teaambient.c +share/examples/${PKGNAME}/book/teapots +share/examples/${PKGNAME}/book/teapots.c +share/examples/${PKGNAME}/book/tess.c +share/examples/${PKGNAME}/book/tesswind.c +share/examples/${PKGNAME}/book/texbind +share/examples/${PKGNAME}/book/texbind.c +share/examples/${PKGNAME}/book/texgen +share/examples/${PKGNAME}/book/texgen.c +share/examples/${PKGNAME}/book/texprox +share/examples/${PKGNAME}/book/texprox.c +share/examples/${PKGNAME}/book/texsub +share/examples/${PKGNAME}/book/texsub.c +share/examples/${PKGNAME}/book/texturesurf +share/examples/${PKGNAME}/book/texturesurf.c +share/examples/${PKGNAME}/book/torus +share/examples/${PKGNAME}/book/torus.c +share/examples/${PKGNAME}/book/trim +share/examples/${PKGNAME}/book/trim.c +share/examples/${PKGNAME}/book/unproject +share/examples/${PKGNAME}/book/unproject.c +share/examples/${PKGNAME}/book/varray +share/examples/${PKGNAME}/book/varray.c +share/examples/${PKGNAME}/book/wrap +share/examples/${PKGNAME}/book/wrap.c +share/examples/${PKGNAME}/demos/README +share/examples/${PKGNAME}/demos/bounce +share/examples/${PKGNAME}/demos/bounce.c +share/examples/${PKGNAME}/demos/clearspd +share/examples/${PKGNAME}/demos/clearspd.c +share/examples/${PKGNAME}/demos/cubemap +share/examples/${PKGNAME}/demos/cubemap.c +share/examples/${PKGNAME}/demos/descrip.mms +share/examples/${PKGNAME}/demos/drawpix +share/examples/${PKGNAME}/demos/drawpix.c +share/examples/${PKGNAME}/demos/fire +share/examples/${PKGNAME}/demos/fire.c +share/examples/${PKGNAME}/demos/gamma +share/examples/${PKGNAME}/demos/gamma.c +share/examples/${PKGNAME}/demos/gears +share/examples/${PKGNAME}/demos/gears.c +share/examples/${PKGNAME}/demos/geartrain +share/examples/${PKGNAME}/demos/geartrain.c +share/examples/${PKGNAME}/demos/geartrain.dat +share/examples/${PKGNAME}/demos/glinfo +share/examples/${PKGNAME}/demos/glinfo.c +share/examples/${PKGNAME}/demos/gloss +share/examples/${PKGNAME}/demos/gloss.c +share/examples/${PKGNAME}/demos/gltestperf +share/examples/${PKGNAME}/demos/gltestperf.c +share/examples/${PKGNAME}/demos/glutfx +share/examples/${PKGNAME}/demos/glutfx.c +share/examples/${PKGNAME}/demos/ipers +share/examples/${PKGNAME}/demos/ipers.c +share/examples/${PKGNAME}/demos/isosurf +share/examples/${PKGNAME}/demos/isosurf.c +share/examples/${PKGNAME}/demos/isosurf.dat +share/examples/${PKGNAME}/demos/lodbias +share/examples/${PKGNAME}/demos/lodbias.c +share/examples/${PKGNAME}/demos/morph3d +share/examples/${PKGNAME}/demos/morph3d.c +share/examples/${PKGNAME}/demos/multiarb +share/examples/${PKGNAME}/demos/multiarb.c +share/examples/${PKGNAME}/demos/occlude +share/examples/${PKGNAME}/demos/occlude.c +share/examples/${PKGNAME}/demos/osdemo.c +share/examples/${PKGNAME}/demos/paltex +share/examples/${PKGNAME}/demos/paltex.c +share/examples/${PKGNAME}/demos/particles.cxx +share/examples/${PKGNAME}/demos/particles.h +share/examples/${PKGNAME}/demos/pixeltex +share/examples/${PKGNAME}/demos/pixeltex.c +share/examples/${PKGNAME}/demos/pointblast +share/examples/${PKGNAME}/demos/pointblast.c +share/examples/${PKGNAME}/demos/rain.cxx +share/examples/${PKGNAME}/demos/ray +share/examples/${PKGNAME}/demos/ray.c +share/examples/${PKGNAME}/demos/readpix +share/examples/${PKGNAME}/demos/readpix.c +share/examples/${PKGNAME}/demos/readtex.c +share/examples/${PKGNAME}/demos/readtex.h +share/examples/${PKGNAME}/demos/reflect +share/examples/${PKGNAME}/demos/reflect.c +share/examples/${PKGNAME}/demos/renormal +share/examples/${PKGNAME}/demos/renormal.c +share/examples/${PKGNAME}/demos/shadowtex.c +share/examples/${PKGNAME}/demos/spectex +share/examples/${PKGNAME}/demos/spectex.c +share/examples/${PKGNAME}/demos/stex3d +share/examples/${PKGNAME}/demos/stex3d.c +share/examples/${PKGNAME}/demos/teapot +share/examples/${PKGNAME}/demos/teapot.c +share/examples/${PKGNAME}/demos/terrain +share/examples/${PKGNAME}/demos/terrain.c +share/examples/${PKGNAME}/demos/terrain.dat +share/examples/${PKGNAME}/demos/tessdemo +share/examples/${PKGNAME}/demos/tessdemo.c +share/examples/${PKGNAME}/demos/texcyl +share/examples/${PKGNAME}/demos/texcyl.c +share/examples/${PKGNAME}/demos/texdown +share/examples/${PKGNAME}/demos/texdown.c +share/examples/${PKGNAME}/demos/texenv +share/examples/${PKGNAME}/demos/texenv.c +share/examples/${PKGNAME}/demos/texobj +share/examples/${PKGNAME}/demos/texobj.c +share/examples/${PKGNAME}/demos/trispd +share/examples/${PKGNAME}/demos/trispd.c +share/examples/${PKGNAME}/demos/tunnel +share/examples/${PKGNAME}/demos/tunnel.c +share/examples/${PKGNAME}/demos/tunnel2 +share/examples/${PKGNAME}/demos/tunnel2.c +share/examples/${PKGNAME}/demos/tunneldat.h +share/examples/${PKGNAME}/demos/winpos +share/examples/${PKGNAME}/demos/winpos.c +share/examples/${PKGNAME}/images/bw.rgb +share/examples/${PKGNAME}/images/girl.rgb +share/examples/${PKGNAME}/images/reflect.rgb +share/examples/${PKGNAME}/images/s128.rgb +share/examples/${PKGNAME}/images/tile.rgb +share/examples/${PKGNAME}/images/tree2.rgba +share/examples/${PKGNAME}/images/tree3.rgb +share/examples/${PKGNAME}/images/wrs_logo.rgb +share/examples/${PKGNAME}/samples/README +share/examples/${PKGNAME}/samples/accum +share/examples/${PKGNAME}/samples/accum.c +share/examples/${PKGNAME}/samples/bitmap1 +share/examples/${PKGNAME}/samples/bitmap1.c +share/examples/${PKGNAME}/samples/bitmap2 +share/examples/${PKGNAME}/samples/bitmap2.c +share/examples/${PKGNAME}/samples/blendeq +share/examples/${PKGNAME}/samples/blendeq.c +share/examples/${PKGNAME}/samples/blendxor +share/examples/${PKGNAME}/samples/blendxor.c +share/examples/${PKGNAME}/samples/copy +share/examples/${PKGNAME}/samples/copy.c +share/examples/${PKGNAME}/samples/cursor +share/examples/${PKGNAME}/samples/cursor.c +share/examples/${PKGNAME}/samples/depth +share/examples/${PKGNAME}/samples/depth.c +share/examples/${PKGNAME}/samples/eval +share/examples/${PKGNAME}/samples/eval.c +share/examples/${PKGNAME}/samples/fog +share/examples/${PKGNAME}/samples/fog.c +share/examples/${PKGNAME}/samples/font +share/examples/${PKGNAME}/samples/font.c +share/examples/${PKGNAME}/samples/loadppm.c +share/examples/${PKGNAME}/samples/line +share/examples/${PKGNAME}/samples/line.c +share/examples/${PKGNAME}/samples/logo +share/examples/${PKGNAME}/samples/logo.c +share/examples/${PKGNAME}/samples/nurb +share/examples/${PKGNAME}/samples/nurb.c +share/examples/${PKGNAME}/samples/oglinfo.c +share/examples/${PKGNAME}/samples/olympic +share/examples/${PKGNAME}/samples/olympic.c +share/examples/${PKGNAME}/samples/overlay +share/examples/${PKGNAME}/samples/overlay.c +share/examples/${PKGNAME}/samples/point +share/examples/${PKGNAME}/samples/point.c +share/examples/${PKGNAME}/samples/prim +share/examples/${PKGNAME}/samples/prim.c +share/examples/${PKGNAME}/samples/quad +share/examples/${PKGNAME}/samples/quad.c +share/examples/${PKGNAME}/samples/rgbtoppm.c +share/examples/${PKGNAME}/samples/select +share/examples/${PKGNAME}/samples/select.c +share/examples/${PKGNAME}/samples/shape +share/examples/${PKGNAME}/samples/shape.c +share/examples/${PKGNAME}/samples/sphere +share/examples/${PKGNAME}/samples/sphere.c +share/examples/${PKGNAME}/samples/star +share/examples/${PKGNAME}/samples/star.c +share/examples/${PKGNAME}/samples/stencil +share/examples/${PKGNAME}/samples/stencil.c +share/examples/${PKGNAME}/samples/stretch +share/examples/${PKGNAME}/samples/stretch.c +share/examples/${PKGNAME}/samples/texture +share/examples/${PKGNAME}/samples/texture.c +share/examples/${PKGNAME}/samples/tkmap.c +share/examples/${PKGNAME}/samples/tri +share/examples/${PKGNAME}/samples/tri.c +share/examples/${PKGNAME}/samples/wave +share/examples/${PKGNAME}/samples/wave.c +@dirrm share/examples/${PKGNAME}/samples +@dirrm share/examples/${PKGNAME}/images +@dirrm share/examples/${PKGNAME}/demos +@dirrm share/examples/${PKGNAME}/book +@dirrm share/examples/${PKGNAME} diff --git a/graphics/MesaDemos/distinfo b/graphics/MesaDemos/distinfo new file mode 100644 index 00000000000..ac18a31ba80 --- /dev/null +++ b/graphics/MesaDemos/distinfo @@ -0,0 +1,9 @@ +$NetBSD: distinfo,v 1.1.1.1 2002/12/05 15:20:22 jschauma Exp $ + +SHA1 (MesaLib-5.0.tar.bz2) = 098260c89c4109a8823c76a2c4d75cef8484819d +Size (MesaLib-5.0.tar.bz2) = 1645037 bytes +SHA1 (MesaDemos-5.0.tar.bz2) = b487c94daa2d19060c40b0ae46869c28c883b6e8 +Size (MesaDemos-5.0.tar.bz2) = 894069 bytes +SHA1 (patch-aa) = 4163060a486cead1862d5fb903d5820969db076b +SHA1 (patch-ab) = 9722b62a6e4628f99ea53c91ea3eb67ae240e5f4 +SHA1 (patch-ac) = a27d8d99bbc12baebe0d13f0daccd26707b364ae diff --git a/graphics/MesaDemos/patches/patch-aa b/graphics/MesaDemos/patches/patch-aa new file mode 100644 index 00000000000..8920fddfc12 --- /dev/null +++ b/graphics/MesaDemos/patches/patch-aa @@ -0,0 +1,24 @@ +$NetBSD: patch-aa,v 1.1.1.1 2002/12/05 15:20:22 jschauma Exp $ + +--- book/Makefile.X11.orig Thu Nov 21 12:25:24 2002 ++++ book/Makefile.X11 Thu Nov 21 12:25:44 2002 +@@ -9,8 +9,8 @@ + + ##### MACROS ##### + +-INCDIR = ../include +-LIBDIR = ../lib ++INCDIR = ${X11PREFIX}/include ++LIBDIR = ${X11PREFIX}/lib + + GL_LIBS = -L$(LIBDIR) -lglut -lGLU -lGL $(APP_LIB_DEPS) + +@@ -22,7 +22,7 @@ + lines list material mipmap model movelight nurbs pickdepth \ + picksquare plane planet polyoff polys quadric robot sccolorlight \ + scene scenebamb sceneflat select smooth stencil stroke surface \ +- teaambient teapots tess tesswind texbind texgen texprox texsub \ ++ teaambient teapots texbind texgen texprox texsub \ + texturesurf torus trim unproject varray wrap + + diff --git a/graphics/MesaDemos/patches/patch-ab b/graphics/MesaDemos/patches/patch-ab new file mode 100644 index 00000000000..19d5d87c12d --- /dev/null +++ b/graphics/MesaDemos/patches/patch-ab @@ -0,0 +1,45 @@ +$NetBSD: patch-ab,v 1.1.1.1 2002/12/05 15:20:22 jschauma Exp $ + +--- demos/Makefile.X11.orig Tue Aug 21 01:42:11 2001 ++++ demos/Makefile.X11 Thu Nov 21 14:42:39 2002 +@@ -9,8 +9,8 @@ + + ##### MACROS ##### + +-INCDIR = ../include +-LIBDIR = ../lib ++INCDIR = ${X11PREFIX}/include ++LIBDIR = ${X11PREFIX}/lib + + GL_LIBS = -L$(LIBDIR) -lglut -lGLU -lGL $(APP_LIB_DEPS) + +@@ -36,7 +36,6 @@ + morph3d \ + multiarb \ + occlude \ +- osdemo \ + paltex \ + pixeltex \ + pointblast \ +@@ -44,7 +43,6 @@ + readpix \ + reflect \ + renormal \ +- shadowtex \ + spectex \ + stex3d \ + teapot \ +@@ -68,11 +66,11 @@ + + # make executable from .c file: + .c: $(LIB_DEP) +- $(CC) -I$(INCDIR) -I../util $(CFLAGS) $< $(GL_LIBS) -o $@ ++ $(CC) -I$(INCDIR) $(CFLAGS) -Wl,-R${LIBDIR} $< $(GL_LIBS) -o $@ + + # special case: need the -lOSMesa library: + osdemo: osdemo.c +- $(CC) -I$(INCDIR) $(CFLAGS) osdemo.c $(OSMESA_LIBS) -o $@ ++ $(CC) -I$(INCDIR) $(CFLAGS) -Wl,-R${LIBDIR} osdemo.c $(OSMESA_LIBS) -o $@ + + + ##### TARGETS ##### diff --git a/graphics/MesaDemos/patches/patch-ac b/graphics/MesaDemos/patches/patch-ac new file mode 100644 index 00000000000..7140f86cd31 --- /dev/null +++ b/graphics/MesaDemos/patches/patch-ac @@ -0,0 +1,23 @@ +$NetBSD: patch-ac,v 1.1.1.1 2002/12/05 15:20:22 jschauma Exp $ + +--- samples/Makefile.X11.orig Tue Feb 15 20:09:06 2000 ++++ samples/Makefile.X11 Thu Nov 21 14:49:47 2002 +@@ -9,15 +9,15 @@ + + ##### MACROS ##### + +-INCDIR = ../include +-LIBDIR = ../lib ++INCDIR = ${X11PREFIX}/include ++LIBDIR = ${X11PREFIX}/lib + + GL_LIBS = -L$(LIBDIR) -lglut -lGLU -lGL $(APP_LIB_DEPS) + + LIB_DEP = $(LIBDIR)/$(GL_LIB) $(LIBDIR)/$(GLU_LIB) $(LIBDIR)/$(GLUT_LIB) + + PROGS = accum bitmap1 bitmap2 blendeq blendxor copy cursor depth eval fog \ +- font line logo nurb oglinfo olympic overlay point prim quad select \ ++ font line logo nurb olympic overlay point prim quad select \ + shape sphere star stencil stretch texture tri wave + + -- cgit v1.2.3