[VC++EE] Double Buffering bei Graphic eines Forms

the snake II

Erfahrenes Mitglied
Hallo,

ich arbeite an einer Anwendung mit einer 2D-Oberfläche für das Plazieren von Objekten. Ich benutze hierfür das Graphics Objekt des Forms.
Nun hatte ich das Problem, dass das Zeichnen jedes Frames direkt auf dem sichtbaren Graphics Objekt geschieht, wodurch ein Flackern entsteht.
Die Lösung ist natürlich Doublebuffering. Laut MSDN Library wäre die beste Lösung, die Double buffered Eigenschaft des Forms auf true zu setzen. Keine Veränderung, man kann imernoch beim Zeichnen zugucken. Auch das Codebeispiel auf MSDN brachte keinen Erfolg:
Code:
public:
   void EnableDoubleBuffering()
   {
      // Set the value of the double-buffering style bits to true.
      this->SetStyle( static_cast<ControlStyles>(ControlStyles::DoubleBuffer | ControlStyles::UserPaint | ControlStyles::AllPaintingInWmPaint), true );
      this->UpdateStyles();
   }

Deshalb benutze ich jetzt das Graphics-Objekt einer unsichtbaren Bitmap um im Hintergrund zu zeichnen, um dann den fertigen Frame an das Graphics-Objekt des Forms zu übergeben. Leider hat dieses manuelle Double-Buffering zur Folge, dass die Frame-Rate sehr niedrig ist. In der Praxis also die Oberfläche beim Verschieben ruckelt.

Um die Performance zu verbessern werde ich wohl einen anderen Ansatz wählen müssen. Die Frage ist nur, welchen?

Meine Ideen:
1. Versuchen, das eingebaute double buffering des Graphics-Objekts doch irgendwie zum laufen zu bringen. Die Frage ist, wie, und wenns klappt, ob das dann viel hilft.
2. Da ich vermute, dass man hier nur weiterkommt, wenn man die Grafik Sachen von der GPU statt der CPU ausführen lässt, könnte man DirectX oder eher OpenGL probieren. Hier weiß ich aber keinen Ansatz, wie ich den praktischen WYSIWYG-Editor von VC++ weiter benutzen kann. Wenns nicht anders geht, ists nicht so schlimm, aber ich würde gerne darauf verzichten, auf wxWidgets o.ä. umzusteigen.


Hat jemand ne Idee?


André
 
Zurück