diff options
Diffstat (limited to 'tests/glfw/triangle.c')
-rw-r--r-- | tests/glfw/triangle.c | 152 |
1 files changed, 83 insertions, 69 deletions
diff --git a/tests/glfw/triangle.c b/tests/glfw/triangle.c index a8b737be..db9d9ab1 100644 --- a/tests/glfw/triangle.c +++ b/tests/glfw/triangle.c @@ -8,87 +8,101 @@ #include <stdlib.h> #include <GL/glfw.h> +#ifdef EMSCRIPTEN +#include <emscripten/emscripten.h> +#endif -int main( void ) +void +iteration () { - int width, height, x; - double t; + int width, height, x; + double t; + + t = glfwGetTime (); + glfwGetMousePos (&x, NULL); + + // Get window size (may be different than the requested size) + glfwGetWindowSize (&width, &height); + + // Special case: avoid division by zero below + height = height > 0 ? height : 1; + + glViewport (0, 0, width, height); + + // Clear color buffer to black + glClearColor (0.0f, 0.0f, 0.0f, 0.0f); + glClear (GL_COLOR_BUFFER_BIT); + + // Select and setup the projection matrix + glMatrixMode (GL_PROJECTION); + glLoadIdentity (); + gluPerspective (65.0f, (GLfloat) width / (GLfloat) height, 1.0f, 100.0f); + + // Select and setup the modelview matrix + glMatrixMode (GL_MODELVIEW); + glLoadIdentity (); + gluLookAt (0.0f, 1.0f, 0.0f, // Eye-position + 0.0f, 20.0f, 0.0f, // View-point + 0.0f, 0.0f, 1.0f); // Up-vector + + // Draw a rotating colorful triangle + //glTranslatef (0.0f, 14.0f, 0.0f); + glTranslatef (0.0f, 1.0f, 0.0f); + glRotatef (0.3f * (GLfloat) x + (GLfloat) t * 100.0f, 0.0f, 0.0f, 1.0f); + glBegin (GL_TRIANGLES); + glColor3f (1.0f, 0.0f, 0.0f); + glVertex3f (-5.0f, 0.0f, -4.0f); + glColor3f (0.0f, 1.0f, 0.0f); + glVertex3f (5.0f, 0.0f, -4.0f); + glColor3f (0.0f, 0.0f, 1.0f); + glVertex3f (0.0f, 0.0f, 6.0f); + glEnd (); + + // Swap buffers + glfwSwapBuffers (); - // Initialise GLFW - if( !glfwInit() ) +} + +int +main (void) +{ + // Initialise GLFW + if (!glfwInit ()) { - fprintf( stderr, "Failed to initialize GLFW\n" ); - exit( EXIT_FAILURE ); + fprintf (stderr, "Failed to initialize GLFW\n"); + exit (EXIT_FAILURE); } - // Open a window and create its OpenGL context - if( !glfwOpenWindow( 640, 480, 0,0,0,0, 0,0, GLFW_WINDOW ) ) + // Open a window and create its OpenGL context + if (!glfwOpenWindow (640, 480, 0, 0, 0, 0, 0, 0, GLFW_WINDOW)) { - fprintf( stderr, "Failed to open GLFW window\n" ); + fprintf (stderr, "Failed to open GLFW window\n"); - glfwTerminate(); - exit( EXIT_FAILURE ); + glfwTerminate (); + exit (EXIT_FAILURE); } - glfwSetWindowTitle( "Spinning Triangle" ); + glfwSetWindowTitle ("Spinning Triangle"); - // Ensure we can capture the escape key being pressed below - glfwEnable( GLFW_STICKY_KEYS ); + // Ensure we can capture the escape key being pressed below + glfwEnable (GLFW_STICKY_KEYS); - // Enable vertical sync (on cards that support it) - glfwSwapInterval( 1 ); + // Enable vertical sync (on cards that support it) + glfwSwapInterval (1); - do +#ifdef EMSCRIPTEN + emscripten_set_main_loop (iteration, 0, 1); +#else + do { - t = glfwGetTime(); - glfwGetMousePos( &x, NULL ); - - // Get window size (may be different than the requested size) - glfwGetWindowSize( &width, &height ); - - // Special case: avoid division by zero below - height = height > 0 ? height : 1; - - glViewport( 0, 0, width, height ); - - // Clear color buffer to black - glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); - glClear( GL_COLOR_BUFFER_BIT ); - - // Select and setup the projection matrix - glMatrixMode( GL_PROJECTION ); - glLoadIdentity(); - gluPerspective( 65.0f, (GLfloat)width/(GLfloat)height, 1.0f, 100.0f ); - - // Select and setup the modelview matrix - glMatrixMode( GL_MODELVIEW ); - glLoadIdentity(); - gluLookAt( 0.0f, 1.0f, 0.0f, // Eye-position - 0.0f, 20.0f, 0.0f, // View-point - 0.0f, 0.0f, 1.0f ); // Up-vector - - // Draw a rotating colorful triangle - glTranslatef( 0.0f, 14.0f, 0.0f ); - glRotatef( 0.3f*(GLfloat)x + (GLfloat)t*100.0f, 0.0f, 0.0f, 1.0f ); - glBegin( GL_TRIANGLES ); - glColor3f( 1.0f, 0.0f, 0.0f ); - glVertex3f( -5.0f, 0.0f, -4.0f ); - glColor3f( 0.0f, 1.0f, 0.0f ); - glVertex3f( 5.0f, 0.0f, -4.0f ); - glColor3f( 0.0f, 0.0f, 1.0f ); - glVertex3f( 0.0f, 0.0f, 6.0f ); - glEnd(); - - // Swap buffers - glfwSwapBuffers(); - - } // Check if the ESC key was pressed or the window was closed - while( glfwGetKey( GLFW_KEY_ESC ) != GLFW_PRESS && - glfwGetWindowParam( GLFW_OPENED ) ); - - // Close OpenGL window and terminate GLFW - glfwTerminate(); - - exit( EXIT_SUCCESS ); -} + iteration (); + } // Check if the ESC key was pressed or the window was closed + while (glfwGetKey (GLFW_KEY_ESC) != GLFW_PRESS && + glfwGetWindowParam (GLFW_OPENED)); +#endif + + // Close OpenGL window and terminate GLFW + glfwTerminate (); + exit (EXIT_SUCCESS); +} |