]> git.cworth.org Git - apitrace-tests/blob - apps/gl/varray.c
Don't force initial window position.
[apitrace-tests] / apps / gl / varray.c
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  *  varray.c
40  *  This program demonstrates vertex arrays.
41  */
42
43 #ifdef _WIN32
44 #include <windows.h>
45 #endif
46
47 #include <stdio.h>
48 #include <string.h>
49 #include <stdlib.h>
50
51 #ifdef __APPLE__
52 #  include <GLUT/glut.h>
53 #else
54 #  include <GL/glut.h>
55 #endif
56
57 enum SetupMethod {
58    POINTER,
59    INTERLEAVED,
60 };
61
62 enum DerefMethod {
63    DRAWARRAYS,
64    ARRAYELEMENT,
65    DRAWELEMENTS,
66 };
67
68 static enum SetupMethod setupMethod = POINTER;
69 static enum DerefMethod derefMethod = DRAWELEMENTS;
70
71 static int win;
72
73 static void parseArgs(int argc, char** argv)
74 {
75    int i;
76
77    for (i = 1; i < argc; ++i) {
78       const char *arg = argv[i];
79       if (strcmp(arg, "pointer") == 0) {
80          setupMethod = POINTER;
81       } else if (strcmp(arg, "interleaved") == 0) {
82          setupMethod = INTERLEAVED;
83       } else if (strcmp(arg, "drawarrays") == 0) {
84          derefMethod = DRAWARRAYS;
85       } else if (strcmp(arg, "arrayelement") == 0) {
86          derefMethod = ARRAYELEMENT;
87       } else if (strcmp(arg, "drawelements") == 0) {
88          derefMethod = DRAWELEMENTS;
89       } else {
90          fprintf(stderr, "error: unknown arg %s\n", arg);
91          exit(1);
92       }
93    }
94 }
95
96 static void setupPointers(void)
97 {
98    static GLint vertices[] = {
99         25,  25,
100        100, 325,
101        175,  25,
102        175, 325,
103        250,  25,
104        325, 325
105    };
106    static GLfloat colors[] = {
107       1.0 , 0.2 , 0.2 ,
108       0.2 , 0.2 , 1.0 ,
109       0.8 , 1.0 , 0.2 ,
110       0.75, 0.75, 0.75,
111       0.35, 0.35, 0.35,
112       0.5 , 0.5 , 0.5
113    };
114
115    glEnableClientState(GL_VERTEX_ARRAY);
116    glEnableClientState(GL_COLOR_ARRAY);
117
118    glVertexPointer(2, GL_INT, 2 * sizeof(GLint), vertices);
119    glColorPointer(3, GL_FLOAT, 3 * sizeof(GLfloat), colors);
120 }
121
122 static void setupInterleave(void)
123 {
124    static GLfloat intertwined[] = {
125        1.0 , 0.2 , 0.2 ,  25.0,  25.0, 0.0,
126        0.2 , 0.2 , 1.0 , 100.0, 325.0, 0.0,
127        0.8 , 1.0 , 0.2 , 175.0,  25.0, 0.0,
128        0.75, 0.75, 0.75, 175.0, 325.0, 0.0,
129        0.35, 0.35, 0.35, 250.0,  25.0, 0.0,
130        0.5 , 0.5 , 0.5 , 325.0, 325.0, 0.0
131    };
132
133    glInterleavedArrays(GL_C3F_V3F, 0, intertwined);
134 }
135
136 static void init(void)
137 {
138    glClearColor(0.0, 0.0, 0.0, 0.0);
139    glShadeModel(GL_SMOOTH);
140    setupPointers();
141 }
142
143 static void display(void)
144 {
145    glClear(GL_COLOR_BUFFER_BIT);
146
147    if (derefMethod == DRAWARRAYS)
148       glDrawArrays(GL_TRIANGLES, 0, 6);
149    else if (derefMethod == ARRAYELEMENT) {
150       glBegin(GL_TRIANGLES);
151       glArrayElement(2);
152       glArrayElement(3);
153       glArrayElement(5);
154       glEnd();
155    }
156    else if (derefMethod == DRAWELEMENTS) {
157       GLuint indices[4] = {0, 1, 3, 4};
158
159       glDrawElements(GL_POLYGON, 4, GL_UNSIGNED_INT, indices);
160    }
161    glFlush();
162
163    glutDestroyWindow(win);
164
165    exit(0);
166 }
167
168 static void reshape(int w, int h)
169 {
170    glViewport(0, 0, (GLsizei) w, (GLsizei) h);
171    glMatrixMode(GL_PROJECTION);
172    glLoadIdentity();
173    glOrtho(0.0, (GLdouble) w, 0.0, (GLdouble) h, -1.0, 1.0);
174 }
175
176 int main(int argc, char** argv)
177 {
178    parseArgs(argc, argv);
179    glutInit(&argc, argv);
180    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
181    glutInitWindowSize(350, 350);
182    win = glutCreateWindow(argv[0]);
183    init();
184    glutDisplayFunc(display);
185    glutReshapeFunc(reshape);
186    glutMainLoop();
187    return 0;
188 }