diff options
Diffstat (limited to 'progs/trivial')
115 files changed, 9573 insertions, 218 deletions
| diff --git a/progs/trivial/.gitignore b/progs/trivial/.gitignore index 1c49fdd55f..a6629446d1 100644 --- a/progs/trivial/.gitignore +++ b/progs/trivial/.gitignore @@ -1,25 +1,45 @@  clear +clear-fbo +clear-fbo-tex +clear-scissor +clear-undefined  dlist-dangling  dlist-edgeflag  dlist-edgeflag-dangling  drawarrays  drawelements  drawrange +extfuncs.h +flat-clip +fs-tri  line  line-clip  line-cull +line-smooth +line-stipple-wide  line-userclip  line-userclip-clip  line-userclip-nop  line-userclip-nop-clip +line-wide  lineloop  lineloop-clip +lineloop-elts +linestrip +linestrip-flat-stipple +linestrip-stipple +linestrip-stipple-wide +pgon-mode  point  point-clip  point-param +point-sprite  point-wide +point-wide-smooth  poly  poly-flat +poly-flat-clip +poly-flat-unfilled-clip  poly-unfilled  quad  quad-clip @@ -32,33 +52,64 @@ quad-offset-unfilled  quad-offset-units  quad-tex-2d  quad-tex-3d +quad-tex-alpha  quad-tex-pbo  quad-unfilled +quad-unfilled-clip +quad-unfilled-stipple  quads  quadstrip +quadstrip-cont  quadstrip-flat  readtex.c  readtex.h  tri +tri-alpha  tri-blend +tri-blend-color +tri-blend-max +tri-blend-min +tri-blend-revsub +tri-blend-sub  tri-clip  tri-cull +tri-cull-both  tri-dlist  tri-edgeflag +trifan +trifan-flat +trifan-flat-clip +trifan-flat-unfilled-clip +trifan-unfilled +tri-fbo +tri-fbo-tex  tri-flat  tri-flat-clip +tri-fog +tri-mask-tri +tri-orig +tri-query +tri-scissor-tri +tri-stencil  tri-tex-3d +tri-tri  tri-unfilled  tri-unfilled-clip +tri-unfilled-edgeflag  tri-unfilled-smooth  tri-unfilled-userclip +tri-unfilled-userclip-stip  tri-userclip +tri-z +tri-z-eq  tristrip  tristrip-clip +tristrip-flat  vbo-drawarrays  vbo-drawelements  vbo-drawrange  vp-array +vp-array-int  vp-clip  vp-line-clip  vp-tri diff --git a/progs/trivial/Makefile b/progs/trivial/Makefile index 36a5548488..a4077bd016 100644 --- a/progs/trivial/Makefile +++ b/progs/trivial/Makefile @@ -11,70 +11,124 @@ include $(TOP)/configs/current  LIBS = -L$(TOP)/$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) $(APP_LIB_DEPS)  SOURCES = \ +	clear-fbo-tex.c \ +	clear-fbo.c \ +	clear-scissor.c \ +	clear-undefined.c \  	clear.c \ +	dlist-dangling.c \ +	dlist-edgeflag-dangling.c \ +	dlist-edgeflag.c \ +	dlist-degenerate.c \ +	drawarrays.c \ +	drawelements.c \ +	drawrange.c \ +	flat-clip.c \ +	fs-tri.c \  	line-clip.c \  	line-cull.c \ +	line-smooth.c \ +	line-stipple-wide.c \  	line-userclip-clip.c \  	line-userclip-nop-clip.c \  	line-userclip-nop.c \  	line-userclip.c \ +	line-wide.c \  	line.c \  	lineloop-clip.c \ +	lineloop-elts.c \  	lineloop.c \ -	point.c \ +	linestrip-flat-stipple.c \ +	linestrip-stipple-wide.c \ +	linestrip-stipple.c \ +	linestrip.c \ +	long-fixed-func.c \ +	pgon-mode.c \  	point-clip.c \  	point-param.c \ +	point-sprite.c \  	point-wide.c \ +	point-wide-smooth.c \ +	point.c \  	poly-flat.c \ +	poly-flat-clip.c \ +	poly-flat-unfilled-clip.c \  	poly-unfilled.c \  	poly.c \ -	quad-clip.c \  	quad-clip-all-vertices.c \  	quad-clip-nearplane.c \ +	quad-clip.c \  	quad-degenerate.c \  	quad-flat.c \  	quad-offset-factor.c \ -	quad-offset-units.c \  	quad-offset-unfilled.c \ -	quad-unfilled.c \ +	quad-offset-units.c \  	quad-tex-2d.c \ -	quad-tex-pbo.c \  	quad-tex-3d.c \ +	quad-tex-alpha.c \ +	quad-tex-pbo.c \ +	quad-unfilled-clip.c \ +	quad-unfilled-stipple.c \ +	quad-unfilled.c \  	quad.c \  	quads.c \ -	quadstrip.c \ +	quadstrip-cont.c \  	quadstrip-flat.c \ -	dlist-edgeflag.c \ -	dlist-dangling.c \ -	dlist-edgeflag-dangling.c \ -	dlist-degenerate.c \ -	drawrange.c \ -	drawelements.c \ -	drawarrays.c \ +	quadstrip.c \ +	tri-alpha.c \ +	tri-blend-color.c \ +	tri-blend-max.c \ +	tri-blend-min.c \ +	tri-blend-revsub.c \ +	tri-blend-sub.c \  	tri-blend.c \ -	tri-tex-3d.c \  	tri-clip.c \ +	tri-cull-both.c \  	tri-cull.c \ +	tri-dlist.c \  	tri-edgeflag.c \ +	tri-fbo-tex.c \ +	tri-fbo.c \  	tri-flat-clip.c \  	tri-flat.c \ +	tri-fog.c \ +	tri-mask-tri.c \ +	tri-orig.c \ +	tri-query.c \ +	tri-scissor-tri.c \ +	tri-stencil.c \ +	tri-tex-3d.c \ +	tri-tri.c \ +	tri-unfilled-edgeflag.c \  	tri-unfilled-clip.c \  	tri-unfilled-smooth.c \ +	tri-unfilled-userclip-stip.c \  	tri-unfilled-userclip.c \  	tri-unfilled.c \  	tri-userclip.c \ -	tri-dlist.c \ +	tri-z-eq.c \ +	tri-z.c \  	tri.c \ +	trifan-flat.c \ +	trifan-flat-clip.c \ +	trifan-flat-unfilled-clip.c \ +	trifan-unfilled.c \ +	trifan.c \  	tristrip-clip.c \ +	tristrip-flat.c \  	tristrip.c \ -	vbo-drawrange.c \ -	vbo-drawelements.c \  	vbo-drawarrays.c \ +	vbo-drawelements.c \ +	vbo-drawrange.c \ +	vp-array.c \ +	vp-array-int.c \  	vp-clip.c \ -	vp-tri.c \  	vp-line-clip.c \ -	vp-unfilled.c \ -	vp-array.c  +	vp-tri.c \ +	vp-tri-swap.c \ +	vp-tri-imm.c \ +	vp-tri-cb.c \ +	vp-unfilled.c   PROGS = $(SOURCES:%.c=%) @@ -89,13 +143,13 @@ UTIL_FILES = readtex.h readtex.c  .SUFFIXES: .c  .c: -	$(CC) $(INCLUDES) $(CFLAGS) $(LDFLAGS) $< $(LIBS) -o $@ +	$(APP_CC) $(INCLUDES) $(CFLAGS) $(LDFLAGS) $< $(LIBS) -o $@  .c.o: -	$(CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@ +	$(APP_CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@  .S.o: -	$(CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES)  $< -o $@ +	$(APP_CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES)  $< -o $@  ##### TARGETS ##### @@ -116,19 +170,19 @@ getproclist.h: $(TOP)/src/mesa/glapi/gl_API.xml getprocaddress.c getprocaddress.  texrect: texrect.o readtex.o -	$(CC) $(CFLAGS) $(LDFLAGS) texrect.o readtex.o $(LIBS) -o $@ +	$(APP_CC) $(CFLAGS) $(LDFLAGS) texrect.o readtex.o $(LIBS) -o $@  texrect.o: texrect.c readtex.h -	$(CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@ +	$(APP_CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@  invert: invert.o readtex.o -	$(CC) $(CFLAGS) $(LDFLAGS) invert.o readtex.o $(LIBS) -o $@ +	$(APP_CC) $(CFLAGS) $(LDFLAGS) invert.o readtex.o $(LIBS) -o $@  invert.o: invert.c readtex.h -	$(CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@ +	$(APP_CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@  readtex.o: readtex.c -	$(CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@ +	$(APP_CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@  readtex.h: $(TOP)/progs/util/readtex.h @@ -138,6 +192,11 @@ readtex.c: $(TOP)/progs/util/readtex.c  	ln -s $(TOP)/progs/util/readtex.c . +fs-tri: fs-tri.c extfuncs.h + + +extfuncs.h:  $(TOP)/progs/util/extfuncs.h +	cp $< .  # Emacs tags diff --git a/progs/trivial/clear-fbo-tex.c b/progs/trivial/clear-fbo-tex.c new file mode 100644 index 0000000000..68f1ab3d77 --- /dev/null +++ b/progs/trivial/clear-fbo-tex.c @@ -0,0 +1,220 @@ + +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <string.h> + +#define GL_GLEXT_PROTOTYPES +#include <GL/glut.h> + + + +static GLenum TexTarget = GL_TEXTURE_2D; +static int TexWidth = 512, TexHeight = 512; +static GLenum TexIntFormat = GL_RGBA; /* either GL_RGB or GL_RGBA */ + +static int Width = 512, Height = 512; +static GLuint MyFB, TexObj; + + +#define CheckError() assert(glGetError() == 0) + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + + +   if (!glutExtensionSupported("GL_EXT_framebuffer_object")) { +      printf("GL_EXT_framebuffer_object not found!\n"); +      exit(0); +   } + + +   glGenFramebuffersEXT(1, &MyFB); +   glGenTextures(1, &TexObj); + +   /* Make texture object/image */ +   glBindTexture(TexTarget, TexObj); +   glTexParameteri(TexTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST); +   glTexParameteri(TexTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST); +   glTexParameteri(TexTarget, GL_TEXTURE_BASE_LEVEL, 0); +   glTexParameteri(TexTarget, GL_TEXTURE_MAX_LEVEL, 0); + +   glTexImage2D(TexTarget, 0, TexIntFormat, TexWidth, TexHeight, 0, +                GL_RGBA, GL_UNSIGNED_BYTE, NULL); + + +   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + + + +   { +      glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, MyFB); + +      glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, +				TexTarget, TexObj, 0); +       + +      glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); +   } + +} + + + +static void +Reshape( int width, int height ) +{ +   glViewport( 0, 0, width, height ); +   glMatrixMode( GL_PROJECTION ); +   glLoadIdentity(); +   glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +   glMatrixMode( GL_MODELVIEW ); + +   Width = width; +   Height = height; +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + + + +static void Draw( void ) +{ + + +   /* draw to texture image */ +   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, MyFB); +//   glDrawBuffer(GL_COLOR_ATTACHMENT1_EXT); +//   glReadBuffer(GL_COLOR_ATTACHMENT1_EXT); + +    +   glViewport(0, 0, TexWidth, TexHeight); +   CheckError(); + +   glClearColor(0.5, 0.5, 1.0, 0.0); +   glClear(GL_COLOR_BUFFER_BIT); +   CheckError(); + +   if (0) { +      glBegin(GL_TRIANGLES); +      glColor3f(0,0,.7);  +      glVertex3f( 0.9, -0.9, -30.0); +      glColor3f(.8,0,0);  +      glVertex3f( 0.9,  0.9, -30.0); +      glColor3f(0,.9,0);  +      glVertex3f(-0.9,  0.0, -30.0); +      glEnd(); +   } + +   { +      GLubyte *buffer = malloc(Width * Height * 4); + +      /* read from user framebuffer */ +      glReadPixels(0, 0, Width-60, Height-60, GL_RGBA, GL_UNSIGNED_BYTE, buffer); +      CheckError(); + +      /* draw to window */ +      glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); +      glViewport(0, 0, Width, Height); + +      /* Try to clear the window, but will overwrite: +       */ +      glClearColor(0.8, 0.8, 0, 0.0); +      glClear(GL_COLOR_BUFFER_BIT); + +      glWindowPos2iARB(30, 30); +      glDrawPixels(Width-60, Height-60, GL_RGBA, GL_UNSIGNED_BYTE, buffer); +       +      free(buffer); +   } +    +   /* Bind normal framebuffer */ +   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); +   glViewport(0, 0, Width, Height); + +   if (0) { +      glBegin(GL_TRIANGLES); +      glColor3f(0,.7,0);  +      glVertex3f( 0.5, -0.5, -30.0); +      glColor3f(0,0,.8);  +      glVertex3f( 0.5,  0.5, -30.0); +      glColor3f(.9,0,0);  +      glVertex3f(-0.5,  0.0, -30.0); +      glEnd(); +   } + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } + +   CheckError(); +} + + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + + + +int +main( int argc, char *argv[] ) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(100, 0); glutInitWindowSize( Width, Height ); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow(argv[0]) == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +    return 0; +} diff --git a/progs/trivial/clear-fbo.c b/progs/trivial/clear-fbo.c new file mode 100644 index 0000000000..82218ed498 --- /dev/null +++ b/progs/trivial/clear-fbo.c @@ -0,0 +1,205 @@ + +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <string.h> + +#define GL_GLEXT_PROTOTYPES +#include <GL/glut.h> + + + +static int Width = 512, Height = 512; +static GLuint MyFB, MyRB; + + +#define CheckError() assert(glGetError() == 0) + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + + +   if (!glutExtensionSupported("GL_EXT_framebuffer_object")) { +      printf("GL_EXT_framebuffer_object not found!\n"); +      exit(0); +   } + + +   glGenFramebuffersEXT(1, &MyFB); +   glGenRenderbuffersEXT(1, &MyRB); + +   { +      glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, MyFB); + +      glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, MyRB); + +      glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, +				   GL_RENDERBUFFER_EXT, MyRB); + +      glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, Width, Height); + +      glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); +   } + +} + + + +static void +Reshape( int width, int height ) +{ +   glViewport( 0, 0, width, height ); +   glMatrixMode( GL_PROJECTION ); +   glLoadIdentity(); +   glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +   glMatrixMode( GL_MODELVIEW ); + +   Width = width; +   Height = height; +   glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, Width, Height); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + + + +static void Draw( void ) +{ + +   /* draw to user framebuffer */ +   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, MyFB); +   glDrawBuffer(GL_COLOR_ATTACHMENT1_EXT); +   glReadBuffer(GL_COLOR_ATTACHMENT1_EXT); + +    +   glViewport(0, 0, Width, Height); +   CheckError(); + +   glClearColor(0.5, 0.5, 1.0, 0.0); +   glClear(GL_COLOR_BUFFER_BIT); +   CheckError(); + +   if (0) { +      glBegin(GL_TRIANGLES); +      glColor3f(0,0,.7);  +      glVertex3f( 0.9, -0.9, -30.0); +      glColor3f(.8,0,0);  +      glVertex3f( 0.9,  0.9, -30.0); +      glColor3f(0,.9,0);  +      glVertex3f(-0.9,  0.0, -30.0); +      glEnd(); +   } + +   { +      GLubyte *buffer = malloc(Width * Height * 4); + +      /* read from user framebuffer */ +      glReadPixels(0, 0, Width-60, Height-60, GL_RGBA, GL_UNSIGNED_BYTE, buffer); +      CheckError(); + +      /* draw to window */ +      glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); +      glViewport(0, 0, Width, Height); + +      /* Try to clear the window, but will overwrite: +       */ +      glClearColor(0.8, 0.8, 0, 0.0); +      glClear(GL_COLOR_BUFFER_BIT); + +      glWindowPos2iARB(30, 30); +      glDrawPixels(Width-60, Height-60, GL_RGBA, GL_UNSIGNED_BYTE, buffer); +       +      free(buffer); +   } +    +   /* Bind normal framebuffer */ +   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); +   glViewport(0, 0, Width, Height); + +   if (0) { +      glBegin(GL_TRIANGLES); +      glColor3f(0,.7,0);  +      glVertex3f( 0.5, -0.5, -30.0); +      glColor3f(0,0,.8);  +      glVertex3f( 0.5,  0.5, -30.0); +      glColor3f(.9,0,0);  +      glVertex3f(-0.5,  0.0, -30.0); +      glEnd(); +   } + +   if (doubleBuffer) +      glutSwapBuffers(); +   else +      glFinish(); + +   CheckError(); +} + + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + + + +int +main( int argc, char *argv[] ) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(100, 0); glutInitWindowSize( Width, Height ); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow(argv[0]) == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +    return 0; +} diff --git a/progs/trivial/clear-scissor.c b/progs/trivial/clear-scissor.c new file mode 100644 index 0000000000..5e2025bed7 --- /dev/null +++ b/progs/trivial/clear-scissor.c @@ -0,0 +1,118 @@ +/* + * glClear + glScissor + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +GLenum doubleBuffer; +GLint Width = 200, Height = 150; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); +} + +static void Reshape(int width, int height) +{ +   Width = width; +   Height = height; + +   glViewport(0, 0, (GLint)width, (GLint)height); + +   glMatrixMode(GL_PROJECTION); +   glLoadIdentity(); +   glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +   glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glEnable(GL_SCISSOR_TEST); + +   glClearColor(1, 0, 0, 0); +   glScissor(0, 0, Width / 2, Height / 2); +   glClear(GL_COLOR_BUFFER_BIT);  + +   glClearColor(0, 1, 0, 0); +   glScissor(Width / 2, 0, Width - Width / 2, Height / 2); +   glClear(GL_COLOR_BUFFER_BIT);  + +   glClearColor(0, 0, 1, 0); +   glScissor(0, Height / 2, Width / 2, Height - Height / 2); +   glClear(GL_COLOR_BUFFER_BIT);  + +   glClearColor(1, 1, 1, 0); +   glScissor(Width / 2, Height / 2, Width - Width / 2, Height - Height / 2); +   glClear(GL_COLOR_BUFFER_BIT);  + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( Width, Height ); + +    type = GLUT_RGB | GLUT_ALPHA; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow(argv[0]) == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +    return 0; +} diff --git a/progs/trivial/clear-undefined.c b/progs/trivial/clear-undefined.c new file mode 100644 index 0000000000..ce066bf8e6 --- /dev/null +++ b/progs/trivial/clear-undefined.c @@ -0,0 +1,137 @@ +/* + * glClear + glScissor + Undefined content of framebuffer + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +GLenum doubleBuffer; +GLint Width = 200, Height = 150; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); +   fprintf(stderr, "Top right corner should be red\n"); +} + +static void Reshape(int width, int height) +{ +   Width = width; +   Height = height; + +   glViewport(0, 0, (GLint)width, (GLint)height); + +   glMatrixMode(GL_PROJECTION); +   glLoadIdentity(); +   glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +   glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ +    switch (key) { +      case 27: +	exit(1); +      default: +	glutPostRedisplay(); +	return; +    } + +} + +static void Draw(void) +{ +   glColor4f(1.0, 0.0, 0.0, 1.0); +   glBegin(GL_QUADS); +   glVertex2d(0.0, 0.0); +   glVertex2d(0.0, 1.0); +   glVertex2d(1.0, 1.0); +   glVertex2d(1.0, 0.0); +   glEnd(); + +   glBegin(GL_QUADS); +   glVertex2d(0.0,  0.0); +   glVertex2d(0.0, -1.0); +   glVertex2d(1.0, -1.0); +   glVertex2d(1.0,  0.0); +   glEnd(); + +   glEnable(GL_SCISSOR_TEST); +   glClearColor(1, 1, 0, 0); +   glScissor(Width / 2, 0, Width - Width / 2, Height / 2); +   glClear(GL_COLOR_BUFFER_BIT); + +   glClearColor(0, 0, 1, 0); +   glScissor(0, Height / 2, Width / 2, Height - Height / 2); +   glClear(GL_COLOR_BUFFER_BIT); +   glDisable(GL_SCISSOR_TEST); + +   glColor4f(0.0, 1.0, 0.0, 1.0); +   glBegin(GL_QUADS); +   glVertex2d( 0.0,  0.0); +   glVertex2d( 0.0, -1.0); +   glVertex2d(-1.0, -1.0); +   glVertex2d(-1.0,  0.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_TRUE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( Width, Height ); + + +    type = GLUT_RGB | GLUT_ALPHA; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow(argv[0]) == GL_FALSE) { +	exit(1); +    } + +    Init(); +	Reshape(Width, Height); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +    return 0; +} diff --git a/progs/trivial/clear.c b/progs/trivial/clear.c index 7e7ca588c3..da4fff0459 100644 --- a/progs/trivial/clear.c +++ b/progs/trivial/clear.c @@ -59,7 +59,7 @@ static void Key(unsigned char key, int x, int y)      switch (key) {        case 27: -	exit(1); +	exit(0);        default:  	return;      } @@ -106,9 +106,10 @@ int main(int argc, char **argv)  	exit(1);      } -    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); +    glutInitWindowPosition(0, 0); +    glutInitWindowSize( 256, 256); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); @@ -122,5 +123,5 @@ int main(int argc, char **argv)      glutKeyboardFunc(Key);      glutDisplayFunc(Draw);      glutMainLoop(); -	return 0; +    return 0;  } diff --git a/progs/trivial/createwin.c b/progs/trivial/createwin.c new file mode 100644 index 0000000000..901048555a --- /dev/null +++ b/progs/trivial/createwin.c @@ -0,0 +1,120 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +//    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/dlist-dangling.c b/progs/trivial/dlist-dangling.c index 97f878e96b..00a7507844 100644 --- a/progs/trivial/dlist-dangling.c +++ b/progs/trivial/dlist-dangling.c @@ -131,7 +131,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/dlist-edgeflag-dangling.c b/progs/trivial/dlist-edgeflag-dangling.c index 47d29bdade..08fae549c3 100644 --- a/progs/trivial/dlist-edgeflag-dangling.c +++ b/progs/trivial/dlist-edgeflag-dangling.c @@ -136,7 +136,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/dlist-edgeflag.c b/progs/trivial/dlist-edgeflag.c index b58e7eb435..ae799dc355 100644 --- a/progs/trivial/dlist-edgeflag.c +++ b/progs/trivial/dlist-edgeflag.c @@ -140,7 +140,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/flat-clip.c b/progs/trivial/flat-clip.c new file mode 100644 index 0000000000..dbe17a342e --- /dev/null +++ b/progs/trivial/flat-clip.c @@ -0,0 +1,151 @@ +/** + * Test flat shading and clipping. + * + * Brian Paul + * 30 August 2007 + */ + + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <GL/glut.h> + +static int Win; +static GLfloat Scale = 2.0, Zrot = 50; +static GLenum Mode = GL_LINE_LOOP; +static GLboolean Smooth = 0; +static GLenum PolygonMode = GL_FILL; + + +static void +Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + +   if (Smooth) +      glShadeModel(GL_SMOOTH); +   else +      glShadeModel(GL_FLAT); + +   glPushMatrix(); +   glScalef(Scale, Scale, 1); +   glRotatef(Zrot, 0, 0, 1); + +   glPolygonMode(GL_FRONT_AND_BACK, PolygonMode); + +   glBegin(Mode); +   glColor3f(1, 0, 0); +   glVertex2f(-1, -1); +   glColor3f(0, 1, 0); +   glVertex2f( 2, -1); +   glColor3f(0, 0, 1); +   glVertex2f( 0, 1); +   glEnd(); + +   glPushMatrix(); +   glScalef(0.9, 0.9, 1); +   glBegin(Mode); +   glColor3f(1, 0, 0); +   glVertex2f( 0, 1); + +   glColor3f(0, 0, 1); +   glVertex2f( 2, -1); + +   glColor3f(0, 1, 0); +   glVertex2f(-1, -1); + +   glEnd(); +   glPopMatrix(); + +   glPopMatrix(); + +   glutSwapBuffers(); +} + + +static void +Reshape(int width, int height) +{ +   glViewport(0, 0, width, height); +   glMatrixMode(GL_PROJECTION); +   glLoadIdentity(); +   glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 25.0); +   glMatrixMode(GL_MODELVIEW); +   glLoadIdentity(); +   glTranslatef(0.0, 0.0, -15.0); +} + + +static void +Key(unsigned char key, int x, int y) +{ +   (void) x; +   (void) y; +   switch (key) { +      case 'p': +         if (Mode == GL_TRIANGLES) +            Mode = GL_LINE_LOOP; +         else +            Mode = GL_TRIANGLES; +         break; +      case 'f': +         if (PolygonMode == GL_POINT) +            PolygonMode = GL_LINE; +         else if (PolygonMode == GL_LINE) +            PolygonMode = GL_FILL; +         else +            PolygonMode = GL_POINT; +         printf("PolygonMode = 0x%x\n", PolygonMode); +         break; +      case 'r': +         Zrot -= 5.0; +         break; +      case 'R': +         Zrot += 5.0; +         break; +      case 'z': +         Scale *= 1.1; +         break; +      case 'Z': +         Scale /= 1.1; +         break; +      case 's': +         Smooth = !Smooth; +         break; +      case 27: +         glutDestroyWindow(Win); +         exit(0); +         break; +   } +   glutPostRedisplay(); +} + + +static void +Init(void) +{ +   printf("Usage:\n"); +   printf("  z/Z:  change triangle size\n"); +   printf("  r/R:  rotate\n"); +   printf("  p:    toggle line/fill mode\n"); +   printf("  s:    toggle smooth/flat shading\n"); +   printf("  f:    switch polygon fill mode\n"); +} + + +int +main(int argc, char *argv[]) +{ +   glutInit(&argc, argv); +   glutInitWindowPosition(0, 0); +   glutInitWindowSize(400, 400); +   glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); +   Win = glutCreateWindow(argv[0]); +   glutReshapeFunc(Reshape); +   glutKeyboardFunc(Key); +   glutDisplayFunc(Draw); +   Init(); +   glutMainLoop(); +   return 0; +} diff --git a/progs/trivial/fs-tri.c b/progs/trivial/fs-tri.c new file mode 100644 index 0000000000..3be4d42e54 --- /dev/null +++ b/progs/trivial/fs-tri.c @@ -0,0 +1,212 @@ +/* Test fragment shader */ + +#include <assert.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <GL/gl.h> +#include <GL/glut.h> +#include <GL/glext.h> +#include "extfuncs.h" + + +static GLuint fragShader; +static GLuint vertShader; +static GLuint program; +static GLint win = 0; +static GLfloat xpos = 0, ypos = 0; + + +static void +Redisplay(void) +{ +   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + +   glPushMatrix(); +   glTranslatef(xpos, ypos, 0); + +   glBegin(GL_TRIANGLES); +   glColor3f(1, 0, 0); +   glVertex2f(-0.9, -0.9); +   glColor3f(0, 1, 0); +   glVertex2f( 0.9, -0.9); +   glColor3f(0, 0, 1); +   glVertex2f( 0,  0.9); +   glEnd(); + +   glPopMatrix(); + +   glutSwapBuffers(); +} + + +static void +Reshape(int width, int height) +{ +   glViewport(0, 0, width, height); +   glMatrixMode(GL_PROJECTION); +   glLoadIdentity(); +   glOrtho(-1, 1, -1, 1, -1, 1); +   glMatrixMode(GL_MODELVIEW); +   glLoadIdentity(); +} + + +static void +CleanUp(void) +{ +   glDeleteShader_func(fragShader); +   glDeleteShader_func(vertShader); +   glDeleteProgram_func(program); +   glutDestroyWindow(win); +} + + +static void +Key(unsigned char key, int x, int y) +{ +  (void) x; +  (void) y; + +   switch(key) { +   case 27: +      CleanUp(); +      exit(0); +      break; +   } +   glutPostRedisplay(); +} + + +static void +SpecialKey(int key, int x, int y) +{ +   const GLfloat step = 0.1; + +  (void) x; +  (void) y; + +   switch(key) { +   case GLUT_KEY_UP: +      ypos += step; +      break; +   case GLUT_KEY_DOWN: +      ypos -= step; +      break; +   case GLUT_KEY_LEFT: +      xpos -= step; +      break; +   case GLUT_KEY_RIGHT: +      xpos += step; +      break; +   } +   glutPostRedisplay(); +} + + +static void +LoadAndCompileShader(GLuint shader, const char *text) +{ +   GLint stat; + +   glShaderSource_func(shader, 1, (const GLchar **) &text, NULL); + +   glCompileShader_func(shader); + +   glGetShaderiv_func(shader, GL_COMPILE_STATUS, &stat); +   if (!stat) { +      GLchar log[1000]; +      GLsizei len; +      glGetShaderInfoLog_func(shader, 1000, &len, log); +      fprintf(stderr, "fslight: problem compiling shader:\n%s\n", log); +      exit(1); +   } +} + + +static void +CheckLink(GLuint prog) +{ +   GLint stat; +   glGetProgramiv_func(prog, GL_LINK_STATUS, &stat); +   if (!stat) { +      GLchar log[1000]; +      GLsizei len; +      glGetProgramInfoLog_func(prog, 1000, &len, log); +      fprintf(stderr, "Linker error:\n%s\n", log); +   } +} + + +static void +Init(void) +{ +   /* fragment color is a function of fragment position: */ +   static const char *fragShaderText = +      "void main() {\n" +      "   gl_FragColor = gl_FragCoord * vec4(0.005); \n" +      "   //gl_FragColor = gl_Color; \n" +      "   //gl_FragColor = vec4(1, 0, 0.5, 0); \n" +      "}\n"; +#if 0 +   static const char *vertShaderText = +      "varying vec3 normal;\n" +      "void main() {\n" +      "   gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" +      "   normal = gl_NormalMatrix * gl_Normal;\n" +      "}\n"; +#endif +   const char *version; + +   version = (const char *) glGetString(GL_VERSION); +   if (version[0] != '2' || version[1] != '.') { +      printf("This program requires OpenGL 2.x, found %s\n", version); +      exit(1); +   } + +   GetExtensionFuncs(); + +   fragShader = glCreateShader_func(GL_FRAGMENT_SHADER); +   LoadAndCompileShader(fragShader, fragShaderText); + +#if 0 +   vertShader = glCreateShader_func(GL_VERTEX_SHADER); +   LoadAndCompileShader(vertShader, vertShaderText); +#endif + +   program = glCreateProgram_func(); +   glAttachShader_func(program, fragShader); +#if 0 +   glAttachShader_func(program, vertShader); +#endif +   glLinkProgram_func(program); +   CheckLink(program); +   glUseProgram_func(program); + +   assert(glGetError() == 0); + +   glClearColor(0.3f, 0.3f, 0.3f, 0.0f); + +   printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER)); +} + + +int +main(int argc, char *argv[]) +{ +   glutInit(&argc, argv); +   glutInitWindowPosition( 0, 0); +   glutInitWindowSize(200, 200); +   glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); +   win = glutCreateWindow(argv[0]); +   glutReshapeFunc(Reshape); +   glutKeyboardFunc(Key); +   glutSpecialFunc(SpecialKey); +   glutDisplayFunc(Redisplay); +   Init(); +   glutMainLoop(); +   return 0; +} + + diff --git a/progs/trivial/line-clip.c b/progs/trivial/line-clip.c index 9acd12acc7..fd79d049c4 100644 --- a/progs/trivial/line-clip.c +++ b/progs/trivial/line-clip.c @@ -122,7 +122,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/line-cull.c b/progs/trivial/line-cull.c index 8999a8f0b1..038004b4c4 100644 --- a/progs/trivial/line-cull.c +++ b/progs/trivial/line-cull.c @@ -118,7 +118,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/line-smooth.c b/progs/trivial/line-smooth.c new file mode 100644 index 0000000000..f030de9b9f --- /dev/null +++ b/progs/trivial/line-smooth.c @@ -0,0 +1,172 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <math.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; +GLboolean smooth = GL_TRUE; +GLfloat width = 1.0; + + +static void Init(void) +{ +   float range[2], aarange[2]; +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); +   glGetFloatv(GL_LINE_WIDTH_RANGE, aarange); +   glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, range); +   printf("Non-AA line width range: %f .. %f\n", range[0], range[1]); +   printf("AA line width range: %f .. %f\n", aarange[0], aarange[1]); +} + + +static void Reshape(int width, int height) +{ +   glViewport(0, 0, (GLint)width, (GLint)height); +   glMatrixMode(GL_PROJECTION); +   glLoadIdentity(); +   glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +   glMatrixMode(GL_MODELVIEW); +   glLoadIdentity(); +   glTranslatef(0, 0, -30); +} + +static void Key(unsigned char key, int x, int y) +{ +   switch (key) { +   case 'w': +      width -= 0.5; +      if (width < 0.5) +         width = 0.5; +      break; +   case 'W': +      width += 0.5; +      break; +   case 's': +      smooth = !smooth; +      break; +   case 27: +      exit(1); +   default: +      return; +   } +   printf("LineWidth: %g\n", width); +   glutPostRedisplay(); +} + + +static void Draw(void) +{ +   float a; + +   glClear(GL_COLOR_BUFFER_BIT);  + +   glLineWidth(width); + +   if (smooth) { +      glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +      glEnable(GL_BLEND); +      glEnable(GL_LINE_SMOOTH); +   } + +   glColor3f(1, 1, 1); + +   glBegin(GL_LINES); +   for (a = 0; a < 3.14159; a += 0.2) { +      float x = .9 * cos(a); +      float y = .9 * sin(a); + +      glVertex2f(-x, -y); +      glVertex2f( x,  y); +   } +   glEnd(); + +   glDisable(GL_LINE_SMOOTH); +   glDisable(GL_BLEND); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +   GLint i; + +   doubleBuffer = GL_FALSE; + +   for (i = 1; i < argc; i++) { +      if (strcmp(argv[i], "-sb") == 0) { +         doubleBuffer = GL_FALSE; +      } else if (strcmp(argv[i], "-db") == 0) { +         doubleBuffer = GL_TRUE; +      } else { +         fprintf(stderr, "%s (Bad option).\n", argv[i]); +         return GL_FALSE; +      } +   } +   return GL_TRUE; +} + + +int main(int argc, char **argv) +{ +   GLenum type; + +   glutInit(&argc, argv); + +   if (Args(argc, argv) == GL_FALSE) { +      exit(1); +   } + +   glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +   type = GLUT_RGB; +   type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +   glutInitDisplayMode(type); + +   if (glutCreateWindow(argv[0]) == GL_FALSE) { +      exit(1); +   } + +   Init(); + +   glutReshapeFunc(Reshape); +   glutKeyboardFunc(Key); +   glutDisplayFunc(Draw); +   glutMainLoop(); +   return 0; +} diff --git a/progs/trivial/line-stipple-wide.c b/progs/trivial/line-stipple-wide.c new file mode 100644 index 0000000000..09e5e1fe08 --- /dev/null +++ b/progs/trivial/line-stipple-wide.c @@ -0,0 +1,148 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glEnable(GL_LINE_STIPPLE); +   glLineStipple( 5, 0xfffe ); +   glLineWidth( 4 ); + +   glBegin(GL_LINES); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -30.0); + +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -30.0); + +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -30.0); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/line-userclip-clip.c b/progs/trivial/line-userclip-clip.c index b24d8452bc..5c9c1b3b29 100644 --- a/progs/trivial/line-userclip-clip.c +++ b/progs/trivial/line-userclip-clip.c @@ -124,7 +124,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/line-userclip-nop-clip.c b/progs/trivial/line-userclip-nop-clip.c index e2e0b85a52..a6ee44fbd0 100644 --- a/progs/trivial/line-userclip-nop-clip.c +++ b/progs/trivial/line-userclip-nop-clip.c @@ -124,7 +124,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/line-userclip-nop.c b/progs/trivial/line-userclip-nop.c index eacee06978..cebea5f481 100644 --- a/progs/trivial/line-userclip-nop.c +++ b/progs/trivial/line-userclip-nop.c @@ -124,7 +124,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/line-userclip.c b/progs/trivial/line-userclip.c index 6af91431d0..ecfd28cac7 100644 --- a/progs/trivial/line-userclip.c +++ b/progs/trivial/line-userclip.c @@ -124,7 +124,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/line-wide.c b/progs/trivial/line-wide.c new file mode 100644 index 0000000000..543b1f67f3 --- /dev/null +++ b/progs/trivial/line-wide.c @@ -0,0 +1,147 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glLineWidth(4.0); + +   glBegin(GL_LINES); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -30.0); + +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -30.0); + + +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -30.0); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/line.c b/progs/trivial/line.c index 58bad91b05..de5f9274e4 100644 --- a/progs/trivial/line.c +++ b/progs/trivial/line.c @@ -71,15 +71,20 @@ static void Draw(void)  {     glClear(GL_COLOR_BUFFER_BIT);  -   glBegin(GL_LINE_STRIP); +   glBegin(GL_LINES);     glColor3f(0,0,.7);      glVertex3f( 0.9, -0.9, -30.0);     glColor3f(.8,0,0);      glVertex3f( 0.9,  0.9, -30.0); + +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -30.0); + +     glColor3f(0,.9,0);      glVertex3f(-0.9,  0.0, -30.0); -   /* Repeat the first vertex - don't have lineloop support in GS yet -    */     glColor3f(0,0,.7);      glVertex3f( 0.9, -0.9, -30.0);     glEnd(); diff --git a/progs/trivial/lineloop-clip.c b/progs/trivial/lineloop-clip.c index d8645ee347..211056720f 100644 --- a/progs/trivial/lineloop-clip.c +++ b/progs/trivial/lineloop-clip.c @@ -118,7 +118,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/lineloop-elts.c b/progs/trivial/lineloop-elts.c new file mode 100644 index 0000000000..96da8e4ad6 --- /dev/null +++ b/progs/trivial/lineloop-elts.c @@ -0,0 +1,120 @@ +/* Test rebasing */ + +#include <assert.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#define GL_GLEXT_PROTOTYPES +#include <GL/glut.h> + +GLfloat verts[][4] = { +   {  0.9, -0.9, 0.0, 1.0 }, +   {  0.9,  0.9, 0.0, 1.0 }, +   { -0.9,  0.9, 0.0, 1.0 }, +   { -0.9, -0.9, 0.0, 1.0 }, +}; + +GLubyte color[][4] = { +   { 0x00, 0x00, 0xff, 0x00 }, +   { 0x00, 0xff, 0x00, 0x00 }, +   { 0xff, 0x00, 0x00, 0x00 }, +   { 0xff, 0xff, 0xff, 0x00 }, +}; + +GLuint indices[] = { 1, 2, 3 }; + +static void Init( void ) +{ +   GLint errno; +   GLuint prognum; +    +   static const char *prog1 = +      "!!ARBvp1.0\n" +      "MOV  result.color, vertex.color;\n" +      "MOV  result.position, vertex.position;\n" +      "END\n"; + +   glGenProgramsARB(1, &prognum); +   glBindProgramARB(GL_VERTEX_PROGRAM_ARB, prognum); +   glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, +		      strlen(prog1), (const GLubyte *) prog1); + +   assert(glIsProgramARB(prognum)); +   errno = glGetError(); +   printf("glGetError = %d\n", errno); +   if (errno != GL_NO_ERROR) +   { +      GLint errorpos; + +      glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &errorpos); +      printf("errorpos: %d\n", errorpos); +      printf("%s\n", (char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB)); +   } + + +   glEnableClientState( GL_VERTEX_ARRAY ); +   glEnableClientState( GL_COLOR_ARRAY ); +   glVertexPointer( 3, GL_FLOAT, sizeof(verts[0]), verts ); +   glColorPointer( 4, GL_UNSIGNED_BYTE, 0, color ); + +} + + + +static void Display( void ) +{ +   glClearColor(0.3, 0.3, 0.3, 1); +   glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + +   glEnable(GL_VERTEX_PROGRAM_NV); + +   /* Should have min_index == 1, maybe force a rebase: +    */ +   glDrawElements( GL_LINE_LOOP, 3, GL_UNSIGNED_INT, indices ); + +   glFlush();  +} + + +static void Reshape( int width, int height ) +{ +   glViewport( 0, 0, width, height ); +   glMatrixMode( GL_PROJECTION ); +   glLoadIdentity(); +   glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +   glMatrixMode( GL_MODELVIEW ); +   glLoadIdentity(); +   /*glTranslatef( 0.0, 0.0, -15.0 );*/ +} + + +static void Key( unsigned char key, int x, int y ) +{ +   (void) x; +   (void) y; +   switch (key) { +      case 27: +         exit(0); +         break; +   } +   glutPostRedisplay(); +} + + + + +int main( int argc, char *argv[] ) +{ +   glutInit( &argc, argv ); +   glutInitWindowPosition( 0, 0 ); +   glutInitWindowSize( 250, 250 ); +   glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH ); +   glutCreateWindow(argv[0]); +   glutReshapeFunc( Reshape ); +   glutKeyboardFunc( Key ); +   glutDisplayFunc( Display ); +   Init(); +   glutMainLoop(); +   return 0; +} diff --git a/progs/trivial/lineloop.c b/progs/trivial/lineloop.c index 7500c54fc2..fab7d1ea02 100644 --- a/progs/trivial/lineloop.c +++ b/progs/trivial/lineloop.c @@ -118,7 +118,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/linestrip-clip.c b/progs/trivial/linestrip-clip.c new file mode 100644 index 0000000000..acab0f4e1c --- /dev/null +++ b/progs/trivial/linestrip-clip.c @@ -0,0 +1,141 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glBegin(GL_LINE_STRIP); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); + +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -30.0); + +   glColor3f(0,.9,0);  +   glVertex3f(-1.9,  0.0, -30.0); + +   glColor3f(0,0,.7);  +   glVertex3f( 0.8, -0.8, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/linestrip-flat-stipple.c b/progs/trivial/linestrip-flat-stipple.c new file mode 100644 index 0000000000..b691437346 --- /dev/null +++ b/progs/trivial/linestrip-flat-stipple.c @@ -0,0 +1,142 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glShadeModel(GL_FLAT); +   glEnable(GL_LINE_STIPPLE); +   glLineStipple( 5, 0xfffe ); + +   glBegin(GL_LINE_STRIP); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -30.0); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/linestrip-stipple-wide.c b/progs/trivial/linestrip-stipple-wide.c new file mode 100644 index 0000000000..53dfa554e9 --- /dev/null +++ b/progs/trivial/linestrip-stipple-wide.c @@ -0,0 +1,142 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glEnable(GL_LINE_STIPPLE); +   glLineStipple( 5, 0xfffe ); +   glLineWidth( 4 ); + +   glBegin(GL_LINE_STRIP); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -30.0); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/linestrip-stipple.c b/progs/trivial/linestrip-stipple.c new file mode 100644 index 0000000000..5933d1a136 --- /dev/null +++ b/progs/trivial/linestrip-stipple.c @@ -0,0 +1,141 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glEnable(GL_LINE_STIPPLE); +   glLineStipple( 5, 0xfffe ); + +   glBegin(GL_LINE_STRIP); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -30.0); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/linestrip.c b/progs/trivial/linestrip.c new file mode 100644 index 0000000000..06dd1c1087 --- /dev/null +++ b/progs/trivial/linestrip.c @@ -0,0 +1,138 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glBegin(GL_LINE_STRIP); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -30.0); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/long-fixed-func.c b/progs/trivial/long-fixed-func.c new file mode 100644 index 0000000000..88f4fe01ec --- /dev/null +++ b/progs/trivial/long-fixed-func.c @@ -0,0 +1,151 @@ +/** + * Enable as much fixed-function vertex processing state as possible + * to test fixed-function -> program code generation. + */ + + + +#define GL_GLEXT_PROTOTYPES +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +static void +Reshape(int width, int height) +{ +   glViewport(0, 0, (GLint)width, (GLint)height); +   glMatrixMode(GL_PROJECTION); +   glLoadIdentity(); +   glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +   glMatrixMode(GL_MODELVIEW); +} + + +static void +Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glBegin(GL_TRIANGLES); +   glColor3f(.8,0,0);  +   glVertex3f(-0.9, -0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(0,0,.7);  +   glVertex3f( 0.0,  0.9, -30.0); +   glEnd(); + +   glFlush(); + +   glutSwapBuffers(); +} + + +static void +Init(void) +{ +   GLubyte tex[16][16][4]; +   GLfloat pos[4] = {5, 10, 3, 1.0}; +   int i, j; + +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +   glClearColor(0.3, 0.1, 0.3, 0.0); + +   for (i = 0; i < 16; i++) { +      for (j = 0; j < 16; j++) { +         if ((i+j) & 1) { +            tex[i][j][0] = 100; +            tex[i][j][1] = 100; +            tex[i][j][2] = 100; +            tex[i][j][3] = 255; +         } +         else { +            tex[i][j][0] = 200; +            tex[i][j][1] = 200; +            tex[i][j][2] = 200; +            tex[i][j][3] = 255; +         } +      } +   } + + +   glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 1); +   glFogi(GL_FOG_MODE, GL_LINEAR); +   glEnable(GL_FOG); + +   glPointParameterfv(GL_DISTANCE_ATTENUATION_EXT, pos); + +   for (i = 0; i < 8; i++) { +      GLuint texObj; + +      glEnable(GL_LIGHT0 + i); +      glLightf(GL_LIGHT0 + i, GL_SPOT_EXPONENT, 3.5); +      glLightf(GL_LIGHT0 + i, GL_SPOT_CUTOFF, 30.); +      glLightf(GL_LIGHT0 + i, GL_CONSTANT_ATTENUATION, 3.); +      glLightf(GL_LIGHT0 + i, GL_LINEAR_ATTENUATION, 3.); +      glLightf(GL_LIGHT0 + i, GL_QUADRATIC_ATTENUATION, 3.); +      glLightfv(GL_LIGHT0 + i, GL_POSITION, pos); + +      glActiveTexture(GL_TEXTURE0 + i); +      glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); +      glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); +      glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); +      glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); +      glEnable(GL_TEXTURE_GEN_S); +      glEnable(GL_TEXTURE_GEN_T); +      glEnable(GL_TEXTURE_GEN_R); +      glEnable(GL_TEXTURE_GEN_Q); +      glEnable(GL_TEXTURE_2D); + +      glMatrixMode(GL_TEXTURE); +      glScalef(2.0, 1.0, 3.0); + +      glGenTextures(1, &texObj); +      glBindTexture(GL_TEXTURE_2D, texObj); +      glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, +                   GL_RGBA, GL_UNSIGNED_BYTE, tex); +      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); +      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); +      glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); +   } + +   glEnable(GL_LIGHTING); +   glActiveTexture(GL_TEXTURE0); +   glMatrixMode(GL_MODELVIEW); +} + + +static void +Key(unsigned char key, int x, int y) +{ +   if (key == 27) { +      exit(0); +   } +   glutPostRedisplay(); +} + + +int +main(int argc, char **argv) +{ +    GLenum type = GLUT_RGB | GLUT_DOUBLE; + +    glutInit(&argc, argv); +    glutInitWindowPosition(0, 0); +    glutInitWindowSize( 250, 250); +    glutInitDisplayMode(type); +    if (glutCreateWindow("tri-long-fixedfunc") == GL_FALSE) { +       exit(1); +    } +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    Init(); +    glutMainLoop(); +    return 0; +} diff --git a/progs/trivial/pgon-mode.c b/progs/trivial/pgon-mode.c new file mode 100644 index 0000000000..db58638619 --- /dev/null +++ b/progs/trivial/pgon-mode.c @@ -0,0 +1,136 @@ +/** + * Test glPolygonMode. + * A tri-strip w/ two tris is drawn so that the first tri is front-facing + * but the second tri is back-facing. + * Set glPolygonMode differently for the front/back faces + * + */ + + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <GL/glut.h> + +static int Win; +static GLfloat Zrot = 0; +static GLboolean FrontFillBackUnfilled = GL_TRUE; +static GLboolean Lines = GL_TRUE; + + +static void +Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + +   if (FrontFillBackUnfilled) { +      if (Lines) { +         printf("FrontMode = FILL, BackMode = LINE\n"); +         glPolygonMode(GL_BACK, GL_LINE); +      } +      else { +         printf("FrontMode = FILL, BackMode = POINT\n"); +         glPolygonMode(GL_BACK, GL_POINT); +      } +      glPolygonMode(GL_FRONT, GL_FILL); +   } +   else { +      if (Lines) { +         printf("FrontMode = LINE, BackMode = FILL\n"); +         glPolygonMode(GL_FRONT, GL_LINE); +      } +      else { +         printf("FrontMode = POINT, BackMode = FILL\n"); +         glPolygonMode(GL_FRONT, GL_POINT); +      } +      glPolygonMode(GL_BACK, GL_FILL); +   } + +   glPushMatrix(); +   glRotatef(Zrot, 0, 0, 1); + +   glBegin(GL_TRIANGLE_STRIP); +   glVertex2f(-1, 0); +   glVertex2f( 1, 0); +   glVertex2f(0,  1); +   glVertex2f(0, -1); +   glEnd(); + +   glPopMatrix(); + +   glutSwapBuffers(); +} + + +static void +Reshape(int width, int height) +{ +   glViewport(0, 0, width, height); +   glMatrixMode(GL_PROJECTION); +   glLoadIdentity(); +   glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 25.0); +   glMatrixMode(GL_MODELVIEW); +   glLoadIdentity(); +   glTranslatef(0.0, 0.0, -15.0); +} + + +static void +Key(unsigned char key, int x, int y) +{ +   const GLfloat step = 3.0; +   (void) x; +   (void) y; +   switch (key) { +   case 'p': +      FrontFillBackUnfilled = !FrontFillBackUnfilled; +      break; +   case 'l': +      Lines = !Lines; +      break; +   case 'z': +      Zrot -= step; +      break; +   case 'Z': +      Zrot += step; +      break; +   case 27: +      glutDestroyWindow(Win); +      exit(0); +      break; +   } +   glutPostRedisplay(); +} + + +static void +Init(void) +{ +   printf("GL_RENDERER = %s\n", (char*) glGetString(GL_RENDERER)); + +   glLineWidth(3.0); +   glPointSize(3.0); + +   glColor4f(1, 1, 1, 0.8); +   glEnable(GL_BLEND); +   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + +   printf("Press 'p' to toggle polygon mode\n"); +} + + +int +main(int argc, char *argv[]) +{ +   glutInit(&argc, argv); +   glutInitWindowPosition(0, 0); +   glutInitWindowSize(400, 400); +   glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); +   Win = glutCreateWindow(argv[0]); +   glutReshapeFunc(Reshape); +   glutKeyboardFunc(Key); +   glutDisplayFunc(Draw); +   Init(); +   glutMainLoop(); +   return 0; +} diff --git a/progs/trivial/point-clip.c b/progs/trivial/point-clip.c index 32792047c6..7fec54e1db 100644 --- a/progs/trivial/point-clip.c +++ b/progs/trivial/point-clip.c @@ -120,7 +120,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/point-param.c b/progs/trivial/point-param.c index 02500cd34e..96544a0525 100644 --- a/progs/trivial/point-param.c +++ b/progs/trivial/point-param.c @@ -138,7 +138,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/point-sprite.c b/progs/trivial/point-sprite.c new file mode 100644 index 0000000000..583bdca1b7 --- /dev/null +++ b/progs/trivial/point-sprite.c @@ -0,0 +1,174 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + + +#define SIZE 16 +   { +      GLubyte tex2d[SIZE][SIZE][3]; +      GLint s, t; + +      for (s = 0; s < SIZE; s++) { +	 for (t = 0; t < SIZE; t++) { +#if 1 +	    tex2d[t][s][0] = (s < SIZE/2) ? 0 : 255; +	    tex2d[t][s][1] = (t < SIZE/2) ? 0 : 255; +	    tex2d[t][s][2] = 0; +#else +	    tex2d[t][s][0] = s*255/(SIZE-1); +	    tex2d[t][s][1] = t*255/(SIZE-1); +	    tex2d[t][s][2] = 0; +#endif +	 } +      } + +      glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); +      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_REPEAT); +      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); +      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + +      glPixelStorei(GL_UNPACK_ALIGNMENT, 1); +      glTexImage2D(GL_TEXTURE_2D, 0, 3, SIZE, SIZE, 0, +		   GL_RGB, GL_UNSIGNED_BYTE, tex2d); +      glPixelStorei(GL_UNPACK_ALIGNMENT, 4); +      glEnable(GL_TEXTURE_2D); +   } + +   glEnable(GL_POINT_SPRITE); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glPointSize(16.0); + +   glBegin(GL_POINTS); +   glColor3f(1,0,0);  +   glVertex3f( 0.6, -0.6, -30.0); +   glColor3f(1,1,0);  +   glVertex3f( 0.6,  0.6, -30.0); +   glColor3f(1,0,1);  +   glVertex3f(-0.6,  0.6, -30.0); +   glColor3f(0,1,1);  +   glVertex3f(-0.6,  -0.6, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/point-wide-smooth.c b/progs/trivial/point-wide-smooth.c new file mode 100644 index 0000000000..55cbcaec70 --- /dev/null +++ b/progs/trivial/point-wide-smooth.c @@ -0,0 +1,145 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glPointSize(8.0); + +   glEnable(GL_POINT_SMOOTH); +   glEnable(GL_BLEND); +   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + +   glBegin(GL_POINTS); +   glColor3f(1,0,0);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(1,1,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(1,0,1);  +   glVertex3f(-0.9,  0.9, -30.0); +   glColor3f(0,1,1);  +   glVertex3f(-0.9,  -0.9, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB | GLUT_ALPHA; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/point-wide.c b/progs/trivial/point-wide.c index 473ca043f1..265b20097b 100644 --- a/progs/trivial/point-wide.c +++ b/progs/trivial/point-wide.c @@ -34,6 +34,7 @@  GLenum doubleBuffer; +  static void Init(void)  {     fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); @@ -70,6 +71,7 @@ static void Key(unsigned char key, int x, int y)  static void Draw(void)  {     glClear(GL_COLOR_BUFFER_BIT);  +   glDisable(GL_DEPTH_TEST);     glPointSize(8.0); @@ -122,7 +124,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/point.c b/progs/trivial/point.c index 87465bfb2c..8dabfb6ca6 100644 --- a/progs/trivial/point.c +++ b/progs/trivial/point.c @@ -120,7 +120,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/poly-flat-clip.c b/progs/trivial/poly-flat-clip.c new file mode 100644 index 0000000000..72c2a29a0d --- /dev/null +++ b/progs/trivial/poly-flat-clip.c @@ -0,0 +1,140 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  +   glShadeModel(GL_FLAT); +    + +   glBegin(GL_POLYGON); +   glColor3f(1,0,0);  +   glVertex3f( 0, 0, -30.0); +   glColor3f(1,1,0);  +   glVertex3f( 1.3,  1.1, -30.0); +   glColor3f(1,0,1);  +   glVertex3f(-.9,  .9, -30.0); +   glColor3f(0,1,1);  +   glVertex3f(-1.1,  -1.3, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/poly-flat-unfilled-clip.c b/progs/trivial/poly-flat-unfilled-clip.c new file mode 100644 index 0000000000..d3a14a516a --- /dev/null +++ b/progs/trivial/poly-flat-unfilled-clip.c @@ -0,0 +1,144 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  +   glShadeModel(GL_FLAT); + +   glPolygonMode(GL_FRONT, GL_LINE); +   glPolygonMode(GL_BACK, GL_LINE); +   glLineWidth(4.0); +    + +   glBegin(GL_POLYGON); +   glColor3f(1,0,0);  +   glVertex3f( 0, 0, -30.0); +   glColor3f(1,1,0);  +   glVertex3f( 1.3,  1.1, -30.0); +   glColor3f(1,0,1);  +   glVertex3f(-.9,  .9, -30.0); +   glColor3f(0,1,1);  +   glVertex3f(-1.1,  -1.3, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/poly-flat.c b/progs/trivial/poly-flat.c index 747b24dc0c..a847d6828a 100644 --- a/progs/trivial/poly-flat.c +++ b/progs/trivial/poly-flat.c @@ -122,7 +122,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/poly-unfilled.c b/progs/trivial/poly-unfilled.c index e0ae463b08..ae092a830a 100644 --- a/progs/trivial/poly-unfilled.c +++ b/progs/trivial/poly-unfilled.c @@ -121,7 +121,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/poly.c b/progs/trivial/poly.c index bdb9e27aa9..2f254de481 100644 --- a/progs/trivial/poly.c +++ b/progs/trivial/poly.c @@ -120,7 +120,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/psb_context.c b/progs/trivial/psb_context.c new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/progs/trivial/psb_context.c diff --git a/progs/trivial/quad-clip-all-vertices.c b/progs/trivial/quad-clip-all-vertices.c index 019ef0c479..3e0f3d9494 100644 --- a/progs/trivial/quad-clip-all-vertices.c +++ b/progs/trivial/quad-clip-all-vertices.c @@ -120,7 +120,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/quad-clip-nearplane.c b/progs/trivial/quad-clip-nearplane.c index be9b9c619a..1e8056c474 100644 --- a/progs/trivial/quad-clip-nearplane.c +++ b/progs/trivial/quad-clip-nearplane.c @@ -133,7 +133,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0);      glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/quad-clip.c b/progs/trivial/quad-clip.c index 9f3a45caec..504fef3dc5 100644 --- a/progs/trivial/quad-clip.c +++ b/progs/trivial/quad-clip.c @@ -120,7 +120,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/quad-degenerate.c b/progs/trivial/quad-degenerate.c index b14b0f1d87..8304740857 100644 --- a/progs/trivial/quad-degenerate.c +++ b/progs/trivial/quad-degenerate.c @@ -125,7 +125,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/quad-flat.c b/progs/trivial/quad-flat.c index d6e9f02120..bd8be7c43e 100644 --- a/progs/trivial/quad-flat.c +++ b/progs/trivial/quad-flat.c @@ -130,7 +130,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/quad-offset-factor.c b/progs/trivial/quad-offset-factor.c index 861d3461c0..90943d908f 100644 --- a/progs/trivial/quad-offset-factor.c +++ b/progs/trivial/quad-offset-factor.c @@ -27,11 +27,6 @@  #include <stdlib.h>  #include <GL/glut.h> - -#define CI_OFFSET_1 16 -#define CI_OFFSET_2 32 - -  GLenum doubleBuffer;  static void Init(void) @@ -45,7 +40,6 @@ static void Init(void)  static void Reshape(int width, int height)  { -      glViewport(0, 0, (GLint)width, (GLint)height);      glMatrixMode(GL_PROJECTION); @@ -56,7 +50,6 @@ static void Reshape(int width, int height)  static void Key(unsigned char key, int x, int y)  { -      switch (key) {        case 27:  	exit(1); @@ -75,7 +68,6 @@ static void quad( float half )     glVertex3f(-half/9.0,  half/9.0, -25.0 - half);     glVertex3f(-half/9.0, -half/9.0, -25.0 - half);     glEnd(); -  }  static void Draw(void) @@ -83,27 +75,24 @@ static void Draw(void)     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);      glEnable(GL_DEPTH_TEST); - - +   /* red: offset back */     glEnable(GL_POLYGON_OFFSET_FILL);     glPolygonOffset(1, 0); -     glColor3f(1,0,0);      quad(9); +   /* green: no offset */     glDisable(GL_POLYGON_OFFSET_FILL);      glColor3f(0,1,0);      quad(6); - +   /* black: offset zero, should not be visible because of z test */     glEnable(GL_POLYGON_OFFSET_FILL);      glPolygonOffset(0, 0);  - -   /* Black - should not be visible -    */     glColor3f(0,0,0);      quad(6); +   /* blue: offset forward */     glEnable(GL_POLYGON_OFFSET_FILL);     glPolygonOffset(-1, 0);     glColor3f(0,0,1);  @@ -149,7 +138,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB | GLUT_DEPTH; +    type = GLUT_RGB | GLUT_ALPHA | GLUT_DEPTH;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); @@ -163,5 +152,5 @@ int main(int argc, char **argv)      glutKeyboardFunc(Key);      glutDisplayFunc(Draw);      glutMainLoop(); -	return 0; +    return 0;  } diff --git a/progs/trivial/quad-offset-unfilled.c b/progs/trivial/quad-offset-unfilled.c index 1cecf3c1ce..1ad44cdcae 100644 --- a/progs/trivial/quad-offset-unfilled.c +++ b/progs/trivial/quad-offset-unfilled.c @@ -72,6 +72,8 @@ static void Draw(void)     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);      glEnable(GL_DEPTH_TEST); +   glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); +     glEnable(GL_POLYGON_OFFSET_FILL); @@ -95,7 +97,7 @@ static void Draw(void)     glVertex3f(-0.6,  -0.6, -35.0);     glEnd(); -   glEnable(GL_POLYGON_OFFSET_FILL); +   glEnable(GL_POLYGON_OFFSET_LINE);     glPolygonOffset(-1, 0);     glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); @@ -149,7 +151,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB | GLUT_DEPTH; +    type = GLUT_RGB | GLUT_ALPHA | GLUT_DEPTH;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/quad-offset-units.c b/progs/trivial/quad-offset-units.c index 5c41be308e..d5db21469e 100644 --- a/progs/trivial/quad-offset-units.c +++ b/progs/trivial/quad-offset-units.c @@ -27,11 +27,6 @@  #include <stdlib.h>  #include <GL/glut.h> - -#define CI_OFFSET_1 16 -#define CI_OFFSET_2 32 - -  GLenum doubleBuffer;  static void Init(void) @@ -45,7 +40,6 @@ static void Init(void)  static void Reshape(int width, int height)  { -      glViewport(0, 0, (GLint)width, (GLint)height);      glMatrixMode(GL_PROJECTION); @@ -56,7 +50,6 @@ static void Reshape(int width, int height)  static void Key(unsigned char key, int x, int y)  { -      switch (key) {        case 27:  	exit(1); @@ -75,7 +68,6 @@ static void quad( float half )     glVertex3f(-half/9.0,  half/9.0, -25.0 - half);     glVertex3f(-half/9.0, -half/9.0, -25.0 - half);     glEnd(); -  }  static void Draw(void) @@ -83,27 +75,26 @@ static void Draw(void)     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);      glEnable(GL_DEPTH_TEST); - - +   /* red: offset back */     glEnable(GL_POLYGON_OFFSET_FILL);     glPolygonOffset(0, 4); -     glColor3f(1,0,0);      quad(9); +   /* black: no offset */     glDisable(GL_POLYGON_OFFSET_FILL);      glColor3f(0,0,0);      quad(6); +   /* green: offset 0 (this should obscure the black quad) */     glEnable(GL_POLYGON_OFFSET_FILL);     glPolygonOffset(0, 0); -     glDepthFunc( GL_EQUAL );     glColor3f(0,1,0);      quad(6); -   glDepthFunc( GL_LESS ); - +   /* blue: offset forward */ +   glDepthFunc( GL_LESS );     glPolygonOffset(0, -4);     glColor3f(0,0,1);      quad(3); @@ -148,7 +139,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB | GLUT_DEPTH; +    type = GLUT_RGB | GLUT_ALPHA | GLUT_DEPTH;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); @@ -162,5 +153,5 @@ int main(int argc, char **argv)      glutKeyboardFunc(Key);      glutDisplayFunc(Draw);      glutMainLoop(); -	return 0; +    return 0;  } diff --git a/progs/trivial/quad-tex-2d.c b/progs/trivial/quad-tex-2d.c index 70b9fbf8c6..97c9fc54d8 100644 --- a/progs/trivial/quad-tex-2d.c +++ b/progs/trivial/quad-tex-2d.c @@ -27,11 +27,11 @@  #include <stdlib.h>  #include <GL/glut.h> - -#define CI_OFFSET_1 16 -#define CI_OFFSET_2 32 - +static GLenum Target = GL_TEXTURE_2D; +static GLenum Filter = GL_NEAREST;  GLenum doubleBuffer; +static float Rot = 0; +static int win = 0;  static void Init(void)  { @@ -41,7 +41,7 @@ static void Init(void)     glClearColor(0.0, 0.0, 1.0, 0.0); -#define SIZE 16 +#define SIZE 32     {        GLubyte tex2d[SIZE][SIZE][3];        GLint s, t; @@ -60,59 +60,77 @@ static void Init(void)  	 }        } +      glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + +      if (Target == GL_TEXTURE_1D) +         glTexImage1D(Target, 0, 3, SIZE, 0, GL_RGB, GL_UNSIGNED_BYTE, tex2d); +      else +         glTexImage2D(Target, 0, 3, SIZE, SIZE, 0, +                      GL_RGB, GL_UNSIGNED_BYTE, tex2d); + +      glEnable(Target);        glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); -      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_REPEAT); -      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); -      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); +      glTexParameterf(Target, GL_TEXTURE_WRAP_R, GL_REPEAT); +      glTexParameterf(Target, GL_TEXTURE_MIN_FILTER, Filter); +      glTexParameterf(Target, GL_TEXTURE_MAG_FILTER, Filter); -      glPixelStorei(GL_UNPACK_ALIGNMENT, 1); -      glTexImage2D(GL_TEXTURE_2D, 0, 3, SIZE, SIZE, 0, -		   GL_RGB, GL_UNSIGNED_BYTE, tex2d);        glPixelStorei(GL_UNPACK_ALIGNMENT, 4); -      glEnable(GL_TEXTURE_2D);     } -  }  static void Reshape(int width, int height)  { - -    glViewport(0, 0, (GLint)width, (GLint)height); - -    glMatrixMode(GL_PROJECTION); -    glLoadIdentity(); -    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); -    glMatrixMode(GL_MODELVIEW); +   glViewport(0, 0, (GLint)width, (GLint)height); +   glMatrixMode(GL_PROJECTION); +   glLoadIdentity(); +#if 0 +   glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +#else +   glFrustum(-1, 1, -1, 1, 10, 20); +#endif +   glMatrixMode(GL_MODELVIEW); +   glLoadIdentity(); +   glTranslatef(0, 0, -15);  }  static void Key(unsigned char key, int x, int y)  { - -    switch (key) { -      case 27: -	exit(1); -      default: -	return; -    } - -    glutPostRedisplay(); +   switch (key) { +   case 'r': +      Rot += 10.0; +      break; +   case 'R': +      Rot -= 10.0; +      break; +   case 27: +      glutDestroyWindow(win); +      exit(0); +   default: +      return; +   } +   glutPostRedisplay();  }  static void Draw(void)  {     glClear(GL_COLOR_BUFFER_BIT);  +   glPushMatrix(); +   glRotatef(Rot, 0, 1, 0); +     glBegin(GL_QUADS);     glTexCoord2f(1,0);  -   glVertex3f( 0.9, -0.9, -30.0); +   glVertex3f( 0.9, -0.9, 0.0);     glTexCoord2f(1,1);  -   glVertex3f( 0.9,  0.9, -30.0); +   glVertex3f( 0.9,  0.9, 0.0);     glTexCoord2f(0,1);  -   glVertex3f(-0.9,  0.9, -30.0); +   glVertex3f(-0.9,  0.9, 0.0);     glTexCoord2f(0,0);  -   glVertex3f(-0.9,  -0.9, -30.0); +   glVertex3f(-0.9,  -0.9, 0.0);     glEnd(); +   glPopMatrix(); +     glFlush();     if (doubleBuffer) { @@ -155,7 +173,8 @@ int main(int argc, char **argv)      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); -    if (glutCreateWindow("First Tri") == GL_FALSE) { +    win = glutCreateWindow("First Tri"); +    if (!win) {  	exit(1);      } @@ -165,5 +184,5 @@ int main(int argc, char **argv)      glutKeyboardFunc(Key);      glutDisplayFunc(Draw);      glutMainLoop(); -	return 0; +    return 0;  } diff --git a/progs/trivial/quad-tex-3d.c b/progs/trivial/quad-tex-3d.c index 0b2dcc08a5..fd02d9d6ad 100644 --- a/progs/trivial/quad-tex-3d.c +++ b/progs/trivial/quad-tex-3d.c @@ -159,7 +159,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/quad-tex-alpha.c b/progs/trivial/quad-tex-alpha.c new file mode 100644 index 0000000000..cd73f013eb --- /dev/null +++ b/progs/trivial/quad-tex-alpha.c @@ -0,0 +1,170 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); + +#define SIZE 16 +   { +      GLubyte tex2d[SIZE][SIZE][4]; +      GLint s, t; + +      for (s = 0; s < SIZE; s++) { +	 for (t = 0; t < SIZE; t++) { +	    tex2d[t][s][0] = (s < SIZE/2) ? 0 : 255; +	    tex2d[t][s][1] = (t < SIZE/2) ? 0 : 255; +	    tex2d[t][s][2] = 0; +	    tex2d[t][s][3] = ((t^s) & 3) * 63; +	 } +      } + +      glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); +      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_REPEAT); +      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); +      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + +      glPixelStorei(GL_UNPACK_ALIGNMENT, 1); +      glTexImage2D(GL_TEXTURE_2D, 0, 4, SIZE, SIZE, 0, +		   GL_RGBA, GL_UNSIGNED_BYTE, tex2d); +      glPixelStorei(GL_UNPACK_ALIGNMENT, 4); +      glEnable(GL_TEXTURE_2D); +   } +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glDisable(GL_DEPTH_TEST); +   glDisable(GL_STENCIL_TEST); +   glEnable(GL_ALPHA_TEST); +   glAlphaFunc(GL_GEQUAL, 0.5); + +   glBegin(GL_QUADS); +   glTexCoord2f(1,0);  +   glVertex3f( 0.9, -0.9, -30.0); +   glTexCoord2f(1,1);  +   glVertex3f( 0.9,  0.9, -30.0); +   glTexCoord2f(0,1);  +   glVertex3f(-0.9,  0.9, -30.0); +   glTexCoord2f(0,0);  +   glVertex3f(-0.9,  -0.9, -30.0); +   glEnd(); + + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(100, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/quad-unfilled-clip.c b/progs/trivial/quad-unfilled-clip.c new file mode 100644 index 0000000000..e298bd455b --- /dev/null +++ b/progs/trivial/quad-unfilled-clip.c @@ -0,0 +1,139 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  +   glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + +   glBegin(GL_QUADS); +   glColor3f(1,0,0);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(1,1,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(1,0,1);  +   glVertex3f(-1.9,  0.9, -30.0); +   glColor3f(0,1,1);  +   glVertex3f(-0.9,  -0.9, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/quad-unfilled-stipple.c b/progs/trivial/quad-unfilled-stipple.c new file mode 100644 index 0000000000..2036aacbaa --- /dev/null +++ b/progs/trivial/quad-unfilled-stipple.c @@ -0,0 +1,142 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  +   glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + +   glEnable(GL_LINE_STIPPLE); +   glLineStipple( 5, 0xfffe ); + +   glBegin(GL_QUADS); +   glColor3f(1,0,0);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(1,1,1);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(0,1,0);  +   glVertex3f(-0.9,  0.9, -30.0); +   glColor3f(0,0,0);  +   glVertex3f(-0.9,  -0.9, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/quad-unfilled.c b/progs/trivial/quad-unfilled.c index 9d63d2dfb9..9d0087ce08 100644 --- a/progs/trivial/quad-unfilled.c +++ b/progs/trivial/quad-unfilled.c @@ -121,7 +121,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/quads.c b/progs/trivial/quads.c index 1ca82cd9f8..307a9e0720 100644 --- a/progs/trivial/quads.c +++ b/progs/trivial/quads.c @@ -138,7 +138,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/quadstrip-cont.c b/progs/trivial/quadstrip-cont.c new file mode 100644 index 0000000000..c6c8f69f8c --- /dev/null +++ b/progs/trivial/quadstrip-cont.c @@ -0,0 +1,162 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glBegin(GL_QUAD_STRIP); +   glColor3f(1,0,0);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(1,1,0);  +   glVertex3f( 0.9,  0.9, -30.0); + +   glColor3f(1,0,0);  +   glVertex3f( 0.1, -0.8, -30.0); +   glColor3f(1,1,0);  +   glVertex3f( 0.1,  0.8, -30.0); + +   glColor3f(0,1,1);  +   glVertex3f(-0.1,  -0.9, -30.0); +   glColor3f(1,0,1);  +   glVertex3f(-0.1,  0.9, -30.0); + +   glColor3f(0,1,1);  +   glVertex3f(-0.9,  -0.8, -30.0); +   glColor3f(1,0,1);  +   glVertex3f(-0.9,  0.8, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static void +idle(void) +{ +  glutPostRedisplay(); +} + + +static void  +visible(int vis) +{ +  if (vis == GLUT_VISIBLE) +    glutIdleFunc(idle); +  else +    glutIdleFunc(NULL); +} + + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutVisibilityFunc(visible); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/quadstrip-flat.c b/progs/trivial/quadstrip-flat.c index 061a0e409e..d02135f702 100644 --- a/progs/trivial/quadstrip-flat.c +++ b/progs/trivial/quadstrip-flat.c @@ -132,7 +132,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/quadstrip.c b/progs/trivial/quadstrip.c index 342463f1a2..ff8644be09 100644 --- a/progs/trivial/quadstrip.c +++ b/progs/trivial/quadstrip.c @@ -126,7 +126,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/readpixels.c b/progs/trivial/readpixels.c new file mode 100644 index 0000000000..783468ae2f --- /dev/null +++ b/progs/trivial/readpixels.c @@ -0,0 +1,101 @@ +/* + * glRead/DrawPixels test + */ + + +#define GL_GLEXT_PROTOTYPES +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + +static int Width = 250, Height = 250; +static GLfloat Zoom = 1.0; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); +   glClearColor(0.3, 0.1, 0.3, 0.0); +} + +static void Reshape(int width, int height) +{ +   Width = width / 2; +   Height = height; +   /* draw on left half (we'll read that area) */ +   glViewport(0, 0, Width, height); +   glMatrixMode(GL_PROJECTION); +   glLoadIdentity(); +   glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +   glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ +   switch (key) { +   case 27: +      exit(0); +   default: +      return; +   } +   glutPostRedisplay(); +} + +static void Draw(void) +{ +   GLfloat *image = (GLfloat *) malloc(Width * Height * 4 * sizeof(GLfloat)); + +   glClear(GL_COLOR_BUFFER_BIT);  + +   glBegin(GL_TRIANGLES); +   glColor3f(.8,0,0);  +   glVertex3f(-0.9, -0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(0,0,.7);  +   glVertex3f( 0.0,  0.9, -30.0); +   glEnd(); + +   glBegin(GL_QUADS); +   glColor3f(1, 1, 1); +   glVertex2f(-1.0, -1.0); +   glVertex2f(-0.9, -1.0); +   glVertex2f(-0.9, -0.9); +   glVertex2f(-1.0, -0.9); +   glEnd(); + +   glReadPixels(0, 0, Width, Height, GL_RGBA, GL_FLOAT, image); +   printf("Pixel(0,0) = %f, %f, %f, %f\n", +          image[0], image[1], image[2], image[3]); +   /* draw to right half of window */ +   glWindowPos2iARB(Width, 0); +   glPixelZoom(Zoom, Zoom); +   glDrawPixels(Width, Height, GL_RGBA, GL_FLOAT, image); +   free(image); + +   glutSwapBuffers(); +} + +int main(int argc, char **argv) +{ +   glutInit(&argc, argv); +   glutInitWindowPosition(0, 0); +   glutInitWindowSize(Width*2, Height); +   glutInitDisplayMode(GLUT_RGB | GLUT_ALPHA | GLUT_DOUBLE); +   if (glutCreateWindow(argv[0]) == GL_FALSE) { +      exit(1); +   } + +   if (argc > 1) +      Zoom = atof(argv[1]); + +   Init(); + +   glutReshapeFunc(Reshape); +   glutKeyboardFunc(Key); +   glutDisplayFunc(Draw); +   glutMainLoop(); +   return 0; +} diff --git a/progs/trivial/tri-alpha-tex.c b/progs/trivial/tri-alpha-tex.c new file mode 100644 index 0000000000..776f39dcc3 --- /dev/null +++ b/progs/trivial/tri-alpha-tex.c @@ -0,0 +1,179 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); + +#define SIZE 16 +   { +      GLubyte tex2d[SIZE][SIZE][4]; +      GLint s, t; + +      for (s = 0; s < SIZE; s++) { +	 for (t = 0; t < SIZE; t++) { +	    tex2d[t][s][0] = (s < SIZE/2) ? 0 : 255; +	    tex2d[t][s][1] = (t < SIZE/2) ? 0 : 255; +	    tex2d[t][s][2] = 0; +	    tex2d[t][s][3] = ((t^s) & 3) * 63; +	 } +      } + +      glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); +      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_REPEAT); +      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); +      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + +      glPixelStorei(GL_UNPACK_ALIGNMENT, 1); +      glTexImage2D(GL_TEXTURE_2D, 0, 4, SIZE, SIZE, 0, +		   GL_RGBA, GL_UNSIGNED_BYTE, tex2d); +      glPixelStorei(GL_UNPACK_ALIGNMENT, 4); +      glEnable(GL_TEXTURE_2D); +   } +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glDisable(GL_DEPTH_TEST); +   glDisable(GL_STENCIL_TEST); +   glEnable(GL_ALPHA_TEST); +   glAlphaFunc(GL_GEQUAL, 0.5); + +   glBegin(GL_QUADS); +   glTexCoord2f(1,0);  +   glVertex3f( 0.9, -0.9, -30.0); +   glTexCoord2f(1,1);  +   glVertex3f( 0.9,  0.9, -30.0); +   glTexCoord2f(0,1);  +   glVertex3f(-0.9,  0.9, -30.0); +   glTexCoord2f(0,0);  +   glVertex3f(-0.9,  -0.9, -30.0); +   glEnd(); +#if 0 +   glBegin(GL_TRIANGLES); +   glColor4f(0,0,.7,1);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor4f(.8,0,0,.5);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor4f(0,.9,0,0);  +   glVertex3f(-0.9,  0.0, -30.0); +   glEnd(); +#endif + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(100, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/tri-alpha.c b/progs/trivial/tri-alpha.c new file mode 100644 index 0000000000..90cfdbe199 --- /dev/null +++ b/progs/trivial/tri-alpha.c @@ -0,0 +1,141 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glDisable(GL_DEPTH_TEST); +   glDisable(GL_STENCIL_TEST); +   glEnable(GL_ALPHA_TEST); +   glAlphaFunc(GL_GEQUAL, 0.5); + +   glBegin(GL_TRIANGLES); +   glColor4f(0,0,.7,1);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor4f(.8,0,0,.5);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor4f(0,.9,0,0);  +   glVertex3f(-0.9,  0.0, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(100, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/tri-blend-color.c b/progs/trivial/tri-blend-color.c new file mode 100644 index 0000000000..b9a539410b --- /dev/null +++ b/progs/trivial/tri-blend-color.c @@ -0,0 +1,141 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClearColor(0.0, 0.0, 1.0, 0.0); +   glClear(GL_COLOR_BUFFER_BIT);  + +   glEnable(GL_BLEND); +   glBlendEquation(GL_FUNC_ADD); +   glBlendColor(1.0, 0, 0, 0); +   glBlendFunc(GL_CONSTANT_COLOR, GL_SRC_COLOR); + +   glBegin(GL_TRIANGLES); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(100, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/tri-blend-max.c b/progs/trivial/tri-blend-max.c new file mode 100644 index 0000000000..ebc241c1c1 --- /dev/null +++ b/progs/trivial/tri-blend-max.c @@ -0,0 +1,145 @@ +/* + * Copyright (c) 1993-1997, Silicon Graphics, Inc. + * ALL RIGHTS RESERVED  + * Permission to use, copy, modify, and distribute this software for  + * any purpose and without fee is hereby granted, provided that the above + * copyright notice appear in all copies and that both the copyright notice + * and this permission notice appear in supporting documentation, and that  + * the name of Silicon Graphics, Inc. not be used in advertising + * or publicity pertaining to distribution of the software without specific, + * written prior permission.  + * + * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" + * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR + * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON + * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, + * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY + * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, + * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF + * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE + * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. + *  + * US Government Users Restricted Rights  + * Use, duplication, or disclosure by the Government is subject to + * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph + * (c)(1)(ii) of the Rights in Technical Data and Computer Software + * clause at DFARS 252.227-7013 and/or in similar or successor + * clauses in the FAR or the DOD or NASA FAR Supplement. + * Unpublished-- rights reserved under the copyright laws of the + * United States.  Contractor/manufacturer is Silicon Graphics, + * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311. + * + * OpenGL(R) is a registered trademark of Silicon Graphics, Inc. + */ + +/* + *  alpha.c + *  This program draws several overlapping filled polygons + *  to demonstrate the effect order has on alpha blending results. + *  Use the 't' key to toggle the order of drawing polygons. + */ +#include <GL/glut.h> +#include <stdlib.h> + +static int leftFirst = GL_TRUE; + +/*  Initialize alpha blending function. + */ +static void init(void) +{ +   glBlendEquation (GL_MAX); +   glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +   glShadeModel (GL_FLAT); +   glClearColor (1.0, 0.0, 0.0, 0.0); +} + +static void drawLeftTriangle(void) +{ +   /* draw yellow triangle on LHS of screen */ + +   glBegin (GL_TRIANGLES); +      glColor4f(1.0, 1.0, 0.0, 0.75); +      glVertex3f(0.1, 0.9, 0.0);  +      glVertex3f(0.1, 0.1, 0.0);  +      glVertex3f(0.7, 0.5, 0.0);  +   glEnd(); +} + +static void drawRightTriangle(void) +{ +   /* draw cyan triangle on RHS of screen */ + +   glEnable (GL_BLEND); +   glBegin (GL_TRIANGLES); +      glColor4f(0.0, 1.0, 1.0, 0.75); +      glVertex3f(0.9, 0.9, 0.0);  +      glVertex3f(0.3, 0.5, 0.0);  +      glVertex3f(0.9, 0.1, 0.0);  +   glEnd(); +   glDisable (GL_BLEND); +} + +void display(void) +{ +   glClear(GL_COLOR_BUFFER_BIT); + +   if (leftFirst) { +      drawLeftTriangle(); +      drawRightTriangle(); +   } +   else { +      drawRightTriangle(); +      drawLeftTriangle(); +   } + +   glFlush(); +} + +void reshape(int w, int h) +{ +   glViewport(0, 0, (GLsizei) w, (GLsizei) h); +   glMatrixMode(GL_PROJECTION); +   glLoadIdentity(); +   if (w <= h)  +      gluOrtho2D (0.0, 1.0, 0.0, 1.0*(GLfloat)h/(GLfloat)w); +   else  +      gluOrtho2D (0.0, 1.0*(GLfloat)w/(GLfloat)h, 0.0, 1.0); +} + +/* ARGSUSED1 */ +void keyboard(unsigned char key, int x, int y) +{ +   switch (key) { +      case 't': +      case 'T': +         leftFirst = !leftFirst; +         glutPostRedisplay();	 +         break; +      case 27:  /*  Escape key  */ +         exit(0); +         break; +      default: +         break; +   } +} + +/*  Main Loop + *  Open window with initial window size, title bar,  + *  RGBA display mode, and handle input events. + */ +int main(int argc, char** argv) +{ +   glutInit(&argc, argv); +   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); +   glutInitWindowSize (200, 200); +   glutCreateWindow (argv[0]); +   init(); +   glutReshapeFunc (reshape); +   glutKeyboardFunc (keyboard); +   glutDisplayFunc (display); +   glutMainLoop(); +   return 0; +} diff --git a/progs/trivial/tri-blend-min.c b/progs/trivial/tri-blend-min.c new file mode 100644 index 0000000000..00b2dec705 --- /dev/null +++ b/progs/trivial/tri-blend-min.c @@ -0,0 +1,145 @@ +/* + * Copyright (c) 1993-1997, Silicon Graphics, Inc. + * ALL RIGHTS RESERVED  + * Permission to use, copy, modify, and distribute this software for  + * any purpose and without fee is hereby granted, provided that the above + * copyright notice appear in all copies and that both the copyright notice + * and this permission notice appear in supporting documentation, and that  + * the name of Silicon Graphics, Inc. not be used in advertising + * or publicity pertaining to distribution of the software without specific, + * written prior permission.  + * + * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" + * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR + * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON + * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, + * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY + * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, + * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF + * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE + * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. + *  + * US Government Users Restricted Rights  + * Use, duplication, or disclosure by the Government is subject to + * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph + * (c)(1)(ii) of the Rights in Technical Data and Computer Software + * clause at DFARS 252.227-7013 and/or in similar or successor + * clauses in the FAR or the DOD or NASA FAR Supplement. + * Unpublished-- rights reserved under the copyright laws of the + * United States.  Contractor/manufacturer is Silicon Graphics, + * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311. + * + * OpenGL(R) is a registered trademark of Silicon Graphics, Inc. + */ + +/* + *  alpha.c + *  This program draws several overlapping filled polygons + *  to demonstrate the effect order has on alpha blending results. + *  Use the 't' key to toggle the order of drawing polygons. + */ +#include <GL/glut.h> +#include <stdlib.h> + +static int leftFirst = GL_TRUE; + +/*  Initialize alpha blending function. + */ +static void init(void) +{ +   glBlendEquation (GL_MIN); +   glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +   glShadeModel (GL_FLAT); +   glClearColor (1.0, 0.0, 0.0, 0.0); +} + +static void drawLeftTriangle(void) +{ +   /* draw yellow triangle on LHS of screen */ + +   glBegin (GL_TRIANGLES); +      glColor4f(1.0, 1.0, 0.0, 0.75); +      glVertex3f(0.1, 0.9, 0.0);  +      glVertex3f(0.1, 0.1, 0.0);  +      glVertex3f(0.7, 0.5, 0.0);  +   glEnd(); +} + +static void drawRightTriangle(void) +{ +   /* draw cyan triangle on RHS of screen */ + +   glEnable (GL_BLEND); +   glBegin (GL_TRIANGLES); +      glColor4f(0.0, 1.0, 1.0, 0.75); +      glVertex3f(0.9, 0.9, 0.0);  +      glVertex3f(0.3, 0.5, 0.0);  +      glVertex3f(0.9, 0.1, 0.0);  +   glEnd(); +   glDisable (GL_BLEND); +} + +void display(void) +{ +   glClear(GL_COLOR_BUFFER_BIT); + +   if (leftFirst) { +      drawLeftTriangle(); +      drawRightTriangle(); +   } +   else { +      drawRightTriangle(); +      drawLeftTriangle(); +   } + +   glFlush(); +} + +void reshape(int w, int h) +{ +   glViewport(0, 0, (GLsizei) w, (GLsizei) h); +   glMatrixMode(GL_PROJECTION); +   glLoadIdentity(); +   if (w <= h)  +      gluOrtho2D (0.0, 1.0, 0.0, 1.0*(GLfloat)h/(GLfloat)w); +   else  +      gluOrtho2D (0.0, 1.0*(GLfloat)w/(GLfloat)h, 0.0, 1.0); +} + +/* ARGSUSED1 */ +void keyboard(unsigned char key, int x, int y) +{ +   switch (key) { +      case 't': +      case 'T': +         leftFirst = !leftFirst; +         glutPostRedisplay();	 +         break; +      case 27:  /*  Escape key  */ +         exit(0); +         break; +      default: +         break; +   } +} + +/*  Main Loop + *  Open window with initial window size, title bar,  + *  RGBA display mode, and handle input events. + */ +int main(int argc, char** argv) +{ +   glutInit(&argc, argv); +   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); +   glutInitWindowSize (200, 200); +   glutCreateWindow (argv[0]); +   init(); +   glutReshapeFunc (reshape); +   glutKeyboardFunc (keyboard); +   glutDisplayFunc (display); +   glutMainLoop(); +   return 0; +} diff --git a/progs/trivial/tri-blend-revsub.c b/progs/trivial/tri-blend-revsub.c new file mode 100644 index 0000000000..be187fd4ce --- /dev/null +++ b/progs/trivial/tri-blend-revsub.c @@ -0,0 +1,145 @@ +/* + * Copyright (c) 1993-1997, Silicon Graphics, Inc. + * ALL RIGHTS RESERVED  + * Permission to use, copy, modify, and distribute this software for  + * any purpose and without fee is hereby granted, provided that the above + * copyright notice appear in all copies and that both the copyright notice + * and this permission notice appear in supporting documentation, and that  + * the name of Silicon Graphics, Inc. not be used in advertising + * or publicity pertaining to distribution of the software without specific, + * written prior permission.  + * + * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" + * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR + * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON + * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, + * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY + * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, + * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF + * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE + * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. + *  + * US Government Users Restricted Rights  + * Use, duplication, or disclosure by the Government is subject to + * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph + * (c)(1)(ii) of the Rights in Technical Data and Computer Software + * clause at DFARS 252.227-7013 and/or in similar or successor + * clauses in the FAR or the DOD or NASA FAR Supplement. + * Unpublished-- rights reserved under the copyright laws of the + * United States.  Contractor/manufacturer is Silicon Graphics, + * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311. + * + * OpenGL(R) is a registered trademark of Silicon Graphics, Inc. + */ + +/* + *  alpha.c + *  This program draws several overlapping filled polygons + *  to demonstrate the effect order has on alpha blending results. + *  Use the 't' key to toggle the order of drawing polygons. + */ +#include <GL/glut.h> +#include <stdlib.h> + +static int leftFirst = GL_TRUE; + +/*  Initialize alpha blending function. + */ +static void init(void) +{ +   glBlendEquation (GL_FUNC_REVERSE_SUBTRACT); +   glBlendFunc (GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); +   glShadeModel (GL_FLAT); +   glClearColor (1.0, 0.0, 0.0, 0.0); +} + +static void drawLeftTriangle(void) +{ +   /* draw yellow triangle on LHS of screen */ + +   glBegin (GL_TRIANGLES); +      glColor4f(1.0, 1.0, 0.0, 0.75); +      glVertex3f(0.1, 0.9, 0.0);  +      glVertex3f(0.1, 0.1, 0.0);  +      glVertex3f(0.7, 0.5, 0.0);  +   glEnd(); +} + +static void drawRightTriangle(void) +{ +   /* draw cyan triangle on RHS of screen */ + +   glEnable (GL_BLEND); +   glBegin (GL_TRIANGLES); +      glColor4f(0.0, 1.0, 1.0, 0.75); +      glVertex3f(0.9, 0.9, 0.0);  +      glVertex3f(0.3, 0.5, 0.0);  +      glVertex3f(0.9, 0.1, 0.0);  +   glEnd(); +   glDisable (GL_BLEND); +} + +void display(void) +{ +   glClear(GL_COLOR_BUFFER_BIT); + +   if (leftFirst) { +      drawLeftTriangle(); +      drawRightTriangle(); +   } +   else { +      drawRightTriangle(); +      drawLeftTriangle(); +   } + +   glFlush(); +} + +void reshape(int w, int h) +{ +   glViewport(0, 0, (GLsizei) w, (GLsizei) h); +   glMatrixMode(GL_PROJECTION); +   glLoadIdentity(); +   if (w <= h)  +      gluOrtho2D (0.0, 1.0, 0.0, 1.0*(GLfloat)h/(GLfloat)w); +   else  +      gluOrtho2D (0.0, 1.0*(GLfloat)w/(GLfloat)h, 0.0, 1.0); +} + +/* ARGSUSED1 */ +void keyboard(unsigned char key, int x, int y) +{ +   switch (key) { +      case 't': +      case 'T': +         leftFirst = !leftFirst; +         glutPostRedisplay();	 +         break; +      case 27:  /*  Escape key  */ +         exit(0); +         break; +      default: +         break; +   } +} + +/*  Main Loop + *  Open window with initial window size, title bar,  + *  RGBA display mode, and handle input events. + */ +int main(int argc, char** argv) +{ +   glutInit(&argc, argv); +   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); +   glutInitWindowSize (200, 200); +   glutCreateWindow (argv[0]); +   init(); +   glutReshapeFunc (reshape); +   glutKeyboardFunc (keyboard); +   glutDisplayFunc (display); +   glutMainLoop(); +   return 0; +} diff --git a/progs/trivial/tri-blend-sub.c b/progs/trivial/tri-blend-sub.c new file mode 100644 index 0000000000..d207791108 --- /dev/null +++ b/progs/trivial/tri-blend-sub.c @@ -0,0 +1,145 @@ +/* + * Copyright (c) 1993-1997, Silicon Graphics, Inc. + * ALL RIGHTS RESERVED  + * Permission to use, copy, modify, and distribute this software for  + * any purpose and without fee is hereby granted, provided that the above + * copyright notice appear in all copies and that both the copyright notice + * and this permission notice appear in supporting documentation, and that  + * the name of Silicon Graphics, Inc. not be used in advertising + * or publicity pertaining to distribution of the software without specific, + * written prior permission.  + * + * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" + * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR + * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON + * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, + * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY + * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, + * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF + * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE + * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. + *  + * US Government Users Restricted Rights  + * Use, duplication, or disclosure by the Government is subject to + * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph + * (c)(1)(ii) of the Rights in Technical Data and Computer Software + * clause at DFARS 252.227-7013 and/or in similar or successor + * clauses in the FAR or the DOD or NASA FAR Supplement. + * Unpublished-- rights reserved under the copyright laws of the + * United States.  Contractor/manufacturer is Silicon Graphics, + * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311. + * + * OpenGL(R) is a registered trademark of Silicon Graphics, Inc. + */ + +/* + *  alpha.c + *  This program draws several overlapping filled polygons + *  to demonstrate the effect order has on alpha blending results. + *  Use the 't' key to toggle the order of drawing polygons. + */ +#include <GL/glut.h> +#include <stdlib.h> + +static int leftFirst = GL_TRUE; + +/*  Initialize alpha blending function. + */ +static void init(void) +{ +   glBlendEquation (GL_FUNC_SUBTRACT); +   glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +   glShadeModel (GL_FLAT); +   glClearColor (1.0, 0.0, 0.0, 0.0); +} + +static void drawLeftTriangle(void) +{ +   /* draw yellow triangle on LHS of screen */ + +   glBegin (GL_TRIANGLES); +      glColor4f(1.0, 1.0, 0.0, 0.75); +      glVertex3f(0.1, 0.9, 0.0);  +      glVertex3f(0.1, 0.1, 0.0);  +      glVertex3f(0.7, 0.5, 0.0);  +   glEnd(); +} + +static void drawRightTriangle(void) +{ +   /* draw cyan triangle on RHS of screen */ + +   glEnable (GL_BLEND); +   glBegin (GL_TRIANGLES); +      glColor4f(0.0, 1.0, 1.0, 0.75); +      glVertex3f(0.9, 0.9, 0.0);  +      glVertex3f(0.3, 0.5, 0.0);  +      glVertex3f(0.9, 0.1, 0.0);  +   glEnd(); +   glDisable (GL_BLEND); +} + +void display(void) +{ +   glClear(GL_COLOR_BUFFER_BIT); + +   if (leftFirst) { +      drawLeftTriangle(); +      drawRightTriangle(); +   } +   else { +      drawRightTriangle(); +      drawLeftTriangle(); +   } + +   glFlush(); +} + +void reshape(int w, int h) +{ +   glViewport(0, 0, (GLsizei) w, (GLsizei) h); +   glMatrixMode(GL_PROJECTION); +   glLoadIdentity(); +   if (w <= h)  +      gluOrtho2D (0.0, 1.0, 0.0, 1.0*(GLfloat)h/(GLfloat)w); +   else  +      gluOrtho2D (0.0, 1.0*(GLfloat)w/(GLfloat)h, 0.0, 1.0); +} + +/* ARGSUSED1 */ +void keyboard(unsigned char key, int x, int y) +{ +   switch (key) { +      case 't': +      case 'T': +         leftFirst = !leftFirst; +         glutPostRedisplay();	 +         break; +      case 27:  /*  Escape key  */ +         exit(0); +         break; +      default: +         break; +   } +} + +/*  Main Loop + *  Open window with initial window size, title bar,  + *  RGBA display mode, and handle input events. + */ +int main(int argc, char** argv) +{ +   glutInit(&argc, argv); +   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); +   glutInitWindowSize (200, 200); +   glutCreateWindow (argv[0]); +   init(); +   glutReshapeFunc (reshape); +   glutKeyboardFunc (keyboard); +   glutDisplayFunc (display); +   glutMainLoop(); +   return 0; +} diff --git a/progs/trivial/tri-blend.c b/progs/trivial/tri-blend.c index 284d15fd3c..58c451c976 100644 --- a/progs/trivial/tri-blend.c +++ b/progs/trivial/tri-blend.c @@ -132,7 +132,7 @@ void keyboard(unsigned char key, int x, int y)  int main(int argc, char** argv)  {     glutInit(&argc, argv); -   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); +   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_ALPHA);     glutInitWindowSize (200, 200);     glutCreateWindow (argv[0]);     init(); diff --git a/progs/trivial/tri-clear.c b/progs/trivial/tri-clear.c new file mode 100644 index 0000000000..25ea77cfa7 --- /dev/null +++ b/progs/trivial/tri-clear.c @@ -0,0 +1,143 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + +GLint Width = 250, Height = 250; + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glBegin(GL_TRIANGLES); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -30.0); +   glEnd(); + +   glEnable(GL_SCISSOR_TEST); +   glClearColor(1, 0, 1, 0); +   glScissor(Width / 2, Height / 2, Width - Width / 2, Height - Height / 2); +   glClear(GL_COLOR_BUFFER_BIT);  +   glDisable(GL_SCISSOR_TEST); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(100, 0); glutInitWindowSize( Width, Height); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/tri-clip.c b/progs/trivial/tri-clip.c index bf48533adc..f30445cdba 100644 --- a/progs/trivial/tri-clip.c +++ b/progs/trivial/tri-clip.c @@ -28,26 +28,21 @@  #include <GL/glut.h> -#define CI_OFFSET_1 16 -#define CI_OFFSET_2 32 +static GLenum doubleBuffer; +static GLfloat Xpos = 0, Ypos = 0; -GLenum doubleBuffer; -  static void Init(void)  {     fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER));     fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION));     fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); - -    glClearColor(0.0, 0.0, 1.0, 0.0); +   glClearColor(0.0, 0.0, 1.0, 0.0);  }  static void Reshape(int width, int height)  { -      glViewport(0, 0, (GLint)width, (GLint)height); -      glMatrixMode(GL_PROJECTION);      glLoadIdentity();      glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); @@ -56,21 +51,45 @@ static void Reshape(int width, int height)  static void Key(unsigned char key, int x, int y)  { -      switch (key) {        case 27:  	exit(1);        default:  	return;      } -      glutPostRedisplay();  } +static void +SpecialKey(int key, int x, int y) +{ +   const GLfloat step = 0.25; +   (void) x; +   (void) y; +   switch (key) { +      case GLUT_KEY_UP: +         Ypos += step; +         break; +      case GLUT_KEY_DOWN: +         Ypos -= step; +         break; +      case GLUT_KEY_LEFT: +         Xpos -= step; +         break; +      case GLUT_KEY_RIGHT: +         Xpos += step; +         break; +   } +   glutPostRedisplay(); +} +  static void Draw(void)  {     glClear(GL_COLOR_BUFFER_BIT);  +   glPushMatrix(); +   glTranslatef(Xpos, Ypos, 0); +     glBegin(GL_TRIANGLES);     glColor3f(0,0,.7);      glVertex3f( 0.9, -0.9, -30.0); @@ -80,12 +99,13 @@ static void Draw(void)     glVertex3f(-1.9,  0.0, -30.0);     glEnd(); +   glPopMatrix(); +     glFlush();     if (doubleBuffer) {        glutSwapBuffers();     } -  }  static GLenum Args(int argc, char **argv) @@ -131,7 +151,8 @@ int main(int argc, char **argv)      glutReshapeFunc(Reshape);      glutKeyboardFunc(Key); +    glutSpecialFunc(SpecialKey);      glutDisplayFunc(Draw);      glutMainLoop(); -	return 0; +    return 0;  } diff --git a/progs/trivial/tri-cull-both.c b/progs/trivial/tri-cull-both.c new file mode 100644 index 0000000000..51b5865ae5 --- /dev/null +++ b/progs/trivial/tri-cull-both.c @@ -0,0 +1,141 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +   glClearColor(0.0, 0.0, 1.0, 0.0); +   glCullFace(GL_FRONT_AND_BACK); +   glEnable(GL_CULL_FACE); + +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + + +    +   glBegin(GL_TRIANGLES); +   glColor3f(.8,0,0);  +   glVertex3f( 0.93,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.93,  0.0, -30.0); +   glColor3f(0,0,.7);  +   glVertex3f( 0.93, -0.8, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/tri-cull.c b/progs/trivial/tri-cull.c index 20aeaf1d7c..2eead84115 100644 --- a/progs/trivial/tri-cull.c +++ b/progs/trivial/tri-cull.c @@ -27,25 +27,45 @@  #include <stdlib.h>  #include <GL/glut.h> +static GLenum doubleBuffer; +static GLint cullmode = 0; +static GLenum front = GL_CCW; /* GL default */ -#define CI_OFFSET_1 16 -#define CI_OFFSET_2 32 - - -GLenum doubleBuffer; +static void cull(void) +{ +   cullmode = (cullmode + 1) % 4; +   if (cullmode == 0) { +      glCullFace(GL_FRONT); +      glEnable(GL_CULL_FACE); +      printf("cull GL_FRONT\n"); +   } +   else if (cullmode == 1) { +      glCullFace(GL_BACK); +      glEnable(GL_CULL_FACE); +      printf("cull GL_BACK\n"); +   } +   else if (cullmode == 2) { +      glCullFace(GL_FRONT_AND_BACK); +      glEnable(GL_CULL_FACE); +      printf("cull GL_FRONT_AND_BACK\n"); +   } +   else { +      glDisable(GL_CULL_FACE); +      printf("cull none\n"); +   } +}  static void Init(void)  {     fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER));     fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION));     fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); - -    glClearColor(0.0, 0.0, 1.0, 0.0); +   glClearColor(0.0, 0.0, 1.0, 0.0); +   cull();  }  static void Reshape(int width, int height)  { -      glViewport(0, 0, (GLint)width, (GLint)height);      glMatrixMode(GL_PROJECTION); @@ -56,15 +76,21 @@ static void Reshape(int width, int height)  static void Key(unsigned char key, int x, int y)  { - -    switch (key) { -      case 27: -	exit(1); -      default: -	return; -    } - -    glutPostRedisplay(); +   switch (key) { +   case 27: +      exit(1); +   case 'c': +      cull(); +      break; +   case 'f': +      front = ((front == GL_CCW) ? GL_CW : GL_CCW); +      glFrontFace(front); +      printf("front face = %s\n", front == GL_CCW ? "GL_CCW" : "GL_CW"); +      break; +   default: +      return; +   } +   glutPostRedisplay();  }  static void Draw(void) @@ -72,12 +98,22 @@ static void Draw(void)     glClear(GL_COLOR_BUFFER_BIT);      glBegin(GL_TRIANGLES); -   glColor3f(0,0,1);  -   glVertex3f( -1.5, 0.5, -30.0); -   glColor3f(1,0,0);  -   glVertex3f( 0,  2.0, -30.0); -   glColor3f(0,1,0);  -   glVertex3f(-1.5, 2.0, -30.0); +   /* CCW / front-facing */ +   glColor3f(0,0,.7);  +   glVertex3f(-0.1, -0.9, -30.0); +   glColor3f(.8,0,0);  +   glVertex3f(-0.1,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -30.0); + +   /* CW / back-facing */ +   glColor3f(0,0,.7);  +   glVertex3f( 0.1, -0.9, -30.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.1,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f( 0.9,  0.0, -30.0); +     glEnd();     glFlush(); @@ -118,7 +154,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); @@ -132,5 +168,5 @@ int main(int argc, char **argv)      glutKeyboardFunc(Key);      glutDisplayFunc(Draw);      glutMainLoop(); -	return 0; +    return 0;  } diff --git a/progs/trivial/tri-dlist.c b/progs/trivial/tri-dlist.c index e0ab285eff..c21c4714ad 100644 --- a/progs/trivial/tri-dlist.c +++ b/progs/trivial/tri-dlist.c @@ -132,7 +132,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/tri-edgeflag.c b/progs/trivial/tri-edgeflag.c index bdc0eaa253..41899c2eb4 100644 --- a/progs/trivial/tri-edgeflag.c +++ b/progs/trivial/tri-edgeflag.c @@ -27,25 +27,18 @@  #include <stdlib.h>  #include <GL/glut.h> - -#define CI_OFFSET_1 16 -#define CI_OFFSET_2 32 - - -GLenum doubleBuffer; +static GLenum doubleBuffer; +static GLenum frontface = GL_CCW;  static void Init(void)  {     fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER));     fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION));     fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); - -    glClearColor(0.0, 0.0, 1.0, 0.0);  }  static void Reshape(int width, int height)  { -      glViewport(0, 0, (GLint)width, (GLint)height);      glMatrixMode(GL_PROJECTION); @@ -56,13 +49,16 @@ static void Reshape(int width, int height)  static void Key(unsigned char key, int x, int y)  { - -    switch (key) { -      case 27: -	exit(1); -      default: -	return; -    } +   switch (key) { +   case 'f': +      frontface = (frontface == GL_CCW) ? GL_CW : GL_CCW; +      glFrontFace(frontface); +      break; +   case 27: +      exit(1); +   default: +      return; +   }      glutPostRedisplay();  } @@ -75,7 +71,7 @@ static void Draw(void)     glBegin(GL_TRIANGLES);     glEdgeFlag(1); -   glColor3f(0,0,.7);  +   glColor3f(0.3,0.3,.9);      glVertex3f( 0.9, -0.9, -0.0);     glEdgeFlag(0);     glColor3f(.8,0,0);  @@ -123,7 +119,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); @@ -137,5 +133,5 @@ int main(int argc, char **argv)      glutKeyboardFunc(Key);      glutDisplayFunc(Draw);      glutMainLoop(); -	return 0; +    return 0;  } diff --git a/progs/trivial/tri-fbo-tex.c b/progs/trivial/tri-fbo-tex.c new file mode 100644 index 0000000000..d413d4081f --- /dev/null +++ b/progs/trivial/tri-fbo-tex.c @@ -0,0 +1,267 @@ +/* + * Test GL_EXT_framebuffer_object render-to-texture + * + * Draw a teapot into a texture image with stenciling. + * Then draw a textured quad using that texture. + * + * Brian Paul + * 18 Apr 2005 + */ + + +#define GL_GLEXT_PROTOTYPES +#include <GL/glut.h> +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <math.h> + +/* For debug */ + + +static int Win = 0; +static int Width = 512, Height = 512; + +static GLenum TexTarget = GL_TEXTURE_2D; +static int TexWidth = 512, TexHeight = 512; + +static GLuint MyFB; +static GLuint TexObj; +static GLboolean Anim = GL_FALSE; +static GLfloat Rot = 0.0; +static GLuint TextureLevel = 0;  /* which texture level to render to */ +static GLenum TexIntFormat = GL_RGB; /* either GL_RGB or GL_RGBA */ + + +static void +CheckError(int line) +{ +   GLenum err = glGetError(); +   if (err) { +      printf("GL Error 0x%x at line %d\n", (int) err, line); +   } +} + + +static void +Idle(void) +{ +   Rot = glutGet(GLUT_ELAPSED_TIME) * 0.1; +   glutPostRedisplay(); +} + + +static void +RenderTexture(void) +{ +   GLenum status; + +   glMatrixMode(GL_PROJECTION); +   glLoadIdentity(); +   glOrtho(-1.0, 1.0, -1.0, 1.0, 5.0, 25.0); +   glMatrixMode(GL_MODELVIEW); +   glLoadIdentity(); +   glTranslatef(0.0, 0.0, -15.0); + +   if (1) { +      /* draw to texture image */ +      glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, MyFB); + +      status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); +      if (status != GL_FRAMEBUFFER_COMPLETE_EXT) { +	 printf("Framebuffer incomplete!!!\n"); +      } + +      glViewport(0, 0, TexWidth, TexHeight); + +      glClearColor(0.5, 0.5, 1.0, 0.0); +      glClear(GL_COLOR_BUFFER_BIT); +       +      CheckError(__LINE__); + +      glBegin(GL_POLYGON); +      glColor3f(1, 0, 0); +      glVertex2f(-1, -1); +      glColor3f(0, 1, 0); +      glVertex2f(1, -1); +      glColor3f(0, 0, 1); +      glVertex2f(0, 1); +      glEnd(); + +      /* Bind normal framebuffer */ +      glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); +   } +   else { +   } + +   CheckError(__LINE__); +} + + + +static void +Display(void) +{ +   float ar = (float) Width / (float) Height; + +   RenderTexture(); +    +   /* draw textured quad in the window */ +   glMatrixMode(GL_PROJECTION); +   glLoadIdentity(); +   glFrustum(-ar, ar, -1.0, 1.0, 5.0, 25.0); +   glMatrixMode(GL_MODELVIEW); +   glLoadIdentity(); +   glTranslatef(0.0, 0.0, -7.0); + +   glViewport(0, 0, Width, Height); + +   glClearColor(0.25, 0.25, 0.25, 0); +   glClear(GL_COLOR_BUFFER_BIT); + +   glPushMatrix(); +   glRotatef(Rot, 0, 1, 0); +   glEnable(TexTarget); +   glBindTexture(TexTarget, TexObj); + +   { +      glBegin(GL_POLYGON); +      glColor3f(0.25, 0.25, 0.25); +      glTexCoord2f(0, 0); +      glVertex2f(-1, -1); +      glTexCoord2f(1, 0); +      glVertex2f(1, -1); +      glColor3f(1.0, 1.0, 1.0); +      glTexCoord2f(1, 1); +      glVertex2f(1, 1); +      glTexCoord2f(0, 1); +      glVertex2f(-1, 1); +      glEnd(); +   } + +   glPopMatrix(); +   glDisable(TexTarget); + +   glutSwapBuffers(); +   CheckError(__LINE__); +} + + +static void +Reshape(int width, int height) +{ +   glViewport(0, 0, width, height); +   Width = width; +   Height = height; +} + + +static void +CleanUp(void) +{ +   glDeleteFramebuffersEXT(1, &MyFB); + +   glDeleteTextures(1, &TexObj); + +   glutDestroyWindow(Win); + +   exit(0); +} + + +static void +Key(unsigned char key, int x, int y) +{ +   (void) x; +   (void) y; +   switch (key) { +      case 'a': +         Anim = !Anim; +         if (Anim) +            glutIdleFunc(Idle); +         else +            glutIdleFunc(NULL); +         break; +      case 's': +         Rot += 2.0; +         break; +      case 27: +         CleanUp(); +         break; +   } +   glutPostRedisplay(); +} + + +static void +Init(int argc, char *argv[]) +{ +   static const GLfloat mat[4] = { 1.0, 0.5, 0.5, 1.0 }; +   GLint i; + +   if (!glutExtensionSupported("GL_EXT_framebuffer_object")) { +      printf("GL_EXT_framebuffer_object not found!\n"); +      exit(0); +   } + +   printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); + + +   /* Make texture object/image */ +   glGenTextures(1, &TexObj); +   glBindTexture(TexTarget, TexObj); +   glTexParameteri(TexTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST); +   glTexParameteri(TexTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST); +   glTexParameteri(TexTarget, GL_TEXTURE_BASE_LEVEL, TextureLevel); +   glTexParameteri(TexTarget, GL_TEXTURE_MAX_LEVEL, TextureLevel); + +   glTexImage2D(TexTarget, 0, TexIntFormat, TexWidth, TexHeight, 0, +                GL_RGBA, GL_UNSIGNED_BYTE, NULL); + + +   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + + + + +   /* gen framebuffer id, delete it, do some assertions, just for testing */ +   glGenFramebuffersEXT(1, &MyFB); +   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, MyFB); +   assert(glIsFramebufferEXT(MyFB)); + + +   CheckError(__LINE__); + +   /* Render color to texture */ +   glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, +                             TexTarget, TexObj, TextureLevel); + + + +   CheckError(__LINE__); + +   /* bind regular framebuffer */ +   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + + +} + + +int +main(int argc, char *argv[]) +{ +   glutInit(&argc, argv); +   glutInitWindowPosition(0, 0); +   glutInitWindowSize(Width, Height); +   glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); +   Win = glutCreateWindow(argv[0]); +   glutReshapeFunc(Reshape); +   glutKeyboardFunc(Key); +   glutDisplayFunc(Display); +   if (Anim) +      glutIdleFunc(Idle); +   Init(argc, argv); +   glutMainLoop(); +   return 0; +} diff --git a/progs/trivial/tri-fbo.c b/progs/trivial/tri-fbo.c new file mode 100644 index 0000000000..82d70c40b7 --- /dev/null +++ b/progs/trivial/tri-fbo.c @@ -0,0 +1,200 @@ + +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <string.h> + +#define GL_GLEXT_PROTOTYPES +#include <GL/glut.h> + + + +static int Width = 400, Height = 400; +static GLuint MyFB, MyRB; + + +#define CheckError() assert(glGetError() == 0) + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + + +   if (!glutExtensionSupported("GL_EXT_framebuffer_object")) { +      printf("GL_EXT_framebuffer_object not found!\n"); +      exit(0); +   } + + +   glGenFramebuffersEXT(1, &MyFB); +   glGenRenderbuffersEXT(1, &MyRB); + +   { +      glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, MyFB); + +      glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, MyRB); + +      glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, +				   GL_RENDERBUFFER_EXT, MyRB); + +      glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, Width, Height); + +      glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); +   } + +   glClearColor(0.0, 0.0, 1.0, 0.0); +} + + + +static void +Reshape( int width, int height ) +{ +   glViewport( 0, 0, width, height ); +   glMatrixMode( GL_PROJECTION ); +   glLoadIdentity(); +   glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +   glMatrixMode( GL_MODELVIEW ); + +   Width = width; +   Height = height; +   glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, Width, Height); +} + + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + + + +static void Draw( void ) +{ + +   /* draw to user framebuffer */ +   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, MyFB); +   glDrawBuffer(GL_COLOR_ATTACHMENT1_EXT); +   glReadBuffer(GL_COLOR_ATTACHMENT1_EXT); + +   glClearColor(0.5, 0.5, 1.0, 0.0); +   glClear(GL_COLOR_BUFFER_BIT); +   CheckError(); + +   glBegin(GL_TRIANGLES); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -30.0); +   glEnd(); + + +   { +      GLubyte *buffer = malloc(Width * Height * 4); + +      /* read from user framebuffer */ +      glReadPixels(0, 0, Width-60, Height-60, GL_RGBA, GL_UNSIGNED_BYTE, buffer); +      CheckError(); + +      /* draw to window */ +      glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); +      /* Try to clear the window, but will overwrite: +       */ +      glClearColor(0.8, 0.8, 0, 0.0); +      glClear(GL_COLOR_BUFFER_BIT); + +      glWindowPos2iARB(30, 30); +      glDrawPixels(Width-60, Height-60, GL_RGBA, GL_UNSIGNED_BYTE, buffer); +       +       +      free(buffer); +   } +    +   /* Bind normal framebuffer */ +   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + +   if (1) { +      glBegin(GL_TRIANGLES); +      glColor3f(0,.7,0);  +      glVertex3f( 0.5, -0.5, -30.0); +      glColor3f(0,0,.8);  +      glVertex3f( 0.5,  0.5, -30.0); +      glColor3f(.9,0,0);  +      glVertex3f(-0.5,  0.0, -30.0); +      glEnd(); +   } + +   if (doubleBuffer) +      glutSwapBuffers(); +   else +      glFinish(); + +   CheckError(); +} + + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + + + +int +main( int argc, char *argv[] ) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(100, 0); glutInitWindowSize( Width, Height ); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow(argv[0]) == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +    return 0; +} diff --git a/progs/trivial/tri-flat-clip.c b/progs/trivial/tri-flat-clip.c index fafa64914d..155b0c4f8d 100644 --- a/progs/trivial/tri-flat-clip.c +++ b/progs/trivial/tri-flat-clip.c @@ -119,7 +119,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/tri-flat.c b/progs/trivial/tri-flat.c index fb2cdbd7bb..0583a2a99a 100644 --- a/progs/trivial/tri-flat.c +++ b/progs/trivial/tri-flat.c @@ -119,7 +119,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/tri-fog.c b/progs/trivial/tri-fog.c new file mode 100644 index 0000000000..75f3262ecf --- /dev/null +++ b/progs/trivial/tri-fog.c @@ -0,0 +1,152 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + +GLint Width = 250, Height = 250; + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glEnable(GL_FOG); + +   glBegin(GL_TRIANGLES); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -30.0); +   glEnd(); + +#if 0 +   glBegin(GL_TRIANGLES); +   glColor3f(0,0,.7);  +   glVertex3f(-0.9, -0.9, -30.0); +   glColor3f(.8,0,0);  +   glVertex3f(-0.9,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f( 0.9,  0.0, -30.0); +   glEnd(); +#endif + +   glDisable(GL_FOG); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(100, 0); glutInitWindowSize(Width, Height); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/tri-mask-tri.c b/progs/trivial/tri-mask-tri.c new file mode 100644 index 0000000000..8333f7ed8a --- /dev/null +++ b/progs/trivial/tri-mask-tri.c @@ -0,0 +1,153 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +GLint Width = 250, Height = 250; +GLenum doubleBuffer; +GLint Win; +GLboolean Rmask = GL_TRUE, Gmask = GL_FALSE, Bmask = GL_TRUE; + + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); +   glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ +   glViewport(0, 0, (GLint)width, (GLint)height); +   glMatrixMode(GL_PROJECTION); +   glLoadIdentity(); +   glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +   glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ +   switch (key) { +   case 'r': +      Rmask = !Rmask; +      break; +   case 'g': +      Gmask = !Gmask; +      break; +   case 'b': +      Bmask = !Bmask; +      break; +   case 27: +      glutDestroyWindow(Win); +      exit(1); +   default: +      return; +   } +   glutPostRedisplay(); +} + +static void Draw(void) +{ +   printf("ColorMask = %d, %d, %d\n", Rmask, Gmask, Bmask); +   glColorMask(1,1,1,1); + +   glClear(GL_COLOR_BUFFER_BIT);  + +   /* right triangle: green */ +   glBegin(GL_TRIANGLES); +   glColor3f(0,1,0);  +   glVertex3f( 0.9, -0.9, -30.0); +   glVertex3f( 0.9,  0.9, -30.0); +   glVertex3f(-0.9,  0.0, -30.0); +   glEnd(); + +   glColorMask(Rmask, Gmask, Bmask, 0); + +   /* left triangle: white&mask: purple   middle region: white */ +   glBegin(GL_TRIANGLES); +   glColor3f(1,1,1);  +   glVertex3f(-0.9, -0.9, -30.0); +   glVertex3f(-0.9,  0.9, -30.0); +   glVertex3f( 0.9,  0.0, -30.0); +   glEnd(); + +   glDisable(GL_SCISSOR_TEST); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +   GLint i; + +   doubleBuffer = GL_FALSE; + +   for (i = 1; i < argc; i++) { +      if (strcmp(argv[i], "-sb") == 0) { +         doubleBuffer = GL_FALSE; +      } +      else if (strcmp(argv[i], "-db") == 0) { +         doubleBuffer = GL_TRUE; +      } +      else { +         fprintf(stderr, "%s (Bad option).\n", argv[i]); +         return GL_FALSE; +      } +   } +   return GL_TRUE; +} + + +int main(int argc, char **argv) +{ +   GLenum type; + +   glutInit(&argc, argv); + +   if (Args(argc, argv) == GL_FALSE) { +      exit(1); +   } + +   type = GLUT_RGB; +   type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; + +   glutInitWindowPosition(100, 0); glutInitWindowSize(Width, Height); +   glutInitDisplayMode(type); +   Win = glutCreateWindow("First Tri"); +   Init(); +   glutReshapeFunc(Reshape); +   glutKeyboardFunc(Key); +   glutDisplayFunc(Draw); +   glutMainLoop(); +   return 0; +} diff --git a/progs/trivial/tri-orig.c b/progs/trivial/tri-orig.c new file mode 100644 index 0000000000..d5e6742ce1 --- /dev/null +++ b/progs/trivial/tri-orig.c @@ -0,0 +1,136 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +/*     glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); */ +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glBegin(GL_TRIANGLES); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -0.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -0.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -0.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB | GLUT_ALPHA; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/tri-query.c b/progs/trivial/tri-query.c new file mode 100644 index 0000000000..c9161c4f0a --- /dev/null +++ b/progs/trivial/tri-query.c @@ -0,0 +1,158 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#define GL_GLEXT_PROTOTYPES +#include <GL/glut.h> + + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + +static GLuint OccQuery; + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); + +   glGenQueriesARB(1, &OccQuery); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   GLuint passed; +   GLint ready; + +   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);  + +   glEnable(GL_DEPTH_TEST); + +   glBeginQueryARB(GL_SAMPLES_PASSED_ARB, OccQuery); + +   glBegin(GL_TRIANGLES); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -30.0); +   glEnd(); + +   glEndQueryARB(GL_SAMPLES_PASSED_ARB); + +   do { +      /* do useful work here, if any */ +      glGetQueryObjectivARB(OccQuery, GL_QUERY_RESULT_AVAILABLE_ARB, &ready); +   } while (!ready); +   glGetQueryObjectuivARB(OccQuery, GL_QUERY_RESULT_ARB, &passed); + +   fprintf(stderr, " %d Fragments Visible\n", passed); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(100, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB | GLUT_DEPTH; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/tri-scissor-tri.c b/progs/trivial/tri-scissor-tri.c new file mode 100644 index 0000000000..dcc6d282dc --- /dev/null +++ b/progs/trivial/tri-scissor-tri.c @@ -0,0 +1,151 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + +GLint Width = 250, Height = 250; + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glBegin(GL_TRIANGLES); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -30.0); +   glEnd(); + +   glScissor(Width / 4, Height / 4, Width / 2, Height / 2); +   glEnable(GL_SCISSOR_TEST); + +   glBegin(GL_TRIANGLES); +   glColor3f(0,0,.7);  +   glVertex3f(-0.9, -0.9, -30.0); +   glColor3f(.8,0,0);  +   glVertex3f(-0.9,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f( 0.9,  0.0, -30.0); +   glEnd(); + +   glDisable(GL_SCISSOR_TEST); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(100, 0); glutInitWindowSize(Width, Height); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/tri-square.c b/progs/trivial/tri-square.c new file mode 100644 index 0000000000..ef9ea63048 --- /dev/null +++ b/progs/trivial/tri-square.c @@ -0,0 +1,136 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    gluOrtho2D(0, (GLdouble)width, 0, (GLdouble)height); +    glMatrixMode(GL_MODELVIEW); +    glLoadIdentity(); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glColor3f(1,1,1);  + +   glBegin(GL_TRIANGLES); +   glVertex3f( 10, 10, -30.0); +   glVertex3f( 200, 150, -30.0); +   glVertex3f( 10, 200, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(100, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/tri-stencil.c b/progs/trivial/tri-stencil.c new file mode 100644 index 0000000000..5edbef26ce --- /dev/null +++ b/progs/trivial/tri-stencil.c @@ -0,0 +1,149 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <math.h> +#include <GL/glut.h> + + +static void Init(void) +{ +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-5.0, 5.0, -5.0, 5.0, -5.0, 5.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +    } +} + +static void Draw(void) +{ +   glShadeModel(GL_FLAT); + +   { +      glClearColor(0.0, 0.0, 0.0, 0.0); +      glClearStencil(0); +      glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT); +   } + + +   glStencilMask(1); +   glEnable(GL_STENCIL_TEST); +   glStencilFunc(GL_ALWAYS, 1, 1); +   glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); + +   glColor3ub(200, 0, 0); +   glBegin(GL_POLYGON);         +   glVertex3i(-4, -4, 0); +   glVertex3i( 4, -4, 0); +   glVertex3i( 0,  4, 0); +   glEnd(); + +#if 1 +   glStencilFunc(GL_EQUAL, 1, 1); +   glStencilOp(GL_INCR, GL_KEEP, GL_DECR); + +   glColor3ub(0, 200, 0); +   glBegin(GL_POLYGON); +   glVertex3i(3, 3, 0); +   glVertex3i(-3, 3, 0); +   glVertex3i(-3, -3, 0); +   glVertex3i(3, -3, 0); +   glEnd(); +#endif + +#if 0 +   glStencilFunc(GL_EQUAL, 1, 1); +   glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); + +   glColor3ub(0, 0, 200); +   glBegin(GL_POLYGON); +   glVertex3f(2.5, 2.5, 0); +   glVertex3f(-2.5, 2.5, 0); +   glVertex3f(-2.5, -2.5, 0); +   glVertex3f(2.5, -2.5, 0); +   glEnd(); +#endif + +   glFlush(); +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + + +    for (i = 1; i < argc; i++) { +	if (strcmp(argv[i], "-dr") == 0) { +	} else { +	    printf("%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 300, 300); + +    type = GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH | GLUT_STENCIL; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("Stencil Test") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/tri-tex-3d.c b/progs/trivial/tri-tex-3d.c index 6a9d1d1bf6..613803fd1b 100644 --- a/progs/trivial/tri-tex-3d.c +++ b/progs/trivial/tri-tex-3d.c @@ -152,7 +152,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/tri-tri.c b/progs/trivial/tri-tri.c new file mode 100644 index 0000000000..06a0528eb8 --- /dev/null +++ b/progs/trivial/tri-tri.c @@ -0,0 +1,145 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glBegin(GL_TRIANGLES); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -30.0); +   glEnd(); + +   glBegin(GL_TRIANGLES); +   glColor3f(0,0,.7);  +   glVertex3f(-0.9, -0.9, -30.0); +   glColor3f(.8,0,0);  +   glVertex3f(-0.9,  0.9, -30.0); +   glColor3f(0,.9,0);  +   glVertex3f( 0.9,  0.0, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(100, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/tri-unfilled-clip.c b/progs/trivial/tri-unfilled-clip.c index d486af2365..df161df3fb 100644 --- a/progs/trivial/tri-unfilled-clip.c +++ b/progs/trivial/tri-unfilled-clip.c @@ -119,7 +119,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/tri-unfilled-edgeflag.c b/progs/trivial/tri-unfilled-edgeflag.c new file mode 100644 index 0000000000..31f41f6220 --- /dev/null +++ b/progs/trivial/tri-unfilled-edgeflag.c @@ -0,0 +1,141 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +/*     glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); */ +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  +   glPolygonMode(GL_FRONT, GL_LINE); +   glPolygonMode(GL_BACK, GL_LINE); + +   glBegin(GL_TRIANGLES); +   glEdgeFlag(1); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -0.0); +   glEdgeFlag(0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -0.0); +   glEdgeFlag(1); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -0.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB | GLUT_ALPHA; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/tri-unfilled-point.c b/progs/trivial/tri-unfilled-point.c new file mode 100644 index 0000000000..71ac453d60 --- /dev/null +++ b/progs/trivial/tri-unfilled-point.c @@ -0,0 +1,138 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +/*     glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); */ +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  +   glPolygonMode(GL_FRONT, GL_POINT); +   glPolygonMode(GL_BACK, GL_POINT); + +   glBegin(GL_TRIANGLES); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -0.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -0.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -0.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/tri-unfilled-smooth.c b/progs/trivial/tri-unfilled-smooth.c index e41903a3d5..f70c1cd9d4 100644 --- a/progs/trivial/tri-unfilled-smooth.c +++ b/progs/trivial/tri-unfilled-smooth.c @@ -132,7 +132,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/tri-unfilled-userclip-stip.c b/progs/trivial/tri-unfilled-userclip-stip.c new file mode 100644 index 0000000000..4aefa85032 --- /dev/null +++ b/progs/trivial/tri-unfilled-userclip-stip.c @@ -0,0 +1,147 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   static GLdouble plane[4] = { -.5, 0, 1, 0 }; + +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +   glClearColor(0.0, 0.0, 1.0, 0.0);	 +   glClipPlane(GL_CLIP_PLANE0, plane); +   glEnable(GL_CLIP_PLANE0); +   glLineWidth( 4 ); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +/*     glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); */ +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  +   glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + +   glEnable(GL_LINE_STIPPLE); +   glLineStipple( 5, 0xfffe ); + + + +   glBegin(GL_TRIANGLES); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, 0.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, 0.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, 0.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/tri-unfilled-userclip.c b/progs/trivial/tri-unfilled-userclip.c index dc93a8f1ab..9201f9d433 100644 --- a/progs/trivial/tri-unfilled-userclip.c +++ b/progs/trivial/tri-unfilled-userclip.c @@ -123,7 +123,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/tri-unfilled.c b/progs/trivial/tri-unfilled.c index 73961bc93a..1e44823db5 100644 --- a/progs/trivial/tri-unfilled.c +++ b/progs/trivial/tri-unfilled.c @@ -120,7 +120,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/tri-userclip.c b/progs/trivial/tri-userclip.c index cde9662ace..ccf631dff8 100644 --- a/progs/trivial/tri-userclip.c +++ b/progs/trivial/tri-userclip.c @@ -122,7 +122,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/tri-z-9.c b/progs/trivial/tri-z-9.c new file mode 100644 index 0000000000..4bd9986166 --- /dev/null +++ b/progs/trivial/tri-z-9.c @@ -0,0 +1,139 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, 1, -1); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClearColor(0.0, 0.0, 1.0, 0.0); +   glClearDepth(1.0); +   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  +   glDepthFunc(GL_EQUAL); +   glEnable(GL_DEPTH_TEST); + +   glBegin(GL_TRIANGLES); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, .5); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, .5); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, .5); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(100, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB | GLUT_DEPTH; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/tri-z-eq.c b/progs/trivial/tri-z-eq.c new file mode 100644 index 0000000000..ad5f31a558 --- /dev/null +++ b/progs/trivial/tri-z-eq.c @@ -0,0 +1,139 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, 1, -1); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClearColor(0.0, 0.0, 1.0, 0.0); +   glClearDepth(1.0); +   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  +   glDepthFunc(GL_EQUAL); +   glEnable(GL_DEPTH_TEST); + +   glBegin(GL_TRIANGLES); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, 1.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, 1.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, 1.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(100, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB | GLUT_DEPTH; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/tri-z.c b/progs/trivial/tri-z.c new file mode 100644 index 0000000000..335d2b90e2 --- /dev/null +++ b/progs/trivial/tri-z.c @@ -0,0 +1,174 @@ +/* + * Copyright (c) 1993-1997, Silicon Graphics, Inc. + * ALL RIGHTS RESERVED  + * Permission to use, copy, modify, and distribute this software for  + * any purpose and without fee is hereby granted, provided that the above + * copyright notice appear in all copies and that both the copyright notice + * and this permission notice appear in supporting documentation, and that  + * the name of Silicon Graphics, Inc. not be used in advertising + * or publicity pertaining to distribution of the software without specific, + * written prior permission.  + * + * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" + * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR + * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON + * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, + * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY + * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, + * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF + * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE + * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. + *  + * US Government Users Restricted Rights  + * Use, duplication, or disclosure by the Government is subject to + * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph + * (c)(1)(ii) of the Rights in Technical Data and Computer Software + * clause at DFARS 252.227-7013 and/or in similar or successor + * clauses in the FAR or the DOD or NASA FAR Supplement. + * Unpublished-- rights reserved under the copyright laws of the + * United States.  Contractor/manufacturer is Silicon Graphics, + * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311. + * + * OpenGL(R) is a registered trademark of Silicon Graphics, Inc. + */ + +#include <GL/glut.h> +#include <stdlib.h> +#include <stdio.h> + +static int leftFirst = GL_TRUE; + +static struct { GLenum func; const char *str; } funcs[] =  +   { +      { GL_LESS, "GL_LESS" }, +      { GL_LEQUAL, "GL_LEQUAL" }, +      { GL_GREATER, "GL_GREATER" }, +      { GL_GEQUAL, "GL_GEQUAL" }, +      { GL_EQUAL, "GL_EQUAL" }, +      { GL_NOTEQUAL, "GL_NOTEQUAL" }, +      { GL_ALWAYS, "GL_ALWAYS" }, +      { GL_NEVER, "GL_NEVER" }, +   }; + +#define NUM_FUNCS (sizeof(funcs) / sizeof(funcs[0])) + +static int curFunc = 0; +static double clearVal = 1.0; + + +static void usage(void) +{ +   printf("t - toggle rendering order of triangles\n"); +   printf("c - toggle Z clear value between 0, 1\n"); +   printf("f - cycle through depth test functions\n"); +} + + +static void init(void) +{ +   glEnable(GL_DEPTH_TEST); +   glClearColor (1.0, 0.0, 0.0, 0.0); +} + +static void drawLeftTriangle(void) +{ +   /* draw yellow triangle on LHS of screen */ +   glBegin (GL_TRIANGLES); +      glColor4f(1.0, 1.0, 0.0, 0.75); +      glVertex3f(0.1, 0.9, -1.0);  +      glVertex3f(0.1, 0.1, -1.0);  +      glVertex3f(0.8, 0.5,  1.0);  +   glEnd(); +} + +static void drawRightTriangle(void) +{ +   /* draw cyan triangle on RHS of screen */ +   glBegin (GL_TRIANGLES); +      glColor4f(0.0, 1.0, 1.0, 0.75); +      glVertex3f(0.9, 0.9, 0.0);  +      glVertex3f(0.2, 0.5, 0.0);  +      glVertex3f(0.9, 0.1, 0.0);  +   glEnd(); +} + +void display(void) +{ +   printf("GL_CLEAR_DEPTH = %f  GL_DEPTH_FUNC = %s\n", +          clearVal, funcs[curFunc].str); +   glClearDepth(clearVal); +   glDepthFunc(funcs[curFunc].func); + +   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + +   if (leftFirst) { +      drawLeftTriangle(); +      drawRightTriangle(); +   } +   else { +      drawRightTriangle(); +      drawLeftTriangle(); +   } + +   glFlush(); +} + +void reshape(int w, int h) +{ +   glViewport(0, 0, (GLsizei) w, (GLsizei) h); +   glMatrixMode(GL_PROJECTION); +   glLoadIdentity(); +   if (w <= h)  +      gluOrtho2D (0.0, 1.0, 0.0, 1.0*(GLfloat)h/(GLfloat)w); +   else  +      gluOrtho2D (0.0, 1.0*(GLfloat)w/(GLfloat)h, 0.0, 1.0); +} + +/* ARGSUSED1 */ +void keyboard(unsigned char key, int x, int y) +{ +   switch (key) { +      case 'c': +      case 'C': +         clearVal = 1.0 - clearVal; +         glutPostRedisplay();	 +         break; +      case 'f': +      case 'F': +         curFunc = (curFunc + 1) % NUM_FUNCS; +         glutPostRedisplay();	 +         break; +      case 't': +      case 'T': +         leftFirst = !leftFirst; +         glutPostRedisplay();	 +         break; +      case 27:  /*  Escape key  */ +         exit(0); +         break; +      default: +         break; +   } +} + +/*  Main Loop + *  Open window with initial window size, title bar,  + *  RGBA display mode, and handle input events. + */ +int main(int argc, char** argv) +{ +   glutInit(&argc, argv); +   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); +   glutInitWindowSize (200, 200); +   glutCreateWindow (argv[0]); +   glutReshapeFunc (reshape); +   glutKeyboardFunc (keyboard); +   glutDisplayFunc (display); +   init(); +   usage(); +   glutMainLoop(); +   return 0; +} diff --git a/progs/trivial/tri.c b/progs/trivial/tri.c index d4a7f08ae3..aa45adb6c2 100644 --- a/progs/trivial/tri.c +++ b/progs/trivial/tri.c @@ -32,7 +32,7 @@  #define CI_OFFSET_2 32 -GLenum doubleBuffer; +GLenum doubleBuffer = 1;  int win;  static void Init(void) @@ -41,7 +41,7 @@ static void Init(void)     fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION));     fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); -    glClearColor(0.0, 0.0, 1.0, 0.0); +    glClearColor(0.3, 0.1, 0.3, 0.0);  }  static void Reshape(int width, int height) @@ -74,12 +74,12 @@ static void Draw(void)     glClear(GL_COLOR_BUFFER_BIT);      glBegin(GL_TRIANGLES); -   glColor3f(0,0,.7);  -   glVertex3f( 0.9, -0.9, -30.0);     glColor3f(.8,0,0);  -   glVertex3f( 0.9,  0.9, -30.0); +   glVertex3f(-0.9, -0.9, -30.0);     glColor3f(0,.9,0);  -   glVertex3f(-0.9,  0.0, -30.0); +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(0,0,.7);  +   glVertex3f( 0.0,  0.9, -30.0);     glEnd();     glFlush(); @@ -93,8 +93,6 @@ static GLenum Args(int argc, char **argv)  {      GLint i; -    doubleBuffer = GL_FALSE; -      for (i = 1; i < argc; i++) {          if (strcmp(argv[i], "-sb") == 0) {  	    doubleBuffer = GL_FALSE; @@ -120,7 +118,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); @@ -135,5 +133,5 @@ int main(int argc, char **argv)      glutKeyboardFunc(Key);      glutDisplayFunc(Draw);      glutMainLoop(); -	return 0; +    return 0;  } diff --git a/progs/trivial/trifan-flat-clip.c b/progs/trivial/trifan-flat-clip.c new file mode 100644 index 0000000000..04042fac70 --- /dev/null +++ b/progs/trivial/trifan-flat-clip.c @@ -0,0 +1,140 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  +   glShadeModel(GL_FLAT); +    + +   glBegin(GL_TRIANGLE_FAN); +   glColor3f(1,0,0);  +   glVertex3f( 0, 0, -30.0); +   glColor3f(1,1,0);  +   glVertex3f( 1.3,  1.1, -30.0); +   glColor3f(1,0,1);  +   glVertex3f(-.9,  .9, -30.0); +   glColor3f(0,1,1);  +   glVertex3f(-1.1,  -1.3, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/trifan-flat-unfilled-clip.c b/progs/trivial/trifan-flat-unfilled-clip.c new file mode 100644 index 0000000000..25224412cc --- /dev/null +++ b/progs/trivial/trifan-flat-unfilled-clip.c @@ -0,0 +1,144 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  +   glShadeModel(GL_FLAT); + +   glPolygonMode(GL_FRONT, GL_LINE); +   glPolygonMode(GL_BACK, GL_LINE); +   glLineWidth(4.0); +    + +   glBegin(GL_TRIANGLE_FAN); +   glColor3f(1,0,0);  +   glVertex3f( 0, 0, -30.0); +   glColor3f(1,1,0);  +   glVertex3f( 1.3,  1.1, -30.0); +   glColor3f(1,0,1);  +   glVertex3f(-.9,  .9, -30.0); +   glColor3f(0,1,1);  +   glVertex3f(-1.1,  -1.3, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/trifan-flat.c b/progs/trivial/trifan-flat.c new file mode 100644 index 0000000000..737eccdcae --- /dev/null +++ b/progs/trivial/trifan-flat.c @@ -0,0 +1,140 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  +   glShadeModel(GL_FLAT); +    + +   glBegin(GL_TRIANGLE_FAN); +   glColor3f(1,0,0);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(1,1,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(1,0,1);  +   glVertex3f(-0.9,  0.9, -30.0); +   glColor3f(0,1,1);  +   glVertex3f(-0.9,  -0.9, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB | GLUT_ALPHA; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/trifan-unfilled.c b/progs/trivial/trifan-unfilled.c new file mode 100644 index 0000000000..8e7454108c --- /dev/null +++ b/progs/trivial/trifan-unfilled.c @@ -0,0 +1,139 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  +   glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + +   glBegin(GL_TRIANGLE_FAN); +   glColor3f(1,0,0);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(1,1,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(1,0,1);  +   glVertex3f(-0.9,  0.9, -30.0); +   glColor3f(0,1,1);  +   glVertex3f(-0.9,  -0.9, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB | GLUT_ALPHA; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/trifan.c b/progs/trivial/trifan.c new file mode 100644 index 0000000000..ecb0424393 --- /dev/null +++ b/progs/trivial/trifan.c @@ -0,0 +1,138 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  + +   glBegin(GL_TRIANGLE_FAN); +   glColor3f(1,0,0);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(1,1,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(1,0,1);  +   glVertex3f(-0.9,  0.9, -30.0); +   glColor3f(0,1,1);  +   glVertex3f(-0.9,  -0.9, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB | GLUT_ALPHA; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/tristrip-flat.c b/progs/trivial/tristrip-flat.c new file mode 100644 index 0000000000..e048233e67 --- /dev/null +++ b/progs/trivial/tristrip-flat.c @@ -0,0 +1,148 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + + +#define CI_OFFSET_1 16 +#define CI_OFFSET_2 32 + + +GLenum doubleBuffer; + +static void Init(void) +{ +   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); +   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); +   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); + +    glClearColor(0.0, 0.0, 1.0, 0.0); +} + +static void Reshape(int width, int height) +{ + +    glViewport(0, 0, (GLint)width, (GLint)height); + +    glMatrixMode(GL_PROJECTION); +    glLoadIdentity(); +    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +    glMatrixMode(GL_MODELVIEW); +} + +static void Key(unsigned char key, int x, int y) +{ + +    switch (key) { +      case 27: +	exit(1); +      default: +	return; +    } + +    glutPostRedisplay(); +} + +static void Draw(void) +{ +   glClear(GL_COLOR_BUFFER_BIT);  +   glShadeModel(GL_FLAT); +    +   if (0) { +      glBegin(GL_LINES); +      glColor3f(1,0,0);  +      glVertex3f( 0.95, -0.9, -30.0); +      glColor3f(1,1,0);  +      glVertex3f( 0.95,  0.9, -30.0); +      glEnd(); +   } + +   glBegin(GL_TRIANGLE_STRIP); +   glColor3f(1,0,0);  +   glVertex3f( 0.9, -0.9, -30.0); +   glColor3f(0,1,0);  +   glVertex3f( 0.9,  0.9, -30.0); +   glColor3f(0,0,.5);  +   glVertex3f(-0.9,  -0.9, -30.0); +   glColor3f(1,1,1);  +   glVertex3f(-0.9,  0.9, -30.0); +   glEnd(); + +   glFlush(); + +   if (doubleBuffer) { +      glutSwapBuffers(); +   } +} + +static GLenum Args(int argc, char **argv) +{ +    GLint i; + +    doubleBuffer = GL_FALSE; + +    for (i = 1; i < argc; i++) { +        if (strcmp(argv[i], "-sb") == 0) { +	    doubleBuffer = GL_FALSE; +	} else if (strcmp(argv[i], "-db") == 0) { +	    doubleBuffer = GL_TRUE; +	} else { +	    fprintf(stderr, "%s (Bad option).\n", argv[i]); +	    return GL_FALSE; +	} +    } +    return GL_TRUE; +} + +int main(int argc, char **argv) +{ +    GLenum type; + +    glutInit(&argc, argv); + +    if (Args(argc, argv) == GL_FALSE) { +	exit(1); +    } + +    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); + +    type = GLUT_RGB; +    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; +    glutInitDisplayMode(type); + +    if (glutCreateWindow("First Tri") == GL_FALSE) { +	exit(1); +    } + +    Init(); + +    glutReshapeFunc(Reshape); +    glutKeyboardFunc(Key); +    glutDisplayFunc(Draw); +    glutMainLoop(); +	return 0; +} diff --git a/progs/trivial/tristrip.c b/progs/trivial/tristrip.c index fa82a73711..51ea4f2325 100644 --- a/progs/trivial/tristrip.c +++ b/progs/trivial/tristrip.c @@ -120,7 +120,7 @@ int main(int argc, char **argv)      glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); -    type = GLUT_RGB; +    type = GLUT_RGB | GLUT_ALPHA;      type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;      glutInitDisplayMode(type); diff --git a/progs/trivial/vp-array-int.c b/progs/trivial/vp-array-int.c new file mode 100644 index 0000000000..4d60f2bd5f --- /dev/null +++ b/progs/trivial/vp-array-int.c @@ -0,0 +1,117 @@ +/* Test glGenProgramsNV(), glIsProgramNV(), glLoadProgramNV() */ + +#include <assert.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#define GL_GLEXT_PROTOTYPES +#include <GL/glut.h> + +GLint verts[][4] = { +   {  1, -1, 0, 1 }, +   {  1,  1, 0, 1 }, +   { -1,  1, 0, 1 }, +   { -1, -1, 0, 1 }, +}; + +GLubyte color[][4] = { +   { 0x00, 0x00, 0xff, 0x00 }, +   { 0x00, 0xff, 0x00, 0x00 }, +   { 0xff, 0x00, 0x00, 0x00 }, +   { 0xff, 0xff, 0xff, 0x00 }, +}; + +GLuint indices[] = { 0, 1, 2, 3 }; + +static void Init( void ) +{ +   GLint errno; +   GLuint prognum; +    +   static const char *prog1 = +      "!!ARBvp1.0\n" +      "MOV  result.color, vertex.color;\n" +      "MOV  result.position, vertex.position;\n" +      "END\n"; + +   glGenProgramsARB(1, &prognum); +   glBindProgramARB(GL_VERTEX_PROGRAM_ARB, prognum); +   glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, +		      strlen(prog1), (const GLubyte *) prog1); + +   assert(glIsProgramARB(prognum)); +   errno = glGetError(); +   printf("glGetError = %d\n", errno); +   if (errno != GL_NO_ERROR) +   { +      GLint errorpos; + +      glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &errorpos); +      printf("errorpos: %d\n", errorpos); +      printf("%s\n", (char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB)); +   } + + +   glEnableClientState( GL_VERTEX_ARRAY ); +   glEnableClientState( GL_COLOR_ARRAY ); +   glVertexPointer( 3, GL_INT, sizeof(verts[0]), verts ); +   glColorPointer( 4, GL_UNSIGNED_BYTE, 0, color ); + +} + + + +static void Display( void ) +{ +   glClearColor(0.3, 0.3, 0.3, 1); +   glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + +   glEnable(GL_VERTEX_PROGRAM_NV); +   glDrawElements( GL_TRIANGLES, 3, GL_UNSIGNED_INT, indices ); + +   glFlush();  +} + + +static void Reshape( int width, int height ) +{ +   glViewport( 0, 0, width, height ); +   glMatrixMode( GL_PROJECTION ); +   glLoadIdentity(); +   glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +   glMatrixMode( GL_MODELVIEW ); +   glLoadIdentity(); +   /*glTranslatef( 0.0, 0.0, -15.0 );*/ +} + + +static void Key( unsigned char key, int x, int y ) +{ +   (void) x; +   (void) y; +   switch (key) { +      case 27: +         exit(0); +         break; +   } +   glutPostRedisplay(); +} + + + + +int main( int argc, char *argv[] ) +{ +   glutInit( &argc, argv ); +   glutInitWindowPosition( 0, 0 ); +   glutInitWindowSize( 250, 250 ); +   glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH ); +   glutCreateWindow(argv[0]); +   glutReshapeFunc( Reshape ); +   glutKeyboardFunc( Key ); +   glutDisplayFunc( Display ); +   Init(); +   glutMainLoop(); +   return 0; +} diff --git a/progs/trivial/vp-tri-cb.c b/progs/trivial/vp-tri-cb.c new file mode 100644 index 0000000000..f9d0d7f559 --- /dev/null +++ b/progs/trivial/vp-tri-cb.c @@ -0,0 +1,107 @@ +/* Test glGenProgramsNV(), glIsProgramNV(), glLoadProgramNV() */ + +#include <assert.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#define GL_GLEXT_PROTOTYPES +#include <GL/glut.h> + +static void Init( void ) +{ +   GLint errno; +   GLuint prognum; +    +   static const char *prog1 = +      "!!ARBvp1.0\n" +      "PARAM Diffuse = state.material.diffuse; \n" +      "MOV  result.color, Diffuse;\n" +      "MOV  result.position, vertex.position;\n" +      "END\n"; + +   const float Diffuse[4] = { 0.0, 1.0, 0.0, 1.0 }; +   glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, Diffuse); + + +   glGenProgramsARB(1, &prognum); + +   glBindProgramARB(GL_VERTEX_PROGRAM_ARB, prognum); +   glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, +		      strlen(prog1), (const GLubyte *) prog1); + +   assert(glIsProgramARB(prognum)); +   errno = glGetError(); +   printf("glGetError = %d\n", errno); +   if (errno != GL_NO_ERROR) +   { +      GLint errorpos; + +      glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &errorpos); +      printf("errorpos: %d\n", errorpos); +      printf("%s\n", (char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB)); +   } +} + +static void Display( void ) +{ +   glClearColor(0.3, 0.3, 0.3, 1); +   glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + +   glEnable(GL_VERTEX_PROGRAM_NV); + +   glBegin(GL_TRIANGLES); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -0.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -0.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -0.0); +   glEnd(); + + +   glFlush();  +} + + +static void Reshape( int width, int height ) +{ +   glViewport( 0, 0, width, height ); +   glMatrixMode( GL_PROJECTION ); +   glLoadIdentity(); +   glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +   glMatrixMode( GL_MODELVIEW ); +   glLoadIdentity(); +   /*glTranslatef( 0.0, 0.0, -15.0 );*/ +} + + +static void Key( unsigned char key, int x, int y ) +{ +   (void) x; +   (void) y; +   switch (key) { +      case 27: +         exit(0); +         break; +   } +   glutPostRedisplay(); +} + + + + +int main( int argc, char *argv[] ) +{ +   glutInit( &argc, argv ); +   glutInitWindowPosition( 0, 0 ); +   glutInitWindowSize( 250, 250 ); +   glutInitDisplayMode( GLUT_DEPTH | GLUT_RGB | GLUT_SINGLE ); +   glutCreateWindow(argv[0]); +   glutReshapeFunc( Reshape ); +   glutKeyboardFunc( Key ); +   glutDisplayFunc( Display ); +   Init(); +   glutMainLoop(); +   return 0; +} diff --git a/progs/trivial/vp-tri-imm.c b/progs/trivial/vp-tri-imm.c new file mode 100644 index 0000000000..c774573ba8 --- /dev/null +++ b/progs/trivial/vp-tri-imm.c @@ -0,0 +1,101 @@ +/* Test glGenProgramsNV(), glIsProgramNV(), glLoadProgramNV() */ + +#include <assert.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#define GL_GLEXT_PROTOTYPES +#include <GL/glut.h> + +static void Init( void ) +{ +   GLint errno; +   GLuint prognum; +    +   static const char *prog1 = +      "!!ARBvp1.0\n" +      "ADD  result.color, vertex.color, {.5}.x;\n"   +      "MOV  result.position, vertex.position;\n" +      "END\n"; + + +   glGenProgramsARB(1, &prognum); + +   glBindProgramARB(GL_VERTEX_PROGRAM_ARB, prognum); +   glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, +		      strlen(prog1), (const GLubyte *) prog1); + +   assert(glIsProgramARB(prognum)); +   errno = glGetError(); +   printf("glGetError = %d\n", errno); +   if (errno != GL_NO_ERROR) +   { +      GLint errorpos; + +      glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &errorpos); +      printf("errorpos: %d\n", errorpos); +      printf("%s\n", (char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB)); +   } +} + +static void Display( void ) +{ +   glClearColor(0.3, 0.3, 0.3, 1); +   glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + +   glEnable(GL_VERTEX_PROGRAM_NV); + +   glBegin(GL_TRIANGLES); +   glColor3f(0,0,0);  +   glVertex3f( 0.9, -0.9, -0.0); +   glVertex3f( 0.9,  0.9, -0.0); +   glVertex3f(-0.9,  0.0, -0.0); +   glEnd(); + + +   glFlush();  +} + + +static void Reshape( int width, int height ) +{ +   glViewport( 0, 0, width, height ); +   glMatrixMode( GL_PROJECTION ); +   glLoadIdentity(); +   glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +   glMatrixMode( GL_MODELVIEW ); +   glLoadIdentity(); +   /*glTranslatef( 0.0, 0.0, -15.0 );*/ +} + + +static void Key( unsigned char key, int x, int y ) +{ +   (void) x; +   (void) y; +   switch (key) { +      case 27: +         exit(0); +         break; +   } +   glutPostRedisplay(); +} + + + + +int main( int argc, char *argv[] ) +{ +   glutInit( &argc, argv ); +   glutInitWindowPosition( 0, 0 ); +   glutInitWindowSize( 250, 250 ); +   glutInitDisplayMode( GLUT_DEPTH | GLUT_RGB | GLUT_SINGLE ); +   glutCreateWindow(argv[0]); +   glutReshapeFunc( Reshape ); +   glutKeyboardFunc( Key ); +   glutDisplayFunc( Display ); +   Init(); +   glutMainLoop(); +   return 0; +} diff --git a/progs/trivial/vp-tri-swap.c b/progs/trivial/vp-tri-swap.c new file mode 100644 index 0000000000..e9ca1a0378 --- /dev/null +++ b/progs/trivial/vp-tri-swap.c @@ -0,0 +1,103 @@ +/* Test glGenProgramsNV(), glIsProgramNV(), glLoadProgramNV() */ + +#include <assert.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#define GL_GLEXT_PROTOTYPES +#include <GL/glut.h> + +static void Init( void ) +{ +   GLint errno; +   GLuint prognum; +    +   static const char *prog1 = +      "!!ARBvp1.0\n" +      "MOV  result.position, vertex.color;\n" +      "MOV  result.color, vertex.position;\n" +      "END\n"; + + +   glGenProgramsARB(1, &prognum); + +   glBindProgramARB(GL_VERTEX_PROGRAM_ARB, prognum); +   glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, +		      strlen(prog1), (const GLubyte *) prog1); + +   assert(glIsProgramARB(prognum)); +   errno = glGetError(); +   printf("glGetError = %d\n", errno); +   if (errno != GL_NO_ERROR) +   { +      GLint errorpos; + +      glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &errorpos); +      printf("errorpos: %d\n", errorpos); +      printf("%s\n", (char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB)); +   } +} + +static void Display( void ) +{ +   glClearColor(0.3, 0.3, 0.3, 1); +   glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + +   glEnable(GL_VERTEX_PROGRAM_NV); + +   glBegin(GL_TRIANGLES); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -0.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -0.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -0.0); +   glEnd(); + + +   glFlush();  +} + + +static void Reshape( int width, int height ) +{ +   glViewport( 0, 0, width, height ); +   glMatrixMode( GL_PROJECTION ); +   glLoadIdentity(); +   glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); +   glMatrixMode( GL_MODELVIEW ); +   glLoadIdentity(); +   /*glTranslatef( 0.0, 0.0, -15.0 );*/ +} + + +static void Key( unsigned char key, int x, int y ) +{ +   (void) x; +   (void) y; +   switch (key) { +      case 27: +         exit(0); +         break; +   } +   glutPostRedisplay(); +} + + + + +int main( int argc, char *argv[] ) +{ +   glutInit( &argc, argv ); +   glutInitWindowPosition( 0, 0 ); +   glutInitWindowSize( 250, 250 ); +   glutInitDisplayMode( GLUT_DEPTH | GLUT_RGB | GLUT_SINGLE ); +   glutCreateWindow(argv[0]); +   glutReshapeFunc( Reshape ); +   glutKeyboardFunc( Key ); +   glutDisplayFunc( Display ); +   Init(); +   glutMainLoop(); +   return 0; +} diff --git a/progs/trivial/vp-tri.c b/progs/trivial/vp-tri.c index f8e18654c6..d2ef5043b2 100644 --- a/progs/trivial/vp-tri.c +++ b/progs/trivial/vp-tri.c @@ -43,17 +43,17 @@ static void Init( void )  static void Display( void )  {     glClearColor(0.3, 0.3, 0.3, 1); -   glClear( GL_COLOR_BUFFER_BIT  ); +   glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );     glEnable(GL_VERTEX_PROGRAM_NV);     glBegin(GL_TRIANGLES); -   glColor3f(0,0,1);  -   glVertex3f( 0.9, -0.9, 0.0); -   glColor3f(0,1,0);  -   glVertex3f( 0.9,  0.9, 0.0); -   glColor3f(1,0,0);  -   glVertex3f(-0.9,  0.0, 0.0); +   glColor3f(0,0,.7);  +   glVertex3f( 0.9, -0.9, -0.0); +   glColor3f(.8,0,0);  +   glVertex3f( 0.9,  0.9, -0.0); +   glColor3f(0,.9,0);  +   glVertex3f(-0.9,  0.0, -0.0);     glEnd(); @@ -93,7 +93,7 @@ int main( int argc, char *argv[] )     glutInit( &argc, argv );     glutInitWindowPosition( 0, 0 );     glutInitWindowSize( 250, 250 ); -   glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE ); +   glutInitDisplayMode( GLUT_DEPTH | GLUT_RGB | GLUT_SINGLE );     glutCreateWindow(argv[0]);     glutReshapeFunc( Reshape );     glutKeyboardFunc( Key ); | 
