用配置文件graphics.conf 配置库,驱动和屏幕参数
khronos部分指定了与khronos相关的库和参数(例如,EGL和WFD库)。这个部分由begin khronos和end khronos语句表示。
在graphics.conf配置文件中 ,khronos部分指定了GPU和显示驱动程序。只有当系统需要其中一种或两种驱动程序时,才需要在配置文件中包含此部分。khronos部分由开始khronos和结束khronos包围。例如:
khronos部分可以包含以下子部分:
与EGL display相关的库和参数在本节中指定,以begin EGL display display_id开始,以end EGL display结束。
启动时分配的GPU内存的MB数
平台的OpenCL客户端库。
EGL库
OpenGL ES 1.X库
OpenGL ES 2.X库
GPU库
新交所的核心。gpu-string将决定特定于内核的行为。
OpenVG库
Vulkan JSON文件名或路径列表。路径可以是完整的,也可以是相对于graphics.conf文件的。任何非JSON文件都被视为先决库,并在运行时加载显式层之前加载。
指定为explicit的层可以由应用程序在运行时激活。你也可以通过设置VK_INSTANCE_LAYERS环境变量来激活这些层。这个变量可以用冒号分隔的需要激活的层名列表来设置。列表中的第一层是最上面的,是最靠近应用程序的层。列表中的最后一层位于底部,是最靠近驱动程序的层。
vk-icds
Vulkan JSON文件名或路径列表。路径可以是完整的,也可以是相对于graphics.conf文件的。任何非JSON文件都被视为先决条件库,并在试图加载ICD驱动程序之前加载。
Vulkan JSON文件名或路径列表。路径可以是完整的,也可以是相对于graphics.conf文件的。任何非JSON文件都被视为先决库,并在试图加载隐式层之前加载。任何指定为隐式的层都由ICD加载器自动加载。
与WFD驱动程序相关的库和参数在本节中指定,以begin WFD device device_id开始,以end WFD device结束。
可以在wfd设备部分下配置的参数是平台特定的。你必须通过在你平台的库上运行use命令来获得你平台的有效参数:
使用libWFDplatform.so
use命令将显示一条消息,描述要为特定平台配置的特定参数和库。这些库通常位于主机上的以下目录中:$QNX_TARGET/PROCESSOR/usr/lib/graphics/platform/
其中PROCESSOR是CPU的名称,例如arm -v7), platform是目标平台的名称(例如imx6x)。
begin khronos
begin egl display 1
egl-dlls = [IMG%s] libusc.so libsrv_um.so libpvr2d.so libIMGegl.so
glesv1-dlls = libusc.so libsrv_um.so libIMGegl.so libImgGLESv1_CM.so
glesv2-dlls = libusc.so libsrv_um.so libusc.so libIMGegl.so libImgGLESv2.so
gpu-dlls = libsrv_um.so libpvr2d.so pvrsrv.so
gpu-string = SGX540rev120
aperture = 200
end egl display
begin wfd device 1
wfd-dlls = libomap4modes-panda.so libWFDomap4430.so
end wfd device
end khronos
Screen的相关参数。该部分由begin winmgr和end winmgr语句表示。本节的参数包括适用于:
screen globally
displays
classes
begin winmgr
begin globals
blit-config = pvr2d
blits-logsize = 4096
input-logsize = 8192
requests-logsize = 65536
end globals
begin display hdmi
formats = rgba8888 rgbx8888 nv12
video-mode = 1280 x 720 @ 60
end display
begin class framebuffer
pipeline = 3
display = hdmi
surface-size = 1280 x 720
format = rgba8888
usage = pvr2d
end class
end winmgr
winmgr部分的子部分是:
全局应用于Screen的参数在本小节中指定,以begin globals开始,以end globals结束。在配置文件中只能有一个globals节。
begin globals
blit-config = pvr2d
blits-logsize = 4096
end globals
用于缓冲区分配的模块的名称。屏幕使用以下算法确定要加载的分配模块:“screen-” + value of alloc-config + ".so"这个配置是特定于平台的,它已经在提供给您的平台的graphics.conf中设置好了。我们不建议更改此配置的原始值。
当应用程序显式调用本机blit API函数(screen_blit()和screen_fill())时使用的blitter。Screen使用以下算法来确定要加载的比特模块:
“screen-” + value of blit-config+ “.so”
指定none可禁用blitter模块的使用。如果不指定,则screen_blit()和screen_fill()将无法执行。
只能配置一个blitter。有效比特的选择取决于你的平台;对于您的特定平台,可以有多个比特值可用。
这个参数不同于graphics.conf中类部分的usage参数中指定的blitter。usage参数中指定的比特位是Screen用于合成的比特位。
内部工作环缓冲区的大小(以字节为单位)。您可以指定后面跟着“K”或“M”的大小,分别表示1024或1048576字节的倍数。
主显示。
通过使用display_id来识别主显示,该display_id用于在graphics.conf的display部分定义显示。这通常是一个端口号,也可以指定一个字符串值。
当系统支持显示时,此参数有效。
A numeric value specifying the port number or one of these string values:
composite svideo Ypbpr rgb rgbhv dvi hdmi
内部工作环缓冲区的大小(以字节为单位)。您可以指定后面跟着“K”或“M”的大小,分别表示1024或1048576字节的倍数。
在Screen认为它处于空闲状态之前,系统接收到的两个输入事件之间的最长时间(纳秒)。默认情况下,SCREEN_PROPERTY_IDLE_STATE属性设置为0,空闲超时检查不激活。当窗口进入空闲状态时,SCREEN_PROPERTY_DISPLAY属性返回显示的句柄。当其中一个窗口进入空闲状态(如果适用)时,SCREEN_PROPERTY_GROUP属性返回组。
input :人机界面装置(HID)。
该参数可以配置多个值。如果你没有在你的配置文件中指定任何输入,屏幕默认包含所有的输入(例如,如果你指定了输入=手柄操纵杆键盘鼠标)。
指定none(没有其他有效的输入字符串)显式禁用所有输入。
string
gamepad joystick keyboard mouse none
如果指定了除none以外的任何有效输入字符串,则必须确保在启动屏幕之前运行了io-hid;你还必须要有lihiddi。所以在你的LD_LIBRARY_PATH。
内部工作环缓冲区的大小(以字节为单位)。您可以指定后面跟着“K”或“M”的大小,分别表示1024或1048576字节的倍数。
joystick-logsize:
内部工作环缓冲区的大小(以字节为单位)。您可以指定后面跟着“K”或“M”的大小,分别表示1024或1048576字节的倍数。
keyboard-logsize:
内部工作环缓冲区的大小(以字节为单位)。您可以指定后面跟着“K”或“M”的大小,分别表示1024或1048576字节的倍数。
创建新键盘设备时要使用的所有键映射文件的位置和/或默认键映射文件的名称。此参数仅适用于HID键盘。是-参数说明取值样例可选参数。如果没有设置keymap,那么Screen使用/usr/share/keyboard/en_US_101.
pointer-logsize:
内部工作环缓冲区的大小(以字节为单位)。您可以指定后面跟着“K”或“M”的大小,分别表示1024或1048576字节的倍数。
queue-start-size:
每个上下文的事件队列的大小。上下文的事件(例如输入事件)被放入这个队列中。如果事件比指定的队列大小多,则队列大小不会增加。这意味着,如果在更多事件排队到超出队列容量之前没有处理事件,应用程序可能会丢失事件。
内环缓冲区的大小(以字节为单位)。您可以指定后面跟着“K”或“M”的大小,分别表示1024或1048576字节的倍数。
shortcuts:
要附加到键映射名.kbd扩展名之前的字符串。键映射名称、此字符串和.kbd扩展名一起标识了当窗口不处于文本输入模式时使用的键映射文件的文件名。
Screen用于其线程的堆栈大小(以字节为单位)。您可以指定后面跟着“K”或“M”的大小,分别表示1024或1048576字节的倍数。如果未指定,则该大小为系统的堆栈默认大小。
对于使用Mesa的比特/排序器(例如gles2blt),必须适当配置这个堆栈大小,因为默认的堆栈大小对于这些类型的比特/排序器是不够的。
2M 2048K 2097152
内部工作环缓冲区的大小(以字节为单位)。您可以指定后面跟着“K”或“M”的大小,分别表示1024或1048576字节的倍数。
0 2M 2048K 2097152
决定窗口管理器上下文(即,其类型包括SCREEN_WINDOW_MANAGER_CONTEXT的上下文)如何行为的模式。
global display
display子段指定应用于平台支持的物理显示的配置。
本节必须以begin display display_id开始,以end display结束。只有当您的系统支持显示,或者您的系统上有应用程序需要显示时,才在配置文件中包含此部分。
在一个配置文件中可以有多个显示部分。显示段的数量取决于平台支持的物理显示的数量。
使用display_id将每个显示节与物理显示相关联。display_id可以是标识显示器的数字,也可以是显示器的连接类型。
如果display_id为整数,则Screen将配置参数应用到display_id指定的显示器上。否则,如果display_id是匹配一个有效的显示连接类型的字符串,那么Screen将配置参数应用到第一个连接类型与display_id指定的连接类型匹配的可用显示。
下面是graphics.conf文件的显示小节的示例。在本例中,display_id为hdmi的连接类型;因此,配置参数应用于第一个支持hdmi的可用显示:
begin display hdmi
formats = rgba8888 rgbx8888 nv12
video-mode = 1280 x 720 @ 60
end display
指定Screen(如果可能的话)是否可以绕过将窗口缓冲区复制到framebuffer以在显示上显示内容(即执行合成)。
为强制组合指定true将使该allow-bypass参数指定的效果无效。
显示器的背景色。使用RGB颜色编码(十六进制值)来识别颜色(例如,蓝色= 0xff)。
default:black
显示的背景不透明度。使用alpha透明度代码(十六进制值)来识别不透明度(例如,transparent = 0x00)。
default 0xff
基于内容的自动亮度控制;指定显示的内容类型
光标在显示器上的可见性
auto on off
使用游标形状所需的配置。该参数的指定格式如下:cursor-type;文件名;hotspot_x, hotspot_y
cursor-type的参数定义如下:
游标类型
正在定义的光标形状的类型。以下是有效的游标形状:
arrow keyboard home menu hand ibeam wait zoom-in zoom-out grab grabbing cross move
filename
包含游标图像的文件名。目前只支持位图图像。该文件应该位于/usr/share/icons.目录中光标形状的颜色深度必须为每像素32位。如果每像素32位不能用于游标,则需要WFD驱动程序进行格式转换。
hostpot_x,hostpot_y
x和y分别偏移到与光标位置对齐的图像中。实际的游标矩形对应游标位置,并应用热点偏移作为反向平移。这意味着剪辑可以在图像的所有方面进行(上、左、右、下)。
指定Screen是在启动时创建帧缓冲区,还是只在需要帧缓冲区时创建(例如,用于合成)。
指定Screen是否应该总是使用合成。(例如,屏幕总是需要帧缓冲区),即使场景不需要它。
为force-composition指定true会使由以下语句指定的效果无效:
allow-bypass配置参数。
应用于Windows的类配置参数管道
通过Screen API设置的SCREEN_PROPERTY_PIPELINE属性
显示器支持的像素格式。该参数可以配置多个值。
指定格式可以减少启动时间,因为Screen不需要发现支持哪种格式。
rgba4444 rgbx4444 rgba5551 rgbx5111 rgb565 rgb888 rgba8888 rgbx8888 yuv9 yuv420 nv12 yv12 uyvy yuvy yuy2 v422
WFD驱动程序的gamma值。这个伽马值的范围取决于驱动程序。
0 to 255
两个输入事件之间的最大时间(以秒为单位)。当指定时,如果在指定的超时时间内没有收到事件,屏幕认为它处于空闲状态(即,它的SCREEN_PROPERTY_IDLE_STATE为1)。当显示器接收到输入事件时,计时器被重置;显示屏退出空闲状态,SCREEN_PROPERTY_IDLE_STATE属性变为0。默认情况下,空闲超时是关闭的(设置为0),显示被认为总是处于活动状态。
normal 启用镜像 长宽比1:1
stretch镜像已启用,图像应该填充显示(可能不保留长宽比)。
zoom 启用了镜像,图像应该填充显示,同时保持长宽比。图像内容可能被剪切。
fill启用了镜像,图像应该填充显示,同时保持长宽比。图像可在适当的地方用黑条显示。
希望与显示相关联的管道标识符。可以关联到显示的有效管道是驱动程序特定的。
当指定多个管道时,每个管道标识符必须用逗号或空格分隔。
开机时显示的初始电源模式。
off suspend limited on(default)
更新线程(即呈现framebuffer或framebuffers的线程)的优先级。
15(default)
显示窗口的内容保护。通常,只有当应用程序对HDCP(高带宽数字内容保护)感兴趣时,才需要设置此参数。
显示器所需的顺时针旋转,以度数为单位。
如果将旋转模式设置为none, Screen将忽略此旋转参数。
如果指定了旋转,那么还必须将deferred -framebuffer-creation设置为false。否则,屏幕无法旋转显示。
0 90 180 270
您选择的显示旋转模式。如果显示控制器不支持您指定的旋转模式,则Screen将该模式设置为none。
如果将旋转模式参数设置为none, Screen将忽略旋转参数。
blits
在可能的情况下使用管道旋转旋转
generic
通用模式可以调整大小
none
不支持旋转
port
端口旋转,framebuffer调整大小
pipeline
管道旋转,帧缓冲区调整大小
用于在启动时发布framebuffer的指示器。只有在WFD驱动程序支持时才考虑此参数
0 1 在应用程序请求发布之后发布framebuffer。
Screen用于其线程的堆栈大小(以字节为单位)。您可以指定后面跟着“K”或“M”的大小,分别表示1024或1048576字节的倍数。如果未指定,则该大小为系统的堆栈默认大小。
对于使用Mesa的比特/排序器(例如gles2blt),必须适当配置这个堆栈大小,因为默认的堆栈大小对于这些类型的比特/排序器是不够的。
2M 2048K 2097152
用于请求Screen必须使用指定的管道分配的指示器。您可以通过使用配置文件的类分段中的管道参数来分配管道,或者通过Screen API设置SCREEN_PROPERTY_PIPELINE属性。
Screen对管道规范的应用可能会受到力组合参数配置的影响。
false
Screen使用了一种组合策略,旨在优化当前场景,同时考虑到内存带宽和可用管道。
true(default)
Screen使用您的管道分配(如果有的话)。
x和y的调整被添加到所有的触摸事件。这个配置必须是:x调整,y调整
显示端口的初始分辨率和刷新率。该配置必须是WFD驱动程序报告的配置。如果您将此设置为不支持的值,那么分辨率和刷新率将默认为驱动程序指定的第一种模式。分辨率和刷新率必须为:
widthxheight@irefresh
i表示设置了交错。
video-mode = 1280x720@60
class小节指定窗口属性的默认值。
Windows必须与显示相关联。因此,只有当您的系统支持显示,或者您的系统上有应用程序需要显示时,才应该在配置文件中包含此部分。这个类部分必须以begin class class_name开始,以end class结束。
类的子类用于为在section中定义的窗口属性设置默认值;这些属性是通过应用于框架缓冲区和应用程序窗口的参数指定的。
可以为framebuffer定义的类子部分的数量取决于可用显示的数量。屏幕允许每个显示一个framebuffer。
您可以使用以下约定来指定一个类分段用于framebuffer:
framebufferunique_string
类子部分的class_name必须以字符串framebuffer开始,然后是一个唯一的字符串来标识类。例如,一些有效的类名字符串是:
framebuffer
framebuffer1
framebufferA
etc
下面是一个使用多个类子部分为两个framebuffer指定默认值的示例,每个子部分对应一个特定的管道:
begin class framebuffer1
pipeline = 1
display = 1
format = rgba8888
usage = pvr2d
id_string = fb1
end class
begin class framebuffer2
pipeline = 2
display = 2
format = rgba8888
usage = pvr2d
id_string = fb2
end class
对于可以定义用于配置应用程序窗口的类子部分的数量没有显式限制。
类子类的class_name必须是唯一的字符串。这个字符串还必须匹配您在应用程序中设置的窗口属性SCREEN_PROPERTY_CLASS。
下面是一个使用类分段指定应用程序窗口默认值的示例:
begin class my_app_properties
visible = true
surface-size = 640x480
source-position = 0,0
source-size = 640x480
window-position = 0,0
window-size = 640x480
end class
如果您在配置文件中使用上述类分段,那么您需要在应用程序代码中设置SCREEN_PROPERTY_CLASS窗口属性。此属性的设置触发Screen将与该类相关联的配置值应用到应用程序窗口。
例如,如果你在配置文件中使用了上面的类部分,你可以在你的应用程序代码中使用它:
...
const char *my_win_class = "my_app_properties";
screen_set_window_property_cv(screen_win, SCREEN_PROPERTY_CLASS, strlen(my_win_class), my_win_class);
...
instead of this
...
const int visible = 1
const int buffer_size[2] = { 640, 480};
const int src_pos[2] = { 0, 0};
const int src_size[2] = { 640, 480};
const int win_pos[2] = { 0, 0};
const int win_size[2] = { 640, 480};
screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_VISIBLE, &visible);
screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_BUFFER_SIZE, buffer_size);
screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_SOURCE_POSITION, src_pos);
screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_SOURCE_SIZE, src_size);
screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_POSITION, win_pos);
screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_SIZE, win_size);
...
to set your window properties.
只有在启用SCREEN_PROPERTY_SELF_LAYOUT时才能设置的属性称为布局相关属性。应用程序窗口的这些属性(以及SCREEN_PROPERTY_SELF_LAYOUT属性)由它们的管理器设置。有关布局相关属性的更多信息,请参阅Screen属性类型中的SCREEN_PROPERTY_SELF_LAYOUT。
应用程序窗口只能在以下情况下设置其与布局相关的属性:
如果系统里没有管理员,或者
如果管理器已经为那些应用程序窗口启用了SCREEN_PROPERTY_SELF_LAYOUT。
但是,当应用程序窗口使用graphics.conf中的预定义类设置其SCREEN_PROPERTY_CLASS属性时,将应用该预定义类中配置的所有属性。
从上面的例子中,类“my_app_properties”配置(其中包括)以下参数:
visible
window-position
window-size
这些参数更改与布局相关的属性。在本例中,它们在graphics.conf中预定义的类(“my_app_properties”)中进行配置。因此,当运行时,应用程序窗口将其SCREEN_PROPERTY_CLASS属性设置为“my_app_properties”时,将应用它们。
如果系统上有一个管理器在运行,它将收到这些属性更改的通知。
用于阿尔法合成的阿尔法混合方法。
non-pre-multiplied(default)
直接使用RGBA像素值。例如,(0,1,0,0.5)是100%强度和50%不透明度的绿色
pre-multiplied
使用预乘的RGBA像素值。例如,非预乘值(0,1,0,0.5)可以解释为(0,1,0)* 0.5,给出预乘值(0,0.5,0,0.5),其中0.5为绿色,强度为100%,不透明度为50%
窗户的光亮。该配置取决于硬件。也就是说,亮度可以配置,但是否生效取决于您的硬件。
-255 to 255
要创建或附加到窗口的缓冲区的数量(只能在framebuffers上设置)。在配置之外,你不能设置缓冲区计数;只能查询。这个计数没有明确的限制。默认值为3。
窗口缓冲区的宽度和高度。该配置必须采用widthxheight的形式。
基于内容的自动亮度控制;指定窗口的内容类型。该配置取决于硬件。也就是说,可以配置cbabc,但它是否生效取决于您的硬件。
none video ui photo
在窗口缓冲区中剪切矩形视口的x和y位置。这个构型必须是x-position,y-position的形式。
窗口缓冲区内剪切矩形视图的宽度和高度(以像素为单位)。该配置必须采用widthxheight的形式。
窗户的对比度调整。这种配置取决于硬件;它可以配置,但可能会生效,也可能不会生效,这取决于您的硬件。
-128 to 127
到显示器或将在其上显示窗口的显示器的连接类型。如果配置为整数,则Screen将其解释为显示的ID。否则,如果配置是匹配有效显示连接类型之一的字符串,则Screen将该字符串解释为显示连接类型。
internal composite svideo Ypbpr rgb rgbhv dvi hdmi 1..2
应用于窗口的全局alpha模式
窗户的色调调整
标识窗口内容的字符串
帖子之间垂直同步的最小周期数
窗口的z轴顺序。它是到底部的距离,在相互排序窗口和窗口组时使用。
应用于窗口的权限。可以设置多个权限,每个权限之间用逗号隔开。有关有效的权限字符串,请参阅“权限和特权”。
希望与该类的窗口一起使用的管道标识符。此标识符必须是与显示相关联的有效管道。可以关联到显示的有效管道是驱动程序特定的。
根据您对以下显示配置参数的配置,可能会影响管道规范的Screen应用:
force-composition
strict-pipelines
顺时针旋转:以度数为单位的窗户的顺时针旋转窗口旋转是绝对的。
窗口的饱和度调整
-128 to 127
输入灵敏度alpha阈值。将灵敏度阈值指定为范围[0…]的整数。255](默认值为0)。当您设置灵敏度阈值时,所选像素的alpha分量将与该灵敏度阈值进行比较。如果alpha小于或等于阈值,则输入事件将被视为透明的。否则,如果alpha大于阈值,则将消耗输入事件。
当你使用的格式有alpha组件不跨越整个范围[0…]255],确保设置了适当的灵敏度上限阈值。
如果同时设置灵敏度和灵敏度阈值配置参数,请注意灵敏度优先于灵敏度阈值设置。
表示窗口的源视图的窗口缓冲区中矩形区域左上角的x和y坐标。这是要显示的窗口缓冲区的一部分。这个构型必须是x-position,y-position的形式。
表示窗口的源视图的窗口缓冲区内区域的宽度和高度(以像素为单位)。这是要显示的窗口缓冲区的一部分。该配置必须采用widthxheight的形式。
指示是否希望更改窗口内容的指示器
弃用。使用缓冲区大小。
窗口缓冲区和/或组合模块的预期用法(只能在framebuffer上设置)。可使用以下两种方式的任意组合配置该参数:
指示窗口是否可见的指示器
窗纱坐标的x和y位置。记住,子窗口和嵌入窗口的位置是相对于父窗口的。例如,如果应用程序窗口的位置是(10,10),而子窗口的位置是(10,10),那么子窗口在屏幕上的位置实际上是(20,20)。这个构型必须是x-position,y-position的形式。
窗口的宽度和高度(像素为单位)。该配置必须采用widthxheight的形式。
下面的过程描述如何使用命令行界面应用Screen配置。
只有当Screen服务(Screen)启动时,Screen才会处理配置文件graphics.conf。
如果您的目标系统允许,您可以修改配置文件并使用以下过程来应用您的新配置。否则,您需要在主机上对graphics.conf进行修改,然后将其构建到操作系统映像中。当您的目标用新的IFS引导并启动屏幕时,您的新配置将生效。
在开始此程序之前,请确保以下事项:
目标硬件运行在QNX Neustrino RTOS系统上
可以运行命令行 比如pidin
已经配置了graphic.conf
应用屏幕配置:
1 使用以下命令停止屏幕:
slay screen
2 验证屏幕进程是否已停止。运行:
pidin -p screen
并验证屏幕进程没有运行。
3 可选:如果还没有这样做,则设置LD_LIBRARY_PATH环境变量,以包括Screen需要的共享库的目录。
export LD_LIBRARY_PATH=:/lib:/usr/lib:/lib/dll:/proc/boot
4 通过运行屏幕重新启动屏幕。
5 通过运行log2info,验证新配置中没有生成警告。
有关更多信息,请参见调试部分。