10 . XDG shell 深入探讨 到目前为止,我们已经成功地在顶级应用程序窗口中显示了一些内容,但XDG shell的功能远不止于此。即使是最简单的应用程序也应该正确地实现配置生命周期,而xdg-shell为更复杂的应用程序提供了有用的功能。xdg-shell功能的完整范围包括窗口大小、多窗口层次结构、客户端装饰和上下文菜单等窗口的语义定位的客户端/服务器协商。
7. XDG shell 基础 XDG(跨桌面组)shell是Wayland的标准协议扩展,它描述了应用程序窗口的语义。它定义了两个wl_surface角色:“toplevel”,用于顶层应用程序窗口,以及“popup”,用于上下文菜单、下拉菜单、工具提示等顶级窗口的子项。将它们放在一起,您可以形成surface的树,顶级位于顶部,弹出窗口或额外的顶级位于叶子上。该协议还定义了一个定位器接口,用于帮助定位弹出窗口,并限制有关窗口周围事物的信息。xdg-shell作为协议扩展,不在wayland.xml中定义。
6. Buffer和Surface 显然,这个系统的全部目的是向用户显示信息,并接收他们的反馈以进行额外的处理。在本章中,我们将探讨这些任务中的第一个:在屏幕上显示像素。为此,我们使用两个原始对象,即缓冲区和表面,它们分别由wl_buffer和wl_surface接口管理。缓冲区充当不透明容器,用于存储一些底层像素,并且客户端通过一系列方法提供这些缓冲区 - 最常见的是共享内存缓冲区和GPU句柄。
2. Wayland协议设计 Wayland协议是由几层抽象构建的。它从基本的线路协议格式开始,这是一种可解码的消息流,使用事先商定的接口。然后我们有更高级的程序来列举接口,创建符合这些接口的资源,并交换有关它们的消息-Wayland协议及其扩展。在此之上,我们有一些更广泛的模式,这些模式在Wayland协议设计中经常使用。我们将在本章中介绍所有这些。让我们从下到上开始工作吧。
1.Wayland介绍 Wayland是Unix类系统的下一代显示服务器,由可敬的Xorg-Server的校友设计和建造,是将您的应用程序窗口放到用户屏幕上的最佳方式。过去使用过X11的读者将会对Wayland的改进感到惊喜,而那些在Unix上进行图形处理的新手将会发现它是一个构建图形应用程序和桌面的灵活且强大的系统。这本书将帮助您对Wayland的概念、设计和实现有一个坚实的基础,并为您提供构建自己的Wayland客户端和服务端应用程序的工具。在您的阅读过程中,我们将建立一个对Wayland的心理模型,并建立其设计的理由。
5. 全局对象和注册器 如果你记得第2.1章,每个请求和事件都与一个对象ID相关联,但到目前为止,我们还没有讨论对象是如何创建的。当我们收到Wayland消息时,我们必须知道对象ID代表什么接口才能解码它。我们还必须以某种方式协商可用的对象、创建新对象以及将ID分配给它们。在Wayland中,我们同时解决了这两个问题——当我们绑定一个对象ID时,我们在所有未来的消息中同意它所使用的接口,并将对象ID到接口的映射存储在我们的本地状态中。为了引导这些,服务器提供了一个全局对象的列表。
4. Wayland中的display 现在,我们忽略了Wayland协议如何管理客户端和服务器之间对象的共同所有权的一个重要细节:这些对象是如何创建的。Wayland显示或wl_display在每个Wayland连接上隐式存在。对于普通Wayland用户来说,这些中最有趣的是get_registry,我们将在下一章中详细讨论它。简而言之,注册表用于分配其他对象。接口的其余部分用于维护连接,除非您正在编写自己的libwayland替代品,否则它们通常不重要。
3. Wayland库的实现 我们在1.3章简单介绍过Wayland库——这是最流行的Wayland实现。本书的大部分内容适用于任何实现,但我们将用接下来的两章来让您熟悉这一实现。Wayland软件包包括用于wayland-client和wayland-server的pkg-config规范——请查阅您的构建系统文档以了解如何链接它们。当然,大多数应用程序只会链接到其中一个。该库包括一些简单的原语(例如链表)和预先编译的wayland.xml版本——这是核心的Wayland协议。我们将从介绍原语开始。
Android 图形显示系统(十四)OpenGLES 纯Native实现PNG图片贴图 文章目录如何实现一个纯Native的应用创建项目AndroidManifest的配置添加Native层的代码简介一下NativeActivity加载PNG图片png库的编译png库的使用OpenGLES贴图创建纹理Texture使用纹理Shader的那些事小结#OpenGLES 纯Native实现PNG图片贴图春节临近本来不想更了,但是为了纪念即将逝去的一年,还是留下点什么吧!就让我们用Ope...
DRM显示驱动开发 版权声明:本文为CSDN博主「何小龙」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/hexiaolong2009/article/details/83720940————————————————本篇博客摘自CSDN博主「何小龙」的原创文章,很好的DRM学习进阶,也省的亲自写了!1. 最简单的DRM...
Android P 图形显示系统(十二) BufferQueue(三) 文章目录Buffer状态acquireBuffer流程releaseBuffer流程分析小结Buffer状态对于生产者这边,BufferQueue的流程基本讲完了。简单说来,首先提需求,告诉BufferQueue需要什么样的Buffer,大小,格式,usage等等;然后dequeue Buffer出来,往Buffer里面绘制显示数据;绘制完成后,queue到BufferQueue里面,并通知消...
Android P 图形显示系统(十一) BufferQueue(二) 文章目录BufferQueuedequeueBuffer申请buffer绘制queueBuffer处理BufferQueue我们再来看一下我们的应用代码,下面是绘制Buffer的代码。我们这里只绘制了一次,但是在Andoroid的系统中,界面的不断更新的,也就是说,这里的绘制是一个不断循环的过程。 // 11. draw the ANativeWindow for (int i...
Android P 图形显示系统(十) BufferQueue(一) 文章目录BufferQueueNative应用绘制界面SurfaceFlinger创建LayerNative窗口ANativeWindowSurfaceSurfaceControl窗口销毁的善后处理BufferQueue前面结合应用中WindowSurfaceWrapper的,讲解了应用怎么和SurfaceFlinger建立连接,进行交互的。BufferQueue 类是 Android 中所...
Graphics 调试工具 GAPID(一)简介 Graphics Debug Tool GAPID编译GAPID直接安装gapid组成GAPID的使用Graphics Debug Tool GAPIDGAPID (Grapphics API Debugger) 是一系列的Graphics调试工具,可以检查,微调,重播应用对图形驱动的API调用。GAPID 可以跟踪Android任何可以调试的应用,即andr...
Android P 图形显示系统(九) Android图形显示子系统概述 文章目录图形系统显示系统Buffer管理显示系统的架构从应用的角度理解AndroidAndroid图形显示子系统概述Android图形显示系统,是Android比较重要的一个子系统,和很多其他子系统的关联紧密。想象一下,没有图形显示系统的手机是什么样子,可能连对讲机都不如吧。图形显示系统比较复杂,从Android诞生到现在,几经修改,已经变的越来越庞大了。总的说来,图形显示系统可以分为两大部分...
Android P 图形显示系统(八) SurfaceFlinger合成流程(三) 文章目录SurfaceFlinger合成流程(三)配置硬件合成 setUpHWComposer合成处理 doComposition合成后处理 postCompositionClient合成SurfaceFlinger合成流程(三)配置硬件合成 setUpHWComposer回到handleMessageRefresh,继续看Refresh消息的处理。此时需要进行合成显示的数据,在rebuil...
Android P 图形显示系统(七) SurfaceFlinger合成流程(二) SurfaceFlinger合成流程(二)SurfaceFlinger合成流程MessageQueue中分发两个消息,一个INVALIDATE,一个REFRESH,SurfaceFlinger对这两个消息的响应过程,就是合成的过程。消息INVALIDATE处理在onFrameAvailable时,调用signalLayerUpdate,将触发INVALIDATE消息。SurfaceFlin...
Android P 图形显示系统(六) SurfaceFlinger合成流程(一) 文章目录SurfaceFlinger合成流程(一)Consumer端的FrameListener消息队列MessageQueue显示设备DispalyDeviceDisplay接口服务显示屏的类型DisplayDevice的热插拔处理创建DisplayDevicehotplug的流程SurfaceFlinger合成流程(一)通过前面的简单介绍,我们对HWC合成有大致的了解。下面我们根据实际代码...
Android P 图形显示系统(五) 上层Client和SurfaceFlinger的交互 文章目录上层Client和SurfaceFlinger的交互Native应用建立应用和SurfaceFlinger的链接建立SurfaceFlinger的启动获取Display信息Native创建图层Layer处理状态的传送小结上层Client和SurfaceFlinger的交互为了很好的切入主题,我们这里基于Native的Framework进行应用的开发呢,不是指的NDK应用。我们直接用系统...
Android Q 色彩(颜色)模式解析(一) 文章目录Android 色彩(颜色)模式解析(一)FrameWork色彩模式的定义及实现SurfaceFlinger对色彩模式的支持和实现看屏幕是否支持颜色管理屏幕的ColorProfileSurfaceFlinger设置ColorMode的流程小结Android 色彩(颜色)模式解析(一)Android Q 在系统设置中提供了可设置的色彩模式,当然这功能很多厂商早就有了~,落后归落后,我们还...