DGL https://delphigl.com/forum/ |
|
Shader verlinken https://delphigl.com/forum/viewtopic.php?f=20&t=5418 |
Seite 1 von 1 |
Autor: | Aya (mit loginproblemen) [ Do Apr 06, 2006 21:42 ] |
Betreff des Beitrags: | Shader verlinken |
Hi, ich brauch für ein Tool verschiedene Shader.. so vonwegen Grayscale, Invert, Sharpen, Blur etc... Man soll via Checkbox o.Ä. aktivieren können was man haben will, also z.B. Grayscale + Invert. Wie stell ich das am geschicktesten an..? Den Shader immer wenn man seine auswahl getroffen hat dementsprechend zusammenstellen und zur GraKa schicken, oder eher alle shader einzeln erstellen und dann irgendwie via Linking zusammenstöpseln?? Und.. wie funktioniert das mit dem Linking..?? Hab das nochnie gemacht ![]() Aya~ |
Autor: | La Boda [ Fr Apr 07, 2006 16:32 ] |
Betreff des Beitrags: | |
Also ich kann dazu nur sagen: Probiers nicht mit if-Anfragen im Shader selbst. Dadurch wird das Ganze extrem langsam (jedenfalls auf meiner GF 6600), was irgendwie mit dynamischen Sprüngen zusammenhängt. Lars hat mir das mal erklärt, aber ich hab die genaue Begründung schon wieder vergessen ![]() Aber mir fällt grad ein, du könntest ja je nach gesetztem Häkchen eine Datei vom Delphi aus aus vorher festgelegten Schnipseln zusammenstellen lassen, das als Stream speichern und als einen Shader auslesen lassen. |
Autor: | i0n0s [ Fr Apr 07, 2006 19:26 ] |
Betreff des Beitrags: | |
La Boda hat geschrieben: Also ich kann dazu nur sagen: Probiers nicht mit if-Anfragen im Shader selbst. Dadurch wird das Ganze extrem langsam (jedenfalls auf meiner GF 6600), was irgendwie mit dynamischen Sprüngen zusammenhängt. Lars hat mir das mal erklärt, aber ich hab die genaue Begründung schon wieder vergessen
![]() Die (alten) Karten können keine IF-Abfrage und rechnen beides aus, nur das passende wird dann angezeigt. Als Beispiel: if ja then calcja else calcnein; würde dazu führen, da calcja und calcnein berechnet werden, obwohl nur eine notwendig ist. Einzelne Shader auszuwählen sollte nicht das Problem sein, ich sehe das Problem bei den Kombinierten. Die müssten dann auch in einer Shaderdatei sein, mir ist zumindest nicht bekannt, dass mehrere Shader gleichzeitig aktiv sein können. |
Autor: | Tomok [ Sa Apr 08, 2006 14:10 ] |
Betreff des Beitrags: | |
Ich kann mich i0n0s nur anschließen, die Shader müssten entweder so geschrieben sein, dass man sie wirklich einfach hintereinander in eine shaderdatei packen könnte, oder aber man müsste mit mehreren passes arbeiten (pro shader einer, jeweils mit dem Ergebnis des Vorherigen rechnen), aber ich würde vermuten das 1.Methode zwar evtl. etwas schwerer umzusetzen ist, aber Performancetechnisch vermutlich besser ist [solange du nicht andauernt Shaderteile aktivierst bzw. deaktivierst] |
Autor: | TAK2004 [ So Apr 09, 2006 11:27 ] |
Betreff des Beitrags: | |
Ich hab das bisher immer so gesehen, das man einfach alle shader varianten als einzelne shader schreibt. Dies hat den Grund, die Performance. Ich rate es dir wie folgt zu lösen. Schreibe alle shader einzeln und zerschnippsel sie dann in header und code. Nun lädst du alle headerfiles die du brauchst in eine File und gleiches machst du mit dem code. Eventuell brauchst du noch ein footer für z.B. vertexshader. Überlege dir Variablen die du gemeinsam nutzen willst für alle shader. Z.B. endpos und läst am anfang die position von opengl einspeisen und die shader codes die dann folgen, nutzen diese var und am ende gibst du opengl diese var zurück. Erinnert mich stark an PHP und Include ![]() |
Autor: | LarsMiddendorf [ Mi Apr 12, 2006 18:12 ] |
Betreff des Beitrags: | |
Ja sowas wie den ID3DXFragmentLinker bräuchte man auch in OpenGL. Der macht nämlich genau das und optimiert den Shader noch dabei. Außerdem ist das Linken ausdrücklich sehr schnell. |
Autor: | yonibear [ Mo Apr 24, 2006 19:22 ] |
Betreff des Beitrags: | |
Soweit ich weiß kann man auch in OpenGL kompilierte Shaderobjekte miteinander linken, wie man es aus der CPU-Programmierung kennt. Z.B. benutzt man in der main eine Funktion, die z.B. die Per-Vertex Farbe berechnet. Ist die Funktion aktiviert, linkt man dazu die Objektdatei, die die Funktion enthält, die die Berechnung durchführt. Andernfalls linkt man eine Funktion dazu, die einfach eine Konstante zurückgibt. Letztere Funktion kann der Compiler dann wegoptimieren. |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |