Registriert: Di Okt 13, 2009 17:25 Beiträge: 365
Programmiersprache: C++
Hallo! Ich habe hier mal eine Frage zur Syntax von glSlang. Und zwar ist mir aufgefallen, dass in GLSL-Shadern häufig sowas
Code:
vec3 vector;
// ...
vector.xyz = vec3(0.0, 1.0, 0.5);
verwendet wird und manchmal das Gleiche ohne .xyz:
Code:
vector = vec3(0.0, 1.0, 0.5);
Ebenso werden .rgb, .rgba, usw. mal weggelassen und mal nicht. Bei meinen ersten Gehversuchen in GLSL musste ich feststellen, dass es scheinbar nicht immer egal ist, ob man es hinschreibt oder nicht (sonst meckert der Compiler ). Gibt es da eine Regel oder hilft da wirklich nur jedesmal rumprobieren bis es klappt?
Danke schonmal im Voraus für eure Antworten!
Gruß mrtrain
Zuletzt geändert von mrtrain am Mi Aug 31, 2011 17:13, insgesamt 1-mal geändert.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Vorallem musst du es dann verwenden, wenn die Dimensionen der Vektoren nicht passen. Also z.B. bei:
Code:
vec4 vector;
// ...
vector.xyz = vec3(1.0, 2.0, 3.0);
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Di Okt 13, 2009 17:25 Beiträge: 365
Programmiersprache: C++
Okay, danke für die ultra-schnelle Antwort! Das wäre ja schon eine Regel, aber u.a. auch weil du sie mit "Vorallem" einschränkst, denke ich mal, dass es nicht die einzige ist, oder?
Bin weiterhin dankbar für jede Antwort!
Zuletzt geändert von mrtrain am Mi Aug 31, 2011 17:14, insgesamt 1-mal geändert.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Naja, ansonsten isses auch noch Hilfreich, wenn du spezielle Komponenten eines Vektors extrahieren willst. Sollte auch mit .x, .y und so weiter gehen. Meine Einschränkung rührt daher, dass ich ne ganze weile nichts mehr mit Shadern gemacht habe. Deshalb überlasse ich jetzt mal den "Profis" das Feld .
Im Zweifelsfall sind die Meldungen der Compiler eigentlich auch hilfreich, also try'n'error ist vielleicht eine Divise
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Dabei heißt der Bezeichner (an dem wahrscheinlich gar nichts zu beanstanden ist) "specular". Irgendwie zerhackt der Nvidia-Compiler die Namen immer so blöd. Zeile 53 ist in diesem Fall übrigens die letzte (:!:) Zeile, in der nichts anderes steht als die geschweifte schließende Klammer der main()-Prozedur. Ich dachte Nvidia bietet immernoch vergleichsweise gut OpenGL-Unterstüzung? Oder machen sie bei GLSL eine Ausnahme, damit alle brav ihr Cg verwenden?
Gruß mrtrain
Zuletzt geändert von mrtrain am Mi Aug 31, 2011 17:14, insgesamt 1-mal geändert.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Zeig mal deinen Code her... Vielleicht kann man dann mehr machen
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Vertex info ----------- 0(37) : error C0000: syntax error, unexpected $end at token "<EOF>" 0(37) : error C0501: type name expected at token "<invalid atom -1>" 0(37) : warning C7022: unrecognized profile specifier "_Te"
Fragment info ------------- 0(53) : error C0000: syntax error, unexpected ')' at token ")" 0(53) : error C0501: type name expected at token ")" 0(53) : warning C7022: unrecognized profile specifier "ecular"
Ist jetzt leider 'ne Menge Code, aber so'ne Hilfe kann ich ja nicht ablehnen Achja, ShaderModel 3.0 kann meine GraKa auch, es ist 'ne GeForce 7100 mit einem halbwegs aktuellen Treiber (182.06). for()-Schleifen sollten also unterstützt werden.
Hoffe du wirst daraus schlau und kannst mir helfen (oder auch jemand anderes aus dem Forum!). Danke für die Hilfsbereitschaft!
Gruß mrtrain
Zuletzt geändert von mrtrain am Mi Aug 31, 2011 17:14, insgesamt 1-mal geändert.
Für mich sieht das so aus, als würdest du den String irgendwie falsch an OpenGL (bzw. den kompilierenden Treiber) übergeben. Wie sieht denn deine Compilierfunktion aus? Vielleicht gibt es irgendein Problem mit Unicode, den Delphistrings oder weiß der Deibel was...
_________________ Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut. Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’. Und du schaust mich an und fragst ob ich das kann. Und ich denk, ich werd' mich ändern irgendwann. _________________Farin Urlaub - Bewegungslos
Ich vermute auch das du da beim laden irgendwas falsch machst. Kann es sein das dein String vielleicht um ein Zeichen zu kurz ist? Dann würde beim Vertexshader nämlich die Klammer am Ende fehlen, was die Probleme erklären würde.
Registriert: Di Okt 13, 2009 17:25 Beiträge: 365
Programmiersprache: C++
An sich 'ne gute Idee, aber andere Shader funktionieren auch. Ich hatte einen funktionierenden Shader (wenn ihr wollt kann ich ihn auch noch posten) und dann habe ich einfach nur in fopen() (achja - ich verwende C++ ) den Dateinamen geändert. Der Fehler muss also beim Shader (oder beim Treiber) liegen.
Gruß mrtrain
Zuletzt geändert von mrtrain am Mi Aug 31, 2011 17:14, insgesamt 1-mal geändert.
Oder vielleicht ist die andere Datei falsch kodiert? Ansi statt UTF8 oder so?
Ich weiß leider nicht, was OpenGL will...
_________________ Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut. Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’. Und du schaust mich an und fragst ob ich das kann. Und ich denk, ich werd' mich ändern irgendwann. _________________Farin Urlaub - Bewegungslos
Ja, wäre möglich das es daran liegt, nimm mal die Umlaute aus den Kommentaren, also ÄÖÜäöü und ß. Normalerweise kommentiert man Programme auf Englisch, dann hat man das Problem einfach nicht
Registriert: Di Okt 13, 2009 17:25 Beiträge: 365
Programmiersprache: C++
Hmmm... Umlaute hab' ich nur einmal geunden bei "Möglicherweise" im Vertexshader. Die Suchfunktion von Notepad++ sollte eigentlich auch nix übersehen haben . Schade, immernoch die gleiche Fehlermeldung. Kann vielleicht mal einer von euch versuchen den Shader zu kompilieren? Ne Angabe von GPU-Hersteller und Treiber wär dabei natürlich auch ganz sinnvoll
Edit: Äh, das mit dem UTF8 Standard war doch eher andersrum gemeint, oder? Hier muss doch ANSI-Code verwendet werden? Jedenfalls habe ich diesen Shader genauso abgespeichert, geladen und compiliert wie seinen funktionierenden Vorgänger. Könnte nicht *bitte* einer von euch kurz versuchen den Shader zu kompilieren? Vielleicht hat ja einer einen anderen Treiber (z.B. von ATI), der eine hilfreichere Fehlermeldung ausgibt.
Gruß mrtrain
Zuletzt geändert von mrtrain am Mi Aug 31, 2011 17:15, insgesamt 1-mal geändert.
Mitglieder in diesem Forum: 0 Mitglieder und 6 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.