Нахождение размера текстуры OpenGL в байтах после загрузки - PullRequest
0 голосов
/ 12 июня 2010

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

Ответы [ 2 ]

4 голосов
/ 12 июня 2010

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

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

(запросить общее использование памяти OpenGL с помощью расширений, специфичных для NVIDIA или ATI)

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

1 голос
/ 13 июня 2010

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

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

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

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

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

...