amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > Algo zum Kreiszeichnen [ - Search - New posts - Register - Login - ]

-1- 2 [ - Post reply - ]

2010-04-11, 13:48 h

Ralf27
Posts: 2779
User
Mal ne Frage, rein interessenhalber:

Wie zeichnet eigentlich das System Kreise? Mir ist schon klar das im System in der graphics.lib ein Befehl vorhanden ist, aber wie berechnet dieser Befehl die Kreise?

Bin da auf denn Besenham-Algo gestoßen(ja, der ist recht alt und bekannt und jeder der programmiert sollte ihn kennen... :-) ) der wirklich recht interesant ist und vorallem recht schnell! Ich war echt überrascht wie schnell er sogar unter MaxonBasic läuft. :)

--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2010-04-11, 13:58 h

Ralf27
Posts: 2779
User
Mal ein paar Zahlen, mit einem MaxonBasic-Fenster:
Alle Kreise haben einen Radius von 80 und es werden 100 Kreise gezogen. Dauer in Sekunden:
Bresenham: 1.09375
DrawEllipse(graphics):0.9140625
Circle(MaxonBasic):0.40625

Das gleiche, jetzt aber auf einem Systemfenster:
Bresenham: 0.8828125
DrawEllipse(graphics):0.9140625

Vorallem was interesant ist: Die Kreise vom System und die mit dem Besenham-Algo passen nicht 100% übereinander.

Aber: Es kann doch nicht sein das das langsame MaxonBasic schneller ist als eine Systemroutine?!? Ich kann mir auch nicht vorstellen das das aufrufen einer Systemroutine von MaxonBasic aus so lange dauern kann...

--
http://www.alternativercomputerclub.de.vu


[ Dieser Beitrag wurde von Ralf27 am 11.04.2010 um 14:51 Uhr geändert. ]

[ - Answer - Quote - Direct link - ]

2010-04-11, 14:25 h

Der_Wanderer
Posts: 1229
User
Der Kreisbefehl in Maxon ist ja nicht in Maxon geschrieben, oder?
Ich nehme mal an der ist in Assembler geschrieben.
Irgendwo optimiert er dann besser oder lässt was weg, vielleicht berücksichtigt er keine Layer etc.

> Wie zeichnet eigentlich das System Kreise?
Das hängt wohl ganz vom Treiber ab.

Da wir aber keinen der Sourcen kennen, ist das schwer zu sagen. Ein Unterschied von 50% ist aber noch gar nicht so gross.

--
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Answer - Quote - Direct link - ]

2010-04-11, 14:29 h

Ralf27
Posts: 2779
User
Zitat:
Original von Der_Wanderer:
Der Kreisbefehl in Maxon ist ja nicht in Maxon geschrieben, oder?
Ich nehme mal an der ist in Assembler geschrieben.
Irgendwo optimiert er dann besser oder lässt was weg, vielleicht berücksichtigt er keine Layer etc.

> Wie zeichnet eigentlich das System Kreise?
Das hängt wohl ganz vom Treiber ab.

Da wir aber keinen der Sourcen kennen, ist das schwer zu sagen. Ein Unterschied von 50% ist aber noch gar nicht so gross.

--
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


Der Befehl (Circle) von MaxonBasic ist bestimmt nicht in Basic geschrieben. :) Der Besenham-Code ist aber in MaxonBasic geschrieben und der ganze Code läuft schneller als ein Aufruf der Systemroutine DrawEllipse() von der graphics.lib. Das ist wirklich schon etwas seltsam.
--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2010-04-11, 14:34 h

Der_Wanderer
Posts: 1229
User
Die Geschwindigkeit hängt vor allem davon ab, wie die Pixel gesetzt werden. Wie machst du das in Maxon?
Vermutlich "illegal" durch direktes schreiben der Bitmap?
--
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Answer - Quote - Direct link - ]

2010-04-11, 14:37 h

Ralf27
Posts: 2779
User
Zitat:
Original von Der_Wanderer:
Die Geschwindigkeit hängt vor allem davon ab, wie die Pixel gesetzt werden. Wie machst du das in Maxon?
Vermutlich "illegal" durch direktes schreiben der Bitmap?


Interesante Vermutung. :)

Nein, auf einem MaxonBasic-Fenster mit PSET(x,y), auf einem Systemfenster mit WritePixel(). Also, legal. :)


Illegal habe ich es noch nicht versucht, ich denke, aber das es gerade in MaxonBasic langsamer wäre, da ich mehr berechnen müßte.

--
http://www.alternativercomputerclub.de.vu

[ Dieser Beitrag wurde von Ralf27 am 11.04.2010 um 14:39 Uhr geändert. ]

[ - Answer - Quote - Direct link - ]

2010-04-11, 16:55 h

Ralf27
Posts: 2779
User
Habe eben mal spaßhalber versucht das ganze in AmiBlitz zu schreiben, aber leider... nuja, bekomme es da nicht hin. Wollte halt wissen wie schnell es damit laufen könnte. Ich denke mir mal das es dort mindestens 50 mal schneller laufen müßte.
--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2010-04-11, 18:53 h

Ralf27
Posts: 2779
User
Hab es eben in AmiBlitz zum laufen bekommen. Noch läuft es aber langsamer?!? Wie kann ich am besten die Zeit in AmiBlitz messen?

Also ähnlich wie in AmigaBasic:

t#=TIMER

... Programm ...

PRINT TIMER-t#

--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2010-04-11, 19:03 h

Ralf27
Posts: 2779
User
Hm, wenn der Timer()-Befehl in 50 Ticks pro Sekunde läuft, dann dauert das Beispiel .88 Sekunden. Kann das sein?
--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2010-04-11, 21:38 h

Der_Wanderer
Posts: 1229
User
Poste doch mal den Code. (bin allerdings jetzt erstmal 2 Wochen im Urlaub ;-)

Auf jedenfall bestätigen deine Beobachtungen, dass die meiste Zeit in WritePixel verbracht wird. D.h. es ist egal, ob WritePixel nun von hoch optimiertem ASM, C, Amiblitz3 oder Maxon aufgerufen wird, es bleibt ja immer gleich schnell.

Was du machen kannst ist, einfach mal WritePixel auskommentieren, und schau mal dann wie lange es dauert (dazu die Anzahl der Durchläufe erhöhen!). Vermutlich nur noch 10% oder weniger. Dann siehst du erst die Unterschiede zwischen den Programmiersprachen.

Bei Amiblitz musst du auf jeden Fall den Debugger ausmachen und "Optimize 7" verwenden, sowie keine .q "Quicks" sondern Floats und Integer.
Zeitmessen kannst du sher genau mit der eclock.inlcude:
Also:
code:
optimize 7
syntax 2
XINCLUDE "eclock.include.bb2"

WBToScreen 0 ; Workbench holen
Window 0,0,0,320,200,$0,"Circle Test",1,0 ; Fenster aufmachen

*rp.RastPort = RastPort(0) ; Rastport von Fenster holen
SetApen_ *rp,1 ; schwarz setzen
eclock_Start{1000} ; 1/1000 sec Auflösung für die Uhr und los geht's


; dein Algorithmus
...
x.l = ...
y.l = ...
WritePixel_ *rp,x,y ; Pixel malen
...

elapsed_ms.l = eclock_Stop{} ; Zeit stoppen

; Bericht ausgeben
message{"Verstrichene Zeit: "+str$(elapsed_ms)+" ms!"}
End


P.S.: "all.res" nicht in den Compiler Settings vergessen, wegen den AmigaOS Defines. Am besten das WBApp Template nehmen.

--
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de



[ Dieser Beitrag wurde von Der_Wanderer am 11.04.2010 um 21:40 Uhr geändert. ]

[ Dieser Beitrag wurde von Der_Wanderer am 11.04.2010 um 21:43 Uhr geändert. ]

[ - Answer - Quote - Direct link - ]

2010-04-11, 21:48 h

Ralf27
Posts: 2779
User
code:
WBStartup
  optimize 7
  Screen 1,1,""
  Window 1,0,0,320,256,0,"",0,1
  rp.l=RastPort(1)
  x.w=160
  y.w=128
  r.w=80
  t.f=Timer

For te.b=1 To 100
 xh.w=0
 yh.w=r
 d.w=1-r
 dx.w=3
 dxy.w=-r-r+5
 While yh>=xh
  WritePixel_ rp,x+xh,y+yh
  WritePixel_ rp,x+yh,y+xh
  WritePixel_ rp,x+yh,y-xh
  WritePixel_ rp,x+xh,y-yh
  WritePixel_ rp,x-xh,y-yh
  WritePixel_ rp,x-yh,y-xh
  WritePixel_ rp,x-yh,y+xh
  WritePixel_ rp,x-xh,y+yh
  If d<0
   d+dx
   dxy+2
  Else
   d+dxy
   dxy+4
   yh-1
  End If
  dx+2
  xh+1
 Wend
Next
  Print (Timer-t)/50
  MouseWait

--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2010-04-11, 21:51 h

inq
Posts: 445
User
Zitat:
Original von Ralf27:
Mal ein paar Zahlen, mit einem MaxonBasic-Fenster:
Alle Kreise haben einen Radius von 80 und es werden 100 Kreise gezogen. Dauer in Sekunden:
...
Aber: Es kann doch nicht sein das das langsame MaxonBasic schneller ist als eine Systemroutine?!? Ich kann mir auch nicht vorstellen das das aufrufen einer Systemroutine von MaxonBasic aus so lange dauern kann...

klar. wenn du es "knapp" genug schreibst, holt der Compiler das Beste raus. Und wer weiß, was MB für "Verrenkungen" machen muß, um Systemroutinen wirklich systemnah aufzurufen? Wahrscheinlich noch ein Haufen Registerrettung oder so. und das 100 Mal...

P.S.
Wenn ich mit (BB2) AmiBlitz auf dem Emu ohne JIT den Debugger mitlaufen lasse, kann man SEHEN, wie die Gadgets gezeichnet werden

:look:

gruß
inq

[ - Answer - Quote - Direct link - ]

2010-04-11, 21:52 h

Ralf27
Posts: 2779
User
So sieht der Code aus. In Maxonbasic sieht er eigentlich fast genauso aus. Der Zeitfresser ist hier wohl wirklich WritePixel().

Ich hoffe Du bist noch da und kannst nochmal über denn Code sehn. So hab ich das hier vor ein paar Stunden ausgetestet. Der Debuger ist aus.

Wie kann man eigentlich von AmiBlitz aus Klartext speichern?
--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2010-04-11, 21:56 h

Ralf27
Posts: 2779
User
Zitat:
Original von inq:

klar. wenn du es "knapp" genug schreibst, holt der Compiler das Beste raus. Und wer weiß, was MB für "Verrenkungen" machen muß, um Systemroutinen wirklich systemnah aufzurufen? Wahrscheinlich noch ein Haufen Registerrettung oder so. und das 100 Mal...

P.S.
Wenn ich mit (BB2) AmiBlitz auf dem Emu ohne JIT den Debugger mitlaufen lasse, kann man SEHEN, wie die Gadgets gezeichnet werden

:look:

gruß
inq


Das interesante ist ja, das MB und AmiBlitz hier quasi gleich schnell ist. Beide brauchen bei diesem Beispiel ca. 0,88 Sekunden. Die Zeit wird wohl bei WritePixel() verhauen. Eigentlich müßte AmiBlitz mindestens 50 bis 100 mal schneller sein. MaxonBasic ist echt schnarchlangsam.
Interesant ist auch das der eingebaute Circle-Befehl von MaxonBasic mehr als doppelt so schnell ist wie die Betriebssystemroutine. Da läuft wohl irgendwas seltsam ab. Deswegen auch am Anfang die Frage, wie wohl das Betriebssystem die Kreise zeichnet.
--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2010-04-11, 22:03 h

inq
Posts: 445
User
Zitat:
Original von Ralf27:
... Die Zeit wird wohl bei WritePixel() verhauen. Eigentlich müßte AmiBlitz mindestens 50 bis 100 mal schneller sein. MaxonBasic ist echt schnarchlangsam.
Interesant ist auch das der eingebaute Circle-Befehl von MaxonBasic mehr als doppelt so schnell ist wie die Betriebssystemroutine. Da läuft wohl irgendwas seltsam ab. Deswegen auch am Anfang die Frage, wie wohl das Betriebssystem die Kreise zeichnet.


Tja. wie der_wanderer schon schrieb, kann man ohne Src nix sagen. Vermutlich werden bei WritePixel_ jedesmal die Coords gegen die Zielbitmap gecheckt, während der interne MB-Befehl möglicherweise direkt zeilenweise oder BPlaneweise in den BMap-Speicher kopiert. hast du mal versucht, die Ausgabe zu verlangsamen? dann siehst du, wie der Kreis "gemalt" wird.
GRuß
inq

[ - Answer - Quote - Direct link - ]

2010-04-11, 22:07 h

Ralf27
Posts: 2779
User
Zitat:
Original von inq:

Tja. wie der_wanderer schon schrieb, kann man ohne Src nix sagen. Vermutlich werden bei WritePixel_ jedesmal die Coords gegen die Zielbitmap gecheckt, während der interne MB-Befehl möglicherweise direkt zeilenweise oder BPlaneweise in den BMap-Speicher kopiert. hast du mal versucht, die Ausgabe zu verlangsamen? dann siehst du, wie der Kreis "gemalt" wird.
GRuß
inq


Interesante Idee, aber ich weiß nicht wie ich das machen könnte.
--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2010-04-11, 22:08 h

Der_Wanderer
Posts: 1229
User
Amiblitz3 speichert als ASCII, man muss die Datei Endung .ab2 oder .ab3 (ab Version 3.5) angeben. Nur das veraltete .bb2 Format speichert proprietär.

Ein wenig mehr Speed bekommst du, wenn du statt .b oder .w den Typ .l verwendest, zumindest auf EMUs ist 32bit schneller als 16 oder 8bit.

Aber der Algorithmus ist schon extrem optimiert, bei AB3 schätze ich mal 99% WritePixel und 1% Algorithmus. D.h. selbst wenn Maxon 10mal langsamer wäre, fällt das kaum ins Gewicht.

Wenn du also die Speed der Srpachen testen willst, dann kommentiere WritePixel aus und teste dann mal. Verwende die eclock, das ist viel genauer. Timer nutzt vermutlich den Vertical Blank.

Der atomare Maxon Circle Befehl ist vermutlich deshalb schneller, weil er kein WritePixel verwendet (das mss ja jedesmal den Layer abklopfen), sondern evtl. nur einmal und dann direkt die Bitmap bearbeitet.
--
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Answer - Quote - Direct link - ]

2010-04-11, 22:13 h

inq
Posts: 445
User
Zitat:
Original von Ralf27:
Zitat:
Original von inq:

... hast du mal versucht, die Ausgabe zu verlangsamen? dann siehst du, wie der Kreis "gemalt" wird.
GRuß
inq


Interesante Idee, aber ich weiß nicht wie ich das machen könnte.


du schreibst das programm so um, daß es den Zielrechner überfordert, z.B.
Bildschirm superhires 8Bit auf nem std. A1200. multitasking bleibt an und du startest noch irgendwas anderes ohne Speicherverbrauch, aber mit einem cpu-fressenden mainloop. gibts vielleicht sogar als testtool auf den DEveloperCDs, wenn ich mich nicht irre, hihihi :)

oder, wie angedeutet: Emulator, ohne JIT oder Speed auf Original.
inq

[ - Answer - Quote - Direct link - ]

2010-04-11, 22:18 h

Ralf27
Posts: 2779
User
Zitat:
Original von Der_Wanderer:
Amiblitz3 speichert als ASCII, man muss die Datei Endung .ab2 oder .ab3 (ab Version 3.5) angeben. Nur das veraltete .bb2 Format speichert proprietär.

Ah, danke. Also ist es wichtig das ich beim abspeichern die passende Endung angebe. Vorhatte hatte ich das nicht und AB3 hat quasi in bb2 gespeichert.
Zitat:
Ein wenig mehr Speed bekommst du, wenn du statt .b oder .w den Typ .l verwendest, zumindest auf EMUs ist 32bit schneller als 16 oder 8bit.
Interesante. :)
Ich bleib aber bei w und b um Speicher zu sparen. Ich bin noch auf einem echten Amiga. :)
Zitat:
Aber der Algorithmus ist schon extrem optimiert, bei AB3 schätze ich mal 99% WritePixel und 1% Algorithmus. D.h. selbst wenn Maxon 10mal langsamer wäre, fällt das kaum ins Gewicht.
Danke, bei MB muß man optimieren das der Arzt kommt, sonst geht da nix vom Speed her. AB3 ist da anderst. Aber vermutlich optimiert man dann auch weniger, weil man da mehr vom Speed verwöhnt wird. :)
Zitat:
Wenn du also die Speed der Srpachen testen willst, dann kommentiere WritePixel aus und teste dann mal. Verwende die eclock, das ist viel genauer. Timer nutzt vermutlich den Vertical Blank.
Mir ist schon klar das AB3 MB um welten schlägt. Diesmal habe ich übrigens mein erstes AB3 Programm geschrieben was auch funktioniert! :)
Zitat:
Der atomare Maxon Circle Befehl ist vermutlich deshalb schneller, weil er kein WritePixel verwendet (das mss ja jedesmal den Layer abklopfen), sondern evtl. nur einmal und dann direkt die Bitmap bearbeitet.
Ja, ist schon irgendwie interesant. Aber: Dann ruft wohl der DrawEllipse() aus der graphics.lib wohl auch WritePixel() auf?
Vermutung: Dann könnte man in der graphics.lib wohl auch noch einiges optimieren.

--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2010-04-11, 22:20 h

Ralf27
Posts: 2779
User
Zitat:
Original von inq:
du schreibst das programm so um, daß es den Zielrechner überfordert, z.B.
Bildschirm superhires 8Bit auf nem std. A1200. multitasking bleibt an und du startest noch irgendwas anderes ohne Speicherverbrauch, aber mit einem cpu-fressenden mainloop. gibts vielleicht sogar als testtool auf den DEveloperCDs, wenn ich mich nicht irre, hihihi :)

oder, wie angedeutet: Emulator, ohne JIT oder Speed auf Original.
inq


Also quasi 1024*768 in 8 Bit und dann im hintergrund cpu fressen lassen und sehn wie es "rund" geht. Interesant. Muß ich mal machen.
--
http://www.alternativercomputerclub.de.vu

[ Dieser Beitrag wurde von Ralf27 am 11.04.2010 um 22:21 Uhr geändert. ]

[ - Answer - Quote - Direct link - ]

2010-04-11, 22:22 h

inq
Posts: 445
User
Zitat:
Original von Der_Wanderer:
...Wenn du also die Speed der Srpachen testen willst, dann kommentiere WritePixel aus und teste dann mal. Verwende die eclock, das ist viel genauer. Timer nutzt vermutlich den Vertical Blank.

Wenn du den eigentlichen Aufruf auskommentierst, was testest du dann noch? ich meine, bei AB3 wird dann beinahe alles rausoptimiert, was an variablen-zuweisungen etc. unbenutzt bleibt, oder?

Du weißt das selbst am besten, glaub ich...

Timer gibt Ticks aus. das geht schon als Zeitberechnung. nötigenfalls den Loop vegrößern auf 1000 oder so.


[ - Answer - Quote - Direct link - ]

2010-04-11, 22:26 h

Der_Wanderer
Posts: 1229
User
> Ich bleib aber bei w und b um Speicher zu sparen. Ich bin noch auf einem echten Amiga.
Du sparst satte 4 Bytes, bist aber dafür langsamer. Schlechter Deal!

Zur graphics.lib:
Ja, sieht unoptimiert aus, als würde es WritePixel verwenden.
Ohne WritePixel wäre man vermutlich 10-20 mal schneller.

Nicht dass WritePixel per se schlecht wäre, aber wenn man vor hat 100 Pixel zu zeichnen ist das schlecht, weil der eine WritePixel nichts von den anderen 99 WritePixels weis. Jeder Pixel muss also erneut testen, ob er im Layer sichtbar ist, sich den Pen holen, die Farbe auflösen, Addresse in der Bitmap ermitteln etc. etc.

Direkt spart man sich da massig Arbeit. Also die Bitmap EINMAL locken, einen Pixel zeichnen, Pixel Wort-Breite ermitteln und den Pixel dann direkt im Speicher kopieren. Etwas unsauber, wenn man nicht der Treiber ist, dürfte aber zu 99% überall laufen.
Wobei man hier noch zwischen Graka und AGA unterscheiden muss.

Geht denn der "schnelle" Maxon Befehl überall (AGA/RTG ?)


--
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Answer - Quote - Direct link - ]

2010-04-11, 22:30 h

inq
Posts: 445
User
Zitat:
Original von Ralf27:
Ja, ist schon irgendwie interesant. Aber: Dann ruft wohl der DrawEllipse() aus der graphics.lib wohl auch WritePixel() auf?
Vermutung: Dann könnte man in der graphics.lib wohl auch noch einiges optimieren.

DrawEllipse_ ist sowieso universell ausgelegt, wegen der veschiedenen Radien. da wird sicher erst auf gleiche Radien getestet. das macht aber erst bei >1000 Kreisen was aus, denke ich (siehe SysSpeed).

gfxlib wird optimiert, irgendwo im Aminet zu finden (BETA).
(suchen macht jeder selbst....)
inq



[ - Answer - Quote - Direct link - ]

2010-04-11, 22:32 h

Ralf27
Posts: 2779
User
Zitat:
Original von Der_Wanderer:
> Ich bleib aber bei w und b um Speicher zu sparen. Ich bin noch auf einem echten Amiga.
Du sparst satte 4 Bytes, bist aber dafür langsamer. Schlechter Deal!

War auch von mir nicht ganz so ernst gemeint.
Zitat:
Geht denn der "schnelle" Maxon Befehl überall (AGA/RTG ?)
Soviel ich weiß, ja. Leider kann ich das nicht mehr testen, da mein Grafikkartenamiga nicht mehr läuft.
--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2010-04-11, 22:35 h

Ralf27
Posts: 2779
User
Zitat:
Original von inq:
DrawEllipse_ ist sowieso universell ausgelegt, wegen der veschiedenen Radien. da wird sicher erst auf gleiche Radien getestet. das macht aber erst bei >1000 Kreisen was aus, denke ich (siehe SysSpeed).

Der MaxonBasic Befehl ist da wesentlich universeller, er kann z.b. auch Kreisausschnitte zeichnen und logischeiweise auch Ellipsen. Das ganze in einem Befehl.
Zitat:
gfxlib wird optimiert, irgendwo im Aminet zu finden (BETA).
(suchen macht jeder selbst....)
inq

Stimmt. Hab ich auch in den News gelesen. Wird versucht nachzuprogrammieren.


--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2010-04-11, 22:42 h

Ralf27
Posts: 2779
User
Grr, was mich an AB3 nervt ist das dauernde Abstürzen mit Gurus, vorallem beim Quellcode laden. Ja, ich weiß auch das man für AB3 ein High-End Amiga nehmen sollte, vornehmlich einen emulierten...

Ich muß wirklich mal MuForce oder dergleichen mitlaufen lassen, wenn ich was mit AB3 mach. Jetzt, da ich heute mein erstes, lauffähige Programm ohne viele Abstürze von AB3 hinbekommen habe, muß ich mal sehn wieso die aktuelle Version von AB3 laufend abstürzt. Und diesmal auch mit der Fehlernummer 80000008.
--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2010-04-11, 22:45 h

inq
Posts: 445
User
Zitat:
Original von Ralf27:
Der MaxonBasic Befehl ist da wesentlich universeller, er kann z.b. auch Kreisausschnitte zeichnen und logischeiweise auch Ellipsen. Das ganze in einem Befehl.

Naja, wer's glaubt :)
Ist natürlich Täuschung:
Der Befehl wird ja je nach Argumenten aufgeteilt in Subroutinen.
in Wahrheit erkennt der Compiler deinen Loop und behält alle Register, außer die, die sich ändern (x,y) für die Coords des Mittelpunkts. Du erzeugst ja keine neuen Kreise, sondern immer nur denselben.
Und Segmente oder Ellipsen sind auch nicht vorhanden, darum kannst du ja den Speed auf die eigentliche Zeichenroutine festnageln.


[ - Answer - Quote - Direct link - ]

2010-04-11, 22:50 h

inq
Posts: 445
User
Zitat:
Original von Ralf27:
Grr, was mich an AB3 nervt ist das dauernde Abstürzen mit Gurus, vorallem beim Quellcode laden. Ja, ich weiß auch das man für AB3 ein High-End Amiga nehmen sollte, vornehmlich einen emulierten...
..


Hihi :)
Nee, war nur Spasssss !
Ich nehm nur mein eigenes Blitz2, bewährte Deflibs, eigene Libs in /Beta usw.
Das wird der_Wanderer sicher nicht gutheißen, aber ich bleib vorerst dabei, auch mit dem Emu.
Das bringt mich zwar um die Arbeit der AB-Community, aber ich code ja auch für mich...
Gruß
inq

[ - Answer - Quote - Direct link - ]

2010-04-11, 22:50 h

Ralf27
Posts: 2779
User
Zitat:
Original von inq:
Naja, wer's glaubt :)
Ist natürlich Täuschung:
Der Befehl wird ja je nach Argumenten aufgeteilt in Subroutinen.
in Wahrheit erkennt der Compiler deinen Loop und behält alle Register, außer die, die sich ändern (x,y) für die Coords des Mittelpunkts. Du erzeugst ja keine neuen Kreise, sondern immer nur denselben.
Und Segmente oder Ellipsen sind auch nicht vorhanden, darum kannst du ja den Speed auf die eigentliche Zeichenroutine festnageln.


Ich glaub du traust dem MB-Compiler mehr zu als er wirklich kann. Der ist sogar so schlecht das Bitshiften teilweise langsamer ist als eine Ganzzahldivision! Das heißt was. Ich halte denn Compiler für "extraunterbelichtet".

Aber, ich mach jetzt mal ein Versuch und klammer endlich mal bei MB die WritePixel()s raus. Aber erst mal Neu starten. AB3 hat wieder das System verhauen...
--
http://www.alternativercomputerclub.de.vu

[ Dieser Beitrag wurde von Ralf27 am 11.04.2010 um 22:51 Uhr geändert. ]

[ - Answer - Quote - Direct link - ]

2010-04-11, 22:56 h

Ralf27
Posts: 2779
User
So, hab eben den MB-Code auf Systemfenster ohne WritePixel() getestet:
0.0078125 Sekunden

Also, wieder mit 100 Kreise mit Radius 80.
--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]


-1- 2 [ - Post reply - ]


amiga-news.de Forum > Programmierung > Algo zum Kreiszeichnen [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.