![]() |
DEUTSCHE VERSION |
|
![]() |
Links | | | Forums | | | Comments | | | Report news |
![]() |
Chat | | | Polls | | | Newsticker | | | Archive |
![]() |
amiga-news.de Forum > Programmierung > Transverspeed PPC603e -> BVision | [ - Search - New posts - Register - Login - ] |
1 -2- 3 4 | [ - Post reply - ] |
2005-04-21, 01:42 h whose Posts: 2156 User |
Zitat: Naja, das stimmt schon, und müßte den Leuten auch einsichtig sein, sobald die sich in der Materie etwas besser auskennen. Allerdings gings hier hauptsächlich um Amiga und MaxonBasic, da kann man dieses Thema ruhigen Gewissens etwas vernachlässigen ![]() Zitat: Siehe oben. In MaxonBasic dürfte parallel ausgeführte Konvertierung ein wenig kompliziert werden ![]() ![]() Grüße -- --- ![]() ![]() [ - Answer - Quote - Direct link - ] |
2005-04-21, 02:07 h whose Posts: 2156 User |
Zitat: Stimmt schon, aber was ist da unkomplizierter? Sicher kann man auch die friend BitMap-Option verwenden, aber das Pixelformat überprüfen muß man eh, wenn man nicht nur einen GraKa-Typ unterstützen will. Wenn Ralf dann sowieso schon "weiß", welches Format die Bitmap haben muß, kann er das doch auch direkt statt via friend BitMap angeben. Der Effekt ist der Gleiche. Die Menge an Funktionsaufrufen bleibt gleich und sogar die Funktionsaufrufe selbst sind die gleichen. Nur die Parameter und der Programmfluß sind etwas anders. Dafür hat er alles Notwendige in einer Funktion, die das in einem Abwasch erledigt und nur noch das Pixelformat als Rückgabe-Wert liefert. Den kann er dann für die Konvertierung nutzen, falls nötig. Normalerweise würde ich den von Dir genannten Weg auch bevorzugen, weil man dabei das Pixelformat als Blackbox betrachten kann. In diesem Fall muß Ralf aber doch genau erfahren, welches Pixelformat für die Konvertierung benötigt wird, da bringt das Blackbox-Konzept wenig. Ganz abgesehen davon, daß er in MaxonBasic programmiert ![]() @Ralf: Tschuldige, daß das Ganze hier etwas in C-Sprachkonventionen ausartet, aber AmigaOS hat C halt "lieb" ![]() Grüße -- --- ![]() ![]() [ - Answer - Quote - Direct link - ] |
2005-04-21, 09:44 h Ralf27 Posts: 2779 User |
Zitat: Das macht nichts. ![]() ![]() Z.b. wird da auch hin und wieder ein HOOK (wieso denk ich da an Peter Pan? ![]() ![]() Ich bin halt auf AmigaBasic, OS1.2-Ebene und wurde vor kurzem auf eine Zeitreise Richtung Zukunft(OS3.1) gegangen und versteh halt net alles. ![]() -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2005-04-21, 10:10 h NoImag Posts: 1050 User |
Zitat: Das hat nur etwas mit systemnaher Programmierung zu tun und nichts mit BASIC oder C. In dem speziellen Fall "Pixelformat" ist es sogar hardwarenahe Programmierung. Das Pixelformat braucht dich auch in C normalerweise nicht zu interessieren. Du hast dir einfach das "falsche" Projekt ausgesucht. ![]() Tschüß, [ - Answer - Quote - Direct link - ] |
2005-04-21, 10:21 h MaikG Posts: 5172 User |
@ Ralf ist ein Standartfenster, speichert den Inhalt falls es überlappt wird. WINDOW 1,"****",(0,0)-(617,240+CVW%) Gibt auch mehrere davon im Programm. [ - Answer - Quote - Direct link - ] |
2005-04-21, 14:53 h whose Posts: 2156 User |
Zitat: Naja, er denkt da wohl auch (genau wie ich ![]() ![]() Grüße -- --- ![]() ![]() [ - Answer - Quote - Direct link - ] |
2005-04-21, 22:35 h Ralf27 Posts: 2779 User |
Ok, also mal sehn. Wie geh ich jetzt am besten vor: 1. prüfen ob BGR-Screen möglich ist und wenn ja, diesen auch benutzen. 2. Wenn ausgewählter Screen kein BGR-Screen ist, dann Daten konvertieren. 3. Daten im Feld (AllocBitmap) ablegen 4. Mit Clipblit kopieren Kommt das so etwa hin? PS: 5. Speed testen. ![]() ![]() Punkt 1 macht mir da noch etwas Kopfzerbrechen. Das ganze kann ich wohl mit dem ASL-Request nicht lösen. -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2005-04-21, 22:52 h whose Posts: 2156 User |
Zitat: Laß den Punkt 1 einfach weg, der ist mehr als flüssiger ![]() Grüße -- --- ![]() ![]() [ - Answer - Quote - Direct link - ] |
2005-04-21, 23:12 h Ralf27 Posts: 2779 User |
Flüssiger? Ich will Speed! ![]() Wie kann ich eigentlich Prüfen welchen Farbformate möglich sind? -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2005-04-22, 03:16 h whose Posts: 2156 User |
Zitat: Mehr als flüssiger. Überflüssig ![]() ![]() Zitat: Meines Wissens nach gibts dafür keine spezielle Funktion. Eine (theoretische) Möglichkeit wäre, dem Screenrequester der Reihe nach alle Pixelformate als Filterkriterium mitzugeben und die sich ergebenden Listen auszulesen. Das wäre aber alles andere als elegant ![]() Kümmer Dich nicht so sehr darum, was Du alles vor der Konvertierung in Erfahrung bringen kannst, das ist unnötiger Aufwand. Die Ermittlung des Pixelformats ist keine große Sache (GetCybBitmapAttr()) und Konvertieren bleibt Dir, wenn die GraKa nicht mitspielt, sowieso nicht erspart ![]() Grüße -- --- ![]() ![]() [ Dieser Beitrag wurde von whose am 22.04.2005 editiert. ] [ - Answer - Quote - Direct link - ] |
2005-04-22, 11:09 h DariusBrewka Posts: 899 [Banned user] |
Ralf, lass dein ganzen krempel einfach weg und überlege dir wie du intern deine Daten behandeln wirst, es bringt nichts die Daten irgendwie zu konvertieren und dann immer wenn man etwas ändern will, die Algorithmen die das erledigen auf die verschiedenen Formate umzuschreiben. Der Amiga ist so effizient, weil es für viele Probleme schon lösungen gibt und die liegen in Libraies vor, lass dein Tool einfach schnell sein und da kannst du auch kompromisse eingehen. Nutze die guigfx.library oder beschränke dein Tool darauf dann halt nicht überall laufen lassen zu müssen. [ - Answer - Quote - Direct link - ] |
2005-04-22, 11:23 h whose Posts: 2156 User |
Zitat: Hm, Du hast aber schon gelesen, worum es Ralf geht, oder? guigfx und render.library kann er sich da genauso sparen, da CyberGraphX bereits die entsprechende Konvertierung vornimmt, wenn nötig. Da das aber während des Transfers geschieht (genau wie bei der guigfx/render.library), ist die Darstellung etwas langsam. Er versucht, ein 24Bit-Bild _möglichst schnell_ auf den 24Bit-Screen zu bekommen. Was sagt uns das? 24Bit = RGB oder BGR oder... (je nach GraKa). Liegen die Daten nicht im passenden Pixelformat für die GraKa vor, ist Konvertierung des Pixelformats fällig. Allerdings nur in der Reihenfolge der Bytes des 24Bit-Wertes. Da braucht er keinen Riesen-Aufwand an Konvertierung zu treiben sondern muß nur dafür sorgen, daß die einzelnen Bytes in der richtigen Reihenfolge im Speicher landen. Das kann er bequem und schnell während des Ladens erledigen und muß dafür nicht unbedingt auf externe Libraries zurückgreifen. Der darauf folgende Transfer zur GraKa ist intern dann nur noch ein simples MemCopy() und das ist die schnellste Lösung, die noch systemkonform ist. Sobald er allerdings versucht, die Bilder in andere Farbtiefen umzurechnen, würde ich ihm auch guigfx empfehlen. Aber darum gehts ihm vorerst ja nicht. Grüße -- --- ![]() ![]() [ Dieser Beitrag wurde von whose am 22.04.2005 editiert. ] [ - Answer - Quote - Direct link - ] |
2005-04-22, 13:23 h DariusBrewka Posts: 899 [Banned user] |
Zitat: Natürlich habe ich dass, nur macht es sich IMO zu viele gedanken um Speed, wozu?. Ralf will ein speziellen ImageViewer programmieren, welcher übergrosse Images anzeigen kann unter Umgehung der Datatypes. Es wird Ralf nicht einfach gelingen dieses auf mehr als einige Formate auszudehnen, AFAIK geht's ihm um BMPs, welche im BGR Format vorliegen. Sollte Ralf darauf Wert legen, diese Images auch auf Fremden Screens darzustellen, bleibt ihm nichts anderes übrig, sich um die ganzen Konvertierungen&Co zu kümmern. Will er einen eigenen Screen, ist das Alles viel einfacher, er kann einen CGX Screen in dem gewünschen Format anfordern und über die CGX Funktionen die Adresse des Bildschirmspeichers besorgen und direkt das Bild dahin entpacken ganz ohne Konvertierungen. Ich habe die gleichen Probleme auch vor kurzem gehabt und habe für mich die einzig vorstellbare Lösung gefunden. Speed steht an zweiter stelle, die Einfachheit sollte vorrang haben, erst wenn Alles so geht wie es soll, kann man sich über ersteres gedanken machen. [ - Answer - Quote - Direct link - ] |
2005-04-22, 13:36 h Ralf27 Posts: 2779 User |
Zitat: Die Konvertierung übernimmt CybergraphX wärend des kopierend auf die Grafikkarte. Und da ist es egal was für ein Format die Grafikkarte benutzt. Ich muß nur dafür sorgen das ich die Daten im RGB-Format bereit stelle. Es ist sogar so das z.b. die Daten auch auf der Workbench ausgeben und erst vor kurzem gemerkt habe, das diese im BGR-Format läuft und nicht im RGB, wie ich erst angenommen (aber nicht kontrolliert) habe. Denn es ist eigentlich egal was für ein Format der Screen hat, CybergraphX konvertiert es von sich aus beim kopieren. Insofern gibt es keine Probleme. Aber ich möchte dennoch die maximale Geschwindigkeit ausnutzen und die Daten so übertragen, das es möglichst schnell geht. Zur Zeit kann ich 8MB pro Sekunde zur Grafikarte im 24Bit-Mode übertragen, aber es geht bestimmt noch schneller, denn so brauch ich halt für ein 1600*1200*24-Screen fast 1 Sekunde zum Aufbau(im ungünstigen Fall, wenn ARGB oder ein anderer 32Bit-Mode läuft=7,8MB) Das ist eigentlich alles. -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2005-04-22, 15:19 h thomas Posts: 7721 User |
Ich denke, dein Problem ist Basic. Z.B. ist PicShow in der Lage, ein Bild der Größe 1024*768*24 in Echtzeit mit einem anderen der gleichen Größe zu mischen und mit WritePixelArray auf die Grafikkarte zu übertragen, die in 16bitPC läuft (also mit 24bit RGB ->16bit BGR Konvertierung). Nach deiner Rechnung müßten das 1,5*50, also 75 MB/Sekunde sein. Da dein Flaschenhals offenbar die Programmiersprache ist, mußt du wohl für alle rechenintensiven Prozesse eine fertige Funktion finden. Ich würde zunächst vorschlagen, anstatt einen 24bit RGB-Puffer für WritePixelArray zu benutzen, den du manuell füllen mußt, lieber eine Bitmap im BGR-Format zu nehmen. Diese kannst du mit LockBitMapTags sperren, um einen Pointer auf die Rohdaten zu bekommen und dann mit den BGR-Daten füllen, ohne Konvertierung. LockBitMapTags ist allerdings nicht ganz ungefährlich. Das kann schnell zu Deadlocks führen, je nachdem wie lange man die Bitmap sperrt und was man währenddessen macht. Eine andere Möglichkeit wäre, die BMP-Datei komplett nach RGB zu konvertieren und die Roh-RGB-Daten in eine temporäre Datei zu schreiben. Von dort könntest du sie dann ohne Konvertierung für einen Anzeiger laden. Die beste Möglichkeit ist natürlich immernoch, das Programm komplett in C zu schreiben. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Answer - Quote - Direct link - ] |
2005-04-22, 15:30 h whose Posts: 2156 User |
Und genau deswegen, meine ich, ist es am sinnvollsten, beim Laden der Bilddaten bereits die passende Byte-Reihenfolge im Speicher abzulegen. Macht man das so, daß ein Byte geladen wird, überprüft, an welche Stelle im Speicher es stehen muß und es dann auch einzeln zur GraKa überträgt, wirds gnadenlos langsam (min. 1 kompletter Zorro-Zyklus für 1 Byte. Aua! ![]() Die "Konvertierung" in die jeweils passende Byte-Reihenfolge ist wirklich nicht schwer. Als kleiner Denkanstoß hier mal ein kleiner (C- ![]() for(i = 0; i < screen->numcregs; i++) { SetRGB32(screen->ViewPort, i, screen->cregs[i * 3 + 0], screen->cregs[i * 3 + 1], screen->cregs[i * 3 + 2]); } Wie man sieht, steht damit die resultierende Reihenfolge der Bytes im Speicher (hier: dem _Array_ ![]() Wenn Du die Additionen in ihrer Abarbeitungs-Reihenfolge umstellst, kannst Du dadurch die resultierende Byte-Reihenfolge im Speicher beliebig anpassen. Angenommen, die Daten kommen in BGR-Reihenfolge von der Festplatte rein und man benötigt sie aber in der RGB-Reihenfolge, dann stünde im obigen Beispiel die Addition mit 2 an erster Stelle (der B-Wert kommt ja als erstes rein, muß aber im Speicher an "letzter" Stelle des 24Bit-Wertes stehen, nämlich Index + 2 Bytes), die Addition mit 0 an letzter (da der R-Wert als letzter geladen wird, aber an "erster" Stelle des 24Bit-Wertes stehen muß, Index + 0 Bytes). Voilá, die Daten liegen im RGB-Pixelformat im Speicher (der Bitmap). Simpel, oder? ![]() Genauso für das (absolut exotische) GBR-Format. Addition mit 1 an erster Stelle, Addition mit 0 an zweiter Stelle und zuletzt Addition mit 2. Bumms, die Daten liegen in GBR-Reihenfolge im Speicher. Wenn Du das erledigt hast, einfach die Bitmap in den Screen blitten, fertig. Noch ein bißchen mehr Geschwindigkeit würdest Du mit Double Buffering beim Laden und Konvertieren erreichen, aber das ist schon ziemlich komplex. Im oben beschriebenen Fall sorgt das Filesystem schon für eine gewisse Pufferung, so daß die Geschwindigkeit beim Laden nicht allzu sehr leidet. Bedenke aber, daß das _nicht_ mehr so simpel funktioniert, wenn Du die Bilddaten in einer anderen Farbtiefe darstellen willst. In dem Fall solltest Du Dir wirklich Gedanken machen, die guigfx.library o.Ä. zu verwenden. Farbraumkonvertierung ist nicht mehr so trivial ![]() Genauso problematisch ist diese Methode, wenn Du das auf andere Systeme portieren wolltest. PCs zum Beispiel arbeiten mit Little Endianess, bei denen sind die Bytes im Speicher jeweils vertauscht (daher stammt übrigens auch die BGR-Reihenfolge bei Deiner GraKa ![]() Da Du aber mit MaxonBasic arbeitest, gehe ich einfach mal davon aus, daß Dir eine Portierung auf z.B. Linux nicht unbedingt vorschwebt ![]() Grüße -- --- ![]() ![]() [ - Answer - Quote - Direct link - ] |
2005-04-22, 15:57 h whose Posts: 2156 User |
Zitat: Weil ihm der Sinn danach steht? Genauso könnte man fragen, wozu er einen Image-Viewer baut, wo es doch schon so viele gibt... Zitat: Genau. Und vorerst hat er keinerlei andere Absicht geäußert. Machts doch nicht immer so kompliziert für die, die noch lernen wollen, wie der Kram intern funktioniert. Zitat: Und nichts anderes habe ich ihm gesagt. Er muß sich auch um die Konvertierung kümmern, wenn er diese Aufgabe nicht den CGFX-Funktionen überlassen will, die das ja erst während des Transfers erledigen (wenn auch verflucht schnell). Nur, wenn die Daten bereits passend im Speicher vorliegen, kann er sich die Konvertierungen (auch die _implizite_ durch WritePixelArray()) beim _Transfer_ sparen. Zitat: Du weißt aber schon, daß das beim Permedia2 von vornherein zum Scheitern verurteilt ist, wenn er gern einen RGB-Screen öffnen möchte? Der Chip läßt RGB-Reihenfolge bei 24-Bit (bzw. ARGB bei 32 Bit, Permedia2 bietet gar kein 24Bit ohne Alpha-Channel) nämlich ganz einfach nicht zu. Was glaubst Du, wofür CGFX/P96-WritePixelArray() _implizit_ in die _native_ Bytereihenfolge konvertiert, falls die Bitmap nicht im _passenden_ Pixelformat vorliegt? Du kannst die Pixelformate, die CGFX/P96 unterstützt, beliebig für eine (kompatible) Bitmap wählen, die werden dann beim Transfer auf die GraKa via WritePixelArray() implizit konvertiert. Zitat: *hüstel* Genau an der Stelle ist Ralf doch jetzt ![]() Grüße -- --- ![]() ![]() [ - Answer - Quote - Direct link - ] |
2005-04-22, 16:21 h Ralf27 Posts: 2779 User |
Zitat:Ich glaube, du hast mich da nicht richtig verstanden: Ich benutze in Basic einen einzigen(!!!) Funktionsaufruf und zwar WritePixelArray und genau die Dauer dieser Funktion hab ich angegeben. Also, nur einen einzigen Funktionsaufruf und der ist nunmal ca. 8MB pro Sek schnell. Ich könnte das vermutlich auch in AmigaBasic aufrufen, es wäre wohl genau so schnell. Welche Programmiersprache es ist, ist doch hier eigentlich vollkommend egal. Das einzige was hier MBasic macht, ist eine(!!!)Funktion aufzurufen die CGX bietet, nicht mehr und nicht weniger. Da aber halt die Funktion hier eine Konvertierung beim übertragen vollbringt und dies wohl nicht unbedingt sein muß wenn man halt die Daten gleich richtig ablegt, dann müßte es doch wohl schneller gehn. Das ist eigentlich alles. Zitat:Ja, dies wurde mir mehrfach presentiert und ich werde dies wohl auch benutzen. Wegen LockBitmapTags: Ich werde wohl nur ein einziges Mal da reinschreiben und dann wars das. Der Rest sind dann nur noch "Blits". Zitat:Die Konvertierung in RGB läuft schon bei mir beim Laden und das geht ja auch rech schnell. So mach ich das ja auch wenn ich die Datei nicht ganz laden kann, dann werden halt nur Teile geladen und gleich konvertiert in RGB. Aber der Grund des ganzen: Wieso alles mehrfach konvertieren wenn es nicht notwenig ist. Es ist da egal was für eine Programmiersprache. Es kostet unnötig Rechenzeit. Oder? ![]() Zitat:Nenn mir bitte ein Grund? Rechengeschwindigkeit kann es nicht sein, denn das übernehmen die CGX-Routinen für mich. Hier ging es mehr darum, das man überhaupt nicht konvertiert. Zitat: Achja, ich programmiere das ganze nur aus Fun! Das heißt, es soll mir Spaß machen und macht mir Spaß. Wenn es später vielleicht 1,2 Leute benutzen, ok. Aber in erster Linie ist das ganze für mich halt. Und genauer hier gerade bei diesem Punkt hier (RGB-BGR) wollte ich halt hier im Forum genauer wissen wie man hier am besten vorgeht wenn man denn maximalen Speed rausholen möchte und die Konvertierungen sparen möchte, die laufend gemacht werden müssen. Und in der aktuellen Lösung entfällt eh der Bärenanteil der Arbeit auf die CGX-Routinen. Und: Ich möchte auch was dazu lernen in Sachen CGX, was doch nicht nur mit C funktioniert, sondern auch mit anderen Programmiersprachen. ![]() [ Dieser Beitrag wurde von Ralf27 am 22.04.2005 editiert. ] [ - Answer - Quote - Direct link - ] |
2005-04-22, 16:32 h whose Posts: 2156 User |
Zitat: Hmmm, ich komme hier auf ein reines Speichervolumen von insgesamt 6291456 Bytes pro fertigem Bild ((2 x 24Bit + 16Bit)*Pixelzahl, ohne Konvertierungsschritte). Also gut 6MB. Mal 50 wären das ca. 300 MB/sec. reines Transfervolumen (im Speicher hin und her + vom Speicher über den Bus zur GraKa, immer noch ohne Konvertierungsschritte). Meinst Du nicht, daß das ein bißchen arg hoch gegriffen ist selbst für einen Amiga mit CSPPC? Noch dazu, wo das RTG-System nicht PPC-nativ ist? Amithlon, AOne und Peg mögen das schaffen (dank nativer RTG-Systeme bzw. enorm schneller 68K-Emu bei Amithlon und dessen Vorteil der ggf. vorhandenen Busmaster-Fähigkeit der verwendeten GraKa), aber selbst das bezweifle ich ein wenig. Ich traue dem BlizzardPPC-System ca. 40MB/sec. über den Mini-PCI zu, wenn der 060 im Einsatz ist, allerdings habe ich nie verlässliche Aussagen dazu gehört. Grüße -- --- ![]() ![]() [ - Answer - Quote - Direct link - ] |
2005-04-22, 16:44 h Ralf27 Posts: 2779 User |
Zitat: Weiter oben dazu hier im Thread hab ich einige Daten vom http://www.amigaspeed.de.vu gefunden und diese einmal umgerechnet: 24Bit= ca. 8MB pro Sek (zur Zeit mit meinem System, noch aber mit einem kleinen Denkfehler (24Bit=ARGB=32Bit dann ca. 10MB pro Sek) ) 16Bit= ca. 35MB pro Sek(mit 16Bit, noch nicht getestet) Ich denke auch das 40MB das maximale wäre, bzw. ohne Konvertierung. Vielleicht auch etwas mehr. Und genau das interesiert mich, das möchte ich herrausfinden. ![]() ![]() PS: PicShow hab ich auch hier. Also so schnell war es bei mir auch nicht, das es in Echtzeit in 1024*768 sowas bringt. Aber ich hab auch kein HighEnd-Amiga. PicShow gefällt mir aber dennoch. ![]() Wie schnell kann der 060er Daten transferieren? 45MB pro Sek bei der 603e? [ Dieser Beitrag wurde von Ralf27 am 22.04.2005 editiert. ] [ - Answer - Quote - Direct link - ] |
2005-04-22, 16:56 h whose Posts: 2156 User |
Zitat: ![]() ![]() Grüße -- --- ![]() ![]() P.S.: Deine Überlegungen zu 24Bit stimmen schon. CGFX/P96 unterstützen in den 68K-Versionen keinen Alpha-Channel, daher werden die Alpha-Channel-Bytes beim Transfer von 24Bit-Pixeln quasi übersprungen (beim Transfer wird implizit ein Byte hinzugefügt um ein komplettes Langwort übetragen zu können). Mit ein Grund dafür, weshalb WritePixelArray() bei 24Bit ziemlich langsam ist. Bei 15/16Bit ists kein Thema, weil da der ggf. vorhandene "Alpha-Channel" (ist eigentlich mehr ne Art Maske, weniger ein echter Alpha-Channel) nur ein Bit in zwei Bytes darstellt. Man beläßt es auf NULL und überträgt einfach die beiden Bytes, implizite Konvertierung in ein Langwort ist da nicht notwendig bzw. kann man zwei Pixel auf einmal in einem Langwort übertragen. Daher auch der beachtliche Geschwindigkeitszuwachs. [ Dieser Beitrag wurde von whose am 22.04.2005 editiert. ] [ - Answer - Quote - Direct link - ] |
2005-04-22, 21:43 h Ralf27 Posts: 2779 User |
Ich finde das recht interesant, wenn man sich näher mit dem Interna des ganzen beschäftigt. Bzw. ist es wirklich so, das der 16Bit-Mode 6mal(!!!) schneller läuft als der 24Bit-Mode. Das ist schon einiges. Ich denk mir mal, wenn man sich nicht näher damit beschäftigen würde, dann würde das bestimmt nicht auffallen. Ich hätte z.b. niemals gedacht wie kompliziert die 24Bit-Sache ist, bzw. was da alles "ab geht". Mein Programm läuft ja so wie es ist (v0.6), aber wie schon ganz oben getippt und wenn ich das richtig verstanden habe, kann man da schon noch einiges an Speed rausholen. Wenn ich endlich mal Zeit habe, dann werde ich die Sache mit dem AllocBitmap machen und genau so eine Bitmap aufmachen wie im aktuellen Screen. Und dann halt einfach alles mal testen. PS: Es ist ein Fun-Projekt, wie halt das ganze Hobby mit dem Amiga. -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2005-04-22, 22:34 h thomas Posts: 7721 User |
Zitat: Das war nicht das, was ich meinte. Damit mußt du ja doch die Daten selbst konvertieren, was in Basic das langsame ist. Du sollst vielmehr eine Bitmap anlegen, die das gleiche Format hat wie die BMP-Datei. Dann kannst du die Daten ohne sie zu konvertieren direkt in den Speicher der Bitmap schreiben. Die Bitmap kannst du dann mit BltBitMap() in den Screen schreiben. Dabei übernimmt CGX die komplette Konvertierung. Das dürfte das schnellste sein, was man mit Basic erreichen kann. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Answer - Quote - Direct link - ] |
2005-04-22, 23:22 h whose Posts: 2156 User |
Zitat: Naja, im Endeffekt ist es das, was wir ihm die ganze Zeit schon sagten ![]() Allerdings hast Du übersehen, daß in seinem speziellen Fall dann _gar keine_ Konvertierung nötig wäre, weil sein Screen ja schon im BGR-Format aufgebaut ist (Permedia2 mag halt kein RGB). Sein Problem war einzig, daß er mit WritePixelArray() arbeitete, welches gern RGB-Reihenfolge für die Ausgangsdaten hätte. Dadurch erreichte er nicht das Maximum an Transfer-Geschwindigkeit. Deswegen habe ich ihm empfohlen, die Konvertierung beim Laden selbst vorzunehmen, weil dann der Transfer _ohne_ Konvertierung durch CGFX abläuft. Im Grunde ist es für ihn mehr oder weniger nur ein Lernprojekt, da nützt es ihm nicht viel, wenn man ihn ständig darauf hinweist, daß CGFX bereits Konvertierungen erledigt, wenn nötig. Das müßte er inzwischen verstanden haben ![]() Man lernt nicht dadurch, daß man ein Rad benutzt, seine Interna zu verstehen, sondern eher dadurch, daß man selbst eins baut. Grüße P.S.: Eine Frage habe ich noch. Warum beißt Du Dich so am BASIC fest? Bei manchen Programmen spielt es keine großartige Rolle, ob sie mit nem C-Compiler oder nem BASIC-Compiler gebaut wurden, das Ergebnis ist im Groben das Gleiche und die BASIC-Variante nicht unbedingt langsamer. Als kleines Beispiel für ein "Husarenstück" eines BASIC-Programmierers empfehle ich immer einen Blick auf "AsteroidsTR" von Thilo Köhler. Reines BASIC ![]() -- --- ![]() ![]() [ Dieser Beitrag wurde von whose am 22.04.2005 editiert. ] [ - Answer - Quote - Direct link - ] |
2005-04-23, 08:59 h Ralf27 Posts: 2779 User |
So, heute Abend werd ich dann die Quellcode springen lassen. Alerdings wenn ich das richtig sehe, dann muß dann auch beim Blitten, wenn ich die Daten im BGR-Format im Bitmap haben, auch Konvertiert werden und zwar von BGR auf ABGR. Ok, das macht die Routine. Aber mal sehn was da rauskommt. Achja, wieso ich in BASIC so vernarrt bin: Weil es mir Spaß macht. Hab bis jetzt ein Programm in C geschrieben und bin nie über das "Hello World" herrausgekommen. Hat mir leider auch nicht richtig Spaß gemacht. Der jetzige BMP-Reader in Basic läuft schon recht schnell (v0.6) und ich will halt sehn was da noch drin steckt. Achja, die Konvertierung von BGR auf RGB läuft auch in Basic recht schnell. Also so langsam ist Basic nun auch wieder nicht. ![]() -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2005-04-23, 11:31 h whose Posts: 2156 User |
Zitat: Upps, mit dem P.S.: meinte ich eigentlich mehr Thomas, weil er das Tempo-Problem nur aufs Basic zurückführen wollte ![]() Grüße -- --- ![]() ![]() [ - Answer - Quote - Direct link - ] |
2005-04-23, 16:14 h Ralf27 Posts: 2779 User |
Achso. ![]() Ich bin es halt schon gewöhnt das sowas kommt wie "was, du benutzt noch Basic? wieso denn nicht C?" . ![]() ![]() Achja, mal was anderes: Ich hab ja mal einfach zwei "neue" Darstellungsmöglichkeiten eingebaut: * eHAM8 * uHAM8 Hat diese schonmal jemand getestet? Ich würde dazu gerne mal eure Meinung wissen. PS: Mir ist klar das es in Zeiten von Grafikkarten sowas sinnlos ist, aber egal, es hat mir Spaß gemacht. ![]() -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2005-04-25, 17:08 h Ralf27 Posts: 2779 User |
Ich hab es eben mit dem AllocBitmap versucht, aber leider versteh ich das ganze nicht so richtig. Mein Englischproblem... Ich würde da gerne mal ein Beispiel sehn, bzw. wie man die Daten in die Bitmap bekommt und wie man es kopiert, bzw. denn ganzen Aufbau. In der Theorie hab ich es ja verstanden, aber in der Praxis macht mein System "dicht". PS: Der Bus macht wohl maximal 50MB pro Sek. Das bekommt jedenfalls die GREX 1200 nach dem Datenblatt von der Turbokarte über den Bus in die PCI-Karten. -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2005-04-26, 08:00 h whose Posts: 2156 User |
Zitat: Wenn Du noch bis zum Wochenende Zeit hast (und Thomas mir nicht zuvorkommt, was aber recht wahrscheinlich ist ![]() ![]() Grüße -- --- ![]() ![]() [ - Answer - Quote - Direct link - ] |
2005-04-26, 14:16 h Mad_Dog Posts: 1944 User |
Zitat: Keiner will Dein geliebtes BASIC schlecht reden... Nur leider fragst Du hier immer nach Problemen (wie z.B. Amiga OS API programmierung), die sich in C eben viel einfacher bewältigen lassen, wie in BASIC. Wie ein Vorredner hier schon geschrieben hat (und ich Dir auch schonmal versucht habe zu erklären): Das Hantieren mit Zeigern und Strukturen hat nichts mit der verwendeten Programmiersprache zu tun. Vielmehr haben die Entwickler des AmigaOS Datenstrukturen, wie z.B. verkettete Listen verwendet. Und auf solche Strukturen muß man dann eben zugreifen, wenn man System-API Funktionen verwendet - und zwar unabhängig von der Programmiersprache. Wenn man beispielsweise auf die Komponenten einer Struktur zugreift, kann man das Assembler-Like mit Offsets machen. Einfacher gehts allerdings in C (oder einer anderen geeigneten Programmiersprache) mit Zeigern... -- http://www.norman-interactive.com [ - Answer - Quote - Direct link - ] |
1 -2- 3 4 | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > Transverspeed PPC603e -> BVision | [ - Search - New posts - Register - Login - ] |
![]() |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2025 by amiga-news.de - all rights reserved. |
![]() |