The program opens a window (640x480), and renders a spinning colored triangle (it is controlled with both the TIMER function and the mouse). It also calculates the rendering speed (FPS), which is displayed in the window title bar.
'//========================================================================
'// 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.
'//========================================================================
' SED_PBWIN - Use the PBWIN compiler
#COMPILE EXE
#DIM ALL
#INCLUDE "GLFW.INC"
FUNCTION PBMAIN () AS LONG
LOCAL nWidth, nHeight, running, frames, x, y AS LONG
LOCAL t, t0, fps AS DOUBLE
LOCAL szTitlestr AS ASCIIZ * 200
' Initialise GLFW
glfwInit
' Open OpenGL window
IF ISFALSE glfwOpenWindow(640, 480, 0, 0, 0, 0, 0, 0, %GLFW_WINDOW) THEN
glfwTerminate
EXIT FUNCTION
END IF
' Enable sticky keys
glfwEnable %GLFW_STICKY_KEYS
' Disable vertical sync (on cards that support it)
glfwSwapInterval 0
' Main loop
running = %TRUE
frames = 0
t0 = glfwGetTime
DO WHILE running
' 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
fps = frames / (t-t0)
wsprintf szTitlestr, "Spinning Triangle (%i FPS)", BYVAL fps
glfwSetWindowTitle szTitlestr
t0 = t
frames = 0
END IF
frames = frames + 1
' Get window size (may be different than the requested size)
glfwGetWindowSize nWidth, nHeight
IF nHeight <= 0 THEN nHeight = 1
' Set viewport
glViewport 0, 0, nWidth, nHeight
' 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!, nWidth / nHeight, 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)
LOOP
' Close OpenGL window and terminate GLFW
glfwTerminate
END FUNCTION