// Utility class for managing GraphicBuffer references into renderengine
class Image {
public:
Image(const sp<GraphicBuffer>& graphicBuffer, renderengine::RenderEngine& engine);
virtual ~Image();
const sp<GraphicBuffer>& graphicBuffer() { return mGraphicBuffer; }
private:
// mGraphicBuffer is the buffer that was used to create this image.
sp<GraphicBuffer> mGraphicBuffer;
// Back-reference into renderengine to initiate cleanup.
renderengine::RenderEngine& mRE;
DISALLOW_COPY_AND_ASSIGN(Image);
};
Image 是 BufferLayerConsumer 内部类,有 GraphicBuffer 成员。
RenderEngine 引用是用于在构造函数中缓存 buffer,在析构函数中解绑 buffer。
BufferLayerConsumer::Image::Image(const sp<GraphicBuffer>& graphicBuffer,
renderengine::RenderEngine& engine)
: mGraphicBuffer(graphicBuffer), mRE(engine) {
mRE.cacheExternalTextureBuffer(mGraphicBuffer);
}
BufferLayerConsumer::Image::~Image() {
if (mGraphicBuffer != nullptr) {
ALOGV("Destroying buffer: %" PRId64, mGraphicBuffer->getId());
mRE.unbindExternalTextureBuffer(mGraphicBuffer->getId());
}
}