Определение доступной видеопамяти

При разработке 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 не поддерживается почти десять лет на основном оборудовании, так же, как и приоритеты текстуры. Общая мантра заключается в том, что писатель-водитель знает намного лучше вас.