Fragen zu WritePixelFast
Übersicht

![]() |
NicdelBetreff: Fragen zu WritePixelFast |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich hab zwei Fragen zu WritePixelFast ![]() 1. Ist der Zugriff auf einen ImageBuffer schneller als der Zugriff auf den BackBuffer? 2. Gibt es noch über DLLs oder Windows API einen schneller Befehl als WritePixelFast? Mfg Nicdel |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zu 1) kannst du ja mal selbst testen.
Zu 2) Wenn dir WritePixelFast nicht schnell genug ist, dann liegt es sicherlich an der falschen Anwendung. Code: [AUSKLAPPEN] Graphics 800,600,0,1
SetBuffer BackBuffer() Local B=BackBuffer() Local X,Y,F While Not KeyHit(1) If F=0 Then F=-1 Else F=0 LockBuffer B For Y=0 To 599 For X=0 To 799 WritePixelFast X,Y,F,B Next Next UnlockBuffer B Text 20,20,fps:msc=MilliSecs() If msc>mts Then mts=msc+1001:fps=frm:frm=0 Else frm=frm+1 Flip 0 Wend End |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
WritePixelFast ist schon schnell genug. War nur mal interessehalber.
EDIT: Für die, die's interessiert: Über ImageBuffer ist bei ca. 34500 Pixel um 10 FPS schneller... EDIT2: Bei 70000 Pixel ist gleich |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
- Zuletzt bearbeitet von Nicdel am Mo, März 23, 2009 18:03, insgesamt 2-mal bearbeitet
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Nein, er ist gleichschnell. Kannst ja aber ausprobieren
2. Bin ich mir nicht sicher Du kannst natürlich das Rendern in einen buffern stark beschleunigen indem du dir eine Bank erstellst mit der Größe des Buffers, da alle anderen Images(Als banks) rein"renderst" und dann mit dieser lib in den buffer schiebst. DECLS: Code: [AUSKLAPPEN] .lib "kernel32.dll"
apiRtlMoveMemory(Destination*,Source,Length):"RtlMoveMemory" apiRtlMoveMemory2(Destination,Source*,Length):"RtlMoveMemory" Beispiel+Funcs: Code: [AUSKLAPPEN] ;TEST
Graphics 1024, 768,32,2 SetBuffer BackBuffer() Gbank = CreateBank(800*600*LockedFormat()) While Not KeyHit(1) Cls msec = MilliSecs() LockBuffer msec1 = MilliSecs() CopyBufferToBank(GBank) msec1 = MilliSecs()-msec1 SX = SX + 5 If SX >= 512 SY = SY + 5 SX = 0 EndIf If SY >= 512 SY = 0 EndIf For Y = 0 To 128 For X = 0 To 128 Pos = (SY * 1024*4) + (Y * 1024*4) + (SX * 4) + (X * 4) PokeByte GBank, Pos, X * Y PokeByte GBank, Pos+1, SX * X * Y PokeByte GBank, Pos+2, SY * X * Y PokeByte GBank, Pos+3, SX * SY + X * Y Next Next msec2 = MilliSecs() CopyBankToBuffer(GBank) msec2 = MilliSecs()-msec2 UnlockBuffer msec = MilliSecs()-msec CopyRectToBank(20, 20, 100, 100, GBank, BackBuffer()) Text 0,0, msec Text 0,15, msec1 Text 0,30, msec2 Text 0,45, SX Text 0,30, SY Flip Wend End ;ENDTEST Function LockedFormat(buffer = 0) Local bnkFormat, format If buffer = 0 Then buffer = GraphicsBuffer() bnkFormat = CreateBank(4) apiRtlMoveMemory bnkFormat, buffer+104, 4 format = PeekInt(bnkFormat, 0) FreeBank bnkFormat Return format End Function Function LockedPitch(buffer = 0) Local bnkPitch, pitch If buffer=0 Then buffer = GraphicsBuffer() bnkPitch = CreateBank(12) apiRtlMoveMemory bnkPitch, buffer+92, 12 pitch = PeekInt(bnkPitch, 0)*PeekInt(bnkPitch, 8)/8 FreeBank bnkPitch Return pitch End Function Function BufferWidth(buffer = 0) Local bnkWidth, width If buffer = 0 Then Return GraphicsWidth() bnkWidth = CreateBank(4) apiRtlMoveMemory bnkWidth, buffer+92, 4 width = PeekInt(bnkWidth, 0) FreeBank bnkWidth Return width End Function Function BufferHeight(buffer = 0) Local bnkHeight, height If buffer = 0 Then Return GraphicsHeight() bnkHeight = CreateBank(4) apiRtlMoveMemory bnkHeight, buffer+96, 4 height = PeekInt(bnkHeight, 0) FreeBank bnkHeight Return height End Function Function CopyRectToBank(X, Y, W, H, bank, buffer = 0) Local bnkInfo, size If buffer=0 Then buffer = GraphicsBuffer() bnkInfo = CreateBank(32) apiRtlMoveMemory bnkInfo, buffer+72, 32 size = W*H*PeekInt(bnkInfo, 28)/8 End Function Function CopyBufferToBank(bank, buffer = 0) Local bnkInfo, size If buffer=0 Then buffer = GraphicsBuffer() bnkInfo = CreateBank(32) apiRtlMoveMemory bnkInfo, buffer+72, 32 size = PeekInt(bnkInfo, 20)*PeekInt(bnkInfo, 24)*PeekInt(bnkInfo, 28)/8 If BankSize(bank)<size Or PeekInt(bnkInfo, 0)=0 Then FreeBank bnkInfo Return False Else apiRtlMoveMemory bank, PeekInt(bnkInfo, 0), size FreeBank bnkInfo Return True EndIf End Function Function CopyBankToBuffer(bank, buffer = 0) Local bnkInfo, size If buffer=0 Then buffer = GraphicsBuffer() bnkInfo = CreateBank(32) apiRtlMoveMemory bnkInfo, buffer+72, 32 size = PeekInt(bnkInfo, 20)*PeekInt(bnkInfo, 24)*PeekInt(bnkInfo, 28)/8 If BankSize(bank)<size Or PeekInt(bnkInfo, 0)=0 Then FreeBank bnkInfo Return False Else apiRtlMoveMemory2 PeekInt(bnkInfo, 0), bank, size FreeBank bnkInfo Return True EndIf End Function |
||
Warbseite |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group