Problem mit Writepixelfast und Functions....

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

yrul

Betreff: Problem mit Writepixelfast und Functions....

BeitragMo, Mai 12, 2008 13:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich wollte einen neuen line Befehl , mit Writepixelfast, schreiben, da der existierende zu langsam war (Ich bezweifle allerdings, dass meiner schneller ist...)Bis jetzt sollte es nur ein rect zeichnen..

Problem:
    -es zeichnet gar nichts Shocked
    -die function wird nur einmal ausgeführt... (wahrscheindlich ein kleiner blöder Fehler...)


Code: [AUSKLAPPEN]

SetBuffer BackBuffer()

Repeat
   Line1(10,10,100,100,255,255,255,255)
   Flip
Until(KeyHit(1))



Function Line1(x,y,x1,y1,r,b,g,a)
   rgb=a*$1000000 + r*$10000 + g*$100 + b
   Image=CreateImage(Abs(x1-x),Abs(y1-y))
   LockBuffer ImageBuffer(image)
   z=x-x1
   For t=x To x1
      For t=y To y1
         WritePixelFast x+z,t,rgb
         UnlockBuffer ImageBuffer(image)
      Next
   Next
   
   SetBuffer BackBuffer()
   DrawImage image,x,y
   Print "Linie Gezeichnet ("+x+","+y+","+x1+","+y1+","+r+","+g+","+b+")"
End Function

Währe nett wenn Ihr mir helfen könntet... Wink
[/quote]

ZaP

BeitragMo, Mai 12, 2008 13:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau hab ich nich hingesehen, aber UnlockBuffer solltest du hinter die beiden verschachtelten for-schleifen verschieben...
Starfare: Worklog, Website (download)
 

yrul

BeitragMo, Mai 12, 2008 13:15
Antworten mit Zitat
Benutzer-Profile anzeigen
ZaP hat Folgendes geschrieben:
Genau hab ich nich hingesehen, aber UnlockBuffer solltest du hinter die beiden verschachtelten for-schleifen verschieben...


ooo Embarassed Laughing
 

yrul

BeitragMo, Mai 12, 2008 13:16
Antworten mit Zitat
Benutzer-Profile anzeigen
yrul hat Folgendes geschrieben:
ZaP hat Folgendes geschrieben:
Genau hab ich nich hingesehen, aber UnlockBuffer solltest du hinter die beiden verschachtelten for-schleifen verschieben...


ooo Embarassed Laughing


Aber es funktioniert immer noch nicht..

The Shark

BeitragMo, Mai 12, 2008 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Kennst du den algo:
Code: [AUSKLAPPEN]

Function Linie(x1, y1, x2, y2, r, g, b)
   farbe = r*$10000 + g*$100 + b
   dx = x2 - x1
   dy = y2 - y1

   If dx > 0 Then
      inc_x = 1
   Else
      inc_x = -1
   EndIf
   If dy > 0 Then
      inc_y = 1
   Else
      inc_y = -1
   EndIf

   If Abs(dy) < Abs(dx) Then
      error = -Abs(dx)
      delta = 2 * Abs(dy)
      schwelle = 2 * error
      While x1 <> x2
         WritePixel x1, y1, farbe
         x1 = x1 + inc_x
         error = error + delta
         If error > 0 Then y1 = y1 + inc_y: error = error + schwelle
      Wend
   Else
      error = -Abs(dy)
      delta = 2 * Abs(dx)
      schwelle = 2 * error
      While y1 <> y2
         WritePixel x1, y1, farbe
         y1 = y1 + inc_y
         error = error + delta
         If error > 0 x1 = x1 + inc_x: error = error + schwelle
      Wend
   EndIf
   WritePixel x2, y2, farbe
End Function

Bresenham-Algorythmus
Den habe ich glaube ich im englischen forum gefunden

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Mai 12, 2008 13:57
Antworten mit Zitat
Benutzer-Profile anzeigen
In der OH steht, dass Line anscheinend auch schneller ist, wenn man den Buffer zuvor sperrt. Wenn das stimmt, dann müsste man also bei vielen zu zeichnenenden Linien den Buffer sperren, um es schneller zu bekommen. Bei nur wenigen Linien lohnt sich das nicht, da das sperren den Buffers auch Zeit in Anspruch nimmt.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

yrul

BeitragMo, Mai 12, 2008 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
hectic hat Folgendes geschrieben:
In der OH steht, dass Line anscheinend auch schneller ist, wenn man den Buffer zuvor sperrt. Wenn das stimmt, dann müsste man also bei vielen zu zeichnenenden Linien den Buffer sperren, um es schneller zu bekommen. Bei nur wenigen Linien lohnt sich das nicht, da das sperren den Buffers auch Zeit in Anspruch nimmt.



Gut zu wissen. Werde ich gerade ausprobieren... Smile

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Mai 12, 2008 16:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Dim FPS(3)
Graphics 800,600,32,2
SetBuffer BackBuffer()
While Not KeyDown(1)
   GoLine()
   Text 9,9,"FPS:"+FPS(1):FPS(2)=FPS(2)+1:If MilliSecs()>FPS(3)+999 Then FPS(1)=FPS(2):FPS(2)=0:FPS(3)=MilliSecs()
   Flip 0
   Cls
Wend:End

Function goline()
   ;LockBuffer ()
   For X1= 50 To 750 Step 80
     For x2= 50 To 750 Step 80
      Line x1,50,x2,550
     Next
   Next
   ;UnlockBuffer ()
End Function

Habs mal ebend ausprobiert,

137 FPS ohne Lockbuffer
243 FPS mit Lockbuffer
[BB2D | BB3D | BB+]
 

yrul

BeitragMo, Mai 12, 2008 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Rallimen hat Folgendes geschrieben:

137 FPS ohne Lockbuffer
243 FPS mit Lockbuffer


Und wieviele mit dem obenangegebenen Code? Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group