Как без оперирования с текстурами (т.к. при этом увеличивается время отрисовки графики) можно без извращений добиться нормального отображения jpeg-изображения в окне openGL?
Дело в том, что в дурной системе координат openGL начало координат находится в левом нижнем углу. Для отображения bmp это идеально (т.к. в bmp изображение хранится «вверх ногами»), а вот в jpeg'ах изображение хранится по-нормальному: начиная с верхней строки.
Пока пользуюсь костылем, чреватым случайными segFault'ами, получая изображение такой функцией:
GLubyte *uncompressImage(JOCTET *inbuf){
static struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
static GLubyte *imPtr = NULL;
static int bufferSize;
int readlines, linesize;
GLubyte *ptr;
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
jpeg_mem_src(&cinfo, inbuf, bufsize);
jpeg_read_header(&cinfo, TRUE);
jpeg_start_decompress(&cinfo);
if(!imPtr){
bufferSize = GRAB_WIDTH * GRAB_HEIGHT * cinfo.num_components;
imPtr = (GLubyte *)malloc(bufferSize);
}
linesize = cinfo.num_components * cinfo.output_width;
ptr = imPtr + (bufferSize - linesize);
while(cinfo.output_scanline < cinfo.output_height){
readlines = jpeg_read_scanlines(&cinfo, &ptr, 1);
ptr -= readlines * linesize;
}
jpeg_finish_decompress(&cinfo);
return imPtr;
}