Tutorial :C - GLFW window doesn't open on Debian



Question:

I'm trying to get started with GLFW on Debian, I've tried compiling and running an example program but it refuses to run. With the help of a couple of printf statements I've found that when the program tries to open a GLFW window it fails, then exits - but I don't know why. Any help would be amazing.

#include <stdlib.h>    // For malloc() etc.  #include <stdio.h>     // For printf(), fopen() etc.  #include <math.h>      // For sin(), cos() etc.  #include <GL/glfw.h>   // For GLFW, OpenGL and GLU      //----------------------------------------------------------------------  // Draw() - Main OpenGL drawing function that is called each frame  //----------------------------------------------------------------------    void Draw( void )  {      int    width, height;  // Window dimensions      double t;              // Time (in seconds)      int    k;              // Loop counter        // Get current time      t = glfwGetTime();        // 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          65.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, 10.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 a circle of points ***    // Save the current modelview matrix on the stack  glPushMatrix();    // Translate (move) the points to the upper left of the display  glTranslatef( -4.0f, 3.0f, 0.0f );    // Rotate the points about the z-axis and the x-axis  glRotatef( 35.0f * (float)t, 0.0f, 0.0f, 1.0f );  glRotatef( 60.0f * (float)t, 1.0f, 0.0f, 0.0f );    // Now draw the points - we use a for-loop to build a circle  glColor3f( 1.0f, 1.0f, 1.0f );  glBegin( GL_POINTS );  for( k = 0; k < 20; k ++ )  {      glVertex3f( 2.0f * (float)cos( 0.31416 * (double)k ),                  2.0f * (float)sin( 0.31416 * (double)k ),                  0.0f );  }  glEnd();    // Restore modelview matrix  glPopMatrix();      // **** Draw a circle of lines ***    // Save the current modelview matrix on the stack  glPushMatrix();    // Translate (move) the lines to the upper right of the display  glTranslatef( 4.0f, 3.0f, 0.0f );    // Rotate the points about the z-axis and the x-axis  glRotatef( 45.0f * (float)t, 0.0f, 0.0f, 1.0f );  glRotatef( 55.0f * (float)t, 1.0f, 0.0f, 0.0f );    // Now draw the lines - we use a for-loop to build a circle  glBegin( GL_LINE_LOOP );  for( k = 0; k < 20; k ++ )  {      glColor3f( 1.0f, 0.05f * (float)k, 0.0f );      glVertex3f( 2.0f * (float)cos( 0.31416 * (double)k ),                  2.0f * (float)sin( 0.31416 * (double)k ),                  0.0f );  }  glEnd();    // Restore modelview matrix  glPopMatrix();      // **** Draw a disc using trinagles ***    // Save the current modelview matrix on the stack  glPushMatrix();    // Translate (move) the triangles to the lower left of the display  glTranslatef( -4.0f, -3.0f, 0.0f );    // Rotate the triangles about the z-axis and the x-axis  glRotatef( 25.0f * (float)t, 0.0f, 0.0f, 1.0f );  glRotatef( 75.0f * (float)t, 1.0f, 0.0f, 0.0f );    // Now draw the triangles - we use a for-loop to build a disc  // Since we are building a triangle fan, we also specify a first  // vertex for the centre point of the disc.  glBegin( GL_TRIANGLE_FAN );  glColor3f( 0.0f, 0.5f, 1.0f );  glVertex3f( 0.0f, 0.0f, 0.0f );  for( k = 0; k < 21; k ++ )  {      glColor3f( 0.0f, 0.05f * (float)k, 1.0f );      glVertex3f( 2.0f * (float)cos( 0.31416 * (double)k ),                  2.0f * (float)sin( 0.31416 * (double)k ),                  0.0f );  }  glEnd();    // Restore modelview matrix  glPopMatrix();      // **** Draw a disc using a polygon ***    // Save the current modelview matrix on the stack  glPushMatrix();    // Translate (move) the polygon to the lower right of the display  glTranslatef( 4.0f, -3.0f, 0.0f );    // Rotate the polygon about the z-axis and the x-axis  glRotatef( 65.0f * (float)t, 0.0f, 0.0f, 1.0f );  glRotatef( -35.0f * (float)t, 1.0f, 0.0f, 0.0f );    // Now draw the polygon - we use a for-loop to build a disc  glBegin( GL_POLYGON );  for( k = 0; k < 20; k ++ )  {      glColor3f( 1.0f, 0.0f, 0.05f * (float)k );      glVertex3f( 2.0f * (float)cos( 0.31416 * (double)k ),                  2.0f * (float)sin( 0.31416 * (double)k ),                  0.0f );  }  glEnd();    // Restore modelview matrix  glPopMatrix();      // **** Draw a single quad ***    // Save the current modelview matrix on the stack  glPushMatrix();    // Rotate the quad about the y-axis  glRotatef( 60.0f * (float)t, 0.0f, 1.0f, 0.0f );    // Now draw the quad  glBegin( GL_QUADS );  glColor3f( 1.0f, 0.0f, 0.0f );  glVertex3f( -1.5f, -1.5f, 0.0f );  glColor3f( 1.0f, 1.0f, 0.0f );  glVertex3f(  1.5f, -1.5f, 0.0f );  glColor3f( 1.0f, 0.0f, 1.0f );  glVertex3f(  1.5f,  1.5f, 0.0f );  glColor3f( 0.0f, 0.0f, 1.0f );  glVertex3f( -1.5f,  1.5f, 0.0f );  glEnd();    // Restore modelview matrix  glPopMatrix();  }      //----------------------------------------------------------------------  // 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    // Initialize GLFW  glfwInit();  // Open window  ok = glfwOpenWindow(      100, 100,          // 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)  );            printf("here");  // If we could not open a window, exit now  if( !ok )  {      glfwTerminate();      return 0;  }  printf("not here");      // Set window title  glfwSetWindowTitle( "My OpenGL program" );    // Enable sticky keys  glfwEnable( GLFW_STICKY_KEYS );    // Main rendering loop  do  {      // Call our rendering function      Draw();        // 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;  }  


Solution:1

You're sure it's glfwOpenWindow that's failing? I don't know why that might be, perhaps you're using too many bits for your z-buffer? That's the only thing I can think of.

Try this

GLFWvidmode dvm;  glfwGetDesktopMode(&dvm);  glfwOpenWindow(winWidth, winHeight, dvm.RedBits, dvm.GreenBits, dvm.BlueBits, 0, 0, 0, GLFW_WINDOW);  

And see if it still fails.


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »