Определение доступной видеопамяти - PullRequest
15 голосов
/ 29 декабря 2010

При разработке программы OpenGL существует ли способ опроса из системы, чтобы выяснить, сколько мегабайт доступно для хранения текстур и т. Д.?

Или в наши дни стандартным подходом является просто выделить память изабыть обо всем?

Ответы [ 2 ]

43 голосов
/ 17 апреля 2011

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

13 голосов
/ 29 декабря 2010

OpenGL не предоставляет вам эту информацию.И, откровенно говоря, выгоды от этого мало, просто потому, что сегодня у нас многозадачные операционные системы.Драйвер OpenGL отвечает за обмен данными текстуры в / из системной памяти, если в этом есть потребность.

Что OpenGL может сделать для вас, это сказать, если загруженные вами текстуры все еще находятся в быстромобъем памяти.Функция называется "glAreTexturesResident".Вы можете использовать это, чтобы постепенно загружать материал в GPU, пока вы не заполните память GPU.Но имейте в виду, что вы не единственный пользователь графического процессора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...