android surfaceflinger总结

来源:互联网 发布:怎样设置数据有效性 编辑:程序博客网 时间:2024/06/07 00:58

客户端的surface/buffer在surfaceflinger中对应layer, layer的buffer叫graphic buffer, 来自于gralloc. 通过SurfaceTexture::createImage调用eglCreateImageKHR封装成EGLImageKHR, 并通过glEGLImageTargetTexture2DOES attach到egl的texture。所有这些层都最后通过egl的draw, 画到每个display对应的framebuffer中。这些framebuffer也是在gralloc中生成。 通过DisplayDevice调用eglCreateWindowSurface封装成egl的framebuffer.

 

这些buffer,尽量通过hwc(overlay)合成(type: hw overlay),不支持的或者超过的, 就用opengl es。 opengl es也可能是有hw gpu的支持的。 最后再通过hw overlay合成输出。在omap4的代码里面, 大于1.1版本的hwc将overlay的最后一个设为专门的framebuffertaget, 这样, 每次post的时候不用调用gralloc的fb dev的post,直接将framebuffer设给framebuffertarget就行了。