android graphic classes

来源:互联网 发布:印度不服中国 知乎 编辑:程序博客网 时间:2024/06/05 16:17
android graphic相关的class很多,如果不搞清楚每个class的作用,在使用的时候经常搞不清楚怎么用,到底用哪个class,这里写一下常见的类的说明。

BufferQueue
native class。
BufferQueue是最重要的一个class,它维护了一个graphic buffer的list,并连接了producer和consumer两端。BufferQueue通过Gralloc hal来申请graphic buffer。
producer端使用dequeueBuffer()得到buffer,使用后,调用queueBuffer()将buffer还给BufferQueue。
consumer端使用acquireBuffer()获得buffer,使用后,调用releaseBuffer()来释放buffer给BufferQueue。

Surface
java和native的Surface是一样的意义,是Bufferqueue的producer端的包装。
一般通过lockCanvas()来进行dequeueBuffer操作,unlockCanvasAndPost()来进行queueBuffer操作。

SurfaceHolder
java class。
SurfaceHolder初始设计的用意是来保留app level的一些信息,比如format,dimensions。实际上它现在不是很重要,但是因为这个api存在很久了,所以一直被保留着。大多数时候,我们都是直接从surfaceholder中getsurface去使用。

SurfaceView
java class。
SurfaceView是一个有自己的surface的view,它直接让SurfaceFlinger为他创建了一个window( layer ),所以它也是一个producer的角色。
SurfaceView 绘制的内容,是单独提交给SurfaceFlinger去输出的。

SurfaceTexture
java class。
SurfaceTexture是bufferqueue的owner & consumer的角色。app建立一个SurfaceTexture实际上创建了一个BufferQueue,并且作为BufferQueue的Consumer,由producer传入的数据,会被绑定到texture中。
当有新的buffer可用的时候,onFrameAvaiable() callback被触发,调用updateTexImage()来进行acquireBuffer()和releaseBuffer(),并将内容绑定到texture中去。
一般用于app去接受buffer,比如set给camera,通过SurfaceTexture可以获得到camera的数据。

GLConsumer
natvie class。
GLConsumer是SurfaceTexture在natvie对应的对象。

TextureView
java class。
TextureView是一个拥有SurfaceTexture的View,它通过SurfaceTexture获得要draw的数据,然后按照一般view绘图的方式将数据draw出去。

GLSurfaceView
java class。
继承SurfaceView,用来帮助进行gles的操作。这个class帮助做了一些gles操作所需要的初始动作,比如建立GLContext,建立GLWindowSurface,app只需要在实现它的onDrawFrame()函数。

ANativeWindow
native class。
ANativeWindow和Surface是一样的作用,一样作为BufferQueue的producer端来使用。

ANativeWindow是属于EGL的组成部分。


-------------------------------------------

by sky


0 0
原创粉丝点击