Jammer-Thread

Hier kann über allgemeine Themen diskutiert werden, die sonst in kein Forum passen.
Insbesondere über Szene, Games, Kultur, Weltgeschehen, Persönliches, Recht, Hard- und Software.
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Jammer-Thread

Beitrag von CodingCat »

Wie zur Hölle ist das denn passiert? (Und was zur Hölle soll eine virtual init()-Methode? :P)

(Noch mehr zu vermeiden als init()-Methoden sind nur virtuelle init()-Methoden.)
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Jammer-Thread

Beitrag von CodingCat »

Diskussion zu Winkelgenauigkeit und schneller Trigonometrie ausgelagert in [C++] Schnellers sin/cos/tan.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
spobat
Beiträge: 86
Registriert: 13.09.2010, 00:20
Kontaktdaten:

Re: Jammer-Thread

Beitrag von spobat »

@Cat Hab den Code ein paar Monate lang nicht mehr angefasst. Sieht aber so aus, als koennte man das komplett in den ctor verlagern: *smile*
Vermutlich ein ueberbleibsel eines Tests.
RazorX
Establishment
Beiträge: 156
Registriert: 23.12.2010, 14:13
Kontaktdaten:

Re: Jammer-Thread

Beitrag von RazorX »

Bin mal wieder schockiert wie langsam die std Streams in Punkto Parsen sind. Habe für meine Projektarbeit einen .OBJ loader (nicht optimiert natürlich) geschrieben und mir das Sponza Modell ausgesucht.

Plain text:
Debug: ~80s
Release: ~16s

Dann hab ich das ganze mal in ein binäres Zwischenformat gespeichert, sodass ich nur noch dieses Format laden muss anstelle des ganzen parsens.

Binary:
Debug: ~0.8s
Release: ~0.06s

Ich mein ich kann mit meiner Lösung durchaus leben, finde es aber doch enorm heftig wie viel Zeit bei den StringStreams drauf geht.
Benutzeravatar
spobat
Beiträge: 86
Registriert: 13.09.2010, 00:20
Kontaktdaten:

Re: Jammer-Thread

Beitrag von spobat »

Binaere formate sind auch in der Hinsicht besser, dass die Dateigroesser geringer ist. Die Messwerte bei von dir sind allerdings etwas gar extrem, ich glaube du machst was falsch :/. Kannst du zeigen, wie du das machst?
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Jammer-Thread

Beitrag von CodingCat »

RazorX hat geschrieben:Bin mal wieder schockiert wie langsam die std Streams in Punkto Parsen sind. Habe für meine Projektarbeit einen .OBJ loader (nicht optimiert natürlich) geschrieben und mir das Sponza Modell ausgesucht.
[..]
Dann hab ich das ganze mal in ein binäres Zwischenformat gespeichert, sodass ich nur noch dieses Format laden muss anstelle des ganzen parsens.
[..]
Ich mein ich kann mit meiner Lösung durchaus leben, finde es aber doch enorm heftig wie viel Zeit bei den StringStreams drauf geht.
Die Standard-IO-Bibliothek ist zwar in der MSVC-Implementierung tatsächlich alles andere als optimal, aber du schließt hier doch etwas vorschnell.

Ein binäres Format wird IMMER schneller sein, selbst wenn du das gesamte IO optimal hinkriegst. Das liegt schon alleine daran, dass das ganze Parsen von Zahlen und Vergleichen von Strings grundsätzlich ein Vielfaches mehr Aufwand ist, als einfach nur Bytes einzulesen.

Obendrein redest du von stringstreams. Die Standard-Bibliothek ist immerhin so entworfen, dass man direkt aus Dateien genauso wie aus stringstreams lesen kann, das heißt du kannst dir hier schonmal einen gigantischen Batzen Kopiererei und Speicherallokationen sparen.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
RazorX
Establishment
Beiträge: 156
Registriert: 23.12.2010, 14:13
Kontaktdaten:

Re: Jammer-Thread

Beitrag von RazorX »

CodingCat hat geschrieben:Die Standard-IO-Bibliothek ist zwar in der MSVC-Implementierung tatsächlich alles andere als optimal, aber du schließt hier doch etwas vorschnell.

Ein binäres Format wird IMMER schneller sein, selbst wenn du das gesamte IO optimal hinkriegst. Das liegt schon alleine daran, dass das ganze Parsen von Zahlen und Vergleichen von Strings grundsätzlich ein Vielfaches mehr Aufwand ist, als einfach nur Bytes einzulesen.
Das ein binäres Format immer schneller ist, hab ich gar nicht angezweifelt und war gar nicht der Punkt. Ich bin letztlich ja auch nur auf binäres Zwischenformat umgestiegen, da try&error im Debug-Modus nicht mehr durchführbar war bei solchen Ladezeiten.
CodingCat hat geschrieben:Obendrein redest du von stringstreams. Die Standard-Bibliothek ist immerhin so entworfen, dass man direkt aus Dateien genauso wie aus stringstreams lesen kann, das heißt du kannst dir hier schonmal einen gigantischen Batzen Kopiererei und Speicherallokationen sparen.
Ich hatte die StringStreams vorallem der Lesbarkeit des Codes wegen genommen, da so das zeilenorientierte Parsen imho wesentlich überschaubarer wird. Hab es gerade mal auf reines fstream umgeschrieben, wahnsinnig schnell ist es zwar immer noch nicht, aber ein guter Schub von knapp ~30% im Release.

Debug: 65.7814s
Release: 11.6181s
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Jammer-Thread

Beitrag von CodingCat »

Ja, Allokationen und Kopien wiegen auf PCs heutzutage erstaunlich wenig. Um mehr sagen zu können, bräuchte man jetzt aber einen schnelleren OBJ-Parser zum Vergleich. ;) Im Debug hast du natürlich mit der STL dummerweise massig vergleichsweise teure Debug-Zusatzfunktionalität drin.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
dot
Establishment
Beiträge: 1745
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Jammer-Thread

Beitrag von dot »

Wie hast du eigentlich genau festgestellt, dass die Performance der Standard Streams das Problem ist und nicht z.B. eine evtl. suboptimale Verwendung dieser oder etwas ganz anderes? Ich hatte selber mal ähnliche Probleme mit riesigen (~800MB) .obj Files; per Zufall hab ich damals bemerkt, dass das Ding 10x oder sogar mehr schneller lief, wenn in der obj Datei alle v, alle vn, alle vt etc. in Blöcken zusammen standen und nicht durcheinander (oder umgekehrt, kann mich nimmer genau erinnern), vielleicht nützt dir das ja was. Ich hab dann allerdings auch auf ein Binärformat umgestellt, einfach weil auch ein paar Sekunden Wartezeit bei vielen Debug Runs zu einer Ewigkeit werden...
glassbear
Establishment
Beiträge: 324
Registriert: 08.04.2003, 18:09
Alter Benutzername: Enrico_
Echter Name: Enrico
Wohnort: San Diego
Kontaktdaten:

Re: Jammer-Thread

Beitrag von glassbear »

Warum gibt es eigentlich kein einziges vernuenftiges RPG auf Android? Nein, ich will kein Farmville spielen, sondern etwas vernuenftige Haltung unterwegs :evil:
Ein Hoch auf uns Männer... Auf die Frau, die uns HAT ( oder hat, und nicht weiß, dass sie uns hat ) ...auf die Idiotinnen ... besser gesagt VOLLPFOSTINNEN ... die uns hatten und uns verloren haben ... und auf die GLÜCKLICHEN, die das Vergnügen & Glück haben werden uns kennenzulernen!
Benutzeravatar
Jeason
Beiträge: 41
Registriert: 07.09.2010, 22:58

Re: Jammer-Thread

Beitrag von Jeason »

ich will kein Farmville spielen, sondern etwas vernuenftige Haltung unterwegs
Also Max Payne macht mir auf Android sehr viel Spaß. Kann man jetzt nicht als Farmville Spiel bezeichnen ;)

Jammer Teil:
Warum setzt Google bei ihrer Dart IDE auf Eclipse. Das Ding ruckelt nur rum und bringt auch meinen Musik Player ins stocken... so lässt sich das doch nicht verwenden.
Ich verkaufe diese feinen Lederjacken.
glassbear
Establishment
Beiträge: 324
Registriert: 08.04.2003, 18:09
Alter Benutzername: Enrico_
Echter Name: Enrico
Wohnort: San Diego
Kontaktdaten:

Re: Jammer-Thread

Beitrag von glassbear »

Jeason hat geschrieben:
ich will kein Farmville spielen, sondern etwas vernuenftige Haltung unterwegs
Also Max Payne macht mir auf Android sehr viel Spaß. Kann man jetzt nicht als Farmville Spiel bezeichnen ;)
Hehe, ich haette das konkretisieren sollen: Ich will keine Shooter aufm Handy spielen. Das funktioniert nicht, ich bin zu langsam fuer sowas. Und fuer die meisten Hack&Slays auf dem Handy auch :lol: Zumal die nachgemachten "Gamepads" alle irgendwie doof sind. Viel zu klein und mit dem Fingern aufm Display seh ich dann kaum noch was vom Spiel selber :lol:
Ein Hoch auf uns Männer... Auf die Frau, die uns HAT ( oder hat, und nicht weiß, dass sie uns hat ) ...auf die Idiotinnen ... besser gesagt VOLLPFOSTINNEN ... die uns hatten und uns verloren haben ... und auf die GLÜCKLICHEN, die das Vergnügen & Glück haben werden uns kennenzulernen!
Benutzeravatar
Jonathan
Establishment
Beiträge: 2545
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Jonathan »

Ich finde, man kann generell fast gar nichts damit vernünftig spielen. Ich hab nichtmal eine Tetrisversion gefunden, bei der die Steuerung nicht so schlecht war, dass ich nach kurzer Zeit einfach keine Lust mehr hatte. Und selbst bei so etwas wie World of Goo sehnt man sich nach der Präzisen PC Steuerung. Aber das Murmellabyrinthspiel ist ganz gut :)
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Jammer-Thread

Beitrag von CodingCat »

Noch ein Tag bis zur Deadline der Bachelor-Arbeit und ich schreibe immer noch. Erinnert mich das nächste Mal, die Arbeit VOR der Implementierung zu schreiben.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
joggel

Re: Jammer-Thread

Beitrag von joggel »

Pffff... *wird überbewertet :)

*lieblingszitat von einem Freund von mir

Nchtrag:
Und auf dieses Dilemma mit den knappen Abgabetermin wurde ja schon hingewiesen:
siehe hier (datiert mit 08.09.2012, 17:14 )!
genauer:
eXile hat geschrieben: [...]Wenn ich von meiner BA-Erfahrung auf andere schließen darf, bedeutet das Alarmstufe Rot, lange Nächte und ganz sicherlich keinen Blur für euch in der nächsten Woche.[...]
Benutzeravatar
BeRsErKeR
Establishment
Beiträge: 689
Registriert: 27.04.2002, 22:01

Re: Jammer-Thread

Beitrag von BeRsErKeR »

CodingCat hat geschrieben:Noch ein Tag bis zur Deadline der Bachelor-Arbeit und ich schreibe immer noch. Erinnert mich das nächste Mal, die Arbeit VOR der Implementierung zu schreiben.
Das kommt mir bekannt vor. Ich hatte einfach drauf los implementiert, nebenbei das Konzept ausgedacht und am Ende eine Arbeit drumrum geschrieben. Und dann natürlich noch irgendwelche Pseudo-Referenzen gesucht (wie C++ Bücher) um eine Seite zu füllen. :D Am Ende wars aber nicht schlimm. Brachte ne 1.0 und ne Publikation über das Debuggen verteilter Systeme. ;)
Ohne Input kein Output.
waigie
Beiträge: 82
Registriert: 20.05.2009, 19:37

Re: Jammer-Thread

Beitrag von waigie »

CodingCat hat geschrieben:Noch ein Tag bis zur Deadline der Bachelor-Arbeit und ich schreibe immer noch. Erinnert mich das nächste Mal, die Arbeit VOR der Implementierung zu schreiben.
Und ich bilde mir ein das ich Zeitdruck hätte, dabei sind es noch 3 Wochen bis die Abgabe fällig wird ^^. Dir viel Glück
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Jammer-Thread

Beitrag von CodingCat »

Danke, wird schon. Ich hab noch etwas unter 24 Stunden und nähere mich gerade stetig der inhaltlichen Vollständigkeit. ;)
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
kaiserludi
Establishment
Beiträge: 467
Registriert: 18.04.2002, 15:31

Re: Jammer-Thread

Beitrag von kaiserludi »

CodingCat hat geschrieben:Danke, wird schon. Ich hab noch etwas unter 24 Stunden und nähere mich gerade stetig der inhaltlichen Vollständigkeit. ;)
Bist doch super im Zeitplan. Erinnere mich da noch an die zwei Pappenheimer damals in der 12.ten, die wengie Minuten NACH Abgabeschluss angefangen haben, ihre Facharbeit zu schreiben, bei 6 Wochen Zeit. Haben es dann 24 Stunden verspätet abgegeben und obwohl sie zuvor 48 Stunden lang nonstop Mario Kart 64 gezockt haben und das Ding entsprechend übermüdet geschreiben wurde, hätte es bei rechtzeitiger Abgabe 9 Punkte gegeben. So gabs 0 und das war der Ausschlag, damit einer von beiden das Jahr wiederholen musste und der andere, der auch hätte wiederholen müssen, das Abi wegen Aussichtslosigkeit abgebrochen hat. Ich habe damals aber auch erst 3 Tage vorher mir die Materie überhaupt das erste Mal angeschaut und erst am Tag er Abgabe ab 3Uhr morgens Vollgas gegeben und es hat dennoch für meine beste schriftliche Leistung in dem Fach im kompletten Abi gereicht.
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da
:)

"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
Benutzeravatar
ponx
Establishment
Beiträge: 217
Registriert: 04.05.2008, 12:52
Echter Name: Andy Ponx
Wohnort: Hamburg
Kontaktdaten:

Re: Jammer-Thread

Beitrag von ponx »

CodingCat, du meintest ein paar Posts vorher, dass init()-Methoden zu vermeiden sind. Kannst du kurz beschreiben, was da grundsätzlich das Problem ist? Lieber alles im Konstruktor regeln?
Benutzeravatar
dot
Establishment
Beiträge: 1745
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Jammer-Thread

Beitrag von dot »

ponx hat geschrieben:CodingCat, du meintest ein paar Posts vorher, dass init()-Methoden zu vermeiden sind. Kannst du kurz beschreiben, was da grundsätzlich das Problem ist? Lieber alles im Konstruktor regeln?
Genau für sowas gibts doch einen Konstruktor. Niemand zwingt einen, die init() Methode aufzurufen. Abgesehen davon, kann eine init() Methode rein prinzipiell Member oder vor allem Basisklassen nicht tatsächlich initialisieren, sondern nur deren Werte verändern.
Benutzeravatar
Schrompf
Moderator
Beiträge: 5047
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Schrompf »

Nach knapp zwei Wochen zurück vom Meer (ganz banal die Ostsee übrigens) und ich werd erschlagen von 30 "Goodgame sucht"-Threads. Können wir mal irgendwas gegen den Typen unternehmen?
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

main.cpp(168): warning C4723: potential divide by 0

Besagte Warnung entsteht nur bei LTCG und findet irgendwo in einer 100 Zeilen langen Initialisierungsliste statt. Und selbstverständlich zeigt Visual C++ bei Initialisierungslisten alle Fehler an der öffnenden Klammer des K’torrumpfes an. Stückweise auskommentieren geht nicht, weil die meisten Elemente keine Standardk’toren haben und LTCG dann garnicht erreicht wird. (Siehe auch: Compiler, die nur mit POD was taugen, 5. Auflage, Denn fick dich, darum! Verlag.)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
kaiserludi
Establishment
Beiträge: 467
Registriert: 18.04.2002, 15:31

Re: Jammer-Thread

Beitrag von kaiserludi »

Krishty hat geschrieben:main.cpp(168): warning C4723: potential divide by 0

Besagte Warnung entsteht nur bei LTCG und findet irgendwo in einer 100 Zeilen langen Initialisierungsliste statt. Und selbstverständlich zeigt Visual C++ bei Initialisierungslisten alle Fehler an der öffnenden Klammer des K’torrumpfes an (siehe auch: Compiler, die nur mit POD was taugen, 5. Auflage, DennFickDich Verlag).
Hehe, ja, darüber habe ich mich auch schon geärgert.
Meine Lösung: copy und Paste der Initialisierung in den Rumpf, also klassische C-Sytle Initialisierung. dann zeigt der Compiler den Fehler in der entsprechenden Zeile an, du kannst die Kopie wieder löschen und den Fehler in der Initialiserungsliste korrigieren,
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da
:)

"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Wie gesagt – die Warnung entsteht beim Linken, nicht beim Kompilieren.

Natürlich würde ich mich über das Fehlen dieser Flusskontrolle noch mehr aufregen, aber dass sich der Fehler nach Inlining (oder was auch immer da passiert) nur auf 100 ebenso umfangreiche K’toren zurückverfolgen lässt statt auf einen, ist scheiße.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Code: Alles auswählen

		myProjection.rows[3] = Math::vectorFromXYZW(0.0f, 0.0f, 0.0f, 0.0f);
 movss       dword ptr [rbp-40h],xmm7  
 mov         dword ptr [rcx+28AC0h],eax  
 mov         eax,dword ptr [rbp-38h]  
 movss       dword ptr [rbp-3Ch],xmm7  
 mov         dword ptr [rcx+28AC4h],eax  
 mov         eax,dword ptr [rbp-34h]  
 movss       dword ptr [rbp-38h],xmm7  
 mov         dword ptr [rcx+28AC8h],eax  
 mov         eax,dword ptr [rbp-40h]  
 movss       dword ptr [rbp-34h],xmm7  
 mov         dword ptr [rcx+28ACCh],eax  
 mov         eax,dword ptr [rbp-3Ch]  
 mov         dword ptr [rcx+28AD0h],eax  
 mov         eax,dword ptr [rbp-38h]  
14 movs um einen 16-Byte-Vektor zu nullen.

Yup.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Alle meine Quaternions drehen sich verkehrt rum und ich weiß nicht, ob es an den Quaternions liegt oder an der Konvertierung zu Matrizen oder an der Reihenfolge der Multiplikation

Bild
(http://www.smbc-comics.com/index.php?db=comics&id=2024)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4273
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Jammer-Thread

Beitrag von Chromanoid »

Schrompf hat geschrieben:Nach knapp zwei Wochen zurück vom Meer (ganz banal die Ostsee übrigens) und ich werd erschlagen von 30 "Goodgame sucht"-Threads. Können wir mal irgendwas gegen den Typen unternehmen?
Ich würde vorschlagen wir führen eine neue Regel ein:

Wenn innerhalb eines Monats mehr als eine Stellenanzeige veröffentlicht werden soll, sind diese in einem Thema zusammenzufassen.
Benutzeravatar
Schrompf
Moderator
Beiträge: 5047
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Schrompf »

Der Vorschlag klingt gut! Und was tun wir, wenn der Typ gar nichts davon liest, weil er nur hauptberuflich hunderte Foren wie unseres zumüllt, ohne irgendwo mitzulesen?
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Jammer-Thread

Beitrag von CodingCat »

Bis zu 4 s Ray Marching, und zwar umso langsamer, je weniger Strahlen tatsächlich teilnehmen (wenn alle teilnehmen, sind es 10 ms):

Code: Alles auswählen

while ()
{
   rayIdx = nextRayIdx();

   if (RayGeometry[rayIdx].Depth != MaxRayDepth)
      continue;
   ...
   for (rayLength ...)
}
Relativ konstant 10 ms Ray Marching, egal wieviele Strahlen tatsächlich teilnehmen:

Code: Alles auswählen

while ()
{
   rayIdx = nextRayIdx();

   if (RayGeometry[rayIdx].Depth != MaxRayDepth)
      rayLength = 0;
   ...
   for (rayLength ...)
}
Das ist richtig übel, bis eben dachte ich, auf modernen GPUs wäre Flow Control nur eine Frage des Ausmaskierens einzelner Threads.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Antworten