Хотя официальная позиция остается «вам не нужно знать, вы не хотите знать, и это не помогло бы вам в любом случае», к счастью, по крайней мере, два IHV в последнее время продемонстрировали немного больше понимания и предлагают расширения для запросить эту информацию:
Одна приятная особенность этих расширений состоит в том, что у них есть наименьший общий знаменатель, который является именно тем, что нужно большинству людей, и вам не нужно запрашивать поддержку расширений или делать что-то особенное, поскольку они оба работают через glGetIntegerv
.
В самом простом случае, вы можете просто инициализировать массив из 4 целых чисел равным нулю (или некоторому минимальному значению по умолчанию, которое вы примете в случае, если расширения не работают), затем вы вызываете glGetIntegerv
дважды (с помощью GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX
и TEXTURE_FREE_MEMORY_ATI
соответственно) и, наконец, вызовите glGetError
, чтобы очистить состояние ошибки. glGetIntegerv
не изменяет указанную память, если она выходит из строя, а также не падает и не вызывает каких-либо других проблем - она просто устанавливает состояние ошибки на GL_INVALID_ENUM
.
Оба расширения возвращают значение в первой позиции массива, одно ATI также возвращает некоторые значения в другом 3.
n.b .: glAreTexturesResident
почти десять лет не поддерживается на основном оборудовании, так же как и приоритеты текстур. Общая мантра в том, что писатель-водитель знает намного лучше, чем вы.