ProgT
2005-02-12, 19:44:31
Hallo zusammen!
Zum Hintergrund meine Frage:
Ich bastle zur Zeit an einer älteren Voxel-Engine von mir rum. Dabei werden Strahlen über eine Heightmap[ein Array aus 8 Bit Höhenwerten] geschossen, um so die Landschaft zu zeichnen. Pro Bildschirmspalte ein Ray, also bei 640x480 sind das 480 Rays.
Im Prinzip ist das das gleiche Verfahren wie bei Outcast.
Zum Problem: :(
Wegen dieser Rays zeichne ich die einzelnen Pixel natürlich von unten nach oben in den Framebuffer, denn der Ray startet bei der Kamera und läuft bis zu einer gewissen Entfernung(da ist dann Nebel).
Jetzt muss ich natürlich bei jedem Pixel den ich zeichne eine Bildschirmzeile übersprigen, dass macht bei 640x480 pro Zeile 640*8 Bytes (4 Byte Farbe und 4 Byte ZBuffer). Das ist aber saulahm. Es liegt scheint wirklich daran zu liegen, dass ich jedes mal so viel Speicher überspringe.
Seit kurzem verwende ich den SSE-Befehl movntq um die Pixel zuschreiben, was viel schneller ist, weil der Cache umgangen wird. Jedenfalls habe ich das so verstanden.
Trotzdem braucht das immer noch viel zu viel Zeit, denn wenn ich nur den Befehl movntq auskommentiere und alle Berechnungen drinlasse, gehen die FPS um bis zu 50(!) Prozent nach oben.
Also an die Experten:
Wie kann ich schneller in den Speicher schreiben?
Thx
Zum Hintergrund meine Frage:
Ich bastle zur Zeit an einer älteren Voxel-Engine von mir rum. Dabei werden Strahlen über eine Heightmap[ein Array aus 8 Bit Höhenwerten] geschossen, um so die Landschaft zu zeichnen. Pro Bildschirmspalte ein Ray, also bei 640x480 sind das 480 Rays.
Im Prinzip ist das das gleiche Verfahren wie bei Outcast.
Zum Problem: :(
Wegen dieser Rays zeichne ich die einzelnen Pixel natürlich von unten nach oben in den Framebuffer, denn der Ray startet bei der Kamera und läuft bis zu einer gewissen Entfernung(da ist dann Nebel).
Jetzt muss ich natürlich bei jedem Pixel den ich zeichne eine Bildschirmzeile übersprigen, dass macht bei 640x480 pro Zeile 640*8 Bytes (4 Byte Farbe und 4 Byte ZBuffer). Das ist aber saulahm. Es liegt scheint wirklich daran zu liegen, dass ich jedes mal so viel Speicher überspringe.
Seit kurzem verwende ich den SSE-Befehl movntq um die Pixel zuschreiben, was viel schneller ist, weil der Cache umgangen wird. Jedenfalls habe ich das so verstanden.
Trotzdem braucht das immer noch viel zu viel Zeit, denn wenn ich nur den Befehl movntq auskommentiere und alle Berechnungen drinlasse, gehen die FPS um bis zu 50(!) Prozent nach oben.
Also an die Experten:
Wie kann ich schneller in den Speicher schreiben?
Thx