glut wenn fenster geschlossen, anwendung beenden.
-
wich verwende glut.
wenn ich das fenster schliesse, Dh. mit dem roten kreuz, bleibt hinterher immer das consolenfenster stehen, wie kann ich die anwendung durch schliessen des fensters beenden?
-
Wie gibt's das denn? Die einzige Erklärung dafür ist, dass deine Anwendung nicht beendet wird.
-
Lass es stehen, brauchst sicher beim nächsten mal noch.
-
wie meinst du das?
-
okay nochmal, wenn ich mit glut ein fenster erstelle, erscheinen zwei fenster, das codefenster, und das opengl fenster.
Problem:
Schliesse ich das Opengl Fenster über das rote Kreuz, wird das opengl Fenster zwar geschlossen, aber das Das Programm läuft weiterhin.
erst wenn ich das Konsolenfenster schliesse, wird das Programm beendet.
Ich möchte aber, dass das Programm bereits beendet wird, wenn das Opengl Fenster geschlossen wird.
-
Zeig doch mal den Code von deiner main()...
-
int main(int argc, char **argv) {
//getcwd(path, 255);
//ShowWindow(GetConsoleWindow(), SW_HIDE);getcwd(path,255);
// init GLUT and create window
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(800,600);
glutCreateWindow("Glutest");// register callbacks
init();// enter GLUT event processing cycle
atexit(a);
glutMainLoop();return 1;
}
-
Und was genau tust du in deinem atexit handler?
-
nichts, denn hab ich eigentlich rausgenommen, der tut gar nichts
-
Das ist dann äußerst merkwürdig. Läuft deine Anwendung tatsächlich weiter oder bleibt einfach nur das Konsolenfenster offen?
-
naja, visual basic sagt, dass die anwendung noch läuft, und taskmanager zeigt den prozess weiterhin an
-
sorry visual studio sagt...
-
Und wo genau hängt das Programm? Drück eben einfach mal in VS auf Pause...
-
es hängt in der Render scene, hier ist die aus dem beilstpierlprojekt dass ich zum testen nehm
void renderScene(void) { if (deltaMove) computePos(deltaMove); // Clear Color and Depth Buffers glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Reset transformations glLoadIdentity(); // Set the camera gluLookAt( x, 1.0f, z, x+lx, 1.0f, z+lz, 0.0f, 1.0f, 0.0f); // Draw ground glColor3f(0.9f, 0.9f, 0.9f); glBegin(GL_QUADS); glVertex3f(-100.0f, 0.0f, -100.0f); glVertex3f(-100.0f, 0.0f, 100.0f); glVertex3f( 100.0f, 0.0f, 100.0f); glVertex3f( 100.0f, 0.0f, -100.0f); glEnd(); // Draw 36 SnowMen for(int i = -3; i < 3; i++) for(int j=-3; j < 3; j++) { glPushMatrix(); glTranslatef(i*10.0,0,j * 10.0); drawSnowMan(); glPopMatrix(); } glutSwapBuffers(); }
-
Sehr merkwürdig. Das bedeutet wohl dass GLUT einfach weiterläuft obwohl das Fenster geschlossen wurde. Ich verwend zwar GLUT nicht, aber das sollte es afaik nicht tun, außer man sagt ihm irgendwie explizit dass es das tun soll (falls das geht)...
-
okay, ich mach jetzt mal den pc aus, hoffentlich kann mir morgrn jmnd helfen.
-
Gibt es bei glut eine Möglichkeit Events abzufragen (bei SDL gibt es ein QUIT event) ?
-
Ja gibt es. Aber afaik sollte das Beenden beim Schließen des Fensters das Defaultverhalten von GLUT sein...
-
Steig am besten auf freeglut rum. Da hast du alle gleichen Befehle wie bei glut aber kannst noch z.B. noch glutLeaveMainLoop() benutzen
-
Ja ich würde auch zu freeglut oder GLFW raten. Beide leider immer noch alles andere als toll, aber was besseres kenn ich leider nicht. Wenn jemand was besseres kennt: Immer nur her damit.