const Region dirty(layer->latchBuffer(visibleRegions, latchTime)); layer->useSurfaceDamage(); invalidateLayerStack(layer, dirty); if (layer->isBufferLatched()) { newDataLatched = true; } } 获取Buffer Layer的latch
5. 创建 OpenGL ES 上下文 AnOpenGL context represents many things. A context stores all of the state associated with this instance of OpenGL. It represents the (potentially visible)default framebufferthat rendering commands will draw to when not drawing to aframebuffer object. Think of a context ...
voidLayer::onFirstRef(){// Creates a custom BufferQueue for SurfaceFlingerConsumer to usesp<IGraphicBufferProducer>producer;//生产者sp<IGraphicBufferConsumer>consumer;//消费者BufferQueue::createBufferQueue(&producer,&consumer);//创建生产者和消费者mProducer=newMonitoredProducer(producer,mFlinger);//包装生...
当Android应用程序请求 SurfaceFlinger服务创建一个绘图表面的时候,SurfaceFlinger服务就会在内部创建一个Layer::SurfaceLayer 对象,并且将这个Layer::SurfaceLayer对象的一个Binder代理对象返回来给Android应用程序,然后Android应用程序再 将这个Binder代理对象保存在一个SurfaceControl对象的成员变量mSurface中。 SurfaceControl类的...
BufferQueue中有一个成员变量BufferSlot mSlots[NUM_BUFFER_SLOTS];即一个BufferQueue实际上最大可以有32个Buffer,即一个应用程序申请的Surface在SF端的Layer可以有32个图像缓存区。而这32个图形缓存区都有上面的mSlots维护着,每个Buffer有以下几种可变的状态,由BufferState mBufferState维护:...
当它的值等于true的时候,就表示不需要参与合成,否则就要参 考合成。一般当一个Layer对象所描述的Surface的图形缓冲区是直接在硬件帧缓冲区fb上分配时,对应的Surface就不需要参与 SurfaceFlinger服务的合成操作。 我们继续向下看: // here we have to reallocate a new buffer because the buffer could be...
Surface类就是用来在Android应用程序这一侧描述绘图表面的,它的成员变量mSurface与它的宿主类SurfaceControl的成员变量mSurface指向的是同一个Binder代理对象,即它们都引用了在SurfaceFlinger服务内部所创建的一个类型为Layer::SurfaceLayer的Binder本地对象。 Surface类的成员变量mClient指向了Android应用程序进程中的一个Surfa...
Surface类就是用来在Android应用程序这一侧描述绘图表面的,它的成员变量mSurface与它的宿主类SurfaceControl的成员变量mSurface指向的是同一个Binder代理对象,即它们都引用了在SurfaceFlinger服务内部所创建的一个类型为Layer::SurfaceLayer的Binder本地对象。 Surface类的成员变量mClient指向了Android应用程序进程中的一个Surfa...
通过SurfaceControl 设置 Layer层数值(忽略),通过Surface获取Buffer,锁定Buffer并写入Buffer 最后提交Buffer 本章节主要关注 第3步中的 获取Buffer,锁定(最关键)并写入Buffer的过程。而获取Buffer只是 通过ANativeWindow_Buffer来创建一个outBuffer并传递给Surface的lock方法,写入Buffer只是最终实用memset 向Buffer中写入数据。因...
在前面一篇文章中,我们分析了Android应用程序请求SurfaceFlinger服务创建Surface的过程。有了Surface之后,Android应用程序就可以在上面绘制自己的UI了,接着再请求SurfaceFlinger服务将这个已经绘制好了UI的Surface渲染到设备显示屏上去。在本文中,我们就将详细分析Android应用程序请求SurfaceFlinger服务渲染Surface的过程。