007
03.12.2008, 19:09 Uhr
Matthias Hofmann
Administrator Bürstenkaiser
Themenstarter Beiträge: 4133 Dabei seit: 15.04.2003, 23:00 Uhr |
Das entspricht wohl der Funktion SetPixel() aus der Windows API. Sie ist ebenfalls sehr langsam, und das vermutlich aus dem gleichen Grund wie PutPixel(). Wenn Du mit diesen Funktionen an irgendeiner Stelle des Bildschirms einen Pixel in einer bestimmten Farbe setzen willst, dann passieren nämlich in der Regel drei Dinge:
1. Du beantragst beim Betriebssystem Zugriff auf den Videospeicher und holst Dir dabei dessen Adresse. 2. Du änderst den Wert an video_address + y * horz_resolution + x der gewünschten Farbe entsprechend. 3. Du gibst den Videospeicher wieder frei.
In diesem Beispiel habe ich die Adresse des Videospeichers mit video_address und die horizontale Bildschirmauflösung mit horz_resolution bezeichnet. Der Pixel hat dabei die Koordinaten x und y.
Solange Du auf diese Weise nur einen einzigen Pixel setzt, gibt es überhaupt kein Problem. Wenn Du diese Funktionen aber zum Beispiel in einer Schleife verwendest, um eine Linie zu ziehen oder gar eine Fläche zu füllen, dann verschwendest Du einiges an Rechenzeit, da die Schritte 1 und 3 ja eigentlich nur vor bzw. nach Deiner Zeichenoperation nötig sind.
Aus diesem Grund gibt es in DirectX auch die Funktionen IDirectDrawSurface7::Lock() und IDirectDrawSurface7::Unlock(), die den Schritten 1 bzw. 3 entsprechen. Durch diese beiden separaten Funktionen ist es möglich, die Schritte 1 und 3 aus einer solchen Schleife herauszuziehen. ----- Matthias Hofmann | Klomanager Deluxe jetzt bei Gamesload kaufen |