Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
ich hab seit paar Tagen meinen neuen PC und hab heut mal wieder was mit Shadern zu tun gehabt. Beim linken des ProgrammObjects kommt jetzt immer ein Fehler:
Code:
Fragment shaders(s) failed to link, vertex shaders(s) failed to link. unexpected error. unexpected error.
Am Code hab ich nix geändert und mit meinem alten PC hat er noch funktioniert. Jetz hab ich ne ATI Radeon HD 5970 und Win7 x64. Kann mir da jmd helfen? Wäre super.
€: hab den Code ganz vergessen^^
Code:
procedure TglShader.Load; var FShaderLen, VShaderLen: Integer; begin //Objekte erstellen fFShaderObj := glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB); Log(GetInfoLog(fFShaderObj));
Also mich wundert irgendwie das du mit GetInfoLog sowohl Compiler- als auch Linker-Fehler abfragst. Dafür sind nämlich unterschiedliche OpenGL-Funktionen zuständig.
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
jetz wo du das sagst wunder ich mich auch, ich hab das so aus dem Tutorial. So sieht das ganze aus:
Code:
function TglShader.GetInfoLog(glObject: GLHandleARB): String; var Msg: PChar; var bLen, sLen: Integer; begin glGetObjectParameterivARB(glObject, GL_OBJECT_INFO_LOG_LENGTH_ARB , @bLen); if bLen > 1 then begin GetMem(Msg, bLen * SizeOf(Char)); glGetInfoLogARB(glObject, bLen, sLen, Msg); result := PChar(Msg); Dispose(Msg); end; end;
Aber ist das am Ende nicht das gleiche wie glGetProgramInfoLog bzw. glGetShaderInfoLog?
€: also mit glGetProgramInfoLog bzw. glGetShaderInfoLog erhalte ich genau die gleichen Fehlermeldungen...
Ah, ich stelle gerade fest das du wahrscheinlich die Extension GL_ARB_shader_objects benutzt, richtig? Ich bin OpenGL 2.0 gewöhnt wo die Funktion dann für Shader und Programme aufgetrennt wurde. Sorry.
Zitat:
Aber ist das am Ende nicht das gleiche wie glGetProgramInfoLog bzw. glGetShaderInfoLog?
Eben nicht! Niemals eine Extension mit Funktionen des OpenGL Kerns mischen! Das kann funktionieren, aber auch merkwürdigste Fehler verursachen.
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Okay, gut zu wissen. Ich hab grad nochma den Rest des Codes durchgearbietet und geguckt, ob ich irgendwo nicht die Funktion der Erweiterung benutze. Aber der Fehler kommt immer noch. Dann hab ich mir gedacht, das ich ja mal ein anderes Programm testen kann, was auch Shader benutzt. Also hab ich mir nochma schnell Geal gesaugt un getestet. Da funktionieren die Shader auch nicht...
Ist die Extension den verfügbar? Bevor du eine Extension benutzt immer gucken ob die auch da ist. Gut möglich das ein neuer Treiber dieser uralte Extension nicht mehr kann.
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Ich hab auf GL_ARB_shader_objects geprüft, die müsste ja alle Funktionen enthalten die ich benutze und die is verfügbar. Oder muss ich auch noch auf GL_ARB_vertex_program, GL_ARB_vertex_shader, ... prüfen? €: es is aber vlt eh besser, wenn ich es auf die Funktionen vom OpenGL Kern umbau, oder?
Ich hab auch grad ma noch den neusten Treiber geladen. Jetz schmiert er beim Linken mit ner Zugriffsverletzung ab -.-
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hat niemand eine Idee, wie ich den Fehler noch beheben könnte? Kann es sein, das es ein Fehler im Treiber ist.? Sollte ich mcih da evtl mal an ATI/AMD wenden?
Versuch es erst mal mit den Funktionen aus dem OpenGL-Kern.
Wenn das nicht geht lass dir von irgendwem eine Anwendung geben die definitiv auf einer aktuellen ATI-Karte unter Win7 läuft. Wenn die auch nicht geht, dann frag mal ATI.
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
ich hab es ja schon mit den OpenGL-Funktionen probiert, die gehen auch nicht (hab ich oben vergessen zu schreiben). Da guck ich ma ob jmd ungefähr das selbe System wie ich hat. Wenn ich Neuigkeiten hab meld ich mich nochma.
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
ich hab grad festgestellt, das es am ShaderCode liegt. Ich hab zum test einfach mal einen Shader erstellt, der einfach nur Zeichnet und der funktioniert. Der Shader der jetzt nicht geht ist ein PerPixelLight-Shader. Seltsamerweiße ging der mit meinem alten System. Ich hab auch den Fehler gefunden, nur versteh ich es nicht. Wenn ich im Fragment-Shader auf lightvec mit einem festen Index zugreife funktioniert es. Wenn ich die Schleifenvariable benutze kommt der Fehler. Seltsamerweiße funktioniert der Zugriff im Vertex-Shader auch über die Schleifenvariable. Hier der Code:
Könnte es etwas damit zu tun haben das du hier so komisch auskommentierst?
Zitat:
//* texture2D(Texture0,
Meine Theorie ist das der dadurch das du das varying-Array benutzt auf eine andere GLSL-Version schaltet. (*) In dieser anderen Version nimmt der das als /* ... */ Kommentar...da aber kein */ kommt gibt's nen Error.
(*) Ich glaub GLSL 1.0 kann das noch nich, müsste man mal checken, habe gerade die Spec nicht zur Hand.
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
ohne den Kommentar gehts auch nicht. Außerdem hat es ja mit meinem alten System funktioniert (auch mit dem Kommentar) Ich hab noch ne andere Idee, das check ich morgen mal, dann meld ich mich nochma. bis dahin gn8
Mitglieder in diesem Forum: 0 Mitglieder und 5 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.