2015-08-06 8 views
6

Ho recentemente aggiornato il mio pc a Windows 10 e installato Visual Studio 2015. Provo a scrivere un programma "Hello OpenGL" in Visual Studio 2015, il progetto viene realizzato correttamente, ma è uscito con il codice 1. Tutto quello che ottengo è che la finestra creata è apparsa e scomparsa molto presto. Qui va il mio codice:Il programma OpenGL è uscito con il codice 1 in Visual Studio 2015

#include <GL\glew.h> 
#include <GL\freeglut.h> 
#include <iostream> 

int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); 
    glutInitWindowSize(800, 600); 
    glutInitWindowPosition(100, 100); 
    glutCreateWindow("Hello OpenGL"); 

    glutMainLoopEvent(); 

    return 0; 
} 

Come ho già detto, il progetto viene realizzato con successo, qui è l'edificio reuslt:

1>------ Build started: Project: HelloGL, Configuration: Debug Win32 ------ 
1> main.cpp 
1> HelloGL.vcxproj -> D:\OpenGL Projects\HelloGL\Debug\HelloGL.exe 
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ========== 

Ma quando premo F5 per eseguire il debug il programma, mi ha scoraggiato con il risultato:

The thread 0x23d4 has exited with code 1 (0x1). 
The thread 0x20b8 has exited with code 1 (0x1). 
The thread 0x10d0 has exited with code 1 (0x1). 
The program '[7040] HelloGL.exe' has exited with code 1 (0x1). 
+0

put break-point e poi eseguire il debug –

+3

sembra ragionevole me. Senza un callback per gli eventi della finestra, questo programma non ha nulla da fare se non uscire immediatamente. –

+0

@AliKazmi Grazie per la risposta. In effetti ho provato a impostare breakpoint alla chiamata 'glutMainLoopEvent()', questo ha dato una finestra di console e una finestra normale, quindi immagino che il problema sia 'gutMainLoopEvent() '. –

risposta

3

chiamata glutMainLoop invece di glutMainLoopEvent.

Il successivo glutMainLoopEvent è una funzione specifica di FreeGLUT che consente di posizionare l'invio di eventi GLUT in un ciclo personalizzato; quindi deve essere chiamato da un loop e determinare quando uscire dal programma dipende da voi.

glutMainLoop implementa il proprio ciclo principale ed esce dal programma quando l'ultima finestra è stata chiusa.

+0

Grazie per la tua risposta, @datenwolf. In realtà io prima utilizzo 'glutMainLoop', quindi uso' glutMainLoopEvent' invece, non funziona. –

6

Prima di tutto, grazie ai ragazzi che mi hanno dato una risposta. Ho capito qual è il problema, Tutto quello che devi fare è quello di registrare una funzione di callback per la finestra, ecco arriva il codice in esecuzione:

#include <GL\glew.h> 
#include <GL\freeglut.h> 
#include <iostream> 

// myDisplay 
void myDisplay() 
{ 
    glClear(GL_COLOR_BUFFER_BIT); // Clear the screen 
    glFlush(); 
} 
int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 
    glutInitWindowSize(800, 600); 
    glutInitWindowPosition(100, 100); 
    glutCreateWindow("Hello OpenGL"); 

    // Register a callback function for the window's repainting event 
    glutDisplayFunc(myDisplay); 

    glutMainLoop(); 

    return 0; 
} 
+0

awwww dio, dov'era questo post 2 ore fa?!? – svarog