Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
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.
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.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
mathias hat geschrieben:
Code:
constint test2[4]=int[4](0,1,2,3);// fehler
Welcher Fehler kommt denn? Ich habe es gerade bei mir ausprobiert, keiner der beiden Shader-Compiler hat was zu meckern und meiner Meinung nach ist es exakt so, wie in der GLSL-Spezifikation.
mathias hat geschrieben:
Code:
uniformsampler2D myTextureSampler[8]=sampler2D[8](0,1,2,3,4,5,6,7);// dies geht immer noch nicht
Das wirst du mit derzeitigen GLSL-Versionen wohl auch nicht hinbekommen.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Sa Aug 18, 2007 18:47 Beiträge: 694 Wohnort: Köln
Programmiersprache: Java
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.
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:
#version 330
invec2 vUV0;
uniformsampler2D myTextureSampler[8];
outvec4 FragColor;
void main()
{
FragColor = texture( myTextureSampler[0], vUV0 );
}
Folgende Info liefert die Versionsabfrage.
Code:
GL_VENDOR: NVIDIA Corporation
GL_RENDERER: ION/integrated/SSE2
GL_VERSION: 3.3.0
GL_SHADING_LANGUAGE_VERSION: 3.30 NVIDIA via Cg compiler
PS: Intel hat bei der Fehlerausgabe die Nase vorn, die Meldungen haben viel mehr Informationen.
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
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:
for(int i=0; i<2;++i){
texture(texMap[i], coords);
}
mache ich sowas:
Code:
{
texture(texMap[0], coords);
}
{
texture(texMap[1], coords);
}
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.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
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.