2017-01-02 64 views
1

私はglutMainLoopEventを呼び出してグラフィックスを処理し続けます。しかし、誰かが窓を閉めた後、ループを終了してCode reached here.と表示したいと思います。ウィンドウが閉じられると、exit関数が呼び出され、アプリケーション全体が停止するように見えます。私はアプリケーションを続行する必要がありますが。コードをどのように修正すればよいですか?OpenGLウィンドウを閉じた後でもプログラムを続行

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

//display function - draws a triangle rotating about the origin 
void cback_render() 
{ 
    //keeps track of rotations 
    static float rotations = 0; 

    //OpenGL stuff for triangle 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glLoadIdentity(); 
    glRotatef(rotations, 0, 0, 1); 

    glBegin(GL_TRIANGLES); 
     glVertex3f(0,0,0); 
     glVertex3f(1,0,0); 
     glVertex3f(0,1,0); 
    glEnd(); 

    //display on screen 
    glutSwapBuffers(); 

    //rotate triangle a little bit, wrapping around at 360° 
    if (++rotations > 360) rotations -= 360; 
} 

void timer(int value) 
{ 
    glutPostRedisplay(); 
    glutMainLoopEvent(); 
    glutTimerFunc(30, timer, 1); 
} 

int main(int argc, char **argv) 
{ 
    //initialisations 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); 
    glutInitWindowPosition(100, 100); 
    glutInitWindowSize(512, 512); 

    //create window and register display callback 
    glutCreateWindow("freegluttest"); 
    glutDisplayFunc (cback_render); 
    glutTimerFunc(30, timer, 1); 

    //loop forever 
    long i=0; 
    while(1) 
    { 
     printf("[%ld]\n",i); 
     i++; 
     glutMainLoopEvent(); 
    } 
    printf("Code reached here."); 

    return 0; 
} 

答えて

2

GLUT_ACTION_ON_WINDOW_CLOSEを使用すると、ウィンドウが閉じられたときにプログラムを続行できます。

glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, 
       GLUT_ACTION_GLUTMAINLOOP_RETURNS); 

出典:

http://www.lighthouse3d.com/cg-topics/glut-and-freeglut/ http://freeglut.sourceforge.net/docs/api.php

+0

がどのようにウィンドウが閉じられている検出するには、 'while'ループを停止するには? – ar2015

+0

glutGetWindow()を使ってウィンドウが存在するかどうかを調べることができます。ウィンドウが存在しない場合は0を返します。 – Schomes

+0

次をご覧ください:https://www.opengl.org/resources/libraries/glut/spec3/node18.html – Schomes

関連する問題