1 /*
2  * Copyright (c) 1993-1997, Silicon Graphics, Inc.
3  * ALL RIGHTS RESERVED
4  * Permission to use, copy, modify, and distribute this software for
5  * any purpose and without fee is hereby granted, provided that the above
6  * copyright notice appear in all copies and that both the copyright notice
7  * and this permission notice appear in supporting documentation, and that
8  * the name of Silicon Graphics, Inc. not be used in advertising
9  * or publicity pertaining to distribution of the software without specific,
10  * written prior permission.
11  *
12  * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
13  * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
14  * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
15  * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
16  * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
17  * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
18  * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
19  * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
20  * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
21  * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
22  * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
23  * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
24  *
25  * US Government Users Restricted Rights
26  * Use, duplication, or disclosure by the Government is subject to
27  * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
28  * (c)(1)(ii) of the Rights in Technical Data and Computer Software
29  * clause at DFARS 252.227-7013 and/or in similar or successor
30  * clauses in the FAR or the DOD or NASA FAR Supplement.
31  * Unpublished-- rights reserved under the copyright laws of the
32  * United States.  Contractor/manufacturer is Silicon Graphics,
33  * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
34  *
35  * OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
36  */
37 
38 /*
39  *  aargb.c
40  *  This program draws shows how to draw anti-aliased lines. It draws
41  *  two diagonal lines to form an X; when 'r' is typed in the window,
42  *  the lines are rotated in opposite directions.
43  */
44 #include "glut_wrap.h"
45 #include <stdlib.h>
46 #include <stdio.h>
47 
48 static float rotAngle = 0.;
49 
50 /*  Initialize antialiasing for RGBA mode, including alpha
51  *  blending, hint, and line width.  Print out implementation
52  *  specific info on line width granularity and width.
53  */
init(void)54 static void init(void)
55 {
56    GLfloat values[2];
57    glGetFloatv (GL_LINE_WIDTH_GRANULARITY, values);
58    printf ("GL_LINE_WIDTH_GRANULARITY value is %3.1f\n", values[0]);
59 
60    glGetFloatv (GL_LINE_WIDTH_RANGE, values);
61    printf ("GL_LINE_WIDTH_RANGE values are %3.1f %3.1f\n",
62       values[0], values[1]);
63 
64    glEnable (GL_LINE_SMOOTH);
65    glEnable (GL_BLEND);
66    glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
67    glHint (GL_LINE_SMOOTH_HINT, GL_DONT_CARE);
68    glLineWidth (1.5);
69 
70    glClearColor(0.0, 0.0, 0.0, 0.0);
71 }
72 
73 /* Draw 2 diagonal lines to form an X
74  */
display(void)75 static void display(void)
76 {
77    glClear(GL_COLOR_BUFFER_BIT);
78 
79    glColor3f (0.0, 1.0, 0.0);
80    glPushMatrix();
81    glRotatef(-rotAngle, 0.0, 0.0, 0.1);
82    glBegin (GL_LINES);
83       glVertex2f (-0.5, 0.5);
84       glVertex2f (0.5, -0.5);
85    glEnd ();
86    glPopMatrix();
87 
88    glColor3f (0.0, 0.0, 1.0);
89    glPushMatrix();
90    glRotatef(rotAngle, 0.0, 0.0, 0.1);
91    glBegin (GL_LINES);
92       glVertex2f (0.5, 0.5);
93       glVertex2f (-0.5, -0.5);
94    glEnd ();
95    glPopMatrix();
96 
97    glFlush();
98 }
99 
reshape(int w,int h)100 static void reshape(int w, int h)
101 {
102    glViewport(0, 0, w, h);
103    glMatrixMode(GL_PROJECTION);
104    glLoadIdentity();
105    if (w <= h)
106       gluOrtho2D (-1.0, 1.0,
107          -1.0*(GLfloat)h/(GLfloat)w, 1.0*(GLfloat)h/(GLfloat)w);
108    else
109       gluOrtho2D (-1.0*(GLfloat)w/(GLfloat)h,
110          1.0*(GLfloat)w/(GLfloat)h, -1.0, 1.0);
111    glMatrixMode(GL_MODELVIEW);
112    glLoadIdentity();
113 }
114 
115 /* ARGSUSED1 */
keyboard(unsigned char key,int x,int y)116 static void keyboard(unsigned char key, int x, int y)
117 {
118    switch (key) {
119       case 'r':
120       case 'R':
121          rotAngle += 20.;
122          if (rotAngle >= 360.) rotAngle = 0.;
123          glutPostRedisplay();
124          break;
125       case 27:  /*  Escape Key  */
126          exit(0);
127          break;
128       default:
129          break;
130     }
131 }
132 
133 /*  Main Loop
134  *  Open window with initial window size, title bar,
135  *  RGBA display mode, and handle input events.
136  */
main(int argc,char ** argv)137 int main(int argc, char** argv)
138 {
139    glutInit(&argc, argv);
140    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
141    glutInitWindowSize (200, 200);
142    glutCreateWindow (argv[0]);
143    init();
144    glutReshapeFunc (reshape);
145    glutKeyboardFunc (keyboard);
146    glutDisplayFunc (display);
147    glutMainLoop();
148    return 0;
149 }
150