Определение доступной видеопамяти
При разработке OpenGL-программы существует ли способ опроса системы, чтобы узнать, сколько мегабайт доступно для хранения текстур и т.д.
Или стандартный подход в эти дни просто выделяет память и забывает обо всем?
Ответы
Ответ 1
OpenGL не предоставляет вам эту информацию. И, откровенно говоря: мало пользы, просто потому, что сегодня у нас многозадачные операционные системы. Драйвер OpenGL отвечает за замену данных текстуры в/из системной памяти, если требуется для этого.
Что OpenGL может сделать для вас, скажите, если текстуры, которые вы загрузили, все еще находятся в быстрой памяти. Функция называется "glAreTexturesResident". Вы можете использовать это, чтобы постепенно загружать материал на GPU, пока вы не заполнили память GPU. Но имейте в виду, что вы не единственный пользователь GPU.
Ответ 2
Несмотря на то, что официальная позиция остается "вам не нужно знать, вы не хотите знать, и это все равно вам не поможет", к счастью, по крайней мере, два 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
не поддерживается почти десять лет на основном оборудовании, так же, как и приоритеты текстуры. Общая мантра заключается в том, что писатель-водитель знает намного лучше вас.