Нахождение размера текстуры OpenGL в байтах после его загрузки
Вопрос
Эй, у меня есть текстура, загруженная gltextimage2d. Я хочу получить размер текстуры после того, как он был загружен в VRAM, что мне нужно сделать? Мой внутренний формат - RGBA, а формат текстуры варьируется.
Решение
Это может быть полезно для вас, и вы, вероятно, можете выводить фактическое использование памяти от нее. Однако я считаю, что это все еще довольно приближение:
(Запрос общее использование памяти 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. В случае размера не являются мощностью двух, они округлые до нижнего целого числа.