DGL
https://delphigl.com/forum/

SIGSEV wegen Bezeichnername
https://delphigl.com/forum/viewtopic.php?f=20&t=11451
Seite 3 von 3

Autor:  Sascha Willems [ Mi Nov 04, 2015 20:01 ]
Betreff des Beitrags:  Re: SIGSEV wegen Bezeichnername

mathias hat geschrieben:
Code:
  1.   with OpenGLControl do begin
  2.     OpenGLMajorVersion := 3;
  3.     OpenGLMinorVersion := 3;  
  4.   end;


Welche Flags setzt das OpenGLControl denn? Wenn man eine feste OpenGL-Version will gibt es ja noch zusätzliche Fags. Evtl. macht das OpenGL Control schon was falsch und baut die Context-Attribute nicht korrekt.

Ich würde testweise mal keinen versionierten Context anfordern.

Autor:  mathias [ Mi Nov 04, 2015 20:31 ]
Betreff des Beitrags:  Re: SIGSEV wegen Bezeichnername

Zitat:
Ich würde testweise mal keinen versionierten Context anfordern.

Ich habe 0,0 eingesetzt, das gleiche Ergebniss. Mit dem Intel-Chip hätte der Shader-Compiler mit 0,0 gemotzt.

Nochmals zum Hauptthema zurück, dieses Shader-Paar macht Probleme, die Texturen haben einen Rot stich.
Der Shader stellt Bumpmaping dar.

Vertex:
Code:
  1. #version 330
  2. layout (location = 0) in vec3 inPos;
  3. layout (location = 1) in vec3 inNormal;
  4. layout (location = 10) in vec2 inVertexUV;
  5.  
  6. out Data {
  7.   vec3 Position;
  8.   vec3 Normal;
  9.   vec2 UV;
  10. } DataOut;
  11.  
  12. uniform mat4 ObjectMatrix;
  13. uniform mat4 CameraMatrix;
  14.  
  15. void main()
  16. {
  17.   gl_Position = CameraMatrix * vec4(inPos, 1.0);
  18.   DataOut.UV = inVertexUV;
  19.   DataOut.Position = vec3(ObjectMatrix * vec4(inPos, 1.0));
  20.   DataOut.Normal =  normalize(mat3(ObjectMatrix) * inNormal);
  21. }  


Fragment:
Code:
  1. #version 330
  2. in Data {
  3.   vec3 Position;
  4.   vec3 Normal;
  5.   vec2 UV;
  6. } DataIn;
  7.  
  8. out vec4 OutColor;
  9.  
  10. uniform sampler2D myTextureSampler[4];
  11.     struct materialParams {
  12.        vec4 emission;
  13.        vec4 ambient;
  14.        vec4 diffuse;
  15.        vec4 specular;
  16.        float shininess;     // Glanz
  17.     };
  18.  
  19.     struct Lighting {
  20.       vec4 position;
  21.       vec4 ambient;    // Umgebungslicht
  22.       vec4 diffuse;    // Lichtfarbe
  23.       vec4 specular;   // Spiegelnd
  24.     };
  25.  
  26.     uniform materialParams material; // Dieser Bezeichner ist zickig. material auf nmaterial umbenannt, das Problem ist weg.
  27.                                      // glUniformLocation ist auch angepasst.
  28.     uniform Lighting LightSource;
  29.  
  30.     vec4 Light(in vec3 Normal, in vec3 Position)
  31.     {
  32.       vec3 N       = normalize(Normal);
  33.       vec4 emissiv = material.emission;
  34.       vec4 ambient = material.ambient * LightSource.ambient;
  35.       vec3 L = vec3(0.0);
  36.       vec3 H = vec3(0.0);
  37.       L            = normalize(vec3(LightSource.position) - Position);
  38.       vec4 Pos_eye = vec4(0.0, 0.0, 1.0, 0.0);
  39.       vec3 A       = Pos_eye.xyz;
  40.       H            = normalize(L + A);
  41.       vec4 diffuse       = vec4(0.0, 0.0, 0.0, 1.0);
  42.       vec4 specular      = vec4(0.0, 0.0, 0.0, 1.0);
  43.       float diffuseLight = max(dot(N, L), 0.0);
  44.       if (diffuseLight > 0.0) {
  45.         diffuse         = diffuseLight * material.diffuse * LightSource.diffuse;
  46.         float specLight = pow(max(dot(H, N), 0.0), material.shininess);
  47.         specular        = specLight * material.specular * LightSource.specular;
  48.       }
  49.       return emissiv + ambient + diffuse + specular;
  50.     }
  51.  
  52. void main() {
  53.   vec3 Normal = (texture2D(myTextureSampler[1], DataIn.UV.st).rgb * 2.0 - 1.0) + normalize(DataIn.Normal);
  54.   OutColor = (texture( myTextureSampler[0], DataIn.UV ));
  55.   float cdummy = OutColor.a;
  56.   OutColor = OutColor * Light(Normal, DataIn.Position);
  57.   OutColor.a = cdummy;
  58. }

Autor:  Sascha Willems [ Mi Nov 04, 2015 20:36 ]
Betreff des Beitrags:  Re: SIGSEV wegen Bezeichnername

Ein Fabstich lässt sich ja ganz einfach "debuggen". Einfach testweise alle an der Berechnung beteiligten Einzelkomponenten an die FragmentFarbe zuweisen und laufen lassen. Dann sieht man ja schnell wo es herkommt. Ich tippe auf einen falsch gesetzten Uniform oder einen Fehler bei der Berechnung.

Autor:  mathias [ Do Nov 05, 2015 18:26 ]
Betreff des Beitrags:  Re: SIGSEV wegen Bezeichnername

So wie es aussieht, ist das Problem mit dem Rotstich gelöst.
Im Code hat ein glUseProgram gefehlt, jetzt ist es dem Shader egal wie der Bezeichner heisst.

Ein Rätsel ist es immer noch, das es je nach Bezeichnername anders reagiert. :roll:
Der Rotstich hätte nach meiner Meinung immer kommen müssen.
Der Beleuchtung Code ist bei jedem Mash der gleiche.

Seite 3 von 3 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/