Hilfe
Parameter
buffer | Identität des Buffers |
Rückgabewert
Identität einer Bank wird zurückgeliefert
Beschreibung
Die Funktion LockedPixels liefert die Identität einer Bank zurück. Diese Bank repräsentiert den Videospeicher und enthält Pixelinformationen, die mit Peek-/Poke-Befehlen manipuliert werden können. 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

