132001f49Smrg/* 232001f49Smrg * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. 332001f49Smrg * 432001f49Smrg * Permission to use, copy, modify, distribute, and sell this software and 532001f49Smrg * its documentation for any purpose is hereby granted without fee, provided 632001f49Smrg * that (i) the above copyright notices and this permission notice appear in 732001f49Smrg * all copies of the software and related documentation, and (ii) the name of 832001f49Smrg * Silicon Graphics may not be used in any advertising or 932001f49Smrg * publicity relating to the software without the specific, prior written 1032001f49Smrg * permission of Silicon Graphics. 1132001f49Smrg * 1232001f49Smrg * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF 1332001f49Smrg * ANY KIND, 1432001f49Smrg * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 1532001f49Smrg * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 1632001f49Smrg * 1732001f49Smrg * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR 1832001f49Smrg * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, 1932001f49Smrg * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 2032001f49Smrg * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 2132001f49Smrg * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 2232001f49Smrg * OF THIS SOFTWARE. 2332001f49Smrg */ 2432001f49Smrg 2532001f49Smrg#include <stdio.h> 2632001f49Smrg#include <string.h> 2732001f49Smrg#include <stdlib.h> 2832001f49Smrg#include "glut_wrap.h" 2932001f49Smrg 3032001f49Smrg 3132001f49Smrg#define CI_OFFSET_1 16 3232001f49Smrg#define CI_OFFSET_2 32 3332001f49Smrg 3432001f49Smrg 3532001f49SmrgGLenum rgb, doubleBuffer; 3632001f49Smrg 3732001f49SmrgGLenum antiAlias, stipple; 3832001f49SmrgGLubyte stippleBits[32*4] = { 3932001f49Smrg 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 4032001f49Smrg 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 4132001f49Smrg 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 4232001f49Smrg 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 4332001f49Smrg 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 4432001f49Smrg 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 4532001f49Smrg 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 4632001f49Smrg 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 4732001f49Smrg 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 4832001f49Smrg 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 4932001f49Smrg 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 5032001f49Smrg 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 5132001f49Smrg 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 5232001f49Smrg 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 5332001f49Smrg 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 5432001f49Smrg 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 5532001f49Smrg}; 5632001f49Smrg 5732001f49Smrg 5832001f49Smrg#include "tkmap.c" 5932001f49Smrg 6032001f49Smrgstatic void Init(void) 6132001f49Smrg{ 6232001f49Smrg GLint i; 6332001f49Smrg 6432001f49Smrg glClearColor(0.0, 0.0, 0.0, 0.0); 6532001f49Smrg glClearIndex(0.0); 6632001f49Smrg 6732001f49Smrg if (!rgb) { 6832001f49Smrg for (i = 0; i < 16; i++) { 6932001f49Smrg glutSetColor(i+CI_OFFSET_1, 0.0, 0.0, i/15.0); 7032001f49Smrg glutSetColor(i+CI_OFFSET_2, 0.0, i/15.0, 0.0); 7132001f49Smrg } 7232001f49Smrg } 7332001f49Smrg 7432001f49Smrg glPolygonStipple(stippleBits); 7532001f49Smrg 7632001f49Smrg antiAlias = GL_FALSE; 7732001f49Smrg stipple = GL_FALSE; 7832001f49Smrg} 7932001f49Smrg 8032001f49Smrgstatic void Reshape(int width, int height) 8132001f49Smrg{ 8232001f49Smrg 8332001f49Smrg glViewport(0, 0, (GLint)width, (GLint)height); 8432001f49Smrg 8532001f49Smrg glMatrixMode(GL_PROJECTION); 8632001f49Smrg glLoadIdentity(); 8732001f49Smrg glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); 8832001f49Smrg glMatrixMode(GL_MODELVIEW); 8932001f49Smrg} 9032001f49Smrg 9132001f49Smrgstatic void Key(unsigned char key, int x, int y) 9232001f49Smrg{ 9332001f49Smrg 9432001f49Smrg switch (key) { 9532001f49Smrg case 27: 9632001f49Smrg exit(1); 9732001f49Smrg case '1': 9832001f49Smrg antiAlias = !antiAlias; 9932001f49Smrg break; 10032001f49Smrg case '2': 10132001f49Smrg stipple = !stipple; 10232001f49Smrg break; 10332001f49Smrg default: 10432001f49Smrg return; 10532001f49Smrg } 10632001f49Smrg 10732001f49Smrg glutPostRedisplay(); 10832001f49Smrg} 10932001f49Smrg 11032001f49Smrgstatic void Draw(void) 11132001f49Smrg{ 11232001f49Smrg GLint ci1, ci2; 11332001f49Smrg 11432001f49Smrg glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 11532001f49Smrg 11632001f49Smrg if (antiAlias) { 11732001f49Smrg ci1 = CI_OFFSET_1; 11832001f49Smrg ci2 = CI_OFFSET_2; 11932001f49Smrg glBlendFunc(GL_SRC_ALPHA, GL_ONE); 12032001f49Smrg glEnable(GL_BLEND); 12132001f49Smrg glEnable(GL_POLYGON_SMOOTH); 12232001f49Smrg glDisable(GL_DEPTH_TEST); 12332001f49Smrg } else { 12432001f49Smrg ci1 = COLOR_BLUE; 12532001f49Smrg ci2 = COLOR_GREEN; 12632001f49Smrg glDisable(GL_BLEND); 12732001f49Smrg glDisable(GL_POLYGON_SMOOTH); 12832001f49Smrg glEnable(GL_DEPTH_TEST); 12932001f49Smrg } 13032001f49Smrg 13132001f49Smrg if (stipple) { 13232001f49Smrg glEnable(GL_POLYGON_STIPPLE); 13332001f49Smrg } else { 13432001f49Smrg glDisable(GL_POLYGON_STIPPLE); 13532001f49Smrg } 13632001f49Smrg 13732001f49Smrg glBegin(GL_TRIANGLES); 13832001f49Smrg (rgb) ? glColor3fv(RGBMap[COLOR_BLUE]) : glIndexi(ci1); 13932001f49Smrg glVertex3f( 0.9, -0.9, -30.0); 14032001f49Smrg glVertex3f( 0.9, 0.9, -30.0); 14132001f49Smrg glVertex3f(-0.9, 0.0, -30.0); 14232001f49Smrg (rgb) ? glColor3fv(RGBMap[COLOR_GREEN]) : glIndexi(ci2); 14332001f49Smrg glVertex3f(-0.9, -0.9, -40.0); 14432001f49Smrg glVertex3f(-0.9, 0.9, -40.0); 14532001f49Smrg glVertex3f( 0.9, 0.0, -25.0); 14632001f49Smrg glEnd(); 14732001f49Smrg 14832001f49Smrg glFlush(); 14932001f49Smrg 15032001f49Smrg if (doubleBuffer) { 15132001f49Smrg glutSwapBuffers(); 15232001f49Smrg } 15332001f49Smrg} 15432001f49Smrg 15532001f49Smrgstatic GLenum Args(int argc, char **argv) 15632001f49Smrg{ 15732001f49Smrg GLint i; 15832001f49Smrg 15932001f49Smrg rgb = GL_TRUE; 16032001f49Smrg doubleBuffer = GL_FALSE; 16132001f49Smrg 16232001f49Smrg for (i = 1; i < argc; i++) { 16332001f49Smrg if (strcmp(argv[i], "-ci") == 0) { 16432001f49Smrg rgb = GL_FALSE; 16532001f49Smrg } else if (strcmp(argv[i], "-rgb") == 0) { 16632001f49Smrg rgb = GL_TRUE; 16732001f49Smrg } else if (strcmp(argv[i], "-sb") == 0) { 16832001f49Smrg doubleBuffer = GL_FALSE; 16932001f49Smrg } else if (strcmp(argv[i], "-db") == 0) { 17032001f49Smrg doubleBuffer = GL_TRUE; 17132001f49Smrg } else { 17232001f49Smrg printf("%s (Bad option).\n", argv[i]); 17332001f49Smrg return GL_FALSE; 17432001f49Smrg } 17532001f49Smrg } 17632001f49Smrg return GL_TRUE; 17732001f49Smrg} 17832001f49Smrg 17932001f49Smrgint main(int argc, char **argv) 18032001f49Smrg{ 18132001f49Smrg GLenum type; 18232001f49Smrg 18332001f49Smrg glutInit(&argc, argv); 18432001f49Smrg 18532001f49Smrg if (Args(argc, argv) == GL_FALSE) { 18632001f49Smrg exit(1); 18732001f49Smrg } 18832001f49Smrg 18932001f49Smrg glutInitWindowPosition(0, 0); glutInitWindowSize( 300, 300); 19032001f49Smrg 19132001f49Smrg type = GLUT_DEPTH; 19232001f49Smrg type |= (rgb) ? GLUT_RGB : GLUT_INDEX; 19332001f49Smrg type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; 19432001f49Smrg glutInitDisplayMode(type); 19532001f49Smrg 19632001f49Smrg if (glutCreateWindow("Depth Test") == GL_FALSE) { 19732001f49Smrg exit(1); 19832001f49Smrg } 19932001f49Smrg 20032001f49Smrg InitMap(); 20132001f49Smrg 20232001f49Smrg Init(); 20332001f49Smrg 20432001f49Smrg glutReshapeFunc(Reshape); 20532001f49Smrg glutKeyboardFunc(Key); 20632001f49Smrg glutDisplayFunc(Draw); 20732001f49Smrg glutMainLoop(); 20832001f49Smrg return 0; 20932001f49Smrg} 210