1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
program Triangle;
//========================================================================
// 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). It
// also calculates the rendering speed (FPS), which is displayed in the
// window title bar.
//
// Delphi conversion by Jarrod Davis (http://ww.jdsgames.com)
//========================================================================
uses
SysUtils, OpenGL, glfw;
var
width, height, running, frames, x, y: Integer;
t, t0, fps: Double;
titlestr: string;
begin
// Initialize GLFW
glfwInit;
// Open OpenGL window
if glfwOpenWindow( 640, 480, 0,0,0,0, 0,0, GLFW_WINDOW ) <> 1 then
begin
glfwTerminate;
Exit;
end;
// Enable sticky keys
glfwEnable( GLFW_STICKY_KEYS );
// Disable vertical sync (on cards that support it)
glfwSwapInterval( 0 );
// Main loop
running := 1;
frames := 0;
t0 := glfwGetTime;
while running <> 0 do
begin
// Get time and mouse position
t := glfwGetTime;
glfwGetMousePos(x, y );
// Calculate and display FPS (frames per second)
if ((t-t0) > 1.0) or (frames = 0) then
begin
fps := frames / (t-t0);
titlestr := Format('Spinning Triangle (%.1f FPS)', [fps]);
glfwSetWindowTitle( PChar(titlestr) );
t0 := t;
frames := 0;
end;
inc(frames);
// Get window size (may be different than the requested size)
glfwGetWindowSize( width, height );
if height < 1 then height := 1;
// Set viewport
glViewport( 0, 0, width, height );
// Clear color buffer
glClearColor( 0.0, 0.0, 0.0, 0.0 );
glClear( GL_COLOR_BUFFER_BIT );
// Select and setup the projection matrix
glMatrixMode( GL_PROJECTION );
glLoadIdentity;
gluPerspective( 65.0, width/height, 1.0, 100.0 );
// Select and setup the modelview matrix
glMatrixMode( GL_MODELVIEW );
glLoadIdentity;
gluLookAt( 0.0, 1.0, 0.0, // Eye-position
0.0, 20.0, 0.0, // View-point
0.0, 0.0, 1.0 ); // Up-vector
// Draw a rotating colorful triangle
glTranslatef( 0.0, 14.0, 0.0 );
glRotatef( 0.3*x + t*100.0, 0.0, 0.0, 1.0 );
glBegin( GL_TRIANGLES );
glColor3f( 1.0, 0.0, 0.0 );
glVertex3f( -5.0, 0.0, -4.0 );
glColor3f( 0.0, 1.0, 0.0 );
glVertex3f( 5.0, 0.0, -4.0 );
glColor3f( 0.0, 0.0, 1.0 );
glVertex3f( 0.0, 0.0, 6.0 );
glEnd;
// Swap buffers
glfwSwapBuffers;
// Check if the ESC key was pressed or the window was closed
running := (not glfwGetKey( GLFW_KEY_ESC )) and
glfwGetWindowParam( GLFW_OPENED );
end;
// Close OpenGL window and terminate GLFW
glfwTerminate;
end.
|