GPU需要知道应该在内存中的哪个位置存储渲染出来的2D图像像素数据。就像为GPU提供数据的缓存一样,接收渲染结果的缓冲区叫做帧缓存(frame buffer)。程序会像任何其他种类的缓存一样生成、绑定、删除帧缓存。但是帧缓存不需要初始化,因为渲染指令会在适当的时候替换缓存的内容。帧缓存会在被绑定的时候隐式开启,同时OpenGL ES会自动地根据特定平台的硬件配置和功能来设置数据的类型和偏移。
可以同时存在很多帧缓存,并且可以通过OpenGL ES让GPU把渲染结果存储到任意数量的帧缓存中。但是,屏幕显示像素要受到保存在前帧缓存(front frame buffer)的特定帧缓存中的像素颜色元素的控制。程序和操作系统很少会直接渲染到前帧缓存中,因为那样会让用户看到正在渲染中的还没渲染完成的图像。相反,程序和操作系统会把渲染结果保存到包括后帧缓存(back frame buffer)在内的其他帧缓存中。当渲染后的后帧缓存包含一个完成的图像时,前帧缓存与后帧缓存几乎会瞬间切换。后帧缓存会变成新的前帧缓存,同时旧的前帧缓存会变成后帧缓存。图1-5展示了屏幕显示像素、前帧缓存及后帧缓存三者之间的关系。
ios中视频--读写文件
January 11, 2011 barry.z
在ios的开发中,经常遇到要读写文件的情况,例如处理照片,采集信息等,那么在ios中对文件的读写有两种方式:
1 使用NSData 来将整个数据读取到内存中
NSData *myData = [[[NSData alloc] initWithContentsOfFile:appFile] autorelease];
将文件写到文件中
[data writeToFile:appFile atomically:YES]
使用这种方式比较适合针对小文件的读写,可以全部的读到内存中处理,比如说全局性的配置文件等。
2 使用c的api来读取
在ios的开发中,可以使用c,objective-c 混合编程的方法来进行文件的操作,我们可以使用fseek,fread,fwrite等函数来对文件读写。
NSString* imgFile = [[NSBundle mainBundle] pathForResource:fileName ofType:@"bundle" inDirectory: dir ];
FILE * _imgFileHandle =NULL;
_imgFileHandle =fopen([imgFile UTF8String],"rb");
if (_imgFileHandle != NULL)
{
long idxPos = 20;
fseek(_imgFileHandle, idxPos, SEEK_SET);
char * buff[5];
memset(buff,0,5);
fread(buff, 1, 5, _imgFileHandle);
fclose(_imgFileHandle);
}
使用c API 来
读写文件的优势很明显,不用把所有内容读到内存即可访问文件内容,特别适合大文件的读写。