OpenGL - Plötzlicher Freeze?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • OpenGL - Plötzlicher Freeze?

    Hi,

    Ich habe seit einiger Zeit ein äußerst merkwürdiges Problem in meiner OpenGL-Application: An einem bestimmten Punkt innerhalb des Spiels, an dem eigentlich nichts besonderes passiert, wird plötzlich nichts mehr gerendert. Damit meine ich nicht, dass der Bildschirm die GL_Clear-Farbe annimt, sondern dass die View nicht mehr aktualisiert wird, also einfach einfriert. Ich habe herausgefunden, dass das Programm normal weiterläuft, die Spiellogik wird geupdated, alle Methoden werden ausgeführt, die Ausgabe per NSLog funktioniert und liefert die erwarteten Werte, auch die - (void)render Methode wird in jedem Frame ausgeführt - nur der Bildschirm zeigt keine Änderungen.
    Wie gesagt passiert an besagter Stelle, an der die Ansicht des Spiels jedes mal einfriert, auch nichts besonderes ... ich erhöhe dort nur eine int-Variable und lese ein Array aus (wobei ich nicht genau bestimmen kann, an welcher Stelle der Freeze passiert weil der Coder ja ganz normal weiter ausgeführt wird und nur die Ansicht friert ein).
    Kennt ihr das Problem oder wisst, womit es zu tun haben kann? Ich bin total ratlos ... ein Programmierfehler würde ja schließlich zu einem Programmabsturz führen, was offensichtlich nicht der Fall ist. Aber von der OpenGL-internen Funktionsweise habe ich leider wenig Ahnung.

    Ich hoffe Ihr könnt mir helfen,
    knl
  • Nur wenn Du viel Glück hast, führt ein Programmierfehler zu einem Absturz.
    In der Regel führt ein Fehler "nur" zu merkwürdigem Verhalten.

    Dein Problem klingt nach merkwürdigem Verhalten. Mir fallen schätzungsweise eine milliarde Möglichkeiten ein, woran es liegen könnte. So kann ich Dir da leider nicht weiter helfen. Es reicht ja schon, wenn Du an einer stelle einmal zuviel eine Matrix vom Stack pop'st. Irgendwie sind deine View-Matrizen hinüber. Oder deine Geometrie. Oder beides. Oder wieder was ganz anderes. Kann ich nicht sagen von hier aus, musst Du schon selber debuggen.
    Gib Dir doch ein paar Werte aus, und kontrolliere, ob diese sinnvoll sind/bleiben. Etc. Standardzeug halt...

    EDIT: Du prüftst natürlich mit glGetError, oder?
    C++
  • hi, danke für die antwort.

    ich kenne mich leider viel zu wenig mit OpenGL aus um den Code debuggen zu können ... im Netz habe ich eine schöne Image-Klasse gefunden, die auf der Texture2D-Klasse von Apple basiert und benutze diese nun einfach, ohne mich um das rendern an sich Sorgen machen zu müssen ^^ Diese Klasse hat auch die ganze Zeit wunderbar funktioniert, deshalb wüsste ich nicht warum sie das Problem sein könnte. An dem besagten Programmpunkt, an dem die Grafik einfriert, wird auch kein von mir geschriebener OpenGL-Code ausgeführt oder so ...
    Was ist denn dieses glGetError ?

    Völlig zufrieden bin ich mit meiner Image-Klasse auch nicht, weil Grafiken, die mit Rotation gerendert werden, ziemlich verpixelt werden. Kannst du mir evtl. eine bessere empfehlen? Bzw. wie renderst du deine Texturen?

    Edit: Nachdem ich den Code einfach einmal gelöscht und ein wenig verändert neu geschrieben hab tritt das o.g. Problem nun nicht mehr auf ... bleibt für mich trotzdem ein ungelöstes Mysterium =)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von knl ()

  • knl schrieb:

    ich kenne mich leider viel zu wenig mit OpenGL aus um den Code debuggen zu können ... im Netz habe ich eine schöne Image-Klasse gefunden, die auf der Texture2D-Klasse von Apple basiert und benutze diese nun einfach, ohne mich um das rendern an sich Sorgen machen zu müssen ^^ Diese Klasse hat auch die ganze Zeit wunderbar funktioniert, deshalb wüsste ich nicht warum sie das Problem sein könnte. An dem besagten Programmpunkt, an dem die Grafik einfriert, wird auch kein von mir geschriebener OpenGL-Code ausgeführt oder so ...
    Was ist denn dieses glGetError ?

    Wenn Du selbst OpenGL gar nicht direkt benutzt, ist es schwierig, Dir hier bei Problemen zu helfen. Mit glGetError prueft man auf evtl. Fehler. Bringt aber alles nichts, wenn Du nicht weiss, was Du da machst.

    knl schrieb:

    Völlig zufrieden bin ich mit meiner Image-Klasse auch nicht, weil Grafiken, die mit Rotation gerendert werden, ziemlich verpixelt werden. Kannst du mir evtl. eine bessere empfehlen? Bzw. wie renderst du deine Texturen?

    Dann machst Du sicherlich etwas falsch. Zum einen kann man bi/tri-lineares Filtern aktivieren, damit sollte es wesentlich glatt aussehen. Wenn Du nur Bilder darstellst, kannst Du Dir auch selber "hardcore"-Filter in einem Shader implementieren (Bikubisch oder gar Lanczos), wenn Du das brauchst und die Rechenzeit hast. Zum anderen kann ich nicht einschaetzen, was bei dir "ziemlich verpixelt" bedeutet. Wenn hier interpoliert werden muss, kommst Du kaum um den einen oder anderen Fehler drumherum.

    knl schrieb:

    Edit: Nachdem ich den Code einfach einmal gelöscht und ein wenig verändert neu geschrieben hab tritt das o.g. Problem nun nicht mehr auf ... bleibt für mich trotzdem ein ungelöstes Mysterium =)

    Da kann ich Dir erst recht nicht helfen. Ich kenne die Texture2D-Klasse von Apple nicht einmal :)
    C++