Нахождение размера текстуры OpenGL в байтах после его загрузки

StackOverflow https://stackoverflow.com/questions/3028574

  •  26-09-2019
  •  | 
  •  

Вопрос

Эй, у меня есть текстура, загруженная gltextimage2d. Я хочу получить размер текстуры после того, как он был загружен в VRAM, что мне нужно сделать? Мой внутренний формат - RGBA, а формат текстуры варьируется.

Это было полезно?

Решение

Это может быть полезно для вас, и вы, вероятно, можете выводить фактическое использование памяти от нее. Однако я считаю, что это все еще довольно приближение:

http://www.geeks3d.com/20100531/programming-tips-how-to-know-the-graphics-memory-size-and-usage-in-opengl/

(Запрос общее использование памяти OpenGL с использованием NVIDIA или ATI Special Extensions)

Также обратите внимание, что из моего опыта, аппроксимируя использование памяти грубым расчетом было достаточно. Текстуры «должны» храниться либо 1,2 или 4 компонента без каких-либо значительных накладных расходов. Поэтому для текстуры WXH RGBA рассчитайте W * H * 4. Если вы храните флоат-текстуры (т.е. GL_RGBA32F), рассчитайте W * H * 4 * 4. Для MIP-карт, добавьте (1/3) дополнительное потребление памяти. Будьте в виду, однако, что - по крайней мере, для моих знаний - текстура памяти также может фрагмент, возможно, оставив вас с менее доступной памятью, как оценочно.

Другие советы

Использовать Gettexlevelparameter., что может дать вам (для каждого уровня):

  • Ширина и высота *
  • Глубина
  • Внутренний формат *
  • Сжатый формат и относительный размер

(*) Использует эти параметры для вычисления размера текстуры (для указанного уровня).

Одиночное использование памяти текстуры зависит от генерируемых MIPMAP. Действительно правильно вычислить память, используемую одной текстурой, вы должны определить MIPMAP, связанные с текстурами, а затем суммируйте использование памяти для каждого уровня.

Количество MIPMAP определяется спецификацией OpenGL в зависимости от цели текстуры: элементы массивов текстур имеют свои собственные набор MIPMAPS, каждая текстура для лица Cube имеет собственный набор MIPMAP. Размер MIPMAPS напоминают на каждый уровень, пока они не пойдут 1. В случае размера не являются мощностью двух, они округлые до нижнего целого числа.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top