ich bin gerade an einer kleinen 2D-Engine mit GLFW3 und GLEW und schaffe es nicht, dass etwas in mein Fenster gerendert wird, wenn ich das Core-Profil von OpenGL 3.3 in GLFW einstelle. Sowohl unter Linux mit Mesa und Intel als auch unter Windows mit Radeon bleibt das Bild schwarz. Folgende Zeilen nutze ich um in GLFW3 das Core-Profil zu aktivieren. Ohne diese Zeilen wird alles wie gewünscht gerendert:
Meines Wissens nach benutze ich ausschließlich OpenGL 3.3 Core Profil kompatible Befehle und Shader. Mit CodeXL von AMD habe ich mein Programm mal geprofiled: Es scheinen alle ShaderPrograms, VertexArrayObjects und Texturen usw. im Context vorhanden zu sein. Bei der Kompilierung der Shader wird auch kein Log ausgegeben, sprich es gibt keine Fehler. In den Shadern ist natürlich die Version 330 core angegeben. CodeXL nennt ohne die Zeilen oben die OpenGL Version 4.4 und GLSL Version 4.4. Füge ich die Zeilen oben hinzu, wird die OpenGL Version zu 3.3 und die GLSL Version ist weiterhin 4.4. In beiden Fällen wurden die Shader angeblich erfolgreich zu Programs gelinked. Gibt es eine Möglichkeit herauszufinden, ob bestimme OpenGL Befehle im Code nicht im Core-Profil definiert sind?
Wird vor dem Rendern dann natürlich alles passend gebindet.
Re: OpenGL 3.3 Core Profil
Verfasst: 08.06.2015, 13:08
von Sternmull
Ich würde mal noch gucken ob eine der Debug-Extensions vielleicht einen nützlichen Hinweis ausspuckt. Ansonsten nur eine ganz wilde Spekulation: Musst du vielleicht an der Pufferumschaltung was ändern? Vielleicht ist ja nur dieser Schritt dran schuld das das Bild nicht ankommt.
Re: OpenGL 3.3 Core Profil
Verfasst: 08.06.2015, 14:31
von Raphael
Meines Wissens nach sollte glfwSwapBuffers(window); funktionieren. Ich hab mich auch durch einige Google-Ergebnisse zu dem Thema gekämpft und kann eigentlich nichts finden, dass ich falsch mache. Nach den OpenGL Debug Extensions muss ich mal schauen, noch nie benutzt. Wäre cool, wenn die mir sagen würden, mit welchem Aufruf der nicht zurecht kommt :-/
Re: OpenGL 3.3 Core Profil
Verfasst: 08.06.2015, 15:15
von Schrompf
Siehst Du im Frame Debugger, ob zum Zeitpunkt des DrawCalls alle States richtig sind, so wie Du sie erwartest? Ich habe ehrlich gesagt keine Ahnung, was anders ist, wenn Du bei GLFW das Core Profile bestellst, aber nach meiner Vermutung müssten dann ein paar der glBla()-Funktionszeiger NULL sein. Und das würdest Du unmittelbar beim Aufruf um die Ohren bekommen.
Re: OpenGL 3.3 Core Profil
Verfasst: 08.06.2015, 15:34
von Spiele Programmierer
Vielleicht dumme Frage, aber hast du mal "glGetError" überprüft? Wenn nein, solltest du das als erstes machen.
Die Debug-Ausgabe ist in der Tat auch nützlich und ersetzt theoretisch "glGetError".
Wenn du eine OpenGL-Funktion verwendest, die in dem Profil nicht vorhanden ist, sollte das auf beiden Wegen gemeldet werden.
Wenn du den obsoluten Müll gleich komplett weg haben willst, gibt es auch noch die Option den OpenGL Loader Generatorzu verwenden. Im Gegensatz zu GLEW stellt er dir nur genau die Funktionen zur Verfügung die auch brauchst. Die Compatiblity Extension verseucht also nicht den Header.
Ich kann mich auch erinnern, dass ich in GLEW für die Verwendung mit einem Core Profile immer "glewExperimental" auf "GL_TRUE" setzen musste, weil sonst GLEW selbst veraltete Funktionen verwenden mochte. (Ich glaube "glGetString(GL_EXTENSIONS)", welches in OpenGL 3.3 nicht mehr existiert, war damals das Problem)
Re: OpenGL 3.3 Core Profil
Verfasst: 10.06.2015, 16:06
von Raphael
Ok, glGetError() war eine gute Idee. Jetzt konnte ich das Problem (oder auch eines der Probleme) mit ein wenig Logging Gehacke auf eine unschöne Stelle eingrenzen:
Hast du mal versucht den Fehler einfach zu ignorieren?
Das OpenGL Wiki schreibt dazu, dass ämlich teilweise trozt "glewExperimental = GL_TRUE;" ein GL_INVALID_ENUM-Fehler auftreten kann, den man allerdings ignorieren kann.
Ich habe bisher auch noch meistens mit GLEW gearbeitet, aber wenn es Probleme gibt solltest du vielleicht tatsächlich zum Beispiel auf den OpenGL Loader Generator umsteigen.
Re: OpenGL 3.3 Core Profil
Verfasst: 10.06.2015, 18:20
von Raphael
Spiele Programmierer hat geschrieben:Ich habe bisher auch noch meistens mit GLEW gearbeitet, aber wenn es Probleme gibt solltest du vielleicht tatsächlich zum Beispiel auf den OpenGL Loader Generator umsteigen.
Genau das habe ich gerade versucht. Belasse ich glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE) im Code, öffnet sich kein Fenster. Kommentiere ich es aus, kommt die Meldung error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES. Unter ArchLinux mit Intel und Mesa. Ich hab jetzt aber wieder eine glGetError Ausgabe von 1280 pro Frame, mal sehen was da schief läuft.
EDIT: Ach, kann es sein, dass GL_QUADS deprecated sind? Mal zu Triangles wechseln...