Ich erstelle ein GDI-basiertes Spiel mit C++ und der Windows-API. Während des Zeichenvorgangs sehe ich jedoch gelegentlich unvollständige Rahmen oder Flackern.
Mein Programm verarbeitet derzeit alle Zeichnungen, indem es InvalidateRect aufruft und auf WM_PAINT mit BeginPaint< reagiert /code>.
Ich weiß, dass ich eine doppelte Pufferung implementieren kann, indem ich auf einen Speicher-DC zeichne und sie dann mit BitBlt an den Anzeige-DC übertrage. Ist es angesichts des Vorhandenseins des Desktop Window Managers (DWM) jedoch möglich, DWM zum Puffern zu nutzen, anstatt es manuell zu verwalten?
Ich verstehe, dass DWM über eine Verwaltung schmutziger Regionen verfügt, bei der die Die Kompositions-Engine stellt sicher, dass nur die fehlerhaften Bereiche der Anzeige neu gerendert werden müssen.
Gibt es eine Funktion wie DwmIgnoreDirtyRegionForWindow(HWND, BOOL), die das kann? DWM anweisen, alle schmutzigen Regionen für ein bestimmtes Fenster zu ignorieren, bis ich DwmIgnoreDirtyRegionForWindow(hwnd, FALSE) explizit aufrufe?
Ich habe mir auch die Funktion BeginBufferedPaint angesehen, aber Ich denke, es funktioniert auch, indem man beim Aufruf von EndBufferedPaint. auf einen Speicher-DC zeichnet und es per BitBlt auf den Display-DC überträgt
Ist es möglich, DWM anstelle von BitBlt für die GDI-Pufferung zu verwenden? ⇐ C++
-
- Similar Topics
- Replies
- Views
- Last post