Как я могу загрузить 8 бит BMP с OpenGL?

Вот моя ситуация: мне нужно предварительно загрузить 2000 изображений и отобразить их последовательно для анимации со скоростью 60 кадров в секунду. В настоящее время я использую OpenGL для загрузки файлов bmp, но из-за ограничения памяти я могу предварительно загружать до 500+ изображений. Как я могу решить эту проблему? До сих пор я мог придумать два решения: во-первых, может быть, я могу загрузить 8-битные изображения BMP для экономии памяти. Но у меня есть трудности в использованииglDrawPixels, Во-вторых, если это возможно, я могу загрузить jpeg напрямую? Спасибо за любой совет!

Причина, по которой видео не используется, заключается в том, что мне нужно перейти на скорость анимации, пропустив одно или несколько изображений, как вы можете видеть в коде (imgCount + = stp; // stp означает, сколько изображений нужно убрать. Это может сделать видео быстрее). И в моей анимации важна частота кадров, FPS ниже 50 показывает мерцание.

Вот код:

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);
}

и я буду отображать последовательность изображений, код отображения:

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();

}

Ответы на вопрос(2)

Ваш ответ на вопрос