amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > AGA<->CyberGraphX: Buffer [ - Suche - Neue Beiträge - Registrieren - Login - ]

1 -2- [ - Beitrag schreiben - ]

20.02.2007, 22:12 Uhr

Holger
Posts: 8116
Nutzer
@Ralf27:
Also bei mir scheint Dein Code auch mit den Fehlern das Richtige zu tun, aber das mag ja an den Unterschieden zwischen CGX und P96 liegen. Probier's doch mal so:
code:
REM $nowindow
REM $noerrors
REM $nolines
REM $nojumps
REM $library
REM $nodebug
REM $nobreak
REM $noevent
REM $nooverflow
REM $novarchecks
REM $noautodim
REM $noaddicon
REM $noarray
REM $nostack

REM $INCLUDE Asl.bh
REM $INCLUDE Exec.bh
REM $INCLUDE Graphics.bh
REM $INCLUDE Intuition.bh
LIBRARY OPEN "exec.library", 33
LIBRARY OPEN "intuition.library", 39
LIBRARY OPEN "graphics.library", 39
LIBRARY OPEN "asl.library", 38

  DEFINT a-z
  
  CONST sBreite=640
  CONST sHoehe=512
  
  tagsl&=AllocVec&(100,MEMF_PUBLIC&)
  IF tagsl&=0 THEN Ende
  
  TAGLIST tagsl&,_
  ASLSM_TitleText&,"Benötigt:"+STR$(sBreite)+"*"+STR$(SHoehe),_
  ASLSM_Window&,win&,_
  ASLSM_MinWidth&, sBreite, ASLSM_MinHeight, SHoehe,_
  ASLSM_InitialDisplayID&,DisplayID&,_
  TAG_END&
  fr&=AllocAslRequest&(ASL_ScreenModeRequest&,tagsl&)
  IF fr& THEN
    IF AslRequest&(fr&,0) THEN DisplayID&=PEEKL(fr&)
    FreeASlRequest fr&
  END IF
  IF DisplayID&=0 THEN Ende
  
  TAGLIST tagsl&,_
  SA_Width&,  sBreite, _
  SA_Height&, sHoehe, _
  SA_DisplayID&, DisplayID&, _
  TAG_END&
  eigenerscr&=OpenScreenTagList&(0,tagsl&)
  IF eigenerscr&=0 THEN Ende
  TAGLIST tagsl&, _
  WA_IDCMP&,IDCMP_VANILLAKEY&, _
  WA_Flags&,WFLG_BORDERLESS&+ _
            WFLG_ACTIVATE&,_
  WA_CustomScreen&,eigenerscr&,_
  TAG_END&
  win&=OpenWindowTagList&(0,tagsl&)
  IF win&=0 THEN Ende
  winrp&=PEEKL(win&+RPort)
  scrbm&=PEEKL(winrp&+RastPortBitMap%)
  sTiefe=GetBitMapAttr(scrbm&, BMA_DEPTH&)
  userport&=PEEKL(win&+UserPort)

  BufferBitmap&=AllocBitMap&(sBreite,sHoehe,sTiefe,BMF_MINPLANES&,scrbm&)
  IF BufferBitmap& THEN
    Bufferrp&=AllocVec&(RastPort_sizeof,MEMF_PUBLIC&)
    IF Bufferrp& THEN
      InitRastPort Bufferrp&
      POKEL Bufferrp&+RastPortBitMap%,BufferBitmap&
    ELSE
      GOTO Ende
    END IF
  ELSE
    GOTO Ende
  END IF
  rp&=Bufferrp&
 
  Pi!=4!*ATN(1!)
  
  i=0

  a$=""
  t2#=TIMER
  WHILE Ende=0
    m&=GetMsg&(Userport&)
    IF m& THEN
      w&=PEEKL(m&+Class)
      w2&=PEEKW(m&+IntuiMessageCode)
      ReplyMsg m&
      IF w&=IDCMP_VANILLAKEY& THEN Ende=1
    END IF

    INCR i:IF i>32766 THEN i=0
    SetRast rp&,0

    x=184:y=385:z=47:Al!=3!+i*45!/z

    ZeichneZahnrad x,y,4.9,z,Al!,1.25,1!,20!

    BerechneNeulage 32,100.9453,4.9,z,x,y,Al!
    ZeichneZahnrad x,y,4.9,z,Al!,1.25,1!,20!


    BerechneNeulage 23,99.41803,4.9,z,x,y,Al!
    ZeichneZahnrad x,y,4.9,z,Al!,1.25,1!,20!

    BerechneNeulage 26,356!,4.9,z,x,y,Al!
    ZeichneZahnrad x,y,4.9,z,Al!,1.25,1!,20!
    BerechneNeulage 38,304!,4.9,z,x,y,Al!
    x1=x:y1=y:Al1!=Al!:z1=z

    ZeichneZahnrad x,y,4.9,z,Al!,1.25,1!,20!
    BerechneNeulage 17,278.0417,4.9,z,x,y,Al!

    ZeichneZahnrad x,y,4.9,z,Al!,1.25,1!,20!
    BerechneNeulage 24,281.101,4.9,z,x,y,Al!

    ZeichneZahnrad x,y,4.9,z,Al!,1.25,1!,20!
    BerechneNeulage 27,3.372287,4.9,z,x,y,Al!

    ZeichneZahnrad x,y,4.9,z,Al!,1.25,1!,20!
    BerechneNeulage 21,105!,4.9,z,x,y,Al!

    ZeichneZahnrad x,y,4.9,z,Al!,1.25,1!,20!
    x=x1:y=y1:Al!=Al1!:z=z1
    BerechneNeulage 25,8!,4.9,z,x,y,Al!

    ZeichneZahnrad x,y,4.9,z,Al!,1.25,1!,20!
    BerechneNeulage 22,77.05708,4.9,z,x,y,Al!

    ZeichneZahnrad x,y,4.9,z,Al!,1.25,1!,20!
    BerechneNeulage 20,177.2706,4.9,z,x,y,Al!

    ZeichneZahnrad x,y,4.9,z,Al!,1.25,1!,20!

    t#=TIMER
    incr frames
    IF t#-t2#>0.3 THEN
      a$=STR$(INT(frames/(t#-t2#)))+" fps"
      frames=0
      t2#=t#
    END IF
    move rp&,10,10
    text rp&,SADD(a$),LEN(a$)

    junk=BltBitMapRastPort(BufferBitmap&,0,0,winrp&,0,0,sBreite,sHoehe,&Hc0)
  WEND

Ende:
  IF win& THEN CloseWindow win&
  IF eigenerscr& THEN junk&=CloseScreen&(eigenerscr&)
  IF bufferrp& THEN FreeVec bufferrp&
  IF bufferbitmap& THEN FreeBitmap bufferbitmap&
  IF tagsl& THEN FreeVec tagsl&
END

REM Rest unverändert...


mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 22:30 Uhr

Ralf27
Posts: 2779
Nutzer
Die Veränderungen beim Timer bringen mir ja nur die FPS, also in meinem Fall 8fps.
Ich hab auch die Flags bei AllocBitmap() geändert, auch keine Veränderung.
Ich hab jetzt die Farbtiefe über ASL gelöst, bzw. öffne ich jetzt denn Screen und den Buffer mit der gleichen Farbtiefe, die ich über ASL zurück bekomme. Es ist übrigens egal wie hoch die Auflösung ist, der Speed bleibt gleich!. Ob ich jetzt ein Screen mit 320*200*8 oder z.b. 1024*768*24 aufmach, die Geschwindigkeit ist die gleiche. Ok, die Zeichenfläche ist ja auch mit 640*512 die gleiche, aber die Farbtiefe unterschiedlich.

Und, ich hab auch mal den Buffer ausgeschaltet und direkt mit Move() und Draw() in den Screen geschrieben. Dann wird etwas zwar etwas schneller, aber das wars auch schon. An AGA komme ich so gerade so dran, aber nicht ganz...

Hm, wie schnell wäre das ganze unter C...

EDIT:
Bei ASL hab ich noch ASLSM_DoDepth angegeben, damit ich auch die Farbtiefe verändern kann um halt so sehn was passiert. Da ist es egal ob 256 oder 2... hm, wo issen da nur der Wurm drin... ?(

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

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

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 22:39 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Ralf27:
Die Veränderungen beim Timer bringen mir ja nur die FPS, also in meinem Fall 8fps.

Mein Code hat ein paar mehr Veränderungen als nur den Timer...
Und irgendwie müsstest Du doch mindestens zwei fps-Zahlen ermitteln, einmal für AGA und einmal für RTG, oder? Besser noch mit verschiedenen Screentiefen, 8, 16, 32 ...
Zitat:
Ich hab jetzt die Farbtiefe über ASL gelöst, bzw. öffne ich jetzt denn Screen und den Buffer mit der gleichen Farbtiefe, die ich über ASL zurück bekomme.
Guck mal, mein Beispiel gibt beim Screen öffnen gar keine Tiefe an und verwendet die Tiefe vom Screen bei der Buffer-BitMap...
Zitat:
Es ist übrigens egal wie hoch die Auflösung ist, der Speed bleibt gleich!. Ob ich jetzt ein Screen mit 320*200*8 oder z.b. 1024*768*24 aufmach, die Geschwindigkeit ist die gleiche. Ok, die Zeichenfläche ist ja auch mit 640*512 die gleiche, aber die Farbtiefe unterschiedlich.
Tja, bei mir macht's einen Unterschied, aber nicht so viel wie der Unterschied zwischen AGA und RTG.
Zitat:
Hm, wie schnell wäre das ganze unter C...
Bestimmt schneller, aber das war bislang gar nicht die Frage...
Du kannst mit Sicherheit auch den Basic-Code noch optimieren.

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 22:46 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von Holger:
Mein Code hat ein paar mehr Veränderungen als nur den Timer...
Und irgendwie müsstest Du doch mindestens zwei fps-Zahlen ermitteln, einmal für AGA und einmal für RTG, oder? Besser noch mit verschiedenen Screentiefen, 8, 16, 32 ...

So ist der Speed gleich, bei beidem 8fps. Also AGA und RTG. Wobei RTG etwas langsamer ist, was ich ja bei der Rundung jetzt nicht mehr seh. Es ist bei RTG egal was für eine Farbtiefe ich habe (8,15,16,24). Die extremen Auflösungen (1600*1200*24) mal ungetestet. :)
Zitat:
Guck mal, mein Beispiel gibt beim Screen öffnen gar keine Tiefe an und verwendet die Tiefe vom Screen bei der Buffer-BitMap...
Ja, das hab ich gesehn. Ich hab auch schon die Tiefen direkt angegeben, z.b. 8 bit bei beidem. Das Ergebniss ist leider das gleiche.
Zitat:
Hm, wie schnell wäre das ganze unter C...
Bestimmt schneller, aber das war bislang gar nicht die Frage...
Du kannst mit Sicherheit auch den Basic-Code noch optimieren.
[/quote]
Ja, da gibt es noch Möglichkeiten die ich auch noch ergreifen möchte. Nur eben das die Grafikausgabe auf der Grafikkarte etwas langsamer ist als mit AGA macht mich eben etwas stutzig. Wie schon geschrieben ist es nicht viel, aber dennoch. Eigentlich sollte es doch schneller laufen (ok, ist wieder nur eine Vermutung von mir :D )
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 23:14 Uhr

NoImag
Posts: 1050
Nutzer
Zitat:
Original von Ralf27:
Aus reiner Neugierde: Wo steht das eigentlich, das man das nicht mehr machen darf? Wie schon geschrieben, meine ganzen Handbücher sind OS1.2, bzw. die neuesten OS1.3 ...


Einiges ist bereits ab 2.0 nicht mehr erlaubt. Dies findest Du in den RKRMs. Alle Änderungen für 3.x findest Du im NDUK 3.1. Eine komplette Zusammenstellung befindet sich auf der Amiga Developer CD-ROM. Natürlich ist alles auf englisch. Die Mühe alles zu Übersetzen hat sich irgendwann niemand mehr gemacht.

Tschüß


[ - Antworten - Zitieren - Direktlink - ]

21.02.2007, 11:27 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Mess doch mal wieviel Zeit du bei den Zeichenoperationen verbrauchst, und wieviel beim Blitten.
Die Graka sollte um Welten schneller sein als AGA.
Oder nehm mal den Code zum zeichnen raus, und messe nur das Double Buffering. Eine Graka sollte da mindestens auf 100FPS oder mehr kommen.
Ich würde auch, so wie ich weiter oben gepostet habe, einen Layer anlegen, damit du nicht ins Nirvana malst. Evtl. bringt das einen Slow-Down.
Auch das DISPALYABLE Flag würde ich gesetzt lassen.


--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

22.02.2007, 20:31 Uhr

Ralf27
Posts: 2779
Nutzer
So, ich hab jetzt mal ein paar Tests gemacht:

Das reine Berechnen ohne Ausgabe dauert pro Bild 0,0218 Sekunden, also ca. 45 Frames kann ich pro Sekunde berechnen ohne eine Ausgabe zu machen (also auch nichts in denn Puffer schreiben sondern nur die koordinaten für Move() und Draw() berechnen).

Die reine Bufferzeiten ohne Zeichen, aber mit(!) SetRast() bringen mich auf einer Grafikkarte auf 128fps, auf AGA auf 43. Also ohne(!) etwas zu zeichnen, sondern nur Buffer bei jedem Frame mit SetRast() säubern und dann mit BltBitMapRastPort swappen. Ohne SetRast() komme ich bei AGA auf 66 und die Zeit auf der Grafikkarte bleibt bei 128fps.


Also, es liegt wohl am zeichnen...
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

22.02.2007, 20:46 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Also die Grafikkarte sollte beim Zeichnen viel schneller als AGA sein. Das siehtst du schon daran, dass SetRast kaum was ausmacht auf der Graka.
Teste doch mal, wie lange Draw braucht bei dir.
Zeichne einfach 100000 Linien und gebe die Zeit aus. Oder messe das mit SysSpeed.

--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

22.02.2007, 21:12 Uhr

Ralf27
Posts: 2779
Nutzer
Ok, für 100.000 Linien mit MB:
AGA=4,656 Sec
RTG=1,226 Sec

Hm, also müßte doch auf RTG schneller laufen! Was ist das dann?!?
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

22.02.2007, 22:54 Uhr

Ralf27
Posts: 2779
Nutzer
Hm, ist es möglich das mir da gar MaxonBasic irgendwie ein Strich durch die Rechnung macht? Wäre das möglich?
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

23.02.2007, 10:50 Uhr

whose
Posts: 2156
Nutzer
@Ralf27:

Rein prinzipiell ist das vorstellbar. Im Moment habe ich aber keine Ahnung, wo genau Dir MB Schwierigkeiten machen könnte. Zumindest wissen wir jetzt, daß es nicht nur am Format der Offscreen-Bitmap liegt.

Da wirst Du u.U. noch ein wenig experimentieren müssen, um die Ursache einzukreisen.

Grüße

--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233

[ - Antworten - Zitieren - Direktlink - ]


1 -2- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > AGA<->CyberGraphX: Buffer [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.