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

Aktuelle Zeit: Fr Jul 11, 2025 23:13

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Probleme mit dem Compilieren
BeitragVerfasst: Di Sep 11, 2007 16:05 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich habe ein Problem GLSL unter Fedora7 compiliert zu bekommen.
Als ich gestern meine portierte Demo auf mein Fedora7 ausprobieren wollte musste ich feststellen, dass ich keinen Shader compiliert bekomme. Ich habe in die unterstützten Versionen ARB und so weiter geguckt und mein ATI Treiber sagt das es möglich ist.
Also hab ich von oc2k1 sein Lumina compiliert und getestet, siehe da es geht.
Nach viel rätselraten habe ich mal den Code von Lumina, zum erstellen von GLSL , genommen und es geht trotzdem ned.
Ich habe die GLSL ARB und OGL2.0 Befehle probiert mit gleichem Ergebnis, beim Linken schmiert die app weg.
Ich nutzte den 2.1 Header von dglopengl(vom 20.02.2007).
Code:
  1. constructor TKar_GLSlangShader.Create(FragmentShader, VertexShader:TStrings);
  2. var
  3.   ShaderText           : pchar;
  4.   res                  : GLInt;
  5.   VertexShaderObject   : GLHandleARB;
  6.   FragmentShaderObject : GLHandleARB;
  7.  
  8.   function GetInfo(shader:GLHandleARB):string;
  9.   var
  10.     blen,slen : GLInt;
  11.     InfoLog   : PGLCharARB;
  12.   begin
  13.     //Überprüft ob eine InfoLog vorliegt
  14.     //Check if a infolog exist
  15.     glGetObjectParameterivARB(shader, GL_OBJECT_INFO_LOG_LENGTH_ARB , @blen);
  16.     //Wenn Informationen bereit liegen wird ein passender Speicher reserviert und die Informationen geladen
  17.     //if a information exist then reserve enough memory and load the information
  18.     if blen > 0 then
  19.     begin
  20.       GetMem(InfoLog, blen);
  21.       //Wenn die Informationen abgeholt wurden, werden diese aus dem Log entfernt
  22.       //If the informations read then the log will be clear
  23.       glGetInfoLogARB(shader, blen, @slen, InfoLog);
  24.       result:=string(infolog);
  25.       Dispose(InfoLog);
  26.     end;
  27.   end;
  28. begin
  29.     //Erstellt leere Shader- und Program-objekte
  30.     VertexShaderObject   := glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
  31.     FragmentShaderObject := glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
  32.  
  33.     //Lädt die Vertex- und Fragment-shader
  34.     ShaderText:=pchar(VertexShader.Text);
  35.     glShaderSourceARB(VertexShaderObject, 1, @ShaderText, nil);
  36.     ShaderText:=pchar(FragmentShader.Text);
  37.     glShaderSourceARB(FragmentShaderObject, 1, @ShaderText, nil);
  38.     //Compiliert die Shaderobjekte und überprüft auf Probleme
  39.     glCompileShaderARB(VertexShaderObject);
  40.     {$IFDEF KARLOGGER}
  41.       DebugMsg(GetInfo(VertexShaderObject));
  42.     {$ELSE}
  43.       WriteLn(GetInfo(VertexShaderObject));
  44.     {$ENDIF}
  45.     //Compiliert die Shaderobjekte und überprüft auf Probleme
  46.     glCompileShaderARB(FragmentShaderObject);
  47.     {$IFDEF KARLOGGER}
  48.       DebugMsg(GetInfo(FragmentShaderObject));
  49.     {$ELSE}
  50.       WriteLn(GetInfo(FragmentShaderObject));
  51.     {$ENDIF}
  52.     FShader:=glCreateProgramObjectARB;
  53.     //Fügt Vertex- und Fragment-Shader zu Shader zusammen
  54.     glAttachObjectARB(FShader, VertexShaderObject);
  55.     glAttachObjectARB(FShader, FragmentShaderObject);
  56.  
  57.     //Löscht den VS und FS
  58.     glDeleteObjectARB(VertexShaderObject);
  59.     glDeleteObjectARB(FragmentShaderObject);
  60. writeln(FShader);
  61. writeln(cardinal(@gllinkprogramARB));
  62.     //Linkt die an Shader gebundenen Objekte zu einem Program
  63.     glLinkProgramARB(FShader);
  64. writeln('geht');
  65. end;

Die Shell Ausgabe.

Code:
  1. [thomas@localhost demos]$ ./kargltest
  2.  
  3.  
  4. -2147483647
  5. 2378112
  6. An unhandled exception occurred at $00000000 :
  7. EAccessViolation : Access violation
  8.   $00000000
  9.   $011D8709
  10.   $011D3648
  11.   $011CCC50
  12.   $011CE9FD
  13.   $01080B32
  14.   $01085890
  15.   $01028D76
  16.   $010294FD
  17.   $0024499C
  18.   $08060507
  19.   $08049516
  20.  


Man kann sehen, dass alle Befehle durchlaufen und ein gültiger Shader erzeugt wurde, die codes compiliert und zugewiesen wurden aber beim linken dann abschmiert. Der Code erzeugt keine OpenGL Fehler und alle Funktionen haben eine Adresse zugewiesen.

Ich habe auch mal ein Fehler in den Shadercode eingebaut und dieser wird mir auch von OGL zurück gegeben und die App stürzt ned ab aber ich hab ja dann auch kein shader.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 11, 2007 17:00 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Hast du mal versucht, die Shader erst nach dem Linken zu löschen? Oder in glShaderSource die Länge explizit mitanzugeben?

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 11, 2007 18:18 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
WhiteHunter hat geschrieben:
Hast du mal versucht, die Shader erst nach dem Linken zu löschen? Oder in glShaderSource die Länge explizit mitanzugeben?

MfG

Ja hab ich schon probiert aber es ändert garnichts. Ich hab mir kontrolmässig auch mal den Source zurück geben lassen und der ist korrekt zurück gekommen.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 11, 2007 21:57 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich habe die gleiche demo von einen kumpel mit gf und gleichen os und libs testen lassen und bei ihm läuft es sauber durch.
Ich verstehe aber ned wieso es bei mir ned geht, wenn es der treiber ist,dann müsste doch auch oc2k1 sein lumina ned gehen, da ich die gleichen befehle nutzte.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 12, 2007 01:14 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich habe das Problem gefunden und es lag an der Texturladeroutine, die hat irgendwie probleme mit dem shader gemacht.
Nun hab ich erstmal die Routine entfernt und das programm läuft sauber.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]