Используя изображение, созданное с CGBitmapContextCreate как структура opengl

Я генерирую использование изображения quartz2d и я хочу использовать его в качестве opengl структура. Хитрая часть - то, что я хочу использовать как можно меньше бит на пиксель, таким образом, я создаю cgContext как следующее:

int bitsPerComponent = 5;
int bytesPerPixel = 2;
int width = 1024;
int height = 1024;
void* imageData = malloc(width * height * bytesPerPixel);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGImageContext context = CGBitmapContextCreate(imageData, width, height, bitsPerComponent, width * bytesPerPixel, colorSpace, kCGImageAlphaNoneSkipFirst);
//draw things into context, release memory, etc.

Как указано в документации здесь, это - поддерживаемое единственное RGB формат пикселя для CGBitmapContextCreate который использует 16 бит на пиксель. Таким образом, теперь я хочу загрузить этот imageData, который похож "на пропущенный 1 бит - красный на 5 битов - зеленый цвет на 5 битов - синий на 5 битов" в структуру opengl. Таким образом, я должен сделать что-то вроде этого:

glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, imageData); 

Это не будет работать, потому что в этом вызове я указал формат пикселя как 5 red - 5 green - 5 blue - 1 alpha. Это неправильно, но кажется, что нет никакого формата, который соответствовал бы базовому выводу графических данных.
Существуют некоторые другие опции как GL_UNSIGNED_SHORT_1_5_5_5_REV, но они привычка продолжают работать iphone.

Мне нужен некоторый способ использовать это imageData как структура, но я действительно не хочу подкачивать байты вокруг ручного использования memset или такого, потому что это кажется ужасно неэффективным.

10
задан Rishil Patel 19 January 2019 в 04:38
поделиться