J'essaye de démarrer avec GLFW sur Debian, j'ai essayé de compiler et d'exécuter un exemple de programme mais il refuse de fonctionner. Avec l'aide de quelques instructions printf, j'ai trouvé que lorsque le programme essaie d'ouvrir une fenêtre GLFW, il échoue, puis se termine - mais je ne sais pas pourquoi. Toute aide serait incroyable.C - Fenêtre GLFW ne s'ouvre pas sur Debian
#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;
}
Vous n'avez pas besoin de commenter les lignes explicites. – mk12