Согласно Apple (и моему собственному опыту) GL_RGB и GL_UNSIGNED_BYTE используют хранилище 8: 8: 8.Чтобы снизить точность цветопередачи, вам нужно указать тип GL_UNSIGNED_SHORT_5_6_5 или один из других типов, который объединяет несколько каналов в одно короткое.расширения GL_OES_texture_float и GL_OES_texture_half_float .Вы ограничены фильтрацией GL_NEAREST, но я ожидаю, что это то, что вы используете в любом случае, поскольку это упражнение по хранению данных, и вы можете загружать исходные каналы с 16 или 32 битами на пиксель.Пример использования, извлеченный непосредственно из проекта (который загружает 1-канальное / пиксельное изображение, но вы поняли идею):
GLfloat *integralImage;
/* <lots of stuff to allocate storage and fill integralImage here> */
glTexImage2D(
GL_TEXTURE_2D, 0, GL_LUMINANCE,
256, 256, 0,
GL_LUMINANCE, GL_FLOAT,
integralImage);