| Brian | bc3f2c9 | 2008-02-25 16:26:37 -0700 | [diff] [blame] | 1 | /* | 
 | 2 |  * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. | 
 | 3 |  * | 
 | 4 |  * Permission to use, copy, modify, distribute, and sell this software and | 
 | 5 |  * its documentation for any purpose is hereby granted without fee, provided | 
 | 6 |  * that (i) the above copyright notices and this permission notice appear in | 
 | 7 |  * all copies of the software and related documentation, and (ii) the name of | 
 | 8 |  * Silicon Graphics may not be used in any advertising or | 
 | 9 |  * publicity relating to the software without the specific, prior written | 
 | 10 |  * permission of Silicon Graphics. | 
 | 11 |  * | 
 | 12 |  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF | 
 | 13 |  * ANY KIND, | 
 | 14 |  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY | 
 | 15 |  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | 
 | 16 |  * | 
 | 17 |  * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR | 
 | 18 |  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, | 
 | 19 |  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, | 
 | 20 |  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF | 
 | 21 |  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE | 
 | 22 |  * OF THIS SOFTWARE. | 
 | 23 |  */ | 
 | 24 |  | 
 | 25 | #include <math.h> | 
 | 26 | #include <stdio.h> | 
 | 27 | #include <string.h> | 
 | 28 | #include <stdlib.h> | 
 | 29 | #include <GL/glut.h> | 
 | 30 |  | 
 | 31 |  | 
 | 32 | #define CI_OFFSET_1 16 | 
 | 33 | #define CI_OFFSET_2 32 | 
 | 34 |  | 
 | 35 |  | 
 | 36 | GLenum doubleBuffer; | 
 | 37 | GLboolean smooth = GL_TRUE; | 
 | 38 | GLfloat width = 1.0; | 
 | 39 |  | 
 | 40 |  | 
 | 41 | static void Init(void) | 
 | 42 | { | 
 | 43 |    float range[2], aarange[2]; | 
 | 44 |    fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER)); | 
 | 45 |    fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION)); | 
 | 46 |    fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR)); | 
| Keith Whitwell | eb9801c | 2009-03-24 16:35:29 +0000 | [diff] [blame^] | 47 |    fflush(stderr); | 
| Brian | bc3f2c9 | 2008-02-25 16:26:37 -0700 | [diff] [blame] | 48 |    glGetFloatv(GL_LINE_WIDTH_RANGE, aarange); | 
 | 49 |    glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, range); | 
 | 50 |    printf("Non-AA line width range: %f .. %f\n", range[0], range[1]); | 
 | 51 |    printf("AA line width range: %f .. %f\n", aarange[0], aarange[1]); | 
| Keith Whitwell | eb9801c | 2009-03-24 16:35:29 +0000 | [diff] [blame^] | 52 |    fflush(stdout); | 
| Brian | bc3f2c9 | 2008-02-25 16:26:37 -0700 | [diff] [blame] | 53 | } | 
 | 54 |  | 
 | 55 |  | 
 | 56 | static void Reshape(int width, int height) | 
 | 57 | { | 
 | 58 |    glViewport(0, 0, (GLint)width, (GLint)height); | 
 | 59 |    glMatrixMode(GL_PROJECTION); | 
 | 60 |    glLoadIdentity(); | 
 | 61 |    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); | 
 | 62 |    glMatrixMode(GL_MODELVIEW); | 
 | 63 |    glLoadIdentity(); | 
 | 64 |    glTranslatef(0, 0, -30); | 
 | 65 | } | 
 | 66 |  | 
 | 67 | static void Key(unsigned char key, int x, int y) | 
 | 68 | { | 
 | 69 |    switch (key) { | 
 | 70 |    case 'w': | 
 | 71 |       width -= 0.5; | 
 | 72 |       if (width < 0.5) | 
 | 73 |          width = 0.5; | 
 | 74 |       break; | 
 | 75 |    case 'W': | 
 | 76 |       width += 0.5; | 
 | 77 |       break; | 
 | 78 |    case 's': | 
 | 79 |       smooth = !smooth; | 
 | 80 |       break; | 
 | 81 |    case 27: | 
 | 82 |       exit(1); | 
 | 83 |    default: | 
 | 84 |       return; | 
 | 85 |    } | 
 | 86 |    printf("LineWidth: %g\n", width); | 
 | 87 |    glutPostRedisplay(); | 
 | 88 | } | 
 | 89 |  | 
 | 90 |  | 
 | 91 | static void Draw(void) | 
 | 92 | { | 
 | 93 |    float a; | 
 | 94 |  | 
 | 95 |    glClear(GL_COLOR_BUFFER_BIT);  | 
 | 96 |  | 
 | 97 |    glLineWidth(width); | 
 | 98 |  | 
 | 99 |    if (smooth) { | 
 | 100 |       glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | 
 | 101 |       glEnable(GL_BLEND); | 
 | 102 |       glEnable(GL_LINE_SMOOTH); | 
 | 103 |    } | 
 | 104 |  | 
 | 105 |    glColor3f(1, 1, 1); | 
 | 106 |  | 
 | 107 |    glBegin(GL_LINES); | 
 | 108 |    for (a = 0; a < 3.14159; a += 0.2) { | 
 | 109 |       float x = .9 * cos(a); | 
 | 110 |       float y = .9 * sin(a); | 
 | 111 |  | 
 | 112 |       glVertex2f(-x, -y); | 
 | 113 |       glVertex2f( x,  y); | 
 | 114 |    } | 
 | 115 |    glEnd(); | 
 | 116 |  | 
 | 117 |    glDisable(GL_LINE_SMOOTH); | 
 | 118 |    glDisable(GL_BLEND); | 
 | 119 |  | 
 | 120 |    glFlush(); | 
 | 121 |  | 
 | 122 |    if (doubleBuffer) { | 
 | 123 |       glutSwapBuffers(); | 
 | 124 |    } | 
 | 125 | } | 
 | 126 |  | 
 | 127 | static GLenum Args(int argc, char **argv) | 
 | 128 | { | 
 | 129 |    GLint i; | 
 | 130 |  | 
 | 131 |    doubleBuffer = GL_FALSE; | 
 | 132 |  | 
 | 133 |    for (i = 1; i < argc; i++) { | 
 | 134 |       if (strcmp(argv[i], "-sb") == 0) { | 
 | 135 |          doubleBuffer = GL_FALSE; | 
 | 136 |       } else if (strcmp(argv[i], "-db") == 0) { | 
 | 137 |          doubleBuffer = GL_TRUE; | 
 | 138 |       } else { | 
 | 139 |          fprintf(stderr, "%s (Bad option).\n", argv[i]); | 
 | 140 |          return GL_FALSE; | 
 | 141 |       } | 
 | 142 |    } | 
 | 143 |    return GL_TRUE; | 
 | 144 | } | 
 | 145 |  | 
 | 146 |  | 
 | 147 | int main(int argc, char **argv) | 
 | 148 | { | 
 | 149 |    GLenum type; | 
 | 150 |  | 
 | 151 |    glutInit(&argc, argv); | 
 | 152 |  | 
 | 153 |    if (Args(argc, argv) == GL_FALSE) { | 
 | 154 |       exit(1); | 
 | 155 |    } | 
 | 156 |  | 
 | 157 |    glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); | 
 | 158 |  | 
 | 159 |    type = GLUT_RGB; | 
 | 160 |    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; | 
 | 161 |    glutInitDisplayMode(type); | 
 | 162 |  | 
 | 163 |    if (glutCreateWindow(argv[0]) == GL_FALSE) { | 
 | 164 |       exit(1); | 
 | 165 |    } | 
 | 166 |  | 
 | 167 |    Init(); | 
 | 168 |  | 
 | 169 |    glutReshapeFunc(Reshape); | 
 | 170 |    glutKeyboardFunc(Key); | 
 | 171 |    glutDisplayFunc(Draw); | 
 | 172 |    glutMainLoop(); | 
 | 173 |    return 0; | 
 | 174 | } |