Как определить длину данных в байтах для вызова glTexImage3D ()? - PullRequest
0 голосов
/ 08 февраля 2019

Я отслеживаю некоторые вызовы gl и хочу записать данные, переданные в glTexImage3D ().Мне нужно знать, сколько байтов данных.

Все начинается легко с:

size_t num_pixels = width*height*depth;

Но я не уверен в правильном способе определения байтов на пиксель при заданных значениях internalformat, format и type?

Дает ли format компоненты цвета?и type дайте мне количество бит на компонент цвета?

1 Ответ

0 голосов
/ 09 февраля 2019

Параметр internalformat не имеет значения для определения данных, хранящихся в операциях передачи пикселей;только формат и тип имеют значение.

Ну, на самом деле не "только".Смотрите, формат и тип объединяются, чтобы определить размер данных в пикселях ( формат говорит вам, сколько каналов в данных, их порядокканалы, а также, являются ли данные плавающей точкой или целыми числами; type сообщает, как сохраняется значение канала или пикселя).Но чтобы определить, как перейти от пикселя к пикселю, строки к строке и 2D-изображения к 2D-изображению, вам нужно больше.

Все, что вам нужно, - это состояние GL_UNPACK_*, чьезначения задаются с помощью glPixelStore.GL_UNPACK_ALIGNMENT сообщает вам выравнивание каждой строки данных пикселей.Это нужно для того, чтобы прыгать с ряда на ряд.Есть также другое состояние UNPACK, которое позволяет пользователям выбирать под прямоугольник для загрузки.Если вы хотите интерпретировать то, что загружается во всех случаях, вы должны использовать glGetIntegerv, чтобы получить все этих UNPACK параметров и интерпретировать их, как указано в стандарте.

...