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

Aktuelle Zeit: So Jul 20, 2025 22:33

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Programmobjekt-Fehlermeldung
BeitragVerfasst: Do Mai 22, 2008 19:09 
Offline
DGL Member

Registriert: Mi Mär 31, 2004 15:24
Beiträge: 114
Hey Leute!


Weiß jemand von euch, woher folgender Fehler kommen kann, den mir der Fehlerstring vom Programmobjekt ausspuckt? Bei mir tritt er nicht auf, nur bei einem Kollegen von mir. Die Shader-FehlerStrings weisen danach keine Fehler auf.


-------------
(5) : error C5041: cannot locate suitable resource to bind parameter "<null atom>"
(5) : error C5041: cannot locate suitable resource to bind parameter "<null atom>"
(5) : error C5041: cannot locate suitable resource to bind parameter "<null atom>"




Viele Grüße


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 22, 2008 19:27 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Also ohne Code ist das buntes Rätselraten.

Gruß Lord Horazont

_________________
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:
BeitragVerfasst: Do Mai 22, 2008 20:02 
Offline
DGL Member

Registriert: Mi Mär 31, 2004 15:24
Beiträge: 114
Nabend,

vor allen Dngen würde mich interessieren, wann ein solcher Fehler generiert wird.


Aber hier den Code - vielleicht findet ja jemand den Fehler :)


Vertexshader:
Code:
  1. void main(void)
  2. {
  3.   gl_Position     = gl_ModelViewProjectionMatrix * gl_Vertex;
  4.   gl_TexCoord[0]  = gl_MultiTexCoord0;
  5.   gl_TexCoord[1]  = gl_TextureMatrix[1] * gl_MultiTexCoord1;
  6.   gl_FrontColor   = gl_Color;
  7. }


Fragmentshader:
Code:
  1.  
  2. uniform float strength;
  3. uniform sampler2D refractTex;
  4. uniform sampler2D bumpMap;
  5.  
  6. void main(void)
  7. {
  8.   vec4 refractcoord;
  9.   vec4 offsetColor = (texture2D(bumpMap, vec2(gl_TexCoord[1])) +
  10.     texture2D(bumpMap, vec2(gl_TexCoord[1]) * 4.0)) / 2.0;
  11.   vec4 origOffset = offsetColor;
  12.   vec4 refractColor = vec4(1.0, 1.0, 1.0, 1.0);
  13.   vec4 blendedColor;
  14.  
  15.   offsetColor -= 0.5;
  16.   offsetColor *= 2.0;
  17.  
  18.   refractcoord = gl_TexCoord[0];
  19.   refractcoord.x += strength * offsetColor[0];
  20.   refractcoord.z += strength * offsetColor[1];
  21.   refractcoord = gl_TextureMatrix[0] * refractcoord;
  22.   refractColor = texture2DProj(refractTex, refractcoord);
  23.  
  24.  
  25.   refractColor[3] = 1.0;
  26.  
  27.   blendedColor = refractColor * gl_Color;
  28.   blendedColor.a = 1.0;
  29.  
  30.   gl_FragColor = blendedColor;
  31. }
  32.  



Hier noch der Code, mit dem die Shader eingebunden und ausgeführt werden, Uniforms übergeben werden und mit dem der Log erzeugt wird:

Code:
  1.  
  2. procedure TShader.Load(VertexCode,FragmentCode : String);
  3.   var tmpLen : Integer;
  4. begin
  5.   ProgramObject  := glCreateProgram;
  6.  
  7.   if Length(VertexCode) > 0 then
  8.   begin
  9.     tmpLen := Length(VertexCode);
  10.     VertexShader := glCreateShader(GL_VERTEX_SHADER);
  11.     glShaderSource(VertexShader,1,@VertexCode,@tmpLen);
  12.     glCompileShader(VertexShader);
  13.     glAttachShader(ProgramObject, VertexShader);
  14.     glDeleteShader(VertexShader);
  15.   end;
  16.  
  17.   if Length(FragmentCode) > 0 then
  18.   begin
  19.     tmpLen := Length(FragmentCode);
  20.     FragmentShader := glCreateShader(GL_FRAGMENT_SHADER);
  21.     glShaderSource(FragmentShader,1,@FragmentCode,@tmpLen);
  22.     glCompileShader(FragmentShader);
  23.     glAttachShader(ProgramObject, FragmentShader);
  24.     glDeleteShader(FragmentShader);
  25.   end;
  26.   glLinkProgram(ProgramObject);
  27.  
  28.   LogManager.AddLog(2,'Info-Log: ' + Self.GetInfoLog);
  29.  
  30. end;
  31.  
  32. procedure TShader.Use;
  33. begin
  34.   glUseProgram(ProgramObject);
  35. end;
  36.  
  37. procedure TShader.AssignInt(Variable : String; Value : Integer);
  38. begin
  39.   glUniform1i(glGetUniformLocation(ProgramObject, PChar(Variable)), Value);
  40. end;
  41.  
  42. procedure TShader.AssignFloat(Variable : String; Value : Double);
  43. begin
  44.   glUniform1f(glGetUniformLocation(ProgramObject, PChar(Variable)), Value);
  45. end;
  46.  
  47. procedure TShader.Stop;
  48. begin
  49.   glUseProgram(0);
  50. end;
  51.  
  52. function TShader.GetInfoLog : string;
  53. var
  54.   Len, Len2: Integer;
  55. begin
  56.   Result := 'Programmobjekt: ';
  57.   glGetProgramiv(ProgramObject, GL_INFO_LOG_LENGTH, @Len);
  58.   SetLength(Result, Length(Result)+Len);
  59.   glGetProgramInfoLog(ProgramObject, Len, Len2, @Result[1]);
  60.  
  61.   Result := Result + ' VertexShader: ';
  62.   glGetShaderiv(VertexShader, GL_INFO_LOG_LENGTH, @Len);
  63.   SetLength(Result, Length(Result)+Len);
  64.   glGetShaderInfoLog(VertexShader, Len, Len2, @Result[Length(Result)-Len-1]);
  65.  
  66.   Result := Result + ' FragmentShader: ';
  67.   glGetShaderiv(FragmentShader, GL_INFO_LOG_LENGTH, @Len);
  68.   SetLength(Result, Length(Result)+Len);
  69.   glGetShaderInfoLog(FragmentShader, Len, Len2, @Result[Length(Result)-Len-1]);
  70. end;


Viele Grüße


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 22, 2008 20:38 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
"Nicht genug Ressourcen"... ich hätte jetzt zur Art der Fehlermeldung gesagt, das ist ne ältere Karte, die nicht genug Platz für irgendeine Sorte von Variablen hat.

Da es sich wohl um die gleichen Shader handelt, an die ich denke, würde ich mich mal aus dem Fenster lehnen:
Nutzt er wirklich nicht die alten Shader? In deren Fragment stehen in Zeile 5 die varyings.
Und im Gegensatz zu meinem Treiberproblem wird da wahrscheinlich die Graka keine vollen 32 floats erlauben.

Nur ne Vermutung, nicht hauen, wenns falsch ist ;)

PS: So wie du das Log verarbeitest, solltest du aufpassen, dass du das #0 nicht mitnimmst, das OGL am Ende eines InfoLogs platziert. Wenn doch, schneidet Delphi an dieser Stelle mW den String ab.

PPS: Zu dem Zeitpunkt, an dem du versuchst, die Shader-Infologs zu erzeugen, hast du die Shader bereits gelöscht. :D

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 23, 2008 09:04 
Offline
DGL Member

Registriert: Mi Mär 31, 2004 15:24
Beiträge: 114
Oh mann...

Du hast vollkommen recht. Das ist jetzt eigentlich zu peinlich.... :)

Vielen Dank für die Mühe!


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 8 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.007s | 14 Queries | GZIP : On ]