Buffer (Bild) möglichst schnell auf dem Bildschirm ausgeben
-
Hallo,
ich möchte möglichst schnell einen Buffer auf dem Bildschirm ausgeben.
Möglichkeiten die mir zur Verfügung stehen:
- wxWidgets
- SFML und damit eben OpenGL...
ich möchte nur ungern noch eine Bibliothek ins Projekt einbauen.Konkret:
ich habe ein Array mit 24Bit Farben (kann ich aber auf 32Bit erweitern wenns hilft), das ich mit mindestens 25 Frames auf den Bildschirm bringen möchte.
Am liebsten wäre mir etwas wie beispielsweise das ganze Array in einem beliebigen Format (Ordnung der Farben, Bitzahl) einfach an z.B. einen wxPaintDC zu übergeben, ich habe nur leider nichts in der Art gefunden.Danke schonmal & Grüße,
blub
-
Du wirst wohl erstmal daraus ein wxImage/wxBitmap machen müssen, dieses lässt sich dann auf einen Painter zeichnen.
Schau dir auch wx(Auto)BufferedPaintDC an, OpenGL ist natürlich auch eine empfehlenswerte Alternative, evtl. reicht aber wxWidgets auch schon aus.
Mit wxAutoBufferedPaintDC habe ich u.a. eine "Uhr" erstellt, welche auch Millisekunden anzeigt.phlox
-
Danke für die schnelle Antwort,
mein Problem liegt vor allem in der Geschwindigkeit, auf einen wx*DC zeichnen (DrawCircle, DrawLine, etc..) geht durchaus schnell, das Problem liegt darin dass mein Buffer 800x600x3 Byte groß ist. Ich sehe leider keine Möglichkeit wie ich diese Anzahl schnell in einen wx*DC kriegen würde.
Ich habe mir das wxImage angesehen, dort habe ich auch keinen direkten Zugriff auf den Buffer und an der Methode SetData stört mich ehrlich gesagt das hier ein bisschen:
The data must have been allocated with malloc(), NOT with operator new.
Gibt es denn mit OpenGL eine einfache Möglichkeit einfach den Buffer direkt zu kopieren und anzuzeigen?
-
Laut dem Wiki kannst du das auch mit new[] machen, muss dann allerdings dich um das Freigeben selber kümmern:
http://wiki.wxwidgets.org/WxImage (ganz unten).Und ja, das mit malloc ist natürlich blöd, aber wxWidgets ist halt schon was älter, und backwardscompability hat hier wohl den fix verhindert.
-
Hey,
kann es sein dass das wxImage oder wxBitmap in dem übergebenen Speicher rumfummelt? Ich kriege nämlich wenn ich mit SetData die Daten eines std::vector übergebe beim nächsten Zugriff auf die Instanz des vectors einen Segmentation Fault.
Danke,
blub
#edit: Hmpf, ganz dummer Fehler
Hatte die SetData Methode verlagert und dann das "true" beim zweiten Parameter vergessen. Jetzt geht alles wunderbar und ist auch schnell genug!Vielen Dank dir!