Registriert: So Aug 08, 2010 08:37 Beiträge: 460
Programmiersprache: C / C++ / Lua
Hallo,
könnte man beim Shader das Problem mit der Textur nicht einfach umgehen, indem man ein Boolean mitübergibt, der angibt obs texturiert ist oder nicht. Wenn ja führt man die beiden Zeilen aus, wenn Nein, dann macht mans ohne Texturen. Wär doch einfacher.
_________________ offizieller DGL Compliance Beauftragter Never run a changing system! (oder so)
könnte man beim Shader das Problem mit der Textur nicht einfach umgehen
Welches Problem? Ist PPL2 irgendwas spezielles oder meinst du einfach Shadermodell 2?
Zitat:
indem man ein Boolean mitübergibt, der angibt obs texturiert ist oder nicht.
Das geht, die Frage ist ob es sinnvoll ist. Diese if-Abfrage muss für jedes Fragment ausgeführt werden! Normalerweise optimiert man Shader immer genau für eine spezielle Aufgabe. Wenn sich Shader extrem ähneln lagert man die gemeinsamen Teile in eine eigene Datei und included diese quasi. Makros (#define, #ifdef, ...) sind auch eine hilfreiche Sache, damit würde der Switch bereits vom Shader-Compiler durchgeführt. Nennt man Shader-Permutations. Zu Uniform-Switches greift man nur dann, wenn Grafikspeicher oder Shader-Switches zu Problem werden. Für kleine Testanwendungen oder ähnliches ist so ein Textur-Switch natürlich kein Problem. Aber vermeide den eierlegenden Wohlmilchsau-Shader...
Zitat:
Wär doch einfacher.
Es hat niemand behauptet das Shader einfach sind. Es geht darum die optimale Performance aus der Hardware zu bekommen um eben solch vermeidbare Switches zu umgehen.
Übrigens, wenn keine Textur gebunden ist (also einfach "0") müsstest du beim Zugriff einfach schwarze Farbe bekommen.
Registriert: Sa Nov 24, 2007 11:59 Beiträge: 116
Programmiersprache: FreePascal
Coolcat: Wird bei einer nicht gebundenen Textur nicht *weiße* Farbe zurückgegeben (zumindest bei texture2D(), die ganzen texelFetch*-Dinger werfen tatsächlich nur Nullen)? Dann braucht man nämlich nicht einmal eine If-Abfrage. Problem ist natürlich, dass der texture2D-Call nach wie vor unsinnig ist, aber ggf weniger Overkill als dafür extra nen neuen Shader zu laden und dann zu wechseln. Wenn man nur wenige untexturierte Objekte lädt, lohnt sich das mE ziemlich wenig.
Mitglieder in diesem Forum: 0 Mitglieder und 11 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.