- ERROR: 0:13: 'sampler2D' : cannot construct this type
- ERROR: 0:13: '=' : cannot convert from 'const 4-element array of float' to 'uniform 4-element array of sampler2D'
DGL https://delphigl.com/forum/ |
|
sampler2D Arrays https://delphigl.com/forum/viewtopic.php?f=20&t=11280 |
Seite 1 von 2 |
Autor: | mathias [ Mo Nov 03, 2014 20:18 ] |
Betreff des Beitrags: | sampler2D Arrays |
Ich habe folgenden Code, welcher auch funktioniert: Code:
Code:
Da der Wert 0-4 immer gleich ist, dachte ich, ich könnte im Shader direkt zuweisen. Code:
Nur motzt der Shader-Compiler. Code:
Ich habe auch versucht 0, 1.... durch 0.0, 1.0 zu ersetzen. Code:
Dies frisst der Compiler. Ist samper2D etwas besonders ? |
Autor: | Sascha Willems [ Di Nov 04, 2014 07:50 ] |
Betreff des Beitrags: | Re: Textur Nummern; |
Welche GLSL-Version setzt du im Shader voraus. Sampler Arrays gehen afaik ab GLSL 1.3 (mit Einschränkungen, man kann z.B. nicht im Code über das Array iterieren) und ab 4.00 kann man die dann wie jedes Array verwenden. |
Autor: | mathias [ Di Nov 04, 2014 18:07 ] |
Betreff des Beitrags: | Re: Textur Nummern; |
Zitat: Welche GLSL-Version setzt du im Shader voraus ? Ich habe es von 1.3 bis 4.0 probiert. Aber bei dieser Zeile scheitern alle. Code:
Eine Array wird erkannt, sonst würde diese Zeile auch nicht gehen. Code:
Aber wenigsten konnte ich diese Zeilen vereinfachen. Code:
So geht einfacher. Code:
|
Autor: | damadmax [ Do Nov 06, 2014 06:54 ] |
Betreff des Beitrags: | Re: Textur Nummern; |
Zitat: Da der Wert 0-4 immer gleich ist, dachte ich, ich könnte im Shader direkt zuweisen. Afaik hat ein sampler2d aber nichts mit GL_TEXTUREx zu tun. Deshalb verstehe ich den ganzen Thread nicht. Die Fehlermeldung sagt eigentlich alles: Code:
|
Autor: | glAwesome [ Do Nov 06, 2014 12:21 ] |
Betreff des Beitrags: | Re: Textur Nummern; |
mathias hat geschrieben: Code:
Dies frisst der Compiler. Das muss er aber nicht. Ich hatte gerade einen Compilerfehler bei einem ähnlichen Code: Code:
Intel hat's geschluckt, Nvidia nicht. Fehlermeldung: Zitat: error C7549: OpenGL does not allow C style initializers Eine korrekte Array-Initialisierung sieht in GLSL so aus: Code:
Wenn ich mich richtig erinnere, hattest du neulich auch so ein Array-Problem hier im Forum gepostet, jedoch finde ich das gerade nicht wieder. Vielleicht erklärt das was. |
Autor: | mathias [ Do Nov 06, 2014 18:27 ] |
Betreff des Beitrags: | Re: Textur Nummern; |
Zitat: Eine korrekte Array-Initialisierung sieht in GLSL so aus: Ich habe folgendes probiert, uniform geht, const nicht. Code:
Link steht es mir der Array-Daklaration, unterster Code. Zitat: Afaik hat ein sampler2d aber nichts mit GL_TEXTUREx zu tun. Deshalb verstehe ich den ganzen Thread nicht. Wieso nicht ? |
Autor: | glAwesome [ Do Nov 06, 2014 19:46 ] |
Betreff des Beitrags: | Re: Textur Nummern; |
mathias hat geschrieben: Code:
mathias hat geschrieben: Code:
|
Autor: | mathias [ Do Nov 06, 2014 20:11 ] |
Betreff des Beitrags: | Re: Textur Nummern; |
Zitat: Welcher Fehler kommt denn? Code:
Ich habe gerade festgestellt, das es an der Shader-Version liegt. Mit 3.3 gehts, mit 1.3 nicht. |
Autor: | damadmax [ Do Nov 06, 2014 22:56 ] |
Betreff des Beitrags: | Re: Textur Nummern; |
Ich zitiere mal das DGL Wiki: Zitat: [...]Dies ist also unbedingt zu machen, sobald ein Texturensampler eine Textureinheit > GL_TEXTURE_0 adressieren will. Die Textureneinheit des Samplers lässt sich also nicht im Shader selbst festlegen. Link
|
Autor: | mathias [ Do Nov 06, 2014 23:13 ] |
Betreff des Beitrags: | Re: Textur Nummern; |
Wenigstens, kann man die Texturensampler in eine Array packen. Code:
Pascal Code: Code:
|
Autor: | mathias [ Fr Nov 21, 2014 21:53 ] | ||
Betreff des Beitrags: | Re: Textur Nummern; | ||
Auf meinem Intel funktioniert folgender Shader ohne Probleme, aber auf einem Nvidia Ion (Intel Atom CPU) kommt ein Fehler wie im Anhang. Irgendwie kommt er mit der Sampler Array nicht zu recht. Bei diesem Code könnte ich auf die Array verzichten, aber ich habe ein Programm welches die Array braucht. Code:
Folgende Info liefert die Versionsabfrage. Code:
PS: Intel hat bei der Fehlerausgabe die Nase vorn, die Meldungen haben viel mehr Informationen.
|
Autor: | mathias [ So Nov 23, 2014 17:15 ] |
Betreff des Beitrags: | Re: Textur Nummern; |
Gemäss Google müsste dies funktionieren, aber warum bleibt bei mir der Körper schwarz ? Code:
Code:
|
Autor: | mathias [ So Nov 23, 2014 20:30 ] |
Betreff des Beitrags: | Re: Textur Nummern; |
Ich bin unterdessen eine Schritt weiter gekommen, an dieser Zeile liegt es nicht uniform sampler2D myTextureSampler[8] Der NVidia kann diese beiden Shader nicht zusammenlinken Vertex: Code:
Fragment: Code:
Bei $light.glsl kommt noch folgendes, an dem kann es nicht liegen, sonst würde die restlichen Shader nicht funktionieren. Code:
|
Autor: | mathias [ So Nov 23, 2014 23:09 ] |
Betreff des Beitrags: | Re: Textur Nummern; |
Ich habe den Fehler gefunden. Ich kann keine Variable Sampler[i] schreiben, er frisst nur eine Konstante Sampler[0] Nun zur nächsten Frage, wie kann ich dies umgehen ? Code:
|
Autor: | glAwesome [ Mo Nov 24, 2014 11:06 ] |
Betreff des Beitrags: | Re: Textur Nummern; |
Mit #version 330 eigentlich gar nicht, wie weiter oben im Thread schon erwähnt wurde: Sascha Willems hat geschrieben: man kann z.B. nicht im Code über das Array iterieren Auf dieses Problem bin ich auch schon gestoßen. In meinem Beleuchtungsshader sollte jede Lichtquelle einen Shadowsampler bekommen und über die Lichtquellen sollte natürlich mit einer for-Schleife iteriert werden. Als Pseudo-Workaround kompiliere ich den Shader für verschiedene Anzahlen von Lichtquellen und rolle dabei die for-Schleife aus. Also statt Code:
Code:
Wobei der zweite Code selbstverständlich nicht handgetippt, sondern automatisiert erstellt wird. Das ist auch genau der Ansatz, der vom glsl PreCompiler unterstützt wird, wenn ich das richtig verstanden habe. |
Seite 1 von 2 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |