Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
ich versuch grad den Normal Debugging-Shader aus der Shadersammlung bei mir zum laufen zu bringen, aber so richtig will mir das nicht gelingen. Der Shader kompiliert ohne Fehler oder Warnungen, aber Bild hab ich trotzdem keins.
Items[i].Compile;//Items ist eine Liste von glShaderObj-Klassen (hier 3 Stück: VertShader, FragShader, GeoShader)
glLinkProgram(fProgramObj);
Ich hab auch schon versucht glProgramParameteri mit GL_GEOMETRY_INPUT_TYPE und Co. aufzurufen (also nicht die _ARB bzw. _EXT-Konstanten) aber da bekomm ich ein GL_INVALID_ENUM von glGetError. Hab ich vlt. noch irgendwo was vergessen?
Registriert: Di Sep 06, 2005 18:34 Beiträge: 362 Wohnort: Hamburg
Hey,
ich kenne mich mit Geometry Shadern nicht aus, aber ich hab mal einen schnellen Blick in die Docu und den GLEW header geworfen. Anscheinend giebt es in OpenGL < 4 glProgramParameter garnicht. D.h. du musst die ARB/EXT Variante benutzen. Allerdings gibt man diese Werte in OpenGL >= 3(.2) direkt im Shader über einen layout specifier an. Also auch in OpenGL 4 nicht über glProgramParameter. Die konstanten sind nur zum Abrufen der entsprechenden Werte da (mit glGetProgram).
Hier die Werte der Konstanten aus dem GLEW Header. Daraus wird ersichtlich warum du einen GL_INVALID_ENUM bekommst.
Code:
#define GL_GEOMETRY_INPUT_TYPE 0x8917
#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB
#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB
Also mein Tip (ohne mich damit auszukennen): Benutze für OpenGL <= 2.1 glProgramParameterARB/EXT und für OpenGL >= 3 den layout specifier im shader.
Hier nochmal ein Artikel aus dem opengl wiki: https://www.opengl.org/wiki/Geometry_Shader Dort steht auch in der NOTE am Anfang, dass die Extensions sich durchaus von der core Funktionalität unterscheiden.
Gruß Shai
_________________ Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
ich hab das mal fix ausprobiert. Ich hab nen 4.2er Context, also hab ich das im Shader über das layout angegeben, da bekomm ich dann beim compilieren nen Fehler: Unbekanntes Zeichen "". Keine Ahnung was er mir damit sagen will. Die ARB/EXT Funktion hab ich auch mal probiert, aber da komm ich auf das gleiche Ergebnis wie vorher.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
PAnsiChar vs. PWideChar?
grüße
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my 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
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
bei mir sin alles AnsiString (zumindest im Shader). Ich hatte in dem ShaderBuilder ne Funktion die ihr result nicht initialisiert hat, da kahm dann mist raus. Hab die layouts jetzt drin, aber seh trotzdem noch nichts So sieht das Ganze aus:
Registriert: Do Mär 05, 2009 20:17 Beiträge: 284 Wohnort: Kaiserslautern
also ich kann ja kein C aber ausser in Zeile 12 hast du überall Vec4 für Vertex stehn... nur da hast du Vec3 stehn. und hat ein vec3 einen [3]ten wert? (Zeile 9)
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Das is kein C, das ist die ShaderSprache glsl^^ Ich hab mal noch bisl rum probiert. Wenn ich anstatt der Normale einfach nen vec4(1, 0, 0, 0) drauf addiere, dann gehts. Also haut irgendwas mit dem varying net hin. Ich hab zum Test im VertexShader die Normales auf vec4(1, 0, 0, 0) gesetzt.
€: habs gefunden. da fehlt ein "in"
Code:
varyinginvec3 vNormal[3];
was so ein kleines Wörtchen doch ausmachen kann^^ Danke an Alle die da ihren Gehirnschmalz mit rein gesetckt haben
Registriert: Di Sep 06, 2005 18:34 Beiträge: 362 Wohnort: Hamburg
Hey,
mir fällt da noch etwas auf: der 'varying' qualifier ist deprecated seit GLSL 1.30. Du gibst die Version explizit als 1.50 an, solltest also auf die neuere 'in' und 'out' qualifier umsteigen. Und du solltest dich entscheiden. Entweder benutzt du OpenGL >= 3.2 geometry shader, oder du benutzt die Extension (die Extension ist noch aktiviert im shader). Was in der registry https://www.opengl.org/registry/specs/A ... hader4.txt unter "Dependencies on OpenGL 3.2" und "Modifications to the OpenGL Shading Language Specification" steht, lässt mich jedenfalls denken, dass es keine gute Idee ist Extension und Core zu mischen.
Gruß Shai
_________________ Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)
Zuletzt geändert von Shaijan am Di Apr 16, 2013 17:00, insgesamt 1-mal geändert.
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
jo da muss nochmal dran gefeilt werden um die ganzen unterschiedlichen Versionen abzudecken. Ich war nur erstma happy das es funktioniert und wollte das hier kundtun^^
Mitglieder in diesem Forum: 0 Mitglieder und 3 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.