OpenGL Sleep oder delay zwischen jedem frame?
So, ich bin versucht, eine Verzögerung, die auf dieses Programm, zwischen jeder Zeichnung.
Ich habe versucht mit Sleep(), aber es gibt mir eine Fehlermeldung, wenn der draw () - Funktion, und wenn an anderer Stelle eingesetzt, macht es keinen Effekt.
Xcode kompiliert die Datei, aber die Punkte die mich zu dieser Fehlermeldung während der Ausführung:
libsystem_kernel.dylib`__semwait_signal:
0x7fff8fd7937c: movl $33554766, %eax
0x7fff8fd79381: movq %rcx, %r10
0x7fff8fd79384: syscall
0x7fff8fd79386: jae 0x7fff8fd7938d ; __semwait_signal + 17
0x7fff8fd79388: jmpq 0x7fff8fd7a4c8 ; cerror
0x7fff8fd7938d: ret
0x7fff8fd7938e: nop
0x7fff8fd7938f: nop
Code:
void draw()
{
GLint width;
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(10);
int x=0; int y=0;
glBegin(GL_POINTS);
for(x=0; x<500; x++)
{
for(y=0;y<500; y++)
{
glColor3f(rand()%255,rand()%255, rand()%255);
glVertex2i(rand()%500,rand()%500);
}
}
sleep(500);
glEnd();
glFlush();
}
int main(int argc, char** argv){
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow ("Trabalho de Modelagem e Simulação de Processos");
glutDisplayFunc(draw);
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
gluOrtho2D (0.0f, 500.0f, 0.0f, 500.0f);
glutIdleFunc(draw);
glutMainLoop();
return 1;
}
- Beobachten Sie Ihre Kapitalausstattung. Wenn das für Windows, es ist
Sleep
, nichtsleep
. Auch, ich würde es nicht innerhalb der immediate-mode-Zeug. Setzen Sie nach derglFlush()
. Wenn du immer "ein Fehler", ist es hilfreich, zeigen Sie uns den Fehler. Dadurch wird auch Ihnen helfen, in die routine zu Lesen der Fehler. - Hmm, ich entschuldige mich. Ich hatte ursprünglich nicht den Fehler anzuzeigen, oder haben Sie vielleicht bearbeitet es nur, nachdem ich gelesen habe ist die Frage. Versuchen, mein Vorschlag zum entfernen der Schlaf von der immediate-Modus. Meine Vermutung ist, dass dein kernel nicht schlafen wollen, während Sie in der Mitte der Weitergabe der Daten an GL.
- Ja, mit Schlaf oder Schlaf, sondern gibt mir eine Fehlermeldung, oder macht das keinen Effekt, während es läuft.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Selbst wenn es nicht die Lösung Ihrer unmittelbaren Problems sind, sollten Sie die Umstrukturierung Ihres Programms. Zuerst von all, sollten Sie machen, OpenGL-Aufrufe nur von der display-callback registrieren Sie sich mit GLUT, nicht vom idle-callback, das heißt: nicht registrieren
draw
als die idle-Funktion. Stattdessen sollten Sie sich über eine spezielle Funktion, die AnrufeglutPostRedisplay
oderglutPostRedisplay
sich als idle-Funktion. Jede Art von langfristigen Verzögerungen (wo lange Begriff bedeutet nichts mehr als 10ms) sollte durchgeführt werden, mit einem timer, so dass das Programm bleibt interaktiv.