自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 Android-View绘制原理(19)-GrDrawingManager

本文分析了绘制流程中一个非常重要的类GrDrawingManager,它保存着GPU渲染前的绘制命令最后形态的集合fDAG。flush为fDAG中的绘制任务(task中持有一个GrSurface或者GrTexture)中需要分配资源的,会分配GPU寄存器资源,然后调用Gpu的submit方法来提交GPU渲染。基于个人的理解,如有疏误,欢迎同行指正。

2023-12-14 21:57:39 289

原创 Android-View绘制原理(18)-GrTexture

本文分析了GrTexture的相关的知识点,包含创建GrTextureProxy的流程以及通过这个GrTextureProxy去初始化一个GrTexture的流程,初始化就是调用OpenGL的接口在GPU去创建分配纹理图像的过程,纹理的Id将保存在创建出来的GrGLTextureRenderTarget对象中。到这里,代理类的GrSurface成员fTarget就创建出来了,对应的Gpu显存也申请好了,可以开始向GPU提交绘制命令了。

2023-09-08 17:09:30 271 1

原创 Android-View绘制原理(17)-GrSurface

本文介绍GrSurface相关的概念,并进一步分析了GrRenderTargetProxy的包装流程,通过wrap的方式,创建出来的GrRenderTargetProxy中已经持有了一个GrSurface对象,它是一个GrGLRenderTarget的类型的对象,它持有的一个GrAttachment类型的成员fStencilAttachment也已经创建好。

2023-08-30 14:12:37 300 1

原创 Android-View绘制原理(16)-SkSurface

本文主要介绍了SkSurface这个组件,它封装了GPU绘制的资源,可以进行像素渲染。主要分析了它相关的2个创建的过程,通过提供不同的参数,分别创建出一个GrTextureProxy和GrSurfaceProxy,他们最后都会封装成一个SkGpuDevice对象,他们都代表这GPU上的绘制资源。

2023-08-23 09:18:35 352

原创 Android-View绘制原理(15)-RenderNodeDrawable

本文主要分析了renderFrame函数的原理,包括了对Layer的处理和RootRenderNode的处理,他们最后都是通过RenderNodeDrawable来进行渲染的。然后将RootRenderNode中的displayList画到SkSurface中完成像素渲染。其中对于Layer的处理逻辑比较难理解。我总结一下设置成Layer与不设置成Layer的差别。

2023-08-15 10:30:30 688

原创 Android-View绘制原理(14)-RenderPipeline

创建SkSurfacerenderFrame 将记录的描述数据记录的SkSurfaceflushAndSubmit 提交绘制命令到GPU进行像素渲染绘制前准备Frame模型SkiaOpenGLPipeline 调用GPU绘制mRenderPipeline->swapBuffers 通知HWComposer进行屏幕合成回调FrameCompleteCalback结尾。

2023-08-09 10:20:04 400 1

原创 Android-View绘制原理(13)-DrawFrameTask

这一篇文章我们开始进入到绘制帧的流程分析,从Java的draw方法开始,进行一帧的和绘制,会通过C层的RenderProxy代理后,转发到RenderContext的draw方法,在转发到DrawFrameTask.drawFrame方法,它会通过王RenderThread的queue创建一个任务,于是进入到RenderThread这个子线程里去执行绘制逻辑。首先将调用EGLManager.makeCurrent()将当前的EGLSurface作为OpenGL的绘制表面,

2023-08-07 10:02:15 567 1

原创 Android-View绘制原理(12)-RenderThread

本文主要介绍了EventThread这个组件相关的功能,主要包含了以下内容线程和任务队列原理vsync机制初始化EGLManager,GrDirectContext,并创建好了向GPU提交数据的GrGLGpu对象。

2023-08-04 11:51:03 667 1

原创 Android-View绘制原理(11)-HardwareRenderer

HardrwareRender的初始化需要从Java层传入Surface,这个Surface在C层将以ANativeWindow的形式被使用。在初始化后,C。

2023-08-02 09:58:06 749

原创 Android-View绘制原理(10)-SkCanvas

本文接着上一篇文章,继续分析了skia层的SkCanvas, 它可以接受多种绘制目标设备,比如它的子类RecordingCanvas使用的是SkNoPixelsDevice,因此只能记录而不能渲染成像素;需要渲染成像素需要使用比如SkGpuDevice。SkCanvas除了device这个重要属性外,还有一个fMCStack用于保存绘制Layer,并且默认会创建一个Layer,绘制时,绘制方法都是作用于栈顶的Layer。

2023-07-31 19:10:12 506 1

原创 Android-View绘制原理(09)-RecordingCanvas

前面文章介绍RenderNode, 它承包了View的绘制业务,提供了绘制的Canvas,今天这篇文章就来分析一下这个Canvas, 并看看一个基本的绘制功能是如何完成的。前文中分析过,在RenderNode.beginRecording的时候,会通过RecordingCanas.obtain方法获取一个还缓存,我们就从这里接着分析frameworks/base/graphics/java/android/graphics/RenderNode.javaRecordingCanvas准备了25个缓存,

2023-07-28 16:19:11 400 1

原创 Android-View绘制原理(08)-DisplayList

在C层关于DisplayList又两个头文件在分析RenderCanvas那篇文章中,我们也提到到过SkiaDisplayList.也简单分析了它的绘制逻辑。但是它更DisplayList是什么关系呢?是继承关系吗?我们从源码来来分析一下从源码中可以看到,DisplayList原来只是SkiaDisplayListWrapper的别称,因此我们看看SkiaDisplayListWrapperpublic:...

2023-07-26 18:26:32 334 1

原创 Android-View绘制原理(07)-RenderNode

RenderNode是一个绘制节点,一个大的界面是由很多小的绘制单元组成,这个正如View的层级结构,整个界面由很多控件组成,这样带来的好处就是需要整体绘制界面的时候,只有那些变化的单元重新绘制,然后在重新组装界面即可。这让我联想到了活字印刷术,当我们要印刷一页内容的时候,如果将所有的字都刻在一块板上,当要修改的时候,就需要整体重新来刻,效率很低成本很高,但是如果是将每一个字作为一个组件,页面只是这些字拼接出来的,修改或者重用的话就相对容易很多,RenderNode就相当于是一个个的字。

2023-07-22 12:21:48 484

原创 Android-View绘制原理(06)-ASurfaceControl

***/ASurfaceControl只是一个结构体,也没有属性。这个ASurfaceControl不是很复杂,但是因为分析后续绘制流程会涉及到这个概念,因此就简单介绍一下。

2023-07-20 14:21:41 290 1

原创 Android-View绘制原理(05)-ANativeWindow

我们来看一下ANativeWindow的定义:...这些函数的定义分散在上述个header文件,但是实现是在一个cpp文件中...所以这些全局方法都转发到了window上去执行的,window类型是ANativeWindow的指针,而实际上就一个Surface.java层的Surface 可以与ANativeWindow相互转换。

2023-07-17 19:44:38 491 1

原创 Android-View绘制原理(04)-生成Surface

创建Surface的流程

2023-07-14 10:09:47 698 1

原创 Android-View绘制原理(03)-Vsync原理之App篇

从app部分分析Vsync原理

2023-07-11 15:15:40 466 1

原创 Android-View绘制原理(02)-VSync原理之SurfaceFlinger篇

我们这篇文章主要介绍了Vsync在SurfaceFlinger的实现原理。在SurfaceFlingger初始化时,会向HWComposer注册回调,HWComposer会通过HWBinder向硬件测注册回调。SurfaceFlinger搭建好处理Vsync的基础设施,初始化Scheduler,DispVsyncSoure以及最重要的EventThread。

2023-07-07 08:55:57 879 1

原创 Android-View 绘制原理(01)-JAVA层分析

##8.1 答案揭晓:1)Canvas 是哪里来的?在未开启硬件加速的情况下,是直接构造的Canvas对象,并将内容画到一个Bitmap缓存;在开启硬件加速的情况下,是来自于RenderNode.begingRecording方法生成的一个RecordingCanvas,并将绘制命令记录到DisplayList2)绘制完毕后如何显示在界面去?

2023-07-05 08:42:08 842 2

翻译 Android Data Binding框架指南

Android Data Binding框架指南[TOC]构建环境使用data binding框架,需要使用Android SDK manager中从支持库中下载相应的支持包,然后在你的应用中配置使用data binding框架,即在你的应用构建脚本build.gradle中添加dataBinding元素,示例如下:android { ... dataBinding {

2016-03-27 15:31:35 1115

原创 欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2016-03-27 14:46:13 200

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除