Hallo Besucher, der Thread wurde 1,7k mal aufgerufen und enthält 4 Antworten

letzter Beitrag von Tale-X am

Affines Texture Mapping in ... verschiedenen Sprachen

  • Moin moin!


    Hier setze ich das Thema aus dem Thread Affine Texture Mapping in BASIC fort.


    Erste Fassung ist die Umsetzung in GPascal (Compiler der P-Code erzeugt und zur Ausführung eine Runtime benötigt) - einmal mit Plotfunktion und einmal mit dem POKE/PEEK-Pendant zur Basicvariante. Mit dem Plotbefehl braucht das Programm vom Start bis Zeichenende 1 Minute und 15 Sekunden. Mit POKE/PEEK-Pendant 1 Minute und 35 Sekunden. Die Schritte sind dabei dieselben wie im Basic-Original, d. h. zuerst wird das Bitmap "entpackt" und dann gezeichnet.


    Nächste Fassung wird wohl C sein - also ein Compiler, der reine Maschinensprache erzeugt. Bin schon gespannt...

  • Ich hab nochmal das Programm überarbeitet und bin jetzt bei gut 56 Sekunden von Start bis fertiges Bild. Dazu hab ich das Bitmap jetzt nach dem Entpacken so wie beim Basicprogramm abgelegt - pro Pixel ein Byte (vorher 4 Pixel/Byte). Dadurch kann ich das Unterprogramm zum Abrufen der Bitmapdaten beim Zeichnen auflösen und direkt in den Plot-Befehl einbinden. Und das spart Zeit.


    Weitere notwendige Änderungen: die Pixeldaten werden nicht mehr in ein Array abgelegt, weil es mit 4k Größe nicht mehr auf den Stack passt. Stattdessen liegt es jetzt ab $4000 im Speicher, was zumindest während des Testens etwas problematisch ist, weil G-Pascal an der Stelle den Quelltext ablegt (aber sonst gibt es da keinen geeigneteren freien 4k-Blöcke). Aber den Quelltext braucht man ja nicht mehr, wenn das Programm fertig kompiliert ist ;)

  • Und weiter geht's.... anbei die fertig kompilierte C-Fassung auf Basis der GPascal-Fassung. Kompiliert ist es mit CC65, den GCC6502 hab ich unter Xubuntu nicht erstellt bekommen. Die Geschwindigkeit ist beeindruckend: in gut 15 Sekunden ist der Bildschirm gelöscht und die Grafik gezeichnet.


    Der Quelltext kommt später... der sieht noch ziemlich übel aus...

  • Cool! Hast Du memset() zum Löschen der Grafik benutzt? Das kommt mir recht langsam vor...

  • :schande: Oha, übelster Tunnelblick meinerseits. Das kommt davon, wenn man 1:1 überträgt... jetzt ist es mit memset. Dauert jetzt nur noch 12 Sekunden...


    Das geniale an C ist ja, dass man im Internet sich bei den Leuten aus der embedded-Ecke bedienen kann :)