編輯:關於Android編程
這篇接著上一篇2dcanvas硬件繪制,分析保存繪制結果的texture被合成到on screen framebuffer上的過程。
1.webkit為canvas元素對應的render樹節點RenderHTMLCanvas,
創建RenderLayer的過程如下:
RenderLayerModelObject::createLayer()調用
RenderLayer::insertOnlyThisLayer()將創建完
的RenderLayer加入到renderlayer tree中。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGJyPgoyLkNhbnZhczJETGF5ZXJCcmlkZ2Ww/LqsV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBsyrXA/aOsPGJyPgpXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGy1xLm51Oy6r8r91tC0tL2otcRUZXh0dXJlTGF5ZXI8YnI+CrG7t+LXsNTaV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJJbXBs1tCw/LqstcRXZWJMYXllckltcGzKtcD91tChozxicj4K1eLA77S0vai1xFdlYkxheWVySW1wbLnYwaq1vWNhbnZhc73ateO21NOmtcRSZW5kZXJMYXllcsnPtcS5/bPMyOfPwqO6PGJyPgo8L3A+CjxwPjxpbWcgc3JjPQ=="/uploadfile/Collfiles/20141011/201410110833405.jpg" alt="\">
GraphicsLayer::setupContentsLayer()中將WebExternalTextureLayerImpl包含的
WebLayerImpl實例作為子節點關聯到GraphicsLayer
包含的WebContentLayer包含的WebLayerImpl實例上。
這樣,Canvas2DLayerBridge包含WebExternalTextureLayerImpl實例中創建的TextureLayer
就被關聯到了renderlayer tree間接包含的cc模塊中的layer tree上。
以上兩個過程涉及的類圖:
chromium for android硬件渲染流程全解析(render進程)可知,這顆layer tree最終會被傳給cc::LayerTreeHost持有。
在頁面更新時,會遍歷這顆layer tree依次調用各個節點的Update()。
3.canvas元素對應renderlayer間接包含的texturelayer得到保存繪制結果信息的mailbox的過程。
SkBitmapDevice::onAccessBitmap()返回的bitmap是在
SkGpuDevice的構造函數中創建的,這個bitmap由以下語句創建:
SkBitmapDevice(make_bitmap(context, renderTarget));
所以,這個bitmap的內容就是保存硬件繪制結果的目標texture的內容。
SkSurface_Gpu::onNewImageSnapshot()以bitmap為參數創建了SkImage.
Canvas2DLayerBridge::prepareMailbox()將這個SkImage封裝進mailboxinfo.
將mailboxinfo送出去之前,Canvas2DLayerBridge::prepareMailbox()調用了
WebGraphicsContext3D::produceTextureCHROMIUM()。最終調用到
GLES2DecoderImpl::DoProduceTextureCHROMIUM().
WebExternalTextureLayerImpl::PrepareTextureMailbox()
將blink::WebExternalTextureMailbox封裝成cc::TextureMailbox返回給
TextureLayer。
4.Browser進程消耗保存繪制結果的目標texture的過程
TextureLayer::Update()只做一件事就是得到包含繪制結果的texture,對於
canvas元素對應的texture,得到的是封裝了繪制結果的mailbox.
TextureLayer::PushPropertiesTo()中將這個mailbox傳給了TextureLayerImpl.
TextureLayerImpl::WillDraw()中調用
ResourceProvider::CreateResourceFromTextureMailbox().將mailbox由保存在了
ResourceProvider創建的Resource中。
Browser進程中執行的合成過程會調用到,
GLRenderer::DrawRenderPassQuad()
ScopedReadLockGL::ScopedReadLockGL()調用
ResourceProvider::LockForRead()
ResourceProvider::LockForRead()中會調用
ConsumeTextureCHROMIUM()最終調用到
GLES2DecoderImpl::DoProduceTextureCHROMIUM().
以上過程,以前的文章中分析過,不細分析了。
今早群裡有個盆友問如何將 Qt 開發的 Android 應用的名字設置為中文,試驗了一下,有兩個辦法。博文大賽決賽了,請給我投票:Qt Quick 圖像處理實例之美圖秀秀
shape的屬性有:- corners–圓角- padding–內邊距- size(height、width)–設置寬高- strok
Android中對組合模式的應用,可謂是泛濫成粥,隨處可見,那就是View和ViewGroup類的使用。在android UI設計,幾乎所有的widget和布局類都依靠這
android手機怎麼修改hosts。相信很多android手機用戶都會碰到過Google賬號無法登陸的問題。而無法登入安卓市場的情況。我們電腦可以修改電腦