buffer_handle_t outbuf; //outbuf是一个为虚拟显示接收合成图像的buffer,在向outbuf写东西的时候,必须等到outbufAcquireFenceFd信号。一个fence会发出信号当向outbuf写操作完成的时候,retireFenceFd有返回值。
此部分是在prepare()前设置,因此此buffer的属性可以用来确定哪一个layers可以被h/w
composer 操控。如果prepare()设置所有层到FRAMEBUFFER,然后GLES合成直接到output buffer,在此种情况下outbuf和FRAMEBUFFER_TARGET层所对应的buffer将是一样的,并且set()除了管理fence之外什么都不做。
假如TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS参数变量被定义(除默认值除外),然后此种行为会改变。如果所有层都被FRAMEBUFFER做了标识,GLES合成替代抓帧(scratchframebuffer),并且h/w composer必须将其拷贝到outputbuffer。当多于GLESdriver可以处理或则Virtualdisplay消耗的情况下,其可以支持h/w composer的格式转换。
当有些层或则所有层被标识为OVERLAY,然后framebuffer和outputbuffer 内容变的不同。如同实际显示,假如所有层被标记为OVERLAY,framebuffer句柄在帧与帧之间是不会变的。
int outbufAcquireFenceFd;//此部分为当outbuf准备好可写的时候,fence将发出signal信号。当不用的时候,h/w composer负责将其关掉。当outbuf为空的时候或则可以立即写入数据时,其将返回为-1。
hwc_module_t; // hardware composermodule通用方法,此必须作为hwc_module 的第一个成员,作为用户将hw_module与其在上下文的指针进行绑定。