Click to See Complete Forum and Search --> : GLFW frame rate


bigadel
February 5th, 2009, 01:31 PM
Hi All,

I am actually working on a simulation to draw little cube.

I would like to fix the frame rate of the display.

I've got the idea of creating a timer which will call glswapbuffer every xx time but it seems not to work.

Here is the code :

#include "main.h"



//----------------------------------------------------------------------
// openWindow() - Open a window to render.
//----------------------------------------------------------------------

int openWindow(void)
{
int ok = 0;

ok = glfwOpenWindow(
640, 480, // Width and height of window
8, 8, 8, // Number of red, green, and blue bits for color buffer
8, // Number of bits for alpha buffer
24, // Number of bits for depth buffer (Z-buffer)
0, // Number of bits for stencil buffer
GLFW_WINDOW // We want a desktop window (could be GLFW_FULLSCREEN)
);

return ok;
}




//----------------------------------------------------------------------
// initCamera() - Initialisation of view and camera system.
//----------------------------------------------------------------------
void initCamera(void)
{
int width, height; // Window dimensions

// Get window size
glfwGetWindowSize( &width, &height );

// Make sure that height is non-zero to avoid division by zero
height = height < 1 ? 1 : height;

// Set viewport
glViewport( 0, 0, width, height );

// Clear color and depht buffers
glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

// Set up projection matrix
glMatrixMode( GL_PROJECTION ); // Select projection matrix
glLoadIdentity(); // Start with an identity matrix
gluPerspective( // Set perspective view
85.0, // Field of view = 65 degrees
(double)width/(double)height, // Window aspect (assumes square pixels)
1.0, // Near Z clipping plane
100.0 // Far Z clippling plane
);

// Set up modelview matrix
glMatrixMode( GL_MODELVIEW ); // Select modelview matrix
glLoadIdentity(); // Start with an identity matrix
gluLookAt( // Set camera position and orientation
0.0, 0.0, 20.0, // Camera position (x,y,z)
0.0, 0.0, 0.0, // View point (x,y,z)
0.0, 1.0, 0.0 // Up-vector (x,y,z)
);

}






//----------------------------------------------------------------------
// draw() - Main OpenGL drawing function that is called each frame
//----------------------------------------------------------------------


void drawSim( void )
{

// ****Draw a Grille which is fading***


// Now draw the quad

if(colorR>=1.00)
{
down = 1;
up = 0 ;
}
else if (colorR <= 0)
{
down = 0;
up = 1 ;
}

if(up == 1)
colorR += 0.001;
else if (down == 1)
colorR -= 0.001;


Burn.setGlobalLightness(colorR);
Burn.draw();

}



//----------------------------------------------------------------------
// main() - Program entry point
//----------------------------------------------------------------------
int main( int argc, char **argv )
{
int ok; // Flag telling if the window was opened
int running; // Flag telling if the program is running

int frames;
double fps, time, t0;
char title[150];

frames = 0;
t0 = glfwGetTime();


// Initialize GLFW
glfwInit();

// Open window
ok = openWindow();

// If we could not open a window, exit now
if( !ok )
{
glfwTerminate();
return 0;
}

// Set window title
glfwSetWindowTitle( "cube 1.0" );

// Enable sticky keys
glfwEnable( GLFW_STICKY_KEYS );

//Initialize camera
initCamera();


// Main rendering loop
do
{
//get the current time
time = glfwGetTime();

// Calcul and display the FPS
if((time-t0) > 1.0 || frames == 0)
{
fps = (double)frames / (time-t0);
sprintf(title, "cube 1.0 (%.1f FPS)", fps);
glfwSetWindowTitle(title);
t0 = time;
frames = 0;
}
frames ++;




// Call our rendering function
drawSim();

//Limit the frameRate to 60fps.
glfwSwapInterval(1);


// Swap front and back buffers (we use a double buffered display)

glfwSwapBuffers();

// Check if the escape key was pressed, or if the window was closed
running = !glfwGetKey( GLFW_KEY_ESC ) &&
glfwGetWindowParam( GLFW_OPENED );
}
while( running );

// Terminate GLFW
glfwTerminate();

// Exit program
return 0;
}


I actually use glfwSwapInterval(1); so that it allows to get a fixed frame rate about 60fps. But i can not manage to do something else. Oh by the way, I would like to fixe the frame rate and in the same time do not stop the programm because I need to do other stuff before drawing my cube.

Thank you all !

I hope you will help

(sorry for the bad english)