Ich habe versucht, etwas opengl Code zu schreiben, der überall funktioniert, aber ohne mich zu sehr einzuschränken.
Ich wollte OpenGLES2 auf Geräten verwenden, die es nur unterstützen, und openGL Core wurde unterstützt.Kompatibilität von OpenGL mit OpenGLES2
Außerdem wollte ich in der Lage sein zu wählen, welche ich verwenden würde, in Laufzeit (wenn verfügbar, natürlich).
Meine Fragen sind:
wenn ich meinen Code mit OpenGL-Bibliothek verknüpfen, um eine GLES2 oder GL Kern Kontext jedes Mal, es verfügbar ist, und dann entweder erstellen, wird das Verhalten GLES2 Kontext genau die gleichen wie GLESv2 Bibliothek? Was sind die Auswirkungen davon, Header-weise? Zum Beispiel, GLESv2 definiert nicht BGRA Textur-Formate, also würde ich denke, ich müsste alle in RGBA konvertieren. Es ist nicht viel Ärger, aber ich bin daran interessiert, über Alternativen zu wissen.
Ich habe gedacht, die Bibliothek dynamisch laden und alle verwendeten Funktionen Zeiger laden, aber das ist eine riesige Menge an Arbeit für etwas, das vielleicht eine einfachere Antwort hat. In diesem Fall würde ich einfach glext.h einschließen und alle Funktionszeiger für die verwendeten Funktionen deklarieren und sie füllen. Das Problem hier ist, dass glext keine Datentypen definiert (Glenum, etc), also muss ich immer gl.h. Indem ich beide einbeziehe, bekomme ich die gl.h-Funktionsdeklaration UND meine eigene Funktionszeigerdeklaration, also konnte ich nicht einfach den allgemeinen Namespace für die Funktionszeiger verwenden ... Und selbst dann scheinen einige Funktionen (wie glGetError) nicht einen Typtyp für ihren Funktionszeiger haben.
Ich weiß über GLEW, aber leider verbreiten die meisten Linux-Distributionen eine Version von GLEW, die immer noch nicht GLES2-kompatibel ist (debian, ich schaue dich an). Es segnet einfach.
Wie würdest du das machen? Irgendwelche anderen Ansätze für OpenGL-Funktion verknüpfen?