home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include "tk.h"
-
-
- #define CI_OFFSET_1 16
- #define CI_OFFSET_2 32
-
-
- GLenum rgb, doubleBuffer, directRender;
-
- GLenum antiAlias, stipple;
- GLubyte stippleBits[32*4] = {
- 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
- 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
- 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
- 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
- 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
- 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
- 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
- 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
- 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
- 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
- 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
- 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
- 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
- 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
- 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
- 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
- };
-
-
- static void Init(void)
- {
- GLint i;
-
- glClearColor(0.0, 0.0, 0.0, 0.0);
- glClearIndex(0.0);
-
- if (!rgb) {
- for (i = 0; i < 16; i++) {
- tkSetOneColor(i+CI_OFFSET_1, 0.0, 0.0, i/15.0);
- tkSetOneColor(i+CI_OFFSET_2, 0.0, i/15.0, 0.0);
- }
- }
-
- glPolygonStipple(stippleBits);
-
- antiAlias = GL_FALSE;
- stipple = GL_FALSE;
- }
-
- 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 GLenum Key(int key, GLenum mask)
- {
-
- switch (key) {
- case TK_ESCAPE:
- tkQuit();
- case TK_1:
- antiAlias = !antiAlias;
- break;
- case TK_2:
- stipple = !stipple;
- break;
- default:
- return GL_FALSE;
- }
- return GL_TRUE;
- }
-
- static void Draw(void)
- {
- GLint ci1, ci2;
-
- glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
-
- if (antiAlias) {
- ci1 = CI_OFFSET_1;
- ci2 = CI_OFFSET_2;
- glBlendFunc(GL_SRC_ALPHA, GL_ONE);
- glEnable(GL_BLEND);
- glEnable(GL_POLYGON_SMOOTH);
- glDisable(GL_DEPTH_TEST);
- } else {
- ci1 = TK_BLUE;
- ci2 = TK_GREEN;
- glDisable(GL_BLEND);
- glDisable(GL_POLYGON_SMOOTH);
- glEnable(GL_DEPTH_TEST);
- }
-
- if (stipple) {
- glEnable(GL_POLYGON_STIPPLE);
- } else {
- glDisable(GL_POLYGON_STIPPLE);
- }
-
- glBegin(GL_TRIANGLES);
- (rgb) ? glColor3fv(tkRGBMap[TK_BLUE]) : glIndexi(ci1);
- glVertex3f( 0.9, -0.9, -30.0);
- glVertex3f( 0.9, 0.9, -30.0);
- glVertex3f(-0.9, 0.0, -30.0);
- (rgb) ? glColor3fv(tkRGBMap[TK_GREEN]) : glIndexi(ci2);
- glVertex3f(-0.9, -0.9, -40.0);
- glVertex3f(-0.9, 0.9, -40.0);
- glVertex3f( 0.9, 0.0, -25.0);
- glEnd();
-
- glFlush();
- }
-
- static GLenum Args(int argc, char **argv)
- {
- GLint i;
-
- rgb = GL_TRUE;
- doubleBuffer = GL_FALSE;
- directRender = GL_TRUE;
-
- for (i = 1; i < argc; i++) {
- if (strcmp(argv[i], "-ci") == 0) {
- rgb = GL_FALSE;
- } else if (strcmp(argv[i], "-rgb") == 0) {
- rgb = GL_TRUE;
- } else if (strcmp(argv[i], "-sb") == 0) {
- doubleBuffer = GL_FALSE;
- } else if (strcmp(argv[i], "-db") == 0) {
- doubleBuffer = GL_TRUE;
- } else if (strcmp(argv[i], "-dr") == 0) {
- directRender = GL_TRUE;
- } else if (strcmp(argv[i], "-ir") == 0) {
- directRender = GL_FALSE;
- } else {
- printf("%s (Bad option).\n", argv[i]);
- return GL_FALSE;
- }
- }
- return GL_TRUE;
- }
-
- void main(int argc, char **argv)
- {
- GLenum type;
-
- if (Args(argc, argv) == GL_FALSE) {
- tkQuit();
- }
-
- tkInitPosition(30, 60, 300, 300);
-
- type = TK_DEPTH;
- type |= (rgb) ? TK_RGB : TK_INDEX;
- type |= (doubleBuffer) ? TK_DOUBLE : TK_SINGLE;
- type |= (directRender) ? TK_DIRECT : TK_INDIRECT;
- tkInitDisplayMode(type);
-
- if (tkInitWindow("Depth Test") == GL_FALSE) {
- tkQuit();
- }
-
- Init();
-
- tkExposeFunc(Reshape);
- tkReshapeFunc(Reshape);
- tkKeyDownFunc(Key);
- tkDisplayFunc(Draw);
- tkExec();
- }
-