本文共 1236 字,大约阅读时间需要 4 分钟。
最近研究 opengl 直接显示纹理的窍门,目前实现了显示24位bitmap的方法。
代码如下:
#define MYW 512
#define MYH 480GLint crop[4] = { 0, MYH, MYW, -MYH };
glBindTexture(GL_TEXTURE_2D, 0); glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop); glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glEnable(GL_TEXTURE_2D); glColor4f(1,1,1,1);uint32_t t32my[MYW*MYH] ;
FILE* fp = fopen("/sdcard/texrgb24.bmp","rb"); if( fp ){ unsigned char tmpb[3*MYW] ; for( int ii = 0 ; ii < MYH ; ii ++ ){ fseek( fp , 54+ (MYH-ii-1)*3*MYW , SEEK_SET ) ; fread( tmpb , 1 ,3*MYW ,fp ) ; for( int jj = 0 ; jj < MYW ; jj++ ) t32my[ii*MYW+ jj] = (0xff000000|(tmpb[jj*3+0]<<16)|(tmpb[jj*3+1]<<8)|tmpb[jj*3+2]) ; } fclose( fp ) ; } glClear(GL_COLOR_BUFFER_BIT); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, MYW, MYH, 0, GL_RGBA, GL_UNSIGNED_BYTE , t32my); glDrawTexiOES(0, 0, 0, dim, 400);完整源码可以参照这里:ttps://sourceforge.net/p/gldrawtexturesv
下面要研究怎么把yuv 图像作为纹理直接显示。这样就可以直接使用 GPU 硬件来加速 yuv数据的显示,目前还没头绪。有知道的同学给点提示。
转载地址:http://iemqf.baihongyu.com/