2010-09-15 10 views
0

J'essaye juste de faire un programme qui affiche une fenêtre avec une boîte dedans, mais quand j'exécute le programme je reçois seulement l'affichage de fenêtre peut-être une fois sur 5 courses. Chaque fois que j'exécute la ligne de commande donne des réponses appropriées et je vois le titre de la fenêtre sur le panneau gnome en bas de l'écran, mais la fenêtre elle-même est invisible la plupart du temps.Créer une fenêtre en utilisant glut, mais le programme est incohérent

Je n'ai absolument aucune idée d'où la cause pourrait être et je veux commencer à regarder. Aucun conseil?

I compiler et exécuter en utilisant main.c gcc -lglut:

#include <stdio.h> 
#include <GL/freeglut.h> 

void keyb(unsigned char key, int x, int y); 

//Window identifier 
static int win; 

main(int argc, char **argv){ 
    //Initialization 
    glutInit(&argc, argv); 
    glutInitWindowSize(500,500); 
    glutInitWindowPosition(100,100); 
    win = glutCreateWindow("Test Window"); 

    //Callback 
    glutKeyboardFunc(keyb); 

    //OpenGL 
    glClearColor(0.0,0.0,0.0,0.0); 
    glClear(GL_COLOR_BUFFER_BIT); 
    glColor3f(1.0,1.0,1.0); 
    glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0); 
    glBegin(GL_POLYGON); 
     glVertex2f(-0.5, -0.5); 
     glVertex2f(-0.5, 0.5); 
     glVertex2f(0.5, 0.5); 
     glVertex2f(0.5, -0.5); 
    glEnd(); 
    glFlush(); 

    //Enter main loop 
    glutMainLoop(); 

    return 0; 
} 

void keyb(unsigned char key, int x, int y){ 
    printf("Pressed key %c on coordinates %d, %d\n", key, x, y); 
    if(key == 'q'){ 
     printf("Got q, so qutting\n"); 
     glutDestroyWindow(win); 
     exit(0); 
    } 
} 

Répondre

2

Vous devez enregistrer un rappel de la fonction d'affichage avant l'appel glutMainLoop:

glutDisplayFunc(display); 

Et mettre vos fonctions de rendu à l'intérieur display fonction :

void display(){ 
    glClearColor(1,1,1,1); 
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 
    /* 
    Draw here 
    */ 
    glutSwapBuffers(); 
} 
+0

merci beaucoup! – oadams