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 来读写文件的优势很明显,不用把所有内容读到内存即可访问文件内容,特别适合大文件的读写。