aboutsummaryrefslogtreecommitdiff
path: root/tests/glfw/triangle.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/glfw/triangle.c')
-rw-r--r--tests/glfw/triangle.c94
1 files changed, 94 insertions, 0 deletions
diff --git a/tests/glfw/triangle.c b/tests/glfw/triangle.c
new file mode 100644
index 00000000..a8b737be
--- /dev/null
+++ b/tests/glfw/triangle.c
@@ -0,0 +1,94 @@
+//========================================================================
+// This is a small test application for GLFW.
+// The program opens a window (640x480), and renders a spinning colored
+// triangle (it is controlled with both the GLFW timer and the mouse).
+//========================================================================
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <GL/glfw.h>
+
+
+int main( void )
+{
+ int width, height, x;
+ double t;
+
+ // Initialise GLFW
+ if( !glfwInit() )
+ {
+ 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 ) )
+ {
+ fprintf( stderr, "Failed to open GLFW window\n" );
+
+ glfwTerminate();
+ exit( EXIT_FAILURE );
+ }
+
+ glfwSetWindowTitle( "Spinning Triangle" );
+
+ // Ensure we can capture the escape key being pressed below
+ glfwEnable( GLFW_STICKY_KEYS );
+
+ // Enable vertical sync (on cards that support it)
+ glfwSwapInterval( 1 );
+
+ 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 );
+}
+