[OpenGl] Buffer-Befehl? ("Zucken/Ruckeln")

baum77

Grünschnabel
[Erledigt] [OpenGl] Buffer-Befehl? ("Zucken/Ruckeln")

Hallo,

wir haben ein Problem, bei unserem Tetris wo die Ausgabe in OpenGL realisiert ist, "zuckt" ziemlich oft das Bild.
Wenn man den Stein schneller nach unten bewegt sieht man sogar einen "Streifen" (einen Screenshot zu machen geht leider nicht, weil das ja nur sehr kurz kommt und ich es bisher nicht geschafft habe das man es sieht.)

Gibt es einen Befehl der einen Buffer aktiviert, dass dies verhindert wird? (verwendet wird Borland C++ Builder 5.0 mit DOS Fenster & GLUT Fenster)

Im C++ Builder gibt es einen DoubleBuffered Befehl, der funktioniert nur leider nicht, (oder weiß jmd. vielleicht doch wie er geht?) weil es ja über DOS Oberfläche und nicht Windows Oberfläche läuft.

Vielen Dank im Vorraus
 
Zuletzt bearbeitet:
Wenn du beim Wählen des Pixelformats in deiner PIXELFORMATDESCRIPTOR-Struktur das Flag PFD_DOUBLEBUFFER setzt, sollte auch ein Backbuffer erstellt werden. Über SwapBuffers() kannst du dann Back- und Frontbuffer nach dem Zeichnen eines Frames vertauschen.
 
Ich habe jetzt statt

glClear(GL_COLOR_BUFFER_BIT); // Fenster löschen

das hier gemacht

glClear(GL_COLOR_BUFFER_BIT | PFD_DOUBLEBUFFER); // Fenster löschen

und am Ende noch ein glutSwapBuffers();

Der Fehler ist auch (zumindest so gut wie) weg, nur ist von meinem Programm jetzt nur noch die Hälfte zu sehen, und zwar die Fläche wo das Spiel gezeichnet wird.

Ich habe aber auf der rechten Seite noch z.B den Punktestand und eine Anleitung ausgegeben, nur erscheint der gesamte Bereich nicht mehr (auch nicht als weiße Fläche, sondern es ist praktisch durchsichtig, an diesen Stellen sieht man auf den Code durch) (siehe Anhang)
 

Anhänge

  • 1.JPG
    1.JPG
    73,8 KB · Aufrufe: 49
Öhm... das PFD_DOUBLEBUFFER hat an der Stelle überhaupt nichts zu suchen ;) Wo hast du denn den Aufruf von ChoosePixelFormat stehen, da in der Umgebung sollte das hin (wo auch die anderen PFD_-Konstanten stehen).
 
Matthias Reitinger hat gesagt.:
Öhm... das PFD_DOUBLEBUFFER hat an der Stelle überhaupt nichts zu suchen ;) Wo hast du denn den Aufruf von ChoosePixelFormat stehen, da in der Umgebung sollte das hin (wo auch die anderen PFD_-Konstanten stehen).
Da hab ich eigentlich gar nichts gesetzt, hier meine gesamte initialisierung: (wo müsste das rein? und wie?)

Code:
 int main(int argc, char **argv)
 {
  glutInit(&argc, argv);						 
  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);   
  glutInitWindowSize(800,600);				    
  glutInitWindowPosition(100,100);			   
  glutCreateWindow("Tetris mit OpenGL");		  
  glutKeyboardFunc(&tastatur);   
  glClearColor(1.0,1.0,1.0,0.0);  
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glOrtho(0.0,1600.0,1200.0,0.0,-10.0,10.0);   
  glutDisplayFunc(&zeichnen);	 
  HideConsole ();
  glutMainLoop();	
  return 0;
 }
 
Matthias Reitinger hat gesagt.:
Ach, du arbeitest mit GLUT... sorry, vergessen :) In dem Fall ersetze einfach GLUT_SINGLE durch GLUT_DOUBLE :)
Dass hatte ich schon mal irgendwo gelesen und probiert (gerade auch nochmal getestet)
Leider kommt dann gar nichts mehr im Fenster, also wie eben nur kommt dann auch die Spielfläche nicht mehr.

Die Funktion wo für das Zeichnen zuständig ist sieht so aus;

Code:
  void zeichnen(void)
  {
   glClear(GL_COLOR_BUFFER_BIT);   // Fenster löschen
  
   // hier alle Zeichen Aktionen
  
   glFlush();  
  }

Muss hier noch irgendwas geändert werden?
 
Zurück