/* * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* * This is a port of the infamous "glxgears" demo to straight EGL * Port by Dane Rushton 10 July 2005 * * No command line options. * Program runs for 5 seconds then exits, outputing framerate to console */ #define MAXFRAME 5 #define PFINISH 1 #include #include #include #include static GLuint win_width = 256; static GLuint win_height = 230; static GLuint frames = 0; static void draw(void) { #if PFINISH fprintf(stderr, "EE CLEAR -----------------------------------------------------\n"); #endif glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); #if PFINISH glFinish(); fprintf(stderr, "EE CLEAR _____________________________________________________\n"); #endif #if PFINISH fprintf(stderr, "EE DRAW ------------------------------------------------------\n"); #endif glBegin(GL_TRIANGLES); glColor3f(0,0,1); glVertex3f( 0.9, -0.9, -30.0); glColor3f(1,0,0); glVertex3f( 0.9, 0.9, -30.0); glColor3f(0,1,0); glVertex3f(-0.9, 0.0, -30.0); glEnd(); #if PFINISH glFinish(); fprintf(stderr, "EE DRAW ______________________________________________________\n"); #endif glutSwapBuffers(); frames++; if (frames >= MAXFRAME) { glFinish(); exit(0); } } static void idle(void) { static double t0 = -1.; double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; if (t0 < 0.0) t0 = t; dt = t - t0; t0 = t; glutPostRedisplay(); } /* new window size or exposure */ static void reshape(int width, int height) { glViewport(0, 0, (GLint)width, (GLint)height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } static void init(void) { static GLfloat pos[4] = { 5.0, 5.0, 10.0, 0.0 }; glLightfv(GL_LIGHT0, GL_POSITION, pos); glEnable(GL_CULL_FACE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE | GLUT_STENCIL); glutInitWindowSize(win_width, win_height); glutCreateWindow("glgears"); glutIdleFunc(idle); glutReshapeFunc(reshape); glutDisplayFunc(draw); init(); reshape(win_width, win_height); glDrawBuffer(GL_BACK); glutMainLoop(); return 0; }