赞
踩
通过前面的学习我们知道,在 SurfaceFlinger 中使用的生产者/消费者模型,Surface 做为生产者一方存在如下两个比较重要的函数:
- dequeueBuffer:获取一个缓冲区(GraphicBuffer),也就是 GraphicBuffer 生成。
- queueBuffer :把缓冲区(GraphicBuffer)放入缓冲队列中。
这里我们就先来看看 dequeueBuffer() 函数,该函数通常由生产者调用,用于从 BufferQueue 中取出一个缓冲区以供渲染。这个函数会等待直到有一个缓冲区变为可用状态,然后将其标记为“出队”,并返回给生产者。生产者随后可以在该缓冲区上绘制图像数据。
这里我们先来看一下 Surface 的核心对象之一 mSlots,这个对象是数组 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。