¿Cómo puedo cargar 8 bit bmp con OpenGL?

Aquí está mi situación: necesito precargar 2000 imágenes y mostrarlas en secuencia para ser una animación a 60 fps. Actualmente, estoy utilizando OpenGL para cargar archivos bmp, pero debido al límite de memoria, solo puedo precargar hasta más de 500 imágenes. ¿Como puedó resolver esté problema? Hasta ahora puedo encontrar dos direcciones de soluciones: primero, tal vez pueda cargar imágenes bmp de 8 bits para ahorrar memoria. Pero tengo dificultad en usarglDrawPixels. En segundo lugar, si es posible, ¿puedo cargar jpeg directamente? Gracias por cualquier consejo!

La razón para no usar el video es que necesito cambiar la velocidad de la animación saltándome una o más imágenes como puede ver en el código (imgCount + = stp; // stp significa cuántas imágenes escapar. Puede hacer que el video sea más rápido). Y en mi animación, la velocidad de fotogramas es importante, FPS inferior a 50 muestra parpadeo.

Aquí está el código:

void Frame::LoadBMP(void){

 FILE *in;


 in=fopen(file,"rb");//open file 
 if(in==NULL){

     exit(0);
 }
 fread(&(this->bmfh),sizeof(BITMAPFILEHEADER),1,in);//read bmp file header
 fread(&(this->bmih),sizeof(BITMAPINFOHEADER),1,in);//read bmp infomation header

 colours=new RGBQUAD[bmih.biBitCount];
 fread(colours,sizeof(RGBQUAD),bmih.biBitCount,in);//read bmp colour table

 size=bmfh.bfSize-bmfh.bfOffBits;
 tempPixelData=new GLubyte[size];

 if(tempPixelData==NULL) {
     fclose(in);
 }
 fread(tempPixelData,sizeof(GLubyte),size,in);//read bmp image data
 fclose(in);
}

y mostraré la secuencia de imágenes, el código de visualización:

void display(void){

static clock_t start=clock();
static clock_t end=clock();

CurrtempPixelData=msFrame[offset]->tempPixelData;

glEnable(GL_ALPHA_TEST);
glEnable(GL_BLEND);

glDrawPixels(frWidth, frHeight, GL_RGBA, GL_UNSIGNED_BYTE, msFrame[offset]->tempPixelData);

for(int i=0;i<m;i++){
    clock_t c=clock();
}

glutSwapBuffers();
imgCount+=stp; // stp means how many images to escape. it can make video faster.
offset=imgCount%numFrame;
glutPostRedisplay();

}

Respuestas a la pregunta(2)

Su respuesta a la pregunta