Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 16, 2025 20:13

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: glsl fehler
BeitragVerfasst: Mi Nov 30, 2011 17:22 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 15, 2009 20:48
Beiträge: 111
Wohnort: Berlin
Programmiersprache: Delphi,JS,PHP,AS3,C#
yo, grad ma am shader ausprobieren.

was soll folgende fehlermeldung bedeuten?

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


ausgelesen direkt nachm compilieren bzw linken (von oben ach unten vertex,fragment,programm)

bin etwas verwirrt, ich dachte beide shader seien successfully compiled :S

ich bin streng nach tutorial vorgegangen und hab verschiedene shader auprobiert.

_________________
thanks to the internet we have rule 34, wich states that if something exists, theres a pornographic version of it,


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glsl fehler
BeitragVerfasst: Mi Nov 30, 2011 17:38 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Kompilieren ist ja nicht das gleiche wie Linken. :)
Zeig doch mal deinen Code von glCreateProgram bis glLinkProgram, bzw. überprüfe mal, ob nicht eines der Handles für Shader / Porgram den Wert 0 hat.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glsl fehler
BeitragVerfasst: Mi Nov 30, 2011 17:54 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 15, 2009 20:48
Beiträge: 111
Wohnort: Berlin
Programmiersprache: Delphi,JS,PHP,AS3,C#
Code:
  1. var oStringList: TStringList;
  2.     ShaderText: String;
  3.     ShaderLength: Integer;
  4. begin
  5. //objekte klarmachen
  6. oProgram:=glCreateProgram;
  7. oVertex:=glCreateShader(GL_VERTEX_SHADER);
  8. oFragment:=glCreateShader(GL_FRAGMENT_SHADER);
  9. oStringList:=TStringList.Create;
  10.  
  11. //vertexshader laden
  12. oStringList.LoadFromFile(pPath+pDirectory+pName+'.vs');
  13. ShaderText:=oStringList.Text;
  14. ShaderLength:=length(ShaderText);
  15. glShaderSource(oVertex,1,@ShaderText,@ShaderLength);
  16.  
  17. //fragmentshader laden
  18. oStringList.LoadFromFile(pPath+pDirectory+pName+'.fs');
  19. ShaderText:=oStringList.Text;
  20. ShaderLength:=length(ShaderText);
  21. glShaderSource(oFragment,1,@ShaderText,@ShaderLength);
  22.  
  23. //compilieren & loggen
  24. oStringList.Clear;
  25. glCompileShader(oVertex);
  26. oStringList.Add(GetShaderLog(oVertex));
  27. glCompileShader(oFragment);
  28. oStringList.Add(GetShaderLog(oFragment));
  29.  
  30. glAttachShader(oProgram,oVertex);
  31. glAttachShader(oProgram,oFragment);
  32.  
  33. glLinkProgram(oProgram);
  34.  
  35. glDeleteShader(oVertex);
  36. glDeleteShader(oFragment);
  37.  
  38. oStringList.Add(GetProgramLog(oProgram));
  39. oStringList.SaveToFile(pPath+pDirectory+pName+'-log.txt');
  40. end;


zack das is der code zum laden. die handles haben die werte 1-3 :/

_________________
thanks to the internet we have rule 34, wich states that if something exists, theres a pornographic version of it,


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glsl fehler
BeitragVerfasst: Mi Nov 30, 2011 18:22 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Einfach mal geraten: Hast du in beiden Shadern auch
Code:
  1. void main(void)
  2. {
  3. //...
  4. }
stehen und schreibst du im Vertexshader auch in die Variable gl_Position und im Fragmentshader in die Variable gl_FragColor (bzw. gl_FragData)?

Edit: Ich habe mal ein paar Suchmaschinen bemüht. Viele, die auch diese Fehlermeldung bekommen machen letzendlich irgendwas beim Laden des Codes falsch. Da du mit TStringList arbeitest, vermute ich entweder ein AnsiString/Widestring Problem oder dass du Pointer auf Zeilen statt auf den zusammenhängeden Text übergibst, oder irgendein Pointerproblem. Leider kenne ich mich mit der Pointersyntax in Pascal und den Delphi-Komponenten nicht so aus.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glsl fehler
BeitragVerfasst: Mi Nov 30, 2011 20:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ich tippe darauf, dass die beiden Shader nicht zusammenpassen, weil die varying's unterschiedlich sind.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glsl fehler
BeitragVerfasst: Mi Nov 30, 2011 20:39 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
und oStringlist gibst du auch nicht frei am ende ... deine namenskonvention ist auch komisch


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glsl fehler
BeitragVerfasst: Mi Nov 30, 2011 22:41 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

bei meinem glslEditor ist eine Unit dabei (im Insallationsverzeichnis) die die ganzen Shader Sachen in ne Klasse kappselt. Du kannst ja ma mit der Klasse versuchen, deine Shader zu kompilieren. Kleines Bsp gibts hier.

MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glsl fehler
BeitragVerfasst: Do Dez 01, 2011 00:43 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 15, 2009 20:48
Beiträge: 111
Wohnort: Berlin
Programmiersprache: Delphi,JS,PHP,AS3,C#
ich hab den sepia und den blur shader aus der sammlung, und den fxaa shader den ich hier gepostet habe getestet. teilweise habe ich #version ergänzen müssen

@phleg das ist mehr so ne art shit als code, da hab ich irgendwas testweise hingeklatscht :)

@train: der code den ich oben gepostet habe ist nahezu alles was ich so mache. ich ruf dann nurnoch .create, .load und binde das programm, wobei .load die fehlermeldung auswirft.

@bergmann: check ich morgen :mrgreen:

da die meldung "successfully compiled to run on hardware" kommt, und ich fertige shader aus sammlungen bemüht habe, kommt mir ein string-problem am warscheinlichsten vor. um die fehlermeldung auszulesen musste ich auch das "pchar(" aus der funktion aus dem tutorial entfernen und konnte nur mit sufu und gedult ne lösung finden um den log vom linken auszulesen. ich kenn mich bloß kaum aus.

_________________
thanks to the internet we have rule 34, wich states that if something exists, theres a pornographic version of it,


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glsl fehler
BeitragVerfasst: So Mär 25, 2012 12:45 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 15, 2009 20:48
Beiträge: 111
Wohnort: Berlin
Programmiersprache: Delphi,JS,PHP,AS3,C#
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:
  1. procedure TShader.Load(pPath,pDirectory,pName: String);
  2. var oStringList: TStringList;
  3.     ShaderText: String;
  4.     ShaderLength: Integer;
  5. begin
  6. //objekte klarmachen
  7. oProgram:=glCreateProgram;
  8. oVertex:=glCreateShader(GL_VERTEX_SHADER);
  9. oFragment:=glCreateShader(GL_FRAGMENT_SHADER);
  10. oStringList:=TStringList.Create;
  11.  
  12. //vertexshader laden
  13. oStringList.LoadFromFile(pPath+pDirectory+pName+'.vs');
  14. ShaderText:=PChar(oStringList.Text); //pchar
  15. ShaderLength:=length(ShaderText);
  16. glShaderSource(oVertex,1,@ShaderText,@ShaderLength);
  17.  
  18. //fragmentshader laden
  19. oStringList.LoadFromFile(pPath+pDirectory+pName+'.fs');
  20. ShaderText:=PChar(oStringList.Text); //pchar
  21. ShaderLength:=length(ShaderText);
  22. glShaderSource(oFragment,1,@ShaderText,@ShaderLength);
  23.  
  24. //compilieren & loggen
  25. oStringList.Clear;
  26.  
  27. glCompileShader(oVertex);
  28. oStringList.Add(GetShaderLog(oVertex));
  29.  
  30. glCompileShader(oFragment);
  31. oStringList.Add(GetShaderLog(oFragment));
  32.  
  33. glAttachShader(oProgram,oVertex);
  34. glAttachShader(oProgram,oFragment);
  35.  
  36. glLinkProgram(oProgram);
  37.  
  38. glDeleteShader(oVertex);
  39. glDeleteShader(oFragment);
  40.  
  41. oStringList.Add(GetProgramLog(oProgram));
  42. oStringList.SaveToFile(pPath+pDirectory+pName+'-log.txt');
  43. oStringList.Free;
  44. 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.

_________________
thanks to the internet we have rule 34, wich states that if something exists, theres a pornographic version of it,


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glsl fehler
BeitragVerfasst: Mo Mär 26, 2012 08:32 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,

bei glShaderSource steht immer die Id 1 drin, eigentlich sollte dort die mit glCreateShader erzeugte Id drin stehen, also oProgram bzw. oVertex. sorry, die stehn ja vorne :oops:

Viele Grüße
dj3hut1

_________________
Wenn Gauß heute lebte, wäre er ein Hacker.
Peter Sarnak, Professor an der Princeton University


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glsl fehler
BeitragVerfasst: Mo Mär 26, 2012 18:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Also mir kommt ja die Zeile mit PChar(oStringList.Text) sehr spanisch vor.

Mach mal bitte folgendes. Finde heraus, zu was
Code:
  1. Sizeof(Char);
evaluiert.

In der zwischenzeit probiere aus:
Code:
  1. procedure TShader.Load();
  2. var oStringList: TStringList;
  3.     test: AnsiString;
  4.     []
  5. begin
  6.   []
  7.   test := oStringList.Text;
  8.   ShaderLength := Length(test);
  9.   glShaderSource(oFragment, 1, @test[1], @ShaderLength);
  10.   // das gleiche für den vertex-shader.
  11.   []
  12. end;


Ich habe diesem PChar-„Cast“ noch nie vertraut ;).

greetings

//Edit: Tippfehler korrigiert. Danke, Bergmann.

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glsl fehler
BeitragVerfasst: Mo Mär 26, 2012 18:22 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

PChar zeigt auf das erste Zeichen im String. Also sollte da lieber das stehen:
Code:
  1. glShaderSource(oFragment, 1, @test[1], @ShaderLength);
Bei mir meckert da auch der Compiler, wenn ich bei nem String auf Index 0 zugreifen will.

€: hab mir grad nochmal den Code angesehen:
Code:
  1. //vertexshader laden
  2. oStringList.LoadFromFile(pPath+pDirectory+pName+'.vs');
  3. ShaderText:=PChar(oStringList.Text); //pchar
  4. ShaderLength:=length(ShaderText);
  5. glShaderSource(oVertex,1,@ShaderText,@ShaderLength);
ShaderText ist ein String. Also kannst du dir das PChar auch sparen, weil Delphi das wieder auf einen String zurück bricht. Und jetzt kommt das entscheidende: @ShaderText is kein PChar, sondern ein Zeiger auf einen String, also ein PString und das ist nicht das selbe! Also hier einfach @ShaderText[1] dann sollte es funktionieren.

Code:
  1. glShaderSource(oVertex,1,PChar(oStringList.Text),@ShaderLength);
Das sollte rein theoretisch auch funktionieren. Zumindest is der Zeiger derselbe, wie bei @oStringList.Text[1]. Aber da das Ganze ein Rückgabewert aus einer Funktion ist würde ich dem auch nicht so vertrauen. Der Weg über den String als lokale Variable ist hier der bessere (so wie du das jetzt hast).

MfG Bergmann.

MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glsl fehler
BeitragVerfasst: Di Mär 27, 2012 11:40 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 15, 2009 20:48
Beiträge: 111
Wohnort: Berlin
Programmiersprache: Delphi,JS,PHP,AS3,C#
da hab ich wenigstens schonmal was gelernt.

sizeof(cahr) gibt 2 aus.

wenn ich aus Shadertext nen AnsiString mache, und @shadertext[1] verwende (0 geht nicht) bekomme ich im log für die shader einen fehler beim compilieren. benutze ich einfach nur @shadertext1 und lasse shadertext nen string sein, ändert sich nichts.

aber ich habs trozdem hinbekommen:

Code:
  1. procedure TShader.Load(pPath,pDirectory,pName: String);
  2. var oStringList: TStringList;
  3.     ShaderText: AnsiString;
  4.     ShaderLength: Integer;
  5. begin
  6.  
  7. [...]
  8.  
  9. //vertexshader laden
  10. oStringList.LoadFromFile(pPath+pDirectory+pName+'.vs');
  11. ShaderText:=oStringList.Text;
  12. ShaderLength:=length(ShaderText);
  13. glShaderSource(oVertex,1,@ShaderText,@ShaderLength);
  14.  
  15. [...]
  16.  


so. :) also nur n ansistring draus machen, aber keinen index mitgeben

danke für die hilfe!

_________________
thanks to the internet we have rule 34, wich states that if something exists, theres a pornographic version of it,


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glsl fehler
BeitragVerfasst: Di Apr 03, 2012 16:25 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Okay, das mit der 0 war nen harter Fehler von mir. Daran merkt man, dass ich wohl fast nen Jahr kein Pascal mehr angefasst habe…

Dass @ShaderText funktioniert ist „einfach falsch“. Der Lesbarkeit halber würde ich @ShaderText[1] verwenden.

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 15 Queries | GZIP : On ]