У меня проблемы с тем, чтобы мой конвейер текстур работал на JPEG. Все работает правильно для PNG, но конвертация была проблемой.
Я загружаю данные изображения через UIImage и CGBitmapContextCreate
UIImage* tI = [UIImage imageWithContentsOfFile:fileName];
Image = tI.CGImage;
mWidth = CGImageGetWidth(Image);
mHeight = CGImageGetHeight(Image);
mData = new uint8[mWidth * mHeight * 4];
Context = CGBitmapContextCreate(mData, mWidth, mHeight, CGImageGetBitsPerComponent(Image), CGImageGetBytesPerRow(Image),
CGImageGetColorSpace(Image),
CGImageGetBitmapInfo(Image));
CGContextDrawImage(Context, CGRectMake(0.0, 0.0, float(mWidth), float(mHeight)), Image);
CGContextRelease(Context);
Затем я настраиваю свою GLTexture с помощью вызова ...
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texture->Width(), texture->Height(), 0, GL_RGB, GL_UNSIGNED_BYTE, texture->Data());
Я подозреваю, что этот вызов glTexImage2D является проблемой. Я использовал разные комбинации, чтобы попытаться заставить вещи работать. Состояние BitmapInfo для альфа - это 'kCGImageAlphaNoneSkipLast', поэтому я не уверен, следует ли мне использовать RGBA и GL_UNSIGNED_SHORT_5_5_5_1, но ни одна комбинация, которую я пробовал, до сих пор не работала. Ближе всего было ...
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture->Width(), texture->Height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, texture->Data());
, что дало мне очень вздутую текстуру (цветные края были различимы, но все было слишком ярко)
Любая помощь будет великолепна. Я использую JPEG, чтобы попытаться сэкономить место на PNG.