File: Triangle.dpr

package info (click to toggle)
glfw 2.6-2
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 3,180 kB
  • ctags: 2,274
  • sloc: ansic: 16,424; sh: 424; asm: 306; makefile: 227; pascal: 86
file content (105 lines) | stat: -rw-r--r-- 2,916 bytes parent folder | download | duplicates (2)
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.