I die folgende constexpr GLenum Array verwende darzustellen GL_COLOR_ATTACHMENTx
(wobei X eine ganze Zahl ohne Vorzeichen zwischen 0 und 7):Speichern OpenGL Farb Anhänge in constexpr GLenum Array
constexpr std::array<GLenum, 8> opengl_color_attachment{GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3, GL_COLOR_ATTACHMENT4, GL_COLOR_ATTACHMENT5, GL_COLOR_ATTACHMENT6, GL_COLOR_ATTACHMENT7};
Dies funktioniert nur für die ersten acht verfügbare Farbanhänge (die laut OpenGL-Spezifikation das Mindestmaß darstellen). Es besteht jedoch die Möglichkeit, dass weitere Anhänge hinzugefügt werden. Da das Makro GL_MAX_COLOR_ATTACHMENTS
die Anzahl der verfügbaren Attachments darstellt, wollte ich dieses constexpr-Array so bearbeiten, dass ALLE verfügbaren Attachments zum Limit statt des Mindestwerts von 8 enthalten sind.
Ich habe das folgende Makro erstellt, um dieses Problem zu lösen ich:
#define OPENGL_COLOR_ATTACHMENT(x) GL_COLOR_ATTACHMENT##x
Obwohl ich in einer constexpr Funktion diese verwenden wollte das Array in der Kompilierung-Zeit zu schaffen, es ist fehlgeschlagen, da Präprozessormakros offensichtlich vor der Kompilierung verarbeitet werden. Obwohl der OpenGL-Standard diese GL_TEXTURE1 == GL_TEXTURE0 + 1
garantiert, konnte ich eine solche Referenz für dieses Makro nicht finden, so dass ich unsicher bin, ob sie in diesem Fall sequenziell sind.
Gibt es eine Möglichkeit für mich, das consExpr-Array vollständig von GL_COLOR_ATTACHMENT0 nach GL_COLOR_ATTACHMENTx zu erstellen, wobei x = GL_MAX_COLOR_ATTACHMENTS, mit oder ohne Präprozessor-Makros?
Sind die 'GL_COLOR_ATTACHMENTx' Werte sequenziell? –
@VittorioRomeo Siehe meine letzte Bearbeitung: Die OpenGL-Spezifikation garantiert, dass GL_TEXTUREx Werte sequenziell sind, aber ich bin nicht in der Lage, Verweis auf GL_COLOR_ATTACHMENTx zu finden, so würde ich erwarten, dass es implementation-defined sein. Obwohl ich vielleicht falsch liege. – Harrand
@Harrand: "* Ich wollte dieses consExpr-Array so bearbeiten, dass es ALLE verfügbaren Anhänge bis auf das Minimum von 8 enthält. *" Da das tatsächliche Limit der Implementierung definiert ist, ist das * unmöglich * für alles, was Sie brauchen eine für die Kompilierung definierte Menge. –