Canalización de texturas iPhone OpenGL ES para JPEG

Tengo problemas para que mi canalización de texturas funcione para archivos JPEG. Todo funciona bien para PNG, pero la conversión ha sido un problema.

Estoy cargando por datos de imagen a través de UIImage y 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);

Luego configuro mi GLTexture con la llamada ...

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texture->Width(), texture->Height(), 0, GL_RGB, GL_UNSIGNED_BYTE, texture->Data());

Sospecho que esta llamada glTexImage2D es el problema. He estado usando diferentes combinaciones para intentar que las cosas funcionen. El estado de BitmapInfo para alfa es 'kCGImageAlphaNoneSkipLast', por lo que no estoy seguro de si debería usar RGBA y GL_UNSIGNED_SHORT_5_5_5_1 pero ninguna combinación que he probado ha funcionado hasta ahora. Lo más cerca que estuve fue ...

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture->Width(), texture->Height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, texture->Data());

lo que me dio una textura muy apagada (los bordes de color eran discernibles pero todo era demasiado brillante)

Cualquier ayuda sería genial. Estoy usando archivos JPEG para intentar ahorrar espacio sobre PNG.

preguntado el 16 de mayo de 11 a las 19:05

1 Respuestas

Su búfer mData es demasiado grande. Las imágenes JPEG no son compatibles con alfa, por lo que solo hay tres componentes por píxel (RGB), mientras que normalmente usaría cuatro para PNG (RGBA).

contestado el 16 de mayo de 11 a las 23:05

¿No debería ignorarse el espacio extra de búfer al final? Paso GL el ancho, alto y tamaño por componentes ... calcula qué tan grande es el búfer, por lo que no debería importarle qué hay más allá de esos puntos en la memoria. - TurqMage

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.