Seite 1 von 1

Software Rasterizer

Verfasst: 30.01.2012 18:03
von Hellhound_66
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.

Re: Software Rasterizer

Verfasst: 30.01.2012 21:58
von c4s
Hm, also bei mir sieht das ganze so aus:
Bild
:|

Re: Software Rasterizer

Verfasst: 30.01.2012 22:13
von STARGÅTE
Wäre schön wenn ich überhaupt was sehen könnte, ich bekomme mit Debugger eine IMA:

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
    ; [..]
ohne sieht es so aus:
Bild

Re: Software Rasterizer

Verfasst: 30.01.2012 22:48
von Hellhound_66
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

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
sollte es mit der Änderung (ich kann es hier nicht testen, sorry)

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
funktionieren.

Re: Software Rasterizer

Verfasst: 31.01.2012 10:02
von DarkDragon
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.