|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
E-P-S
Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 23.06.2010, 23:16 Titel: Viel Grafik in Fenster - Geschwindigkeitsproblem |
|
|
Hi zusammen. Ein etwas komisch formulierter Thread Titel - ich bitte um Verzeihung.
Ich plane mal wieder ein PlugIn für trueSpace, welches ich wieder in FB entwickle. Diesmal soll es ein F-Curve Editor oder auch Graph Editor werden (wer schonmal ein 3D Programm benutzt hat, dem sagt es mit Sicherheit etwas).
Jedenfalls wird ziemlich viel Grafik benötigt, also Linien, Raster, Flächen etc.
Logischerweise muß ich die selbst zeichnen (WM_PAINT) - soweit so klar. Jedoch mache ich mir schon im Vorfeld Gedanken ob das ganze überhaupt schnell genug funktionieren kann.
Hintergrund: Beim letzen PlugIn musste ich den Hintergrund "von Hand" darstellen und schon das alleine hat im Vollbild merklich zu flimmern geführt. Ok, Vollbild heißt bei mir Full HD, dennoch frage ich mich ob die Windows API Funktionen hier die einzige Methode sind.
Kurzum: Sind die Windows API Zeichen-Funktionen die einzigen um etwas auf ein Fenster zu zeichnen oder wie würdet ihr sowas angehen?
Vielen Dank schonmal _________________ Man kann sich öfter als zweimal im Leben halb tot lachen. |
|
Nach oben |
|
|
dkl FreeBASIC-Compiler-Entwickler
Anmeldungsdatum: 25.04.2010 Beiträge: 14 Wohnort: Germany
|
Verfasst am: 25.06.2010, 20:09 Titel: |
|
|
Hallo,
Double-buffering kannst du selbst machen, mit einem Memory DC, einer Bitmap und BitBlt(), in etwa so:
Code: | dim as HDC mem_dc = CreateCompatibleDC(window_dc)
dim as HBITMAP mem_bmp = CreateCompatibleBitmap(window_dc, width, height)
SelectObject(mem_dc, mem_bmp)
...
case WM_ERASEBKGND
return 1
case WM_PAINT
... paint into mem_dc ...
dim as HDC paint_dc = BeginPaint(...)
BitBlt(paint_dc, 0, 0, width, height, mem_dc, 0, 0, SRCCOPY)
EndPaint()
|
Das ist soweit ich weiß eine ziemlich gängige Methode; wird z.B. im Scintilla Editor benutzt.
EDIT: z.B. FillRect() mit brushes ist natürlich nicht so super schnell. Besser ist da schon der ExtTextOut Trick zum Hintergrund-Füllen ohne Text:
Code: | ExtTextOut(hdc, 0, 0, ETO_OPAQUE, @rect, NULL, 0, NULL) |
|
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|