Schnellerer Pixel Zugriff
Übersicht

![]() |
VertexBetreff: Schnellerer Pixel Zugriff |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
Ich arbeite gerade daran den Geschwindigkeitsvorteil von BlitzPlus in Sachen Peek/Poke von Pixeln weg zu bekommen, und bilde dafür die Funktionen nach. BlitzBasic: Function LockedFormat(buffer = 0) Zitat: .lib "kernel32.dll"
apiRtlMoveMemory(Destination*,Source,Length):"RtlMoveMemory" apiRtlMoveMemory2(Destination,Source*,Length):"RtlMoveMemory" LockedPixel werde ich nicht realisieren können, da Blitz3D nicht standartmäßig mit einer Bank im Videospeicher arbeitet, es würde zwar gehen, die Speicheradresse der Bank abzuändern, hätte aber den Nachteil, dass dadurch viel Speicher verschwendet werden würde. Deswegen wird es dann nur die Befehle CopyBufferToBank und CopyBankToBuffer geben. Aber alles erst morgen, habe nämlich gleich Abschlussfeier. mfg olli edit: Da es kein BufferWidth / BufferHeight Befehl gibt, habe ich hier noch die Funktionen dafür geschrieben: BlitzBasic: Function BufferWidth(buffer = 0) |
||
- Zuletzt bearbeitet von Vertex am Do, Jul 08, 2004 13:38, insgesamt einmal bearbeitet
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
So ich bins nochmal...
BlitzBasic: Function CopyBufferToBank(bank, buffer = 0) CopyBufferToBank ist 14,5 mal schneller als ReadPixelFast, und CopyBankToBuffer ist 3,3 mal schneller als WritePixelFast. Für Blitz2D könnte ich noch eine WrapperDLL schreiben, womit man auch mit CallDLL arbeiten kann. Müsste mich da aber mal mit einem zusammensetzen, der Blitz2D hat um zu wissen, ob die Offsets auch unter Blitz2D gülitgkeit haben. mfg olli Edit: Bevor ich es vergesse, der Buffer muss vorher wie bei Write/ReadPixelFats durch LockBuffer gesperrt werden. Die Bank muss größer oder gleich so groß sein wie das Bild. Das bedeutet bei einem Bild mit 100 * 200 Pixel größe und bei - LockedFormat = 1 eine Größe von 100 * 200 * 2 = 40000 Byte - LockedFormat = 2 eine Größe von 100 * 200 * 2 = 40000 Byte - LockedFormat = 3 eine Größe von 100 * 200 * 3 = 60000 Byte - LockedFormat = 4 eine Größe von 100 * 200 * 4 = 80000 Byte Die Offsets werden bei LockedFormat = 4 so berechnet: Offset = (Y*100+X)*4 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group