Android 4.0 硬件加速纹理渲染过程
来源:互联网 发布:3DM看门狗卡顿优化补丁 编辑:程序博客网 时间:2024/06/06 01:06
原文出处:http://blog.csdn.net/qq295445028/article/details/8638252
前面的文章中提到过开启硬件加速时,网页的显示主要分成WebCore渲染,OpenGl纹理渲染(GPU),系统将OpenGl纹理显示于屏幕上 这三个步骤。
其中第一步是解析网页最后形成一个PictureSet。第二步是生成每个tile的SkBitmap,并据此由GPU形成OpenGl纹理。最后一步根据OpenGl纹理显示内容在屏幕上。androidBrowser硬件加速的代码改动非常大,这里针对的是4.0的代码。
本文主要关注每个tile由SkBitmap转换为OpenGl纹理的过程。本过程是由TransferQueue::tryUpdateQueueWithBitmap函数开始,而在TransferQueue::updateDirtyBaseTiles函数结束。其中前者运行于TexturesGenerator线程,由BaseTile::paintBitmap函数调用而来。而后者运行于UI线程,在每次GLWebViewState::drawGL的时候都会调用,以更新各个tile的纹理。
纹理的渲染过程是由系统来完成的,类TransferQueue管理各个tile的渲染顺序并与系统交互。其中有一个SurfaceTexture对象和一个SurfaceTextureClient对象。这两个对象是android系统中专门用于GPU渲染纹理的,SurfaceTexture相当于服务端而SurfaceTextureClient为客户端,它们共享一块显存数组。SurfaceTexture中还有一个待渲染的显存队列(由上述数组的下标组成)。真正的渲染发生在SurfaceTexture::updateTexImage函数。而SurfaceTexture中有诸如dequeueBuffer和queueBuffer之类的函数,用来管理显存数组和队列。
TransferQueue::tryUpdateQueueWithBitmap函数中通过ANativeWindow_lock函数最终会调用到SurfaceTexture::dequeueBuffer,取得一块空闲显存。然后将SkBitmap的数据以内存拷贝的方式复制过去。然后ANativeWindow_unlockAndPost最终调用到SurfaceTexture::queueBuffer函数,将已有内容的显存放到待渲染队列中。
TransferQueue::updateDirtyBaseTiles则调用SurfaceTexture::updateTexImage函数依次从队列中取出显存并渲染纹理。每次渲染一个纹理都通过帧缓冲和显存拷贝的方式(TransferQueue::blitTileFromQueue)复制给每个相应的tile。
这样,整个过程就结束了。
- Android 4.0 硬件加速纹理渲染过程
- Android 4.0 硬件加速纹理渲染过程
- Android 4.0 硬件加速纹理渲染过程
- Android 4.0 硬件加速纹理渲染过程
- android 4.0硬件加速下渲染过程中如何调整页面大小适应屏幕
- Android应用程序UI硬件加速渲染环境初始化过程分析
- Android应用程序UI硬件加速渲染环境初始化过程分析
- Android应用程序UI硬件加速渲染的动画执行过程分析
- Android应用程序UI硬件加速渲染环境初始化过程分析
- Android WebView硬件加速渲染网页UI的过程分析
- Android WebView硬件加速渲染网页UI的过程分析
- Android应用程序UI硬件加速渲染的Display List渲染过程分析
- android硬件加速以及渲染基础知识
- Android应用程序UI硬件加速渲染的Display List构建过程分析
- android webview 硬件加速 view渲染问题
- Chromium硬件加速渲染的OpenGL上下文创建过程分析
- Chromium硬件加速渲染的OpenGL命令执行过程分析
- Chromium硬件加速渲染的OpenGL上下文调度过程分析
- FURPS---转自百度百科
- 操作数字的函数
- Hibernate二级缓存的使用
- HDOJ 2553 N皇后问题 杭电 ACM
- 写个类目Category
- Android 4.0 硬件加速纹理渲染过程
- 计算机交互中的信号的传递
- linux会话浅析
- SQL中的CASE WHEN用法
- PHP读取TXT文件写入数据库
- [j2se]java.io中的mark与reset
- 人生的六个阶段
- V4升级V5解决方案
- mac issue