]> git.cworth.org Git - apitrace-tests/blob - apps/gl/gremedy.c
Don't force initial window position.
[apitrace-tests] / apps / gl / gremedy.c
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
26 #ifdef _WIN32
27 #include <windows.h>
28 #endif
29
30 #include <stdio.h>
31 #include <string.h>
32 #include <stdlib.h>
33
34 #include <GL/glew.h>
35 #ifdef __APPLE__
36 #  include <OpenGL/glu.h>
37 #  include <GLUT/glut.h>
38 #else
39 #  include <GL/glu.h>
40 #  include <GL/glut.h>
41 #endif
42
43
44 static int win;
45
46
47 /**
48  * Identical to gluCheckExtension, which is not part of GLU on Windows.
49  */
50 static GLboolean
51 checkExtension(const char *extName, const GLubyte *extString)
52 {
53    const char *p = (const char *)extString;
54    const char *q = extName;
55    char c;
56    do {
57        c = *p++;
58        if (c == '\0' || c == ' ') {
59            if (q && *q == '\0') {
60                return GL_TRUE;
61            } else {
62                q = extName;
63            }
64        } else {
65            if (q && *q == c) {
66                ++q;
67            } else {
68                q = 0;
69            }
70        }
71    } while (c);
72    return GL_FALSE;
73 }
74
75
76 static void checkGlError(const char *call) {
77    GLenum error = glGetError();
78    if (error != GL_NO_ERROR) {
79       fprintf(stderr, "error: %s -> %s\n", call, gluErrorString(error));
80       exit(1);
81    }
82 }
83
84 static void Init(void)
85 {
86    const GLubyte *extensions;
87    GLboolean has_GL_GREMEDY_string_marker;
88    GLboolean has_GL_GREMEDY_frame_terminator;
89       
90    extensions = glGetString(GL_EXTENSIONS);
91    checkGlError("glGetString(GL_EXTENSIONS)");
92    has_GL_GREMEDY_string_marker = checkExtension("GL_GREMEDY_string_marker", extensions);
93    has_GL_GREMEDY_frame_terminator = checkExtension("GL_GREMEDY_string_marker", extensions);
94
95    if (GLEW_VERSION_3_0) {
96       GLint has_GL3_GREMEDY_string_marker = 0;
97       GLint has_GL3_GREMEDY_frame_terminator = 0;
98       GLint i;
99
100       GLint num_extensions = 0;
101       glGetIntegerv(GL_NUM_EXTENSIONS, &num_extensions);
102       checkGlError("glGetIntegerv(GL_NUM_EXTENSIONS)");
103
104       for (i = 0; i < num_extensions; ++i) {
105          const char *extension;
106
107          extension = (const char *)glGetStringi(GL_EXTENSIONS, i);
108          checkGlError("glGetStringi(GL_EXTENSIONS, i)");
109
110          if (strlen(extension) == 0) {
111             fprintf(stderr, "error: glGetStringi returned empty string\n");
112             exit(1);
113          }
114
115          if (strcmp(extension, "GL_GREMEDY_string_marker_count") == 0) {
116             ++has_GL3_GREMEDY_string_marker;
117          }
118
119          if (strcmp(extension, "GL_GREMEDY_frame_terminator") == 0) {
120             ++has_GL3_GREMEDY_frame_terminator;
121          }
122       }
123
124       if (!!has_GL_GREMEDY_string_marker != !!has_GL3_GREMEDY_string_marker) {
125          fprintf(stderr, "error: GL_GREMEDY_string_marker not consistently supported by GL3\n");
126          exit(1);
127       }
128
129       if (!!has_GL_GREMEDY_frame_terminator != !!has_GL3_GREMEDY_frame_terminator) {
130          fprintf(stderr, "error: GL_GREMEDY_frame_terminator not consistently supported by GL3\n");
131          exit(1);
132       }
133    }
134
135    glewInit();
136
137    if (!!has_GL_GREMEDY_string_marker != !!GLEW_GREMEDY_string_marker) {
138       fprintf(stderr, "error: GL_GREMEDY_string_marker not consistently supported by GLEW\n");
139       exit(1);
140    }
141
142    if (!!has_GL_GREMEDY_frame_terminator != !!GLEW_GREMEDY_frame_terminator) {
143       fprintf(stderr, "error: GL_GREMEDY_frame_terminator not consistently supported by GLEW\n");
144       exit(1);
145    }
146
147    if (GLEW_GREMEDY_string_marker) {
148       glStringMarkerGREMEDY(strlen("Init"), "Init - this should not be included");
149    }
150
151    glClearColor(0.3, 0.1, 0.3, 1.0);
152 }
153
154 static void Reshape(int width, int height)
155 {
156    if (GLEW_GREMEDY_string_marker) {
157       glStringMarkerGREMEDY(0, __FUNCTION__);
158    }
159
160    glViewport(0, 0, (GLint)width, (GLint)height);
161
162    glMatrixMode(GL_PROJECTION);
163    glLoadIdentity();
164    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
165    glMatrixMode(GL_MODELVIEW);
166 }
167
168 static void Draw(void)
169 {
170    if (GLEW_GREMEDY_string_marker) {
171       glStringMarkerGREMEDY(0, __FUNCTION__);
172    }
173
174    glClear(GL_COLOR_BUFFER_BIT); 
175
176    glBegin(GL_TRIANGLES);
177    glColor3f(.8,0,0); 
178    glVertex3f(-0.9, -0.9, -30.0);
179    glColor3f(0,.9,0); 
180    glVertex3f( 0.9, -0.9, -30.0);
181    glColor3f(0,0,.7); 
182    glVertex3f( 0.0,  0.9, -30.0);
183    glEnd();
184
185    glFlush();
186
187    if (GLEW_GREMEDY_frame_terminator) {
188       glFrameTerminatorGREMEDY();
189    }
190
191    glutDestroyWindow(win);
192    
193    exit(0);
194 }
195
196 int main(int argc, char **argv)
197 {
198    glutInit(&argc, argv);
199
200    glutInitWindowSize(250, 250);
201
202    glutInitDisplayMode(GLUT_RGB | GLUT_ALPHA | GLUT_SINGLE);
203
204    win = glutCreateWindow(*argv);
205    if (!win) {
206       exit(1);
207    }
208
209    Init();
210
211    glutReshapeFunc(Reshape);
212    glutDisplayFunc(Draw);
213    glutMainLoop();
214    return 0;
215 }