Hilfe
Parameter
buffer | Identität eines Buffers |
Rückgabewert
Bytegröße für eine Zeile Grafik
Beschreibung
Die Funktion LockedPitch ermittelt die Größe in Byte, die für eine horizontale Zeile eines Grafikbuffers benötigt wird. Diese Größe hängt von Breite des Grafikbuffers und Farbtiefe ab. Dies ist dann nützlich, wenn Pixel direkt ins Video-RAM mit Poke/Peek-Befehlen gezeichnet/gelesen werden sollen und nicht mir WritePixel/ReadPixel
. Dazu ist eine vorherige Sperrung des Grafikbuffers mit LockBuffer
notwendig.
Direktes Zeichnen mit Poke ist deutlich schneller (bis zu 6x schneller als WritePixelFast). Jedoch muss man Speicherposition und Ausgabewert manuell berechnen. Dies ist nicht so einfach und nur mit Hilfe von LockedFormat
, LockedPitch und LockedPixels
möglich. Für schnelle Grafikausgabe muss man zudem für jedes Grafikformat eine gesonderte Routine programmieren!
Beispiel
Die erste Funktion zeichnet eine Linie und zweite Funktion berechnet eine Farbe:
SLineBP(50, 50, 300, 200, 255, 0, 0, BackBuffer())
Flip
WaitKey()
End
Function SLineBP(stx#, sty#, enx#, eny#, r, g, b, Buffer)
mvx# = Stx - enx:mvy# = sty - eny
If mvx<0 mvx = - mvx
If mvy<0 mvy = - mvy
If mvy>mvx mv# = mvy Else mv# = mvx
stpx# = (mvx / mv):If Stx>enx stpx = - stpx
stpy# = (mvy / mv):If Sty>eny stpy = - stpy
LockBuffer Buffer
SL_Pitch = LockedPitch(Buffer)
SL_Bank = LockedPixels(Buffer)
SL_Mode = LockedFormat(Buffer)
Col = ConvertRGB(r, g, b, SL_Mode)
DebugLog Hex(Col)
If SL_Mode = 1 Or SL_Mode = 2
For nc = 0 To Floor(mv)
PokeShort SL_Bank, (Floor(stx) * 2) + (Floor(sty) * SL_Pitch), Col
stx = stx + stpx:sty = sty + stpy
Next
Else
For nc = 0 To Floor(mv)
PokeInt SL_Bank, (Floor(sty) * SL_Pitch) + (Floor(stx) * 4), Col
stx = stx + stpx:sty = sty + stpy
Next
EndIf
UnlockBuffer Buffer
End Function
Function ConvertRGB(r, g, b, Mode = 0)
Select Mode
Case 1
Return ((r / 8) Shl 11) Or ((g / 4) Shl 5) Or (b / 8)
Case 2
Return ((r / 8) Shl 10) Or ((g / 8) Shl 5) Or (b / 8)
Default
Return (r Shl 16) Or (g Shl 8) Or b
End Select
End Function
Siehe auch

