android graphic classes

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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值