Android SurfaceFlinger——GraphicBuffer的生成(三十二)

avatar
作者
猴君
阅读量:0

通过前面的学习我们知道,在 SurfaceFlinger 中使用的生产者/消费者模型,Surface 做为生产者一方存在如下两个比较重要的函数:

  • dequeueBuffer:获取一个缓冲区(GraphicBuffer),也就是 GraphicBuffer 生成。
  • queueBuffer :把缓冲区(GraphicBuffer)放入缓冲队列中。

这里我们就先来看看 dequeueBuffer() 函数,该函数通常由生产者调用,用于从 BufferQueue 中取出一个缓冲区以供渲染。这个函数会等待直到有一个缓冲区变为可用状态,然后将其标记为“出队”,并返回给生产者。生产者随后可以在该缓冲区上绘制图像数据。

一、GraphicBuffer生成

这里我们先来看一下 Surface 的核心对象之一 mSlots,这个对象是数组 BufferSlot。

1、BufferSlot

源码位置:/frameworks/native/libs/gui/include/gui/BufferSlot.h

struct BufferSlot {      BufferSlot()     : mGraphicBuffer(nullptr),       mEglDisplay(EGL_NO_DISPLAY),       mBufferState(),       mRequestBufferCalled(false),       mFrameNumber(0),       mEglFence(EG

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!