- FShader:= TStringList.Create;
- FShader.LoadFromFile(FFilename);
- VShader:= TStringList.Create;
- VShader.LoadFromFile(VFilename);
- FShaderText:=FShader.Text;
- VShaderText:=VShader.Text;
DGL https://delphigl.com/forum/ |
|
Problem mit glShaderSource und glLinkProgram. https://delphigl.com/forum/viewtopic.php?f=20&t=8915 |
Seite 1 von 1 |
Autor: | obscuritas [ Mo Jan 04, 2010 13:21 ] |
Betreff des Beitrags: | Problem mit glShaderSource und glLinkProgram. |
Guten Morgen, ich habe mich in den letzten Tagen ein wenig mit GlSlang beschäftigt und bin davon insgesamt eigentlich sehr angetan. Das Tutorial hab ich mir natürlich durchgelesen, bezüglich meines Problems hilft es mir jedoch nicht weiter. Das Problem ist das Laden der Shader Codes, dafür benutze ich folgende Methode: Code:
In FShaderText und VShaderText sind auch jeweils die richtigen Strings drin, allerdings mir Steuerzeichen, ist das ein Problem? Hiermit erzeuge ich nun die Shader und das dazugehörige Programm. Code:
Weiterhin benutze ich dann noch die im Tutorial beschriebene Methode um mir die Meldungen zu den 3 erzeugten Objekten ausgeben zu lassen. Bei den beiden Shadern ist dies jeweils: " Shader was successfully to run on hardware". Dies hört sich ja eigentlich erstmal gut an, das Problem ist das beim Programm grundsätzlich folgendes ausgegeben wird: "Fragment Shader failed to link. Error: error(#280)Not all shaders have valid object code. Das dann auchnoch für den anderen Shader. Ich habe bei google geguckt und herausgefunden (http://stackoverflow.com/questions/1938 ... aders-glsl) dass die Shader erst beim Linken wirklich kompiliert werden. Daraufhin habe ich mir mit glslDevil die geladenen Shader codes einmal angeguckt und es wird grundsätzlich nichts geladen. Das Problem scheint also am glShaderSource zu liegen, ich habe schon mit den übergebenen Parametern herumgespielt aber nichts hat geholfen. Hier noch der der Fragment Shader: Code:
Und der Vertex Shader: Code:
Beide lassen sich in verschiedenen Shader Programmen ohne Probleme kompilieren und sie sind ja auch nicht sonderlich kompliziert. Über jegliche hilfe würde ich mich freuen. P.S. Gibt es einen wirklichen Unterschied zwischen "glCreateShader" und "glCreateShaderObjectARB", oder ist das einfach nur durch die verschiedenen Versionen bedingt? |
Autor: | Coolcat [ Mo Jan 04, 2010 14:12 ] |
Betreff des Beitrags: | Re: Problem mit glShaderSource und glLinkProgram. |
Es liegt tatsächlich am glShaderSource: Code:
=> Code:
...der zweite Parameter ist nämlich die Anzahl der Strings die du übergeben willst. ![]() Zitat: Ich habe (...) herausgefunden (..) dass die Shader erst beim Linken wirklich kompiliert werden. Nein, eigentlich nicht. Allerdings ist das was man umgangssprachlich als "Anwendung compilieren" bezeichnet die Zusammenfassung von compilieren und linken. Beim compilieren wird jedes Modul (meist Klassen o.ä, hier natürlich Vertex- oder Fragmentshader) für sich genommen in maschinenlesbaren Object-Code umgewandelt. Wenn Vertex- und Fragmentshader nicht zusammenpassen wird das erst beim linken festgestellt, den erst hier werden die einzelnen Objekte zu einem Executable miteinander verbunden. Zitat: P.S. Gibt es einen wirklichen Unterschied zwischen "glCreateShader" und "glCreateShaderObjectARB", oder ist das einfach nur durch die verschiedenen Versionen bedingt? In diesem Fall gibt es wahrscheinlich keinen Unterschied. Generell kann es aber Unterschiede geben. Die Funktionen sind in dieser Reihenfolge zu bevorzugen:
|
Autor: | obscuritas [ Mo Jan 04, 2010 15:06 ] |
Betreff des Beitrags: | Re: Problem mit glShaderSource und glLinkProgram. |
Ersteinmal danke für deine schnelle antwort. Ich habe das natürlich sofort ausprobiert, es gibt nun allerdings andere Fehler, ersteinmal zu den Shadern: "Vertex Shader failed to comile with the following errors: Error : 0:1: error(#132)Syntax error: 'v' parse error Error : error(#273) 1 compilation errors. No code generated" Der Fehler beim Programm ist dann: "Vertex and Fragment Shaders were not successfully compiled before glLinkProgramm() was called. Link failed." Das ist ja auch verständlich. Hier ist noch der Inhalt von VShaderText den ich an glShaderSource übergebe: 'void main(void)'#$D#$A'{'#$D#$A' vec4 a = gl_Vertex;'#$D#$A' a.x = a.x * 0.5;'#$D#$A' a.y = a.y * 0.5; '#$D#$A' gl_Position = gl_ModelViewProjectionMatrix * a;'#$D#$A'}'#$D#$A und FShaderText: 'void main (void)'#$D#$A'{'#$D#$A' gl_FragColor = vec4 (0.8, 0.3, 0.3, 1.0);'#$D#$A'}'#$D#$A Das sieht ja bis auf die Steuerzeichen auch ganz in Ordnung aus. Irgendwelche Ideen? Mir fehlt nämlich im Moment jeder Anhaltspunkt. Danke im voraus für die Hilfe. |
Autor: | Lord Horazont [ Mo Jan 04, 2010 15:41 ] |
Betreff des Beitrags: | Re: Problem mit glShaderSource und glLinkProgram. |
Versuch mal anstatt @VShaderText ein @VShaderText[1]. Sonst übergibst du nämlich einen Pointer auf einen Pointer (Strings sind Pointer) und das ist nicht so schön für OpenGL. greetings |
Autor: | obscuritas [ Mo Jan 04, 2010 15:46 ] |
Betreff des Beitrags: | Re: Problem mit glShaderSource und glLinkProgram. |
Jetzt werden die beiden Shader angeblich wieder korrekt compiliert aber dafür gibt es beim linken den selben Fehler wie zu Begin. Ist es richtig das da Steuerzeichen übergeben werden? |
Autor: | Lord Horazont [ Mo Jan 04, 2010 15:48 ] |
Betreff des Beitrags: | Re: Problem mit glShaderSource und glLinkProgram. |
Hast du die sache mit @...[1] auch für FShaderText gemacht? Ja, die Steuerzeichen sind die Zeilenumbrüche, das stimmt schon so. greetings |
Autor: | obscuritas [ Mo Jan 04, 2010 15:51 ] |
Betreff des Beitrags: | Re: Problem mit glShaderSource und glLinkProgram. |
Ja, beide Shader werden "korrekt" compiliert aber das linken ist nicht erfolgreich. |
Autor: | Sellmann [ Mo Jan 04, 2010 18:16 ] |
Betreff des Beitrags: | Re: Problem mit glShaderSource und glLinkProgram. |
muss als stringlängenangabe nicht ein Integer übergeben werden? '@tmplen' sieht für mich wie ne Adresse aus. Ich gehe mal davon aus, dass das 'tmplen' heißen sollte. |
Autor: | obscuritas [ Mo Jan 04, 2010 18:58 ] |
Betreff des Beitrags: | Re: Problem mit glShaderSource und glLinkProgram. |
Also vom Delphi compiler wird auch tmplen, also ohne Pointer, akzeptiert. Man muss es dann zwar als PGLInt casten aber das geht auchnoch. Beim ausführen des Programmes stürtzt es dann aber genau an der Stelle mit einer exception ab, diese lautet: "Access violation at adress 696E9474 in module 'atioglxx.dll'. Read of adress 00000086." Ich habe übrigens eine Readon 4850, passt also zusammen. Mir ist noch etwas anderes aufgefallen, wenn ich "@VShaderText[1]" benutze, müsste dann nicht nur auf das erste Element des Strings zugegriffen werden? Kann es sein das das ein Delphi Versions Problem ist denn ich benutze Delphi 2010 und wie hier im Forum zu lesen ist, hat es bei anderen Leuten vor 4 Jahren noch geklappt. |
Autor: | Sellmann [ Di Jan 05, 2010 06:45 ] |
Betreff des Beitrags: | Re: Problem mit glShaderSource und glLinkProgram. |
hab nochmal nachgeblättert, es muss tatsächlich @tmplen heißen. Hab mich gestern abend in der funktion verguckt. |
Autor: | Coolcat [ Di Jan 05, 2010 10:33 ] |
Betreff des Beitrags: | Re: Problem mit glShaderSource und glLinkProgram. |
Zeig doch bitte mal den deinen kompletten aktuellen Code zum Laden von Shadern. |
Autor: | obscuritas [ Di Jan 05, 2010 11:33 ] |
Betreff des Beitrags: | Re: Problem mit glShaderSource und glLinkProgram. |
Ersteinmal die Initialisierung, das mit dem Host benutze ich, weil das Form in einer anderen Unit/Klasse ist. Code:
Dann der Teil in dem die Shader geladen werden, der wird nach der Initialisierung des Restes aufgerufen Code:
Und noch die Methode um mir die möglichen Fehler anzeigen zu lassen. Code:
Die Shaderdateien sind .txt Dateien in denen einfachnur der Shadercode drinsteht. Danke für die Hilfe! |
Autor: | Coolcat [ Di Jan 05, 2010 11:58 ] |
Betreff des Beitrags: | Re: Problem mit glShaderSource und glLinkProgram. |
Also das sieht so richtig aus, wahrscheinlich ist es wirklich ein Versionsproblem. Vielleicht hilft dir dieser Thread: viewtopic.php?f=19&t=8861 |
Autor: | obscuritas [ Di Jan 05, 2010 12:05 ] |
Betreff des Beitrags: | Re: Problem mit glShaderSource und glLinkProgram. |
Ich habe die Strings zu AnsiStrings geändert und....es läuft! Nun muss ich nurnoch vernünftige Shader schreiben. Mal sehen. Euch allen vielen vielen dank! |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |