QNX Screen图形子系统开发指南
文章平均质量分 78
qnx screen 图形子系统开发与调试
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
零纳秒科技
校园到职场,做过室内设计;WEB前后端,APP,嵌入式,LinuxAndroid,ChromiumOS,YunOS,智舱OS等开发。
行业遍及互联网,手机,IOT,汽车。
合作品牌如华为,中兴,OV,小米,三星,谷歌,联想,诺基亚,魅族,上汽,大众,腾讯,百度,网易,LG、HTC,沃达丰,AT&T,中移动,中国电信。
职业规划为操作系统方向,涉及不同框架、方案架构设计开发,可维可测,全维度的工程化;
目前主要涉及Android产品从App、FWK、HAL、Kernel、QNX全链路的垂直工程化,以及跨域产/研/测/项目/互联网产品的横向工程化;
展开
-
4.2 【共享源】克隆详解
克隆是指通过共享缓冲区来复制内容(例如,两个窗口共享相同的内容)。你可以在多个显示器上显示内容,但只需要更新一个缓冲区。视频播放就是一个很好的例子。你可以解码一次,但在多个显示器上播放。例如,假设有一个完全透明的窗口,除了需要有一个在一角进行混合的水印。如果去混合整个窗口,那么成本会很高,可以通过将此窗口的透明度设置为SCREEN_TRANSPARENCY_DISCARD来完全避免。然而,为了保持水印可见,我们可以创建另一个窗口,与透明窗口共享其缓冲区。原创 2023-12-22 07:01:57 · 883 阅读 · 0 评论 -
5.1 显示窗口的内容(一)
显示器用于在物理硬件(如计算机显示器或触摸屏显示器)上显示窗口的内容。屏幕API提供的功能允许我们创建同时写入多个窗口和显示的应用程序。屏幕支持多个显示器,但创建和管理使用多个显示器的应用程序可能会非常棘手。你需要考虑线程、性能和图形优化。显示器彼此独立,每个窗口只能与一个显示器相关联。我们可以在配置文件graphics.conf中提供要应用于平台支持的物理显示器的配置。有关更多信息,请参阅配置屏幕。原创 2023-12-26 03:00:00 · 1779 阅读 · 0 评论 -
12.5 【Screen配置】配置winmgr(三)
class子段指定了窗口属性的默认值。Windows 必须与显示器相关联。因此,只有在系统支持显示器,或者系统上有需要显示器的应用程序时,才需要在配置文件中包含此部分。此class部分必须以 begin class class_name 开头并以 end class 结尾。class子段用于设置该部分中定义的窗口属性的默认值;这些属性是通过应用于帧缓冲区和应用程序窗口的参数来指定的。原创 2024-01-06 22:13:12 · 1026 阅读 · 0 评论 -
12.4 【Screen配置】配置winmgr(二)
如果 display_id 是一个整数,Screen 会将配置参数应用于其 ID 为 display_id 指定的显示器。否则,如果 display_id 是一个与有效显示器连接类型匹配的字符串,则 Screen 会将配置参数应用于其连接类型与 display_id 指定的显示器匹配的第一个可用显示器。可以使用 display_id 将每个display部分与物理显示器相关联。display_id 可以是标识显示器的数字,也可以是显示器的连接类型。display部分的数量取决于平台支持的物理显示器的数量。原创 2024-01-06 17:37:43 · 1017 阅读 · 0 评论 -
12.3 【Screen配置】配置winmgr(一)
与显示相关的参数在该段中指定,从开始显示display_id开始,到end display结束。可以有多个display子段,每个子段对应一个平台可用和支持的物理显示器。与类相关的参数在本段中指定,从begin class class_name 开始,以end class结束。graphics.conf 配置文件必须包含一个 winmgr 部分,在其中指定global, display,和class参数。winmgr 部分被标识为由 begin winmgr 和 end winmgr 包围的配置文件部分。原创 2024-01-04 22:19:59 · 534 阅读 · 0 评论 -
12.2 【Screen配置】khronos模块配置
khronos部分的配置用于指定与Khronos相关的库和参数(例如EGL和WFD库)。在graphics.conf配置文件中,khronos部分指定GPU和显示驱动程序。只有在系统需要这两种类型的驱动程序之一或两者时,才需要在配置文件中包含此部分。khronos部分由begin khronos和end khronos括起来。与EGL显示相关的库和参数配置egl display部分,以begin egl display display_id开头,以end egl display结尾。原创 2024-01-04 22:11:47 · 1007 阅读 · 0 评论 -
12.1 【Screen配置】概括
graphics.conf 文件位于以下目录中:源码目录:$QNX_TARGET/processor/usr/lib/graphics/platform终端目录:/usr/lib/graphics/platform其中处理器是目标终端设备对应的CPU架构(例如armle-v7),平台是平台的名称(例如imx6x)。除非终端设备上的系统允许,否则需要修改源码中的 graphics.conf 文件,然后将其构建到操作系统映像文件系统中。原创 2024-01-02 21:19:46 · 578 阅读 · 0 评论 -
13 术语
Screen系列中常见的术语。原创 2024-01-02 21:04:27 · 406 阅读 · 0 评论 -
11.2 Screen调试实战(二,运行时阶段)
运行时出现的问题是比较难查的。我们可以使用一些调试工具或通过slog2info打印的日志排查问题。原创 2024-01-01 07:44:12 · 1021 阅读 · 0 评论 -
11.1 Screen调试实战(一,初始化阶段)
调试图形并不容易。由于图形涉及许多方面和组件,因此找出问题所在可能具有挑战性。该节介绍了相关调查的工具和方法。图形问题主要包含以下两类:图形堆栈未正确初始化,或者应用程序运行时发生异常。这里的大多数调试方法都需要Screen的调试模块(screen-debug.so)。调试时,我们需要确保确保可以使用此模块和其他调试工具。原创 2024-01-01 07:43:53 · 979 阅读 · 0 评论 -
10 Screen安全策略
关于Screen安全策略的章节是为系统集成商准备的,他们负责实施和执行安全策略,以创建和维护一个可信赖的执行环境。系统集成商使用QNX Neutrino安全策略来定义规则,并赋予Screen实用程序和应用程序procmgr能力(能力),就像他们对系统中的其他进程一样。有关系统安全和一般如何将安全策略应用于进程的信息,请参阅系统安全指南。可以在启动屏幕实用程序和应用程序时应用这些策略。原创 2023-12-31 10:41:24 · 926 阅读 · 0 评论 -
9 权限与特权
权限和特权共同决定了对API对象(例如窗口和会话)的访问级别。权限和特权是两个不同的概念。权限定义了执行某些操作的能力,例如设置属性。特权是根据角色类型授予的权限集合。请注意,在创建(例如 screen_create_())或销毁(例如 screen_destroy_())对象时,不会应用权限。原创 2023-12-31 10:41:01 · 912 阅读 · 0 评论 -
8 异步通知
应用程序可以通过sigevent请求异步接收特定Screen事件。对于多线程应用程序,所有事件处理都可以通过异步通知定向到一个线程。当应用程序的所有事件处理都由一个线程执行时,更容易同步任务并确保某些任务按正确的顺序执行。在你调用screen_notify()之前,你必须调用screen_register_event()来注册screen_notify()使用的sigevent。当你不再使用异步通知时,需要禁用通知,然后移除事件注册。我们建议你在禁用使用 你要注销事件的同时,仅在禁用使用该事件的异步通知之原创 2023-12-30 01:53:37 · 935 阅读 · 0 评论 -
7 事件处理
Screen事件,包括输入和常规事件,与给定的上下文相关联,通常在主应用程序的循环中处理。Screen在服务器端管理每个上下文的事件队列。Screen为每个上下文创建事件队列,最大队列大小默认为200。此值可在graphics.conf的全局部分配置。如果有比指定的队列大小更多的事件,则此队列大小不会增长。这意味着如果应用程序在更多事件排队超过队列容量之前未得到处理,则可能会丢失事件。在应用程序调用 screen_get_event() 之前,事件会一直存在于服务器上的上下文队列中。原创 2023-12-30 01:53:13 · 981 阅读 · 0 评论 -
6.6 会话与输入事件(三)
指针输入会话使用SCREEN_EVENT_POINTER类型创建,通常用于控制光标的形状和位置。指针会话的SCREEN_PROPERTY_MODE属性未使用。表示一组六个整数,表示x和y的线性系数、x和y的二次系数以及最小和最大速度。指定一个备用会话。可以将一个会话设置为另一个会话(通常是输入区域)的备用。通常,作为备用的会话也是无窗口的。可以设置应用程序,以便当指针处于一个区域时,它会跳转到另一个会话。例如,如果指针位于特定区域上,可以移动到另一个显示器。原创 2023-12-29 06:56:22 · 1209 阅读 · 0 评论 -
6.5 会话与输入事件(二)
键盘输入会话是用类型SCREEN_EVENT_KEYBOARD创建的,可以与可能生成这些类型输入事件的一个或多个设备相关联。当输入是从键盘设备输入文本时,使用键盘会话。不使用键盘会话的SCREEN_PROPERTY_MODE 属性。原创 2023-12-29 06:55:42 · 1028 阅读 · 0 评论 -
6.4 会话与输入事件(一)
会话是特定类型输入事件的接收者。与窗口不同,会话不产生任何图形内容,也不能放入组中。会话可以被认为是已为会话关联的窗口建立的组。输入会话(会话)允许应用程序控制谁接收哪种类型的输入事件以及如何传递这些输入事件。对于每种类型的输入事件,都有一个相应的会话类型。会话类型由Screen会话类型定义。通过调用screen_create_session_type()和要创建的会话类型来创建会话。逻辑输入事件由输入会话封装。这种输入的一个例子是在文本字段中输入文本。原创 2023-12-28 06:02:25 · 869 阅读 · 0 评论 -
6.3 窗口与输入事件
默认情况下,Windows会接收多种类型的输入事件。在大多数情况下,指针和触摸事件的大小和位置(以及源大小和源位置)决定了输入焦点的位置。也就是说,围绕指针或触摸事件的大小和位置的窗口通常是接收输入事件的窗口。原创 2023-12-28 06:01:55 · 468 阅读 · 0 评论 -
6.2 Input事件类型详解
键盘事件可以与文本输入、导航、选择或特殊键(即具有特殊功能的键,例如音量增/减键)的使用有关。原创 2023-12-27 09:47:43 · 793 阅读 · 0 评论 -
6.1 Input与Input事件分类
Screen支持完全交互式用户体验开发的一个关键方面是支持输入事件并将输入和通知传递回应用程序的功能。输入事件表示用户与应用程序的某种交互。虽然Screen支持多个事件,但并非所有事件都是输入事件。事件可以广播,但输入事件始终只发送给一个接收者(通常是具有焦点的窗口或会话)。输入事件通常(但不一定)与物理设备相关联。例如,输入事件可能来自调用 screen_inject_event(),这可能与物理设备相关联,也可能不相关联。原创 2023-12-27 09:47:02 · 500 阅读 · 0 评论 -
4.10【共享源】外部合成
Screen通过使用根窗口和流支持外部合成(即使用非Screen的合成器)。当Screen不支持所需的效果时(例如页面卷曲效果、旋转效果、显示效果等),有时需要使用外部合成器。外部合成器使客户端能够实现自己的效果。使用外部合成器并不是为了取代Screen的合成管理器组件。Screen的合成管理器负责维护最终场景的合成以供显示。外部合成器本质上是一个消费者。它消费来自多个来源(例如窗口、流或两者)的内容,并反过来将内容呈现到自己的根窗口。原创 2023-12-26 17:14:02 · 1079 阅读 · 0 评论 -
5.3 显示窗口的内容(三)
合成是将多个内容源组合在一起的过程。当你在一个显示器上有多个可见窗口时,就会发生这种情况。Screen执行合成,同时确保所有应该可见的东西都可见,所有应该被覆盖的东西都被覆盖。正如你可能想到的那样,当你考虑单独的窗口和显示器的属性数量,以及多个窗口中的每一个时,如何组合图像几乎有无限种可能。由于最终图像需要正确构建,Screen 并不一定需要单独使用一种合成选项。例如,如果产生的结果图像不准确,即使性能有所提高,也是不合理的。原创 2023-12-27 01:00:00 · 917 阅读 · 0 评论 -
5.2 显示窗口的内容(二)
只有显示管理器被允许更改显示器的几何形状。窗口管理器也是显示管理器。原创 2023-12-26 06:27:34 · 1241 阅读 · 0 评论 -
4.9【共享源】流的多生产者和消费者
本质上,一个生产者流可以与多个消费者流连接,但一个消费者流只能连接到一个生产者流。请注意,基数关系仅限于单个流,而不限于生产者或消费者应用程序。在这个例子中,Stream-p2被Stream-c1和Stream-c2连接并被它们消费。然而,因为Stream-c2已经在消费Stream-p2,它也不能再消费Stream-p1。如果消费者需要来自多个生产者的内容,那么它必须管理多个消费者流。对于本例中的消费者2,为了消费流p1和流p2,它必须创建两个单独的流,并将一个连接到流p1,一个连接到流p2。原创 2023-12-25 18:08:53 · 503 阅读 · 0 评论 -
4.8 【共享源】流的消费者
消费者从生产者那里获取内容,以进行下一步的处理。消费者从生产者那里获取内容,并对其进行某种形式的处理(例如图像处理、合成)。它最终也可以显示来自生产者的内容。通常,我们需要在消费者应用程序中执行接下来的步骤,以从生产者那里获取内容;原创 2023-12-25 14:44:40 · 774 阅读 · 0 评论 -
4.7 【共享源】流的生产者(二)
流的模式决定了Screen如何使前台缓冲区可用。生产者通过调用screen_set_stream_property_iv()并设置SCREEN_PROPERTY_MODE属性来设置模式。原创 2023-12-24 22:35:38 · 471 阅读 · 0 评论 -
4.6 【共享源】流的生产者(一)
生产者创建内容并与有权限的消费者共享。作为生产者,必须相应地设置流以供消费。通常,我们需要在生产者应用程序中执行接下来的流程来共享产生的内容。原创 2023-12-24 22:27:14 · 495 阅读 · 0 评论 -
4.5 【共享源】流详解
流是屏幕API提供的屏幕外多缓冲渲染目标。流由应用程序而不是Screen本身的使用者使用。在窗口的情况下,最常见的是消费者是Screen,因为内容的存在就是为了在显示器上显示。然而,流的内容则被其他应用程序使用。这些应用程序可以与产生流内容的应用程序分开,可以在同一进程中,也可以在不同的进程中。使用流的常见情况是显示来自摄像机(或视频)的输出,在显示之前需要对摄像机的输出进行某种形式的图像处理。生产者流的缓冲区是通过调用 screen_create_stream_buffers() 创建的。原创 2023-12-23 22:27:17 · 1032 阅读 · 0 评论 -
4.4【共享源】克隆实战开发之截屏(二)
screen_read_display() 函数则用于捕获显示器的屏幕截图。我们需要在特权上下文中工作,以便可以完全访问系统的显示属性。我们可以通过调用具有 SCREEN_DISPLAY_MANAGER_CONTEXT 上下文类型的 screen_create_context() 来创建特权上下文。您进程必须具有 root 的有效用户 ID 才能创建此上下文类型。当捕获多个显示器的屏幕截图时,我们需要为每个显示器调用一次 screen_read_display()。原创 2023-12-23 22:09:17 · 477 阅读 · 0 评论 -
4.3【共享源】克隆实战开发之截屏(一)
screen_read_window() 函数用户捕获窗口的截图。此函数调用的上下文没有限制。当捕获多个无关窗口(即不在同一层次结构中的窗口)的屏幕截图时,则必须为每个窗口调用一次 screen_read_window()。接下来我们来详细了解下screen_read_window()函数。以下过程描述了如何使用Screen捕获单个窗口的屏幕截图。我们可以将生成的屏幕截图存储在pixmap或窗口缓冲区中以进行进一步操作。此特定过程描述了在pixmap缓冲区中捕获屏幕截图,然后将屏幕截图写入位图。原创 2023-12-22 22:40:44 · 1023 阅读 · 0 评论 -
4.1 共享源介绍
共享源表示允许在同一应用程序和进程内或不同应用程序和进程之间访问缓冲区及其内容。在共享源中,生产者指创建源内容并提供给另一个对象的对象(例如,进程、应用程序、窗口)。消费者是从另一个对象(例如,进程、应用程序、窗口)获取其源的任何对象。我们可以通过不同的方式共享或允许访问缓冲区。选择共享缓冲区的方式取决于我们的应用程序的目的、内容的类型,或两者兼而有之。例如,如果你想将内容在多个显示器上显示,那么你需要使用克隆的方式。但是,如果你需要控制消费者和生产者之间的更新速度,则建议使用流。原创 2023-12-21 21:29:54 · 413 阅读 · 0 评论 -
3.12【窗口】窗口使用示例(源剪切矩形的使用 五)
源矩形与窗口缓冲区大小相同。这意味着源矩形包括源图像和缓冲区中不打算显示的部分。为了防止显示不需要的区域,将源剪辑矩形设置为与源图像相同的大小。当缓冲区包含不打算显示的内容时,通常会使用源裁剪矩形。此时指定一个源裁剪矩形时,可以确保源裁剪矩形之外的缓冲区区域不会被显示。在这个例子中,我们将设置源裁剪矩形以指定应显示的源矩形区域。屏幕使用默认位置 (0,0) 作为源矩形、窗口、显示器显示和源裁剪矩形的左上角。设置源裁剪矩形的大小和位置,以便仅显示源矩形的一部分。源裁剪矩形是我们打算显示的缓冲区区域。原创 2023-12-21 21:14:41 · 460 阅读 · 0 评论 -
3.11【窗口】窗口使用示例(窗口缩放 四)
通过将源矩形大小定义为大于窗口缓冲区,您可以将窗口缓冲区中的整个源图像以及附加的显示区域作为目标。因此,您将源矩形的位置设置为(-640, -360),以便窗口缓冲区相对于源矩形正确定位。在此示例中,我们要将目标对准以窗口缓冲区为中心的矩形区域进行显示。我们的源矩形被设置为大于窗口缓冲区,以显示屏幕如何在源矩形中未被窗口缓冲区占用的区域上使用背景填充。源矩形大于窗口,因此源矩形的属性被缩小以适应窗口大小。屏幕在源矩形中未被窗口缓冲区占用的区域上使用背景填充。源矩形是我们打算显示的相对于窗口缓冲区的区域。原创 2023-12-21 07:26:57 · 430 阅读 · 0 评论 -
3.10【窗口】窗口使用示例(窗口缩放 三)
要从窗口的所有者本身进行放大,可以将源图像矩形设置得比窗口小。可以想象我们在一张图片中选取一部分进行放大的操作。屏幕使用默认位置 (0,0) 作为源矩形、窗口和显示器显示的左上角。要放大源图形的特定区域,必须设置源矩形的大小。源矩形表示我们打算显示的窗口缓冲区的区域。假设我们将目标对准样本源图像中心的矩形区域进行显示。要设置这些属性,请将相应的窗口属性与Screen API函数一起使用,即Screen_set_window_property_iv().原创 2023-12-20 22:00:45 · 929 阅读 · 0 评论 -
3.9【窗口】窗口使用示例(窗口缩放 二)
要以全屏模式显示源,缓冲区和窗口大小必须与显示器显示大小相同。屏幕使用默认位置 (0,0) 作为源矩形、窗口和显示器的左上角。当缓冲区、窗口和源与显示器大小相同时,源将以全屏模式显示。默认情况下,屏幕将缓冲区设置为与显示器大小相同。屏幕还默认将源矩形和窗口设置为与缓冲区大小相同。但是,在此示例中,我们说明了如何显式设置这些大小。例如,假设想以全屏模式显示我们的样本源图像。SCREEN_PROPERTY_SIZE 是一个父窗口属性。通常,应用程序只设置缓冲区和源矩形的大小。原创 2023-12-20 21:41:14 · 876 阅读 · 0 评论 -
3.8【窗口】窗口使用示例(窗口缩放 一)
设置的属性以实现最终的显示效果取决于这个窗口是父窗口还是所有者窗口。父窗口和所有者窗口只能分别设置某些属性。因此,根据对应有权限访问的属性,我们需要设置不同的属性以实现所需的显示效果。在示例中,一些矩形以不同的颜色显示。例如,源矩形和剪切矩形通常以与(窗口和显示)上不同的颜色进行显示。通过设置一组或多组特定的窗口属性,我们可以操纵窗口缓冲区的显示部分以及它在显示器上的显示位置。有关这些窗口属性的详细信息,可以参考Screen属性类型。几个窗口属性控制着屏幕如何显示窗口缓冲区(源图像)。原创 2023-12-20 21:23:47 · 876 阅读 · 0 评论 -
3.7【窗口】窗口使用示例(创建子窗口)
使用 screen_create_window_type() 创建子窗口。SCREEN_CHILD_WINDOW 类型的窗口必须与父窗口相关联,以便它在显示器上可见。为了创建一个子窗口,我们需要经历下面的接步骤。原创 2023-12-20 21:05:42 · 420 阅读 · 0 评论 -
3.6【窗口】窗口使用示例(创建窗口)
下面是一些简单的教程和指南,通过该指南,你可以轻松了解如何使用你的Windows。我们使用 screen_create_window_type() 创建应用程序窗口。要创建窗口,请执行以下操作:1.2 创建上下文。上下文描述了应用程序与底层窗口系统之间的关系1.3 创建一个窗口。 screen_create_window() 函数接受窗口变量和你在第一步中创建的上下文变量1.4 以字符串形式检索窗口ID,以便子窗口可以使用它加入此窗口的组。SCREEN_PROPERTY_ID属性在原创 2023-12-19 23:31:19 · 816 阅读 · 0 评论 -
3.5【窗口】窗口管理
窗口管理器和父窗口负责管理其他窗口,包括相应地处理来自应用程序和子窗口的事件。窗口管理器和父窗口都会收到它们负责的窗口的事件。他们应该根据这些事件采取相应的行动。在大多数情况下,事件会触发窗口可见性、大小或位置的更新。窗口管理器和父窗口被赋予特殊权限,可以更改其组或层次结构中窗口的属性。原创 2023-12-18 22:25:42 · 1282 阅读 · 0 评论 -
3.4【窗口】窗口的几何形状(三,窗口旋转)
窗口的旋转由其SCREEN_PROPERTY_ROTATION属性描述。屏幕的窗口旋转实际上是一种包括旋转、平移和缩放的变换。这种变换是窗口内容旋转的方式。在按SCREEN_PROPERTY_ROTATION属性指定的源坐标旋转后,Screen对内容应用平移和缩放,以适应窗口尺寸的边界(如果适用)。如果需要,你可以通过设置窗口的SCREEN_PROPERTY_SCALE_MODE属性来修改这种缩放行为,以适应你的应用程序。更改窗口的旋转不影响其大小或位置,因为这些是与显示相关的属性。原创 2023-12-18 21:49:06 · 1212 阅读 · 0 评论