0

ボックスが入ったウィンドウを表示するプログラムを作成しようとしていますが、プログラムを実行すると、5回の実行に1回しかウィンドウが表示されません。コマンドラインを実行するたびに適切な応答が返され、画面下部の gnome パネルにウィンドウのタイトルが表示されますが、ほとんどの場合、ウィンドウ自体は表示されません。

原因がどこにあるのかまったくわからないので、探し始めたいと思います。何かアドバイス?

gcc main.c -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);
    }
}
4

1 に答える 1

2

call の前に表示関数コールバックを登録する必要がありますglutMainLoop:

glutDisplayFunc(display);

そして、レンダリング関数を関数内に置きますdisplay:

void display(){
  glClearColor(1,1,1,1);
  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  /*
    Draw here
  */
  glutSwapBuffers();
}
于 2010-09-15T15:08:38.277 に答える