Obwohl die offizielle Haltung "du musst es nicht wissen, du willst es nicht wissen, und es würde dir sowieso nicht helfen", haben glücklicherweise mindestens zwei IHVs in letzter Zeit ein wenig mehr Einsicht gezeigt und bieten Erweiterungen an diese Informationen abfragen:
eine nette Sache über diese Erweiterungen ist, dass sie einen kleinsten gemeinsamen Nenner haben, die genau das, was die meisten Leute brauchen, und Sie brauchen nicht Abfragen Erweiterung Unterstützung oder etwas Besonderes, wie sie beide über glGetIntegerv
arbeiten.
Im einfachsten Fall können Sie einfach ein Array von 4 ganzen Zahlen auf Null initialisieren (oder einen minimalen Standardwert, den Sie annehmen, falls die Erweiterungen nicht funktionieren), dann rufen Sie zweimal glGetIntegerv
(mit GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX
und TEXTURE_FREE_MEMORY_ATI
) und schließlich glGetError
aufrufen, um den Fehlerzustand zu löschen. glGetIntegerv
ändert den Speicher, auf den verwiesen wird, nicht, wenn er fehlschlägt, noch stürzt er ab oder andere schlechte Sache - es setzt den Fehlerzustand einfach auf GL_INVALID_ENUM
.
Beide Erweiterungen geben einen Wert in der ersten Array-Position zurück, die ATI gibt auch einige Werte in den anderen 3 zurück.
n.b .: glAreTexturesResident
wurde seit fast einem Jahrzehnt auf der Mainstream-Hardware nicht mehr unterstützt, in gleicher Weise wie Texturprioritäten. Das allgemeine Mantra ist, dass der Fahrer Schriftsteller sowieso viel besser als Sie weiß.
Fügen Sie es einfach hier hinzu, damit andere, die hier sind, wissen: 'glAreTexturesResident' ist im Kernprofil veraltet, daher ist es nicht ratsam, sie in einem modernen OpenGL-Programm zu verwenden. – legends2k