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

Aktuelle Zeit: Do Mai 16, 2024 14:04

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



Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Okt 01, 2010 15:50 
Offline
DGL Member
Benutzeravatar

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));

  fVShaderObj := glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
  Log(GetInfoLog(fVShaderObj));

  //Code an ShaderObjekte übergeben
  VShaderLen := Length(fVShaderCode);
  FShaderLen := Length(fFShaderCode);

  glShaderSourceARB(fVShaderObj, 1, @fVShaderCode, @VShaderLen);
  glShaderSourceARB(fFShaderObj, 1, @fFShaderCode, @FShaderLen);


  glCompileShaderARB(fVShaderObj);
  Log(GetInfoLog(fVShaderObj));

  glCompileShaderARB(fFShaderObj);
  Log(GetInfoLog(fFShaderObj));

  //ShaderObjekte an ProgrammObjekt binden
  glAttachObjectARB(fProgObj, fVShaderObj);
  glAttachObjectARB(fProgObj, fFShaderObj);

  //ShaderObjekte freigeben
  glDeleteObjectARB(fVShaderObj);
  glDeleteObjectARB(fFShaderObj);

  //Shader Linken
  glLinkProgramARB(fProgObj);
  Log(GetInfoLog(fProgObj));
end;

das ProgrammObject wird beim erstellen des TglShader-Objekts mit angelegt

MfG & Thx Bergmann.

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


Zuletzt geändert von Bergmann89 am Fr Okt 01, 2010 18:13, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Okt 01, 2010 16:01 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
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.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Okt 01, 2010 16:17 
Offline
DGL Member
Benutzeravatar

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

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  
BeitragVerfasst: Fr Okt 01, 2010 16:39 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
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.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Okt 01, 2010 17:23 
Offline
DGL Member
Benutzeravatar

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

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Okt 01, 2010 17:28 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
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.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Okt 01, 2010 17:45 
Offline
DGL Member
Benutzeravatar

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

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Okt 03, 2010 01:17 
Offline
DGL Member
Benutzeravatar

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?

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Okt 03, 2010 08:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
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.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Okt 03, 2010 14:35 
Offline
DGL Member
Benutzeravatar

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.

MfG & Thx 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  
BeitragVerfasst: So Okt 03, 2010 18:45 
Offline
DGL Member
Benutzeravatar

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:
Code:
//Vertex
const int LIGHT_COUNT = 1;
varying vec3 N;
varying vec3 V;
varying vec3 lightvec[LIGHT_COUNT];
void main(void)
{
    gl_TexCoord[0]  = gl_MultiTexCoord0;
    N                  = normalize(gl_NormalMatrix * gl_Normal);
    V                = vec3(gl_ModelViewMatrix * gl_Vertex);
    for(int i = 0; i < LIGHT_COUNT; i++){
        lightvec[i] = normalize(gl_LightSource[i].position.xyz - V);
    }
    gl_Position     = gl_ModelViewProjectionMatrix * gl_Vertex;
    gl_FrontColor   = gl_Color;
}
//end

//Fragment
const int LIGHT_COUNT = 1;
const float PI = 3.14159265;
varying vec3 N;
varying vec3 V;
varying vec3 lightvec[LIGHT_COUNT];
uniform sampler2D Texture0;

void main(void){   
    vec3 Eye = normalize(-V);
    vec4 EndColor = vec4(0.0, 0.0, 0.0, 0.0);
    vec4 EndSpec  = vec4(0.0, 0.0, 0.0, 0.0);
    for(int i = 0; i < LIGHT_COUNT; i++){
        vec3 Reflected = normalize(reflect(-lightvec[0], N)); //HIER kommt der fehler wenn ich [i] benutze
        vec4 IAmbient  = gl_LightSource[i].ambient  * gl_FrontMaterial.ambient;
        vec4 IDiffuse  = gl_LightSource[i].diffuse  * gl_FrontMaterial.diffuse  * max(dot(N, lightvec[0]), 0.0);
        vec4 ISpecular = gl_LightSource[i].specular * gl_FrontMaterial.specular * pow(max(dot(Reflected, Eye), 0.0), gl_FrontMaterial.shininess);
        EndColor += (IAmbient+IDiffuse);
        EndSpec  += ISpecular;
    }
    EndColor += gl_FrontMaterial.emission;

    gl_FragColor = (gl_FrontLightModelProduct.sceneColor + EndColor); //* texture2D(Texture0, vec2(gl_TexCoord[0]));

    gl_FragColor += EndSpec;
}
//end


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  
BeitragVerfasst: So Okt 03, 2010 19:56 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ist das reproduzierbar in einem Minimalshader?
Wenn ja, dann Bugreport an ATI.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Okt 03, 2010 21:17 
Offline
DGL Member
Benutzeravatar

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

also das geht:
Code:
//Vertex
const int COUNT = 8;
varying vec3 vecarr[COUNT];
void main(void)
{
   gl_Position     = gl_ModelViewProjectionMatrix * gl_Vertex;
   for (int i = 0; i < COUNT; i++){
      vecarr[i] = vec3(i/COUNT, 1.0, 1-i/COUNT);
   }
}
//end

//Fragment
const int COUNT = 8;
varying vec3 vecarr[COUNT];
void main(void){
   gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
   for(int i = 0; i < COUNT; i++){
      gl_FragColor *= vec4(vecarr[i], 1.0);
   }
}
//end

komisch...

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  
BeitragVerfasst: So Okt 03, 2010 21:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
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.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Okt 03, 2010 22:34 
Offline
DGL Member
Benutzeravatar

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

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


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


Wer ist online?

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.

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