Hallo PB-Community.
Ich habe einen Software Rasterizer geschrieben, der Z-Buffering und bilineares Filter unterstützt.
Den Code habe ich in der Development Lounge gepostet. Sollte ich hier wegen Querpostings gegen Nutzungsrichtlinien verstoßen, bitte ich das zu entschuldigen.
Da der Rasterizer Multithreaded ist und auf Sprite-Surfaces schreibt, muss man zwingend "Threadsafe" einschalten, ansonsten wird er abstürzen. Ihr könnt aber auch einfach das Multithreading wieder rausbauen.
Da der Code nicht kommentiert ist, beantworte ich gerne Fragen, die sich aus dem Code heraus ergeben. Man möge mir aber eine längere Antwortzeit nachsehen.
Weitere Infos stehen aber auch im Originalthread.
Software Rasterizer
Re: Software Rasterizer
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Re: Software Rasterizer
Wäre schön wenn ich überhaupt was sehen könnte, ich bekomme mit Debugger eine IMA:
ohne sieht es so aus:
Code: Alles auswählen
Procedure Render(*info.RenderInfo)
Protected *Triangle.Triangle = *info\Triangle
Protected *Texture.TextureRGBA = *info\Texture
Protected transformed.Triangle2D
TransformTo2D(transformed, *Triangle) ; << Hier
; [..]
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
- Beiträge: 2
- Registriert: 30.01.2012 17:54
Re: Software Rasterizer
Danke für das Feedback.
Das Bild von c4s kann ich nicht nachvollziehen . Kann sein, dass sich da noch irgendwo ein IMA versteckt hat. Zumindest aber auf meinem System hier (Win7 64Bit, QuadCore, NVIDIA) läuft es so wie bei Stargate.
Das unterste Bild von Stargate ist schon richtig. Die Quadrate werden absichtlich übereinander und ineinander dargestellt, um das Z-Buffering zu demonstrieren. Clevererweise hätte ich auch eine vernünftigere Ausgabe wählen können. Mit der [1]-Taste kann man das bilineare Filter zuschalten.
Ich gehe davon aus, dass man aufgrund des Threadings keinen Debugger mitlaufen lassen kann. Ich muss zugeben, dass ich das Multithreading noch nachträglich hinzugefügt habe. Vorher lief es auch im Debugger ohne Probleme.
Spaßeshalber könnt ihr ja mal das Multithreading herausmachen.
In der Methode
sollte es mit der Änderung (ich kann es hier nicht testen, sorry)
funktionieren.
Das Bild von c4s kann ich nicht nachvollziehen . Kann sein, dass sich da noch irgendwo ein IMA versteckt hat. Zumindest aber auf meinem System hier (Win7 64Bit, QuadCore, NVIDIA) läuft es so wie bei Stargate.
Das unterste Bild von Stargate ist schon richtig. Die Quadrate werden absichtlich übereinander und ineinander dargestellt, um das Z-Buffering zu demonstrieren. Clevererweise hätte ich auch eine vernünftigere Ausgabe wählen können. Mit der [1]-Taste kann man das bilineare Filter zuschalten.
Ich gehe davon aus, dass man aufgrund des Threadings keinen Debugger mitlaufen lassen kann. Ich muss zugeben, dass ich das Multithreading noch nachträglich hinzugefügt habe. Vorher lief es auch im Debugger ohne Probleme.
Spaßeshalber könnt ihr ja mal das Multithreading herausmachen.
In der Methode
Code: Alles auswählen
Procedure DrawTriangle(*Triangle.Triangle, *Texture.TextureRGBA)
Dim infos.RenderInfo(#THREADS-1)
Protected i.i
For i = 0 To #THREADS - 1
infos(i)\Threads = #THREADS
infos(i)\offset = i
infos(i)\Triangle = *Triangle
infos(i)\Texture = *Texture
infos(i)\ThreadID = CreateThread(@Render(), infos(i))
Next
For i = 0 To #THREADS - 1
WaitThread(infos(i)\ThreadID)
Next
EndProcedure
Code: Alles auswählen
Procedure DrawTriangle(*Triangle.Triangle, *Texture.TextureRGBA)
Dim infos.RenderInfo(#THREADS-1)
Protected i.i
For i = 0 To #THREADS - 1
infos(i)\Threads = #THREADS
infos(i)\offset = i
infos(i)\Triangle = *Triangle
infos(i)\Texture = *Texture
Render(infos(i))
Next
EndProcedure
-
- Beiträge: 6267
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Re: Software Rasterizer
Hallo,
Sieht gut aus, läuft hier auch mit Debugger einwandfrei (Windows 7, 64bit, PB 4.60). Ist nur etwas langsam, aber das stört ja erstmal nicht.
Sieht gut aus, läuft hier auch mit Debugger einwandfrei (Windows 7, 64bit, PB 4.60). Ist nur etwas langsam, aber das stört ja erstmal nicht.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.