AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Conditionals im (Cg-) Shader
Thema durchsuchen
Ansicht
Themen-Optionen

Conditionals im (Cg-) Shader

Ein Thema von blackfin · begonnen am 17. Mai 2010 · letzter Beitrag vom 18. Mai 2010
 
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Conditionals im Cg-Shader

  Alt 18. Mai 2010, 00:28
Zitat von blackfin:
Ist es wirklich die einzige und beste Möglichkeit, für jegliche vorkommende Variante [...] eine eigene Shader-Variante zu kompilieren und dann einzusetzen?
Das ist, soweit ich das überblicke, der übliche Weg. Vor allem ohne Techniques wirst du da nicht wirklich drum rum kommen fürchte ich. Das sinnigste dürfte eine Kollektion von Teil-Shadern und spezialisierten Versionen sein, die man "on demand" zusammen schraubt und durch den Compiler nudelt. Nicht traumhaft schön, aber so ist das ja noch an einigen Stellen in der Shader-Welt: Komfort kommt später. Vielleicht. (Bin ja schon froh Hochsprachen dafür zu haben - und ziemlich fähige Compiler dazu!) Und, wie du ja gemerkt hast, Branching = nono, vor allem dynamisches.*

Ich erinnere mich z.B. an Battlefield 2. Da wurde nach Änderung der Grafikeinstellungen immer reichlich lange mit Ladebalken gewerkelt, mit dem Label "Shader werden optimiert". Ich vermute da hinter genau oben genanntes, es ist also denke ich eher kein bad-practice. Im gamedev Forum gab es dazu auch schon mal irgendwo einen Thread, in dem der Tenor ähnlich war, wenn ich mich nicht böse irre.


Wenn man es wirklich geschickt anstellt, kann man Shader ja in Code-Fetzen zerlegen, die in verschiedensten Kombinationen zusammen gesetzt laufen können. Dann könnte man sich zur Runtime im Speicher seinen dynamischen Shader zusammen würfeln, ohne vorab zig einzelne, für jeden möglichen Fall separate anlegen zu müssen.


*) Ich hab auf gamedev hier und da aufgeschnappt, dass man in einigen Fällen mit Lerp() Branching-ähnliches Verhalten bekommen kann, und dies etwas flotter wäre. Frag mich aber grad nicht nach Details! Das könnte Pipeline-schonender sein, wenn ich mal mutig Mutmaßen soll. Was man aber nicht wirklich verhindern können wird ist, dass immer alle Branches auch ausgeführt werden - zumindest so lange nicht jedes Pixel seine eigene ALU+Caches hat
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz