ok, hab mich nochmal hingesetzt.
hab weitere shader ausprobiert und bin zuversichtlich dass es an denen nicht liegt; es ist leicht, etwas anderes als successfuly compiled im log stehen zu haben. ich glaube auch nichtmehr dass es ein string problem ist. die shader compilieren, hab mir während des ladens den inhalt der varriablen angeguckt, scheint alles richtig zu sein. hab mir beispielquelltext und ne shaderklasse (quelle vergessen) angeschaut, hab aber keine wesentlichen unterschiede festellen können; was die verschiedenen beispiele unterschiedlich machen, habe ich jeweils erfolglos ausprobiert.
als mögliche linking-fehlerquellen werden im tutorial genannt:
Zitat: Die Zahl der von der Implementation unterstützten Attributvariablen wurde überschritten Der Speicherplatz für Uniformvariablen wurde überschritten Die Zahl der von der Implementation angebotenen Sampler wurde überschritten Die main-Funktion fehlt Die Liste der Varying-Variablen des Vertexshaders stimmt nicht mit der des Fragmentshaders überein Funktions- oder Variablenname nicht gefunden Eine gemeinsame Globale ist mit unterschiedlichen Werten oder Typen initialisiert worden Zwei Sampler unterschiedlichen Typs zeigen auf die selbe Textureneinheit Ein oder mehrere angehangene(r) Shader wurden nicht erfolgreich kompiliert
das kann ich alles ausschließen. wie habe abermals diverse shader aus der samlung ausprobiert.
woran könnte es also noch liegen? der shader-code aus glsl tutorial 2 hat zb kein #version am anfang, was bei mir zum fehler beim compilieren führt. das projekt an sich compiliert auch nicht (resourcen nicht gefunden). die shaderklasse die ich mir angeschaut habe macht hingegen alles fast genauso wie ich, halt mit einer anderen objekt-struktur. eine mögliche fehlerquelle sehe ich im #version, da die beispiele hier varrieren und ich den punkt auch nicht ganz verstanden habe -> im tutorial 1 heists #version 1.50, im blurshader #version 120, oft tauchts garnicht auf. hab ne radeon hd 4870, sm 3.3
ein Shader, den ich verwende
und übersichtshalber nochmal mein code,
Code: procedure TShader.Load(pPath,pDirectory,pName: String); var oStringList: TStringList; ShaderText: String; ShaderLength: Integer; begin //objekte klarmachen oProgram:=glCreateProgram; oVertex:=glCreateShader(GL_VERTEX_SHADER); oFragment:=glCreateShader(GL_FRAGMENT_SHADER); oStringList:=TStringList.Create; //vertexshader laden oStringList.LoadFromFile(pPath+pDirectory+pName+'.vs'); ShaderText:=PChar(oStringList.Text); //pchar ShaderLength:=length(ShaderText); glShaderSource(oVertex,1,@ShaderText,@ShaderLength); //fragmentshader laden oStringList.LoadFromFile(pPath+pDirectory+pName+'.fs'); ShaderText:=PChar(oStringList.Text); //pchar ShaderLength:=length(ShaderText); glShaderSource(oFragment,1,@ShaderText,@ShaderLength); //compilieren & loggen oStringList.Clear; glCompileShader(oVertex); oStringList.Add(GetShaderLog(oVertex)); glCompileShader(oFragment); oStringList.Add(GetShaderLog(oFragment)); glAttachShader(oProgram,oVertex); glAttachShader(oProgram,oFragment); glLinkProgram(oProgram); glDeleteShader(oVertex); glDeleteShader(oFragment); oStringList.Add(GetProgramLog(oProgram)); oStringList.SaveToFile(pPath+pDirectory+pName+'-log.txt'); oStringList.Free; end;
und natürlich der log
Zitat: Vertex shader was successfully compiled to run on hardware. Fragment shader was successfully compiled to run on hardware. Vertex shader(s) failed to link, fragment shader(s) failed to link. ERROR: error(#280) Not all shaders have valid object code ERROR: error(#280) Not all shaders have valid object code
ideen, was ich ausprobieren könnte?
edit: achso, binde ich den shader trozdem und zeichne mein fullscreen-quad, habe ich einen leichten blur effekt, allerdings unabhängig davon, welchen shadercode ich verwende (zb auch beim sepia-shader)
edit2: glslEditor compiliert und link't die shader problemlos.
|