Android4.0 图形系统学习

1、Android4.0中GraphicBuffer的申请流程:

1)、Android4.0中GraphicBuffer的申请是在SurfaceTextureClient::dequeueBuffer()函数中进行的,调用流程如下:

---------------------------------------------------------client->
SurfaceTextureClient::dequeueBuffer
    BpSurfaceTexture::dequeueBuffer
    -----------------------------------------------------server->
        BnSurfaceTexture::onTransact(case DEQUEUE_BUFFER)
            SurfaceTexture::dequeueBuffer
                GraphicBufferAlloc::createGraphicBuffer
                    new GraphicBuffer
                        GraphicBuffer::initSize
                            GraphicBufferAllocator::alloc
                                gralloc_alloc()
                                    gralloc_alloc_buffer()
                                        ashmem_create_region()
                                        mapBuffer()
                                            gralloc_map()
    ----------------------------------------------------client->
    BpSurfaceTexture::requestBuffer()
    -----------------------------------------------------server->
        BnSurfaceTexture::onTransact(case REQUEST_BUFFER)
            SurfaceTexture::requestBuffer()
        ------------------------------------------------client->
        Parcel::read()
            GraphicBuffer::unflatten()
                GraphicBufferMapper::registerBuffer()
                    gralloc_register_buffer()
                        gralloc_map()
    get the pointer of buffer

2)、 GraphicBuffer::flatten的职能就是将GraphicBuffer的handle变量信息写到Parcel句中,接收端利用GraphicBuffer::unflatten读取
3)、 在Parcel::read()中会通过dup()来完成从Server端传递的共享内存fd句柄的复制;


2、OpenGLRenderer学习:

1)、在Loader::init_api()函数函数中,会动态打开libGLES_android1.so库,来注册相关API,如果库中没有实现,会把gl_unimplemented函数指针给当前函数;当调用此函数时会打印called unimplemented OpenGL ES API;

2)、在GLES20Canvas构造函数中初始化mRenderer,实际初始化的是DisplayListRenderer:

    protected GLES20Canvas(boolean record, boolean translucent) {
        mOpaque = !translucent;

        if (record) {
            mRenderer = nCreateDisplayListRenderer();
        } else {
            mRenderer = nCreateRenderer();
        }

        setupFinalizer();
    }

DisplayListRenderer的函数把绘图动作记录起来,由DisplayList::replay()函数调用OpenGLRenderer的相关绘图API;
DisplayList::replay()函数由OpenGLRenderer::drawDisplayList()调用;


3、在1280*720的分辨率下,com.android.systemui默认启用硬件加速来绘图;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒江蓑笠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值