
Android图形/显示系统系列
文章平均质量分 85
Android/图形和显示系统系列
Android系统攻城狮
《Android系统多媒体进阶实战》一书作者
展开
-
Android图形系统之X11、Weston、Wayland、Mesa3D、ANGLE、SwiftShader介绍(十五)
本篇目的:理解X11、Weston、Wayland、Mesa3D、SwiftShader框架和协议。X11X11是一个用于Unix和类Unix系统的窗口系统。它提供了图形用户界面(GUI)应用程序与计算机显示设备之间的基本交互。X11使用客户端-服务器模型,允许应用程序在一个计算机上运行,而图形显示可以在另一台计算机上进行,这使得远程图形显示成为可能。WestonWeston是一个开源的以Wayland协议为基础的窗口管理器(compositor),用于管理应用程序窗口、输入设备和图形显示。原创 2023-11-13 10:51:04 · 2703 阅读 · 0 评论 -
Android图形系统之HWComposer、ComposerHal、ComposerImpl、Composer、Hwc2::Composer实例总结(十四)
本篇目的:Android图形系统中,HWC特别的复杂,特别是HWComposer、ComposerImpl、Composer、Hwc2::Composer之间的关系,有种剪不断理还乱的感觉,通过几个演化例子,看清楚它本来的面目。原创 2023-10-31 16:26:45 · 1230 阅读 · 0 评论 -
Android图形系统之SurfaceFlinger/OpenGL/HWC/Gralloc/FrameBufer/ION/GPU等关系(十三)
本篇目的:理解SurfaceFlinger/OpenGL/HWC/Gralloc/FrameBufer/ION关系。原创 2023-07-21 00:47:48 · 1059 阅读 · 0 评论 -
Android图形系统之ANativeWindow与Surface关系(十二)
本篇目的:理解Android显示系统之ANativeWindow与Surface关系。原创 2023-07-20 18:45:22 · 624 阅读 · 0 评论 -
Android之Surface 与 SurfaceFlinger关系
简述Surface 与 SurfaceFlinger 之间关系转载 2022-09-16 14:29:17 · 846 阅读 · 0 评论 -
Android图形系统之EGLSurface与OpenGL ES(十一)
Android 使用 OpenGL ES (GLES) API 渲染图形。为了创建 GLES 上下文并为 GLES 渲染提供窗口系统,Android 使用 EGL 库。GLES 调用用于渲染纹理多边形,而 EGL 调用用于将渲染放到屏幕上。在使用 GLES 进行绘制之前,您需要创建 GL 上下文。在 EGL 中,这意味着要创建一个 EGLContext 和一个 EGLSurface。 GLES 操作适用于当前上下文,该上下文通过线程局部存储访问,而不是作为参数进行传递。渲染代码应该在当前 GLES 线程原创 2022-01-10 15:03:16 · 3154 阅读 · 0 评论 -
Android图形系统之VSYNC(十)
VSYNC 信号可同步显示流水线。显示流水线由应用渲染、SurfaceFlinger 合成以及用于在屏幕上显示图像的硬件混合渲染器 (HWC) 组成。VSYNC 可同步应用唤醒以开始渲染的时间、SurfaceFlinger 唤醒以合成屏幕的时间以及屏幕刷新周期。这种同步可以消除卡顿,并提升图形的视觉表现。HWC 可生成 VSYNC 事件并通过回调将事件发送到 SurfaceFlinger:typedef void (*HWC2_PFN_VSYNC)(hwc2_callback_data_t cal原创 2022-01-10 14:49:13 · 2283 阅读 · 0 评论 -
Android图形系统之HWC与GPU混合渲染(九)
硬件混合渲染器 (HWC) HAL 用于确定通过可用硬件来合成缓冲区的最有效方法。作为 HAL,其实现是特定于设备的,而且通常由显示硬件原始设备制造商 (OEM) 完成。当您考虑使用叠加平面时,很容易发现这种方法的好处,它会在显示硬件(而不是 GPU)中合成多个缓冲区。例如,假设有一部普通 Android 手机,其屏幕方向为纵向,状态栏在顶部,导航栏在底部,其他区域显示应用内容。每个层的内容都在单独的缓冲区中。您可以使用以下任一方法处理合成:将应用内容渲染到暂存缓冲区中,然后在其上渲染状态栏,再在其原创 2022-01-10 14:26:39 · 3905 阅读 · 2 评论 -
Android图形系统之SurfaceFlinger与WindowManager(八)
SurfaceFlinger 接受缓冲区,对它们进行合成,然后发送到屏幕。WindowManager 为 SurfaceFlinger 提供缓冲区和窗口元数据,而 SurfaceFlinger 可使用这些信息将 Surface 合成到屏幕。SurfaceFlingerSurfaceFlinger 可通过两种方式接受缓冲区:通过 BufferQueue 和 SurfaceControl,或通过 ASurfaceControl。SurfaceFlinger 接受缓冲区的一种方式是通过 BufferQu原创 2022-01-10 11:43:29 · 930 阅读 · 0 评论 -
Android图形系统之TextureView(七)
TextureView 类是一个结合了 View 和 SurfaceTexture 的 View 对象。使用 OpenGL ES 呈现TextureView 对象会对 SurfaceTexture 进行包装,从而响应回调以及获取新的缓冲区。在 TextureView 获取新的缓冲区时,TextureView 会发出 View 失效请求,并使用最新缓冲区的内容作为数据源进行绘图,根据 View 状态的指示,以相应的方式在相应的位置进行呈现。OpenGL ES (GLES) 可以将 SurfaceTe原创 2022-01-10 11:38:50 · 2594 阅读 · 0 评论 -
Android图形系统之SurfaceTexture(六)
SurfaceTextureSurfaceTexture 是 Surface 和 OpenGL ES (GLES) 纹理的组合。SurfaceTexture 实例用于提供输出到 GLES 纹理的接口。SurfaceTexture 包含一个以应用为使用方的 BufferQueue 实例。当生产方将新的缓冲区排入队列时,onFrameAvailable() 回调会通知应用。然后,应用调用 updateTexImage(),这会释放先前占用的缓冲区,从队列中获取新缓冲区并执行 EGL 调用,从而使 GLE.原创 2022-01-10 11:33:23 · 4813 阅读 · 0 评论 -
Android图形系统之SurfaceView与GLSurfaceView关系(五)
Android 应用框架界面以使用 View 开头的对象层次结构为基础。所有界面元素都会经过一系列的测量和一个布局过程,该过程会将这些元素融入到矩形区域中。然后,所有可见 View 对象都会渲染到一个 Surface(当应用置于前台时,由 WindowManager 进行设置)。应用的界面线程会按帧执行布局并渲染到缓冲区。SurfaceViewSurfaceView 是一个组件,可用于在 View 层次结构中嵌入其他合成层。SurfaceView 采用与其他 View 相同的布局参数,因此可以像对待.原创 2022-01-10 11:28:56 · 1492 阅读 · 0 评论 -
Android图形系统之Surface与SurfaceHolder关系(四)
Surface 对象使应用能够渲染要在屏幕上显示的图像。通过 SurfaceHolder 接口,应用可以编辑和控制 Surface。SurfaceSurface 是一个接口,供生产方与消耗方交换缓冲区。用于显示 Surface 的 BufferQueue 通常配置为三重缓冲。缓冲区是按需分配的,因此,如果生产方足够缓慢地生成缓冲区(例如在 60 fps 的显示屏上以 30 fps 的速度进行缓冲),队列中可能只有两个分配的缓冲区。按需分配缓冲区有助于最大限度地减少内存消耗。您可以在 dumpsy.原创 2022-01-10 11:25:46 · 2868 阅读 · 0 评论 -
Android图形系统之BufferQueue与Gralloc关系(三)
BufferQueue 类将可生成图形数据缓冲区的组件(生产方)连接到接受数据以便进行显示或进一步处理的组件(使用方)。几乎所有在系统中移动图形数据缓冲区的内容都依赖于 BufferQueue。Gralloc 内存分配器会进行缓冲区分配,并通过两个特定于供应商的 HIDL 接口来进行实现(请参阅hardware/interfaces/graphics/allocator/和hardware/interfaces/graphics/mapper/)。allocate()函数采用预期的参数(宽度...原创 2022-01-10 11:20:26 · 816 阅读 · 0 评论 -
Android图形系统之SurfaceFlinger与Hardware Composer(二)
SurfaceFlinger 和 Hardware Composer HAL 通过执行以下四项关键任务来准备用于显示的图形数据缓冲区:接受缓冲区 确定合成缓冲区的最有效方法 合成缓冲区 将缓冲区发送到显示设备SurfaceFlingerSurfaceFlinger 接受来自多个来源的数据缓冲区,对它们进行合成,然后发送到显示设备。当应用进入前台时,WindowManager 服务会向 SurfaceFlinger 请求一个绘图 Surface。SurfaceFlinger 会创建一个其主原创 2022-01-10 10:00:24 · 1438 阅读 · 0 评论 -
Android图形系统之Surface/Window/View/SurfaceView区别(一)
1.Surface一个Surface就是一个对象,该对象持有一群像素(pixels),这些像素是要被组合到一起显示到屏幕上的。你在u上看到的每一个window(如对话框、全屏的activity、状态栏)都有唯一一个自己的surface,window将自己的内容(content)绘制到该surface中。Surface Flinger根据各个surface在Z轴上的顺序(Z-order)将它们渲染到最终的显示屏上。一个surface通常有两个缓冲区以实现双缓冲绘制:当应用正在一个缓冲区中绘制自己下一个原创 2021-08-07 17:17:29 · 3685 阅读 · 0 评论 -
闲聊Framebuffer
背景接触过图形相关的同学应该对Framebuffer这个名词不陌生,但Framebuffer究竟是什么,用来做什么,在我接触图形相关工作以前,对我来说一直是模糊的。本文主要闲聊Framebuffer。什么是Framebuffer?Framebuffer,也叫帧缓冲,其内容对应于屏幕上的界面显示,可以将其简单理解为屏幕上显示内容对应的缓存,修改Framebuffer中的内容,即表示修改屏幕上的内容,所以,直接操作Framebuffer可以直接从显示器上观察到效果。但Framebuffer并转载 2020-12-25 17:10:29 · 866 阅读 · 0 评论 -
一篇文章看明白 Android 图形系统 Surface 与 SurfaceFlinger 之间的关系
原址Android - SurfaceFlinger 图形系统概述Android 系统启动过程Activity 创建过程Activity 与 Window 与 View 之间的关系通过前面的知识我们知道了,Android 系统从按下开机键到桌面,从桌面点击 App 图标到 Activity 显示的过程。但是 Activity 是怎么显示在屏幕上的呢?下面我们就来讨论下这一过程...转载 2018-10-15 14:38:05 · 844 阅读 · 0 评论 -
Android6.0显示系统(五) SurfaceFlinger服务
原址SurfaceFlinger是一个独立的进程,我们来看下init.rc关于SurfaceFlinger的代码,我们可以看到SurfaceFlinger是属于core服务的。 service surfaceflinger /system/bin/surfaceflinger class core user system group graphics drm...转载 2018-10-10 21:49:18 · 446 阅读 · 0 评论 -
AndroidO 下图形显示框架变化介绍
From原创 2019-04-17 23:50:54 · 486 阅读 · 0 评论 -
Android的16ms和垂直同步以及三重缓存
前言手机屏幕是由许多的像素点组成的,每个像素点通过显示不同的颜色最终屏幕呈现各种各样的图像。手机系统的类型和手机硬件的不同导致UI的流畅性体验个不一致。屏幕展示的颜色数据在GPU中有一块缓冲区叫做 Frame Buffer ,这个帧缓冲区可以认为是存储像素值的二位数组。数组中的每一个值就对应了手机屏幕的像素点需要显示的颜色。由于这个帧缓冲区的数值是在不断变化的,所以只要完成对屏幕的刷新...转载 2019-04-24 12:12:34 · 808 阅读 · 0 评论 -
Android Framebuffer设置分辨率
struct fb_var_screeninfo {__u32 xres; /* visible resolution横像素 */__u32 yres; //竖像素__u32 xres_virtual; /* virtual resolution */__u32 yres_virtual;__u32 xoffset; /* offset from virtual to visibl...转载 2019-05-06 21:24:15 · 1697 阅读 · 0 评论 -
Android SurfaceFlinger与OpenMax流程(好文)
原址原创 2018-05-08 18:45:50 · 643 阅读 · 0 评论