2
* Copyright (c) 1993-1997, Silicon Graphics, Inc.
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.
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.
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.
35
* OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
40
* This program demonstrates use of OpenGL feedback. First,
41
* a lighting environment is set up and a few lines are drawn.
42
* Then feedback mode is entered, and the same lines are
43
* drawn. The results in the feedback buffer are printed.
49
/* Initialize lighting.
51
static void init(void)
53
glEnable(GL_LIGHTING);
57
/* Draw a few lines and two points, one of which will
58
* be clipped. If in feedback mode, a passthrough token
59
* is issued between the each primitive.
61
static void drawGeometry (GLenum mode)
63
glBegin (GL_LINE_STRIP);
64
glNormal3f (0.0, 0.0, 1.0);
65
glVertex3f (30.0, 30.0, 0.0);
66
glVertex3f (50.0, 60.0, 0.0);
67
glVertex3f (70.0, 40.0, 0.0);
69
if (mode == GL_FEEDBACK)
72
glVertex3f (-100.0, -100.0, -100.0); /* will be clipped */
74
if (mode == GL_FEEDBACK)
77
glNormal3f (0.0, 0.0, 1.0);
78
glVertex3f (50.0, 50.0, 0.0);
82
/* Write contents of one vertex to stdout. */
83
static void print3DcolorVertex (GLint size, GLint *count,
89
for (i = 0; i < 7; i++) {
90
printf ("%4.2f ", buffer[size-(*count)]);
96
/* Write contents of entire buffer. (Parse tokens!) */
97
static void printBuffer(GLint size, GLfloat *buffer)
104
token = buffer[size-count]; count--;
105
if (token == GL_PASS_THROUGH_TOKEN) {
106
printf ("GL_PASS_THROUGH_TOKEN\n");
107
printf (" %4.2f\n", buffer[size-count]);
110
else if (token == GL_POINT_TOKEN) {
111
printf ("GL_POINT_TOKEN\n");
112
print3DcolorVertex (size, &count, buffer);
114
else if (token == GL_LINE_TOKEN) {
115
printf ("GL_LINE_TOKEN\n");
116
print3DcolorVertex (size, &count, buffer);
117
print3DcolorVertex (size, &count, buffer);
119
else if (token == GL_LINE_RESET_TOKEN) {
120
printf ("GL_LINE_RESET_TOKEN\n");
121
print3DcolorVertex (size, &count, buffer);
122
print3DcolorVertex (size, &count, buffer);
127
static void display(void)
129
GLfloat feedBuffer[1024];
132
glMatrixMode (GL_PROJECTION);
134
glOrtho (0.0, 100.0, 0.0, 100.0, 0.0, 1.0);
136
glClearColor (0.0, 0.0, 0.0, 0.0);
137
glClear(GL_COLOR_BUFFER_BIT);
138
drawGeometry (GL_RENDER);
140
glFeedbackBuffer (1024, GL_3D_COLOR, feedBuffer);
141
(void) glRenderMode (GL_FEEDBACK);
142
drawGeometry (GL_FEEDBACK);
144
size = glRenderMode (GL_RENDER);
145
printBuffer (size, feedBuffer);
151
static void keyboard(unsigned char key, int x, int y)
161
int main(int argc, char** argv)
163
glutInit(&argc, argv);
164
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
165
glutInitWindowSize (100, 100);
166
glutInitWindowPosition (100, 100);
167
glutCreateWindow(argv[0]);
169
glutDisplayFunc(display);
170
glutKeyboardFunc (keyboard);