QNX screen使用介绍 第五章

5 篇文章 14 订阅

一、sw_vsync 命令

创建一个全屏的背景以及一个运动的bar,用于检测屏的显示状况以及帧率等

sw_vsync 参数配置:

sw-vsync   [-bg_rbga=background_color]
           [-display=
display_id]
           [-double-buffer]
           [-format=
pixel_format]
           [-frame-limit=frames]
           [-grid]
           [-interval=
swap_interval]
           [-pipeline=pipeline]
           [-
pos=x,y]
           [-single-buffer]
           [-size=
widthxheight]
           [-transparency=transparency]
           [-
zorder=zorder]

  • -bg_rgba=r,g,b,a, 设置背景颜色和alpha值,例如-bg_rgba=0xff,0xff,0,0xff,黄色不透明背景
  • -display=[int]or[str], 设置使用的display
    • -double-buffer,使用两个缓冲区
    • -format=[str], 设置窗口显示格式
    • -frame_limit=[int], 设置最大的渲染帧数
    • -gird,显示网格
    • -interval=[int],设置刷新间隔数
    • -pipeline,指定pipeline id
    • -pos=[x],[y], 设置显示偏移位置
    • -single-buffer,使用一个渲染缓冲区
    • -size=[width]x[height],设置窗口尺寸
    • -transparency=[str],设置窗口的透明模式
    •  -zorder=[int],设置窗口的z-order

二、gles2-gears 命令 

使用OpenGL ES 2.x显示硬件渲染的内容

 

gles2-gears命令参数:

gles2-gears [-bg-alpha=background_alpha_value]
            [-brightness=brightness]
            [-
config=egl_configuration]
            [-contrast=contrast]
            [-display=
display_id]
            [-double-buffer]
            [-
fg-alpha=foreground_alpha_value]
            [-frame-limit=
frame_limit]
            [-hue=hue]
            [-interval=
swap_interval]
            [-pipeline=
pipeline_id]
            [-
pos=x,y]
            [-saturation=saturation]
            [-single-buffer]
            [-size=
widthxheight]
            [-transparency=
transparency_mode]
            [-verbose]
            [-
zorder=zorder]

 

  • -bg-alpha=background_alpha_value, 设置背景alpha值,范围为[0.0f..1.0f],默认值为0.0f
  • -brightness=brightness, 设置窗口亮度,范围为[-255..255], 默认是显示硬件的亮度
  • -configegl_configuration,设置可选的EGL的配置说明符,说明符包括像素格式,多重采样或EGL配置
  • -contrast=contrast, 设置窗口对比度,范围为[128..127]
  • -display= display_id,设置使用的display
  • -double-buffer使用EGL_BACK_BUFFER(默认)作为EGL surfaceEGL_RENDER_BUFFER属性
  • -fg-alpha=foreground_alpha_value, 设置前景的alpha值,范围为[0.0f..1.0f],默认为1.0f
  • -frame-limit=frame_limit, 设置渲染的帧数
  • -hue=hue, 设置窗口的色调,范围为[-128..127]
  • -interval=swap_interval, 设置刷新间隔数
  • -pipeline=pipeline_id. 设置pipeline
  • -pos=x,y, 设置窗口偏移位置
  • -saturation=saturation. 设置饱和度,范围为[-128..127]
  • -single-buffer, 使用EGL_SINGLE_BUFFER 作为EGL surfaceEGL_RENDER_BUFFER属性
  • -size=widthxheight, 设置窗口的宽度和高度
  • -transparency=transparency_mode, 设置窗口透明度模式
  • -verbose, 打印级别
  • -zorder=zorder, 设置z-order
 

三、screencmd 命令 

修改screen对象的属性 

1. 一个程序在创建screen组件完成后,screen进程会将程序设置的一些信息输出在/dev/screen/<process name>/<win-id> 文件中。

    cat /dev/screen/<process name>/<win-id> 后会看到screen的相关信息。

id = __scrn-win-7-00000023-e8deb591790c5becdf276f09b210b3d0

id string = camera_23237c5660_0

permissions = rwxrwx--x--x--x--x--x---

acl = (empty)

locks = (none)

display = dpy-1

status = FULLY VISIBLE

type = SCREEN_APPLICATION_WINDOW

autonomous = 0

references = 1

window manager = (none)

window manager string =

pipeline id = 6

pipeline bound = false

parent = (none)

children = (none)

window above = (none)

window below = (none)

alternate window = (none)

root window = (none)

reclip = 0

updates = 0

valid = WINDOW_SIZE

class =

flags = WIN_FLAG_VISIBLE WIN_FLAG_FLOATING

buffer size = 1920x1080

format = SCREEN_FORMAT_rgb888

color space = SCREEN_COLOR_SPACE_UNCORRECTED

usage = SCREEN_USAGE_READ SCREEN_USAGE_WRITE SCREEN_USAGE_NATIVE

order = 3000

swap interval = 1

default = ssn-0

sessions = *ssn-0

streams = str-3

holes = (none)

regions = (0,0;1280,720)

flip = 0

mirror = 0

scale mode = (default)

source viewport = (0,0 1920x1080)

source clip rectangle = (0,0;1920,1080)

clipped source viewport = (0,0;1920,1080 1920x1080)

destination rectangle = (0,0 1280x720)

clipped destination rectangle = (0,0;1280,720 1280x720)

rotation = 0

clipped rotation = 0

transform = [[0.664063 0 0],[0 0.664063 0],[0 0 1]]

transparency = SCREEN_TRANSPARENCY_SOURCE

color = 0xffcfcfcf

global alpha = 255 -> 255

brightness = 0 -> 0

contrast = 1 -> 1

hue = 0 -> 0

saturation = 0 -> 0

scale quality = 0

idle mode = normal

protection requested = (none)

protection enabled = (none)

cbabc mode = SCREEN_CBABC_MODE_NONE

metrics.dropped = 0

metrics.visible.partial = 19775000000

metrics.visible.full = 19775000000

metrics.updates.count = 197

metrics.updates.pixels = 408 Mpixels

metrics.updates.reads = 4901 Mbytes

 

  • id, screen窗口的唯一标识符,在创建窗口时生成,可调用SCREEN_PROPERTY_ID标志获取
  • id string, 窗口名称,可调用SCREEN_PROPERTY_ID_STRING标志设置以及获取
  • permissions,窗口权限,可调用SCREEN_PROPERTY_PERMISSIONS标志设置以及获取
  • display, display id,可调用SCREEN_PROPERTY_ID标志获取。dpy-1表示窗口在display id 1
  • status, 显示状态,可调用SCREEN_PROPERTY_STATUS标志获取。FULLY表示显示在显示屏上,VISIBLE表示是可见的,FULL表示全屏显示,INVISIBLE表示窗口隐藏
  • pipeline id, 使用的pipeline, 可调用SCREEN_PROPERTY_PIPELINE标志设置以及获取
  • pipeline bound,是否主动绑定pipeline。如果代码中主动调用SCREEN_PROPERTY_PIPELINE标志设置使用的pipeline,这里就会显示true。如果pipeline的相关配置有问题,这里也会显示一些错误信息
  • parent,children, 父,子窗口信息
  • window above, 显示在当前进程窗口上面的窗口所在的进程名,显示层级由z-order决定
  • window below显示在当前进程窗口下面窗口所在的进程,显示层级由z-order决定
  • alternate window, 备用窗口对象,可调用SCREEN_PROPERTY_ALTERNATE标志设置或者获取。它的主要作用是虚拟一个对象,通过它可以将一个display上的鼠标指针移动到另外一个display上。
  • root window, 根窗口,在创建窗口时指定SCREEN_ROOT_WINDOW标志。根窗口用于管理和控制其子级的层次结构和更新
  • valid, 显示程序设置一些窗口属性,例如设置SCREEN_PROPERTY_SIZESCREEN_PROPERTY_SOURCE_SIZE
  • flags, 显示程序当前的一些状态,例如VISIBLE, STATIC, FLOATING
  • buffer size, buffer的尺寸, 可调用SCREEN_PROPERTY_BUFFER_SIZE标志设置或者获取
  • format, 数据格式,可调用SCREEN_PROPERTY_FORMAT标志设置或者获取
  • color space, 色彩空间类型,可调用SCREEN_PROPERTY_COLOR_SPACE标志设置或者获取
  • usage, 窗口用法属性,调用SCREEN_PROPERTY_USAGE标志设置或者获取
  • order,窗口层级,可调用SCREEN_PROPERTY_ZORDER标志设置或者获取
  • swap interval, 缓冲区刷新间隔,可调用SCREEN_PROPERTY_SWAP_INTERVAL标志设置或者获取。0表示在更新显示时要更新窗口缓冲区;大于0表示窗口按照显示屏的(刷新率 / swap interval)的刷新率进行刷新
  • regions, 显示区域,regions = (0,0;1280,720)0,0表示偏移位置,可使用SCREEN_PROPERTY_POSITION标志设置或者获取;1280,720表示显示区域大小,注意这个大小是加上了偏移位置,也就是1280 = 实际显示宽度 + 宽度的偏移
  • scale mode, scale模式设置,可调用SCREEN_PROPERTY_SCALE_MODE标志设置和获取
  • source viewport, 缓冲区源区域, source viewport = (0,0 1920x1080)00表示偏移位置,可以调用SCREEN_PROPERTY_SOURCE_POSITION标志设置和获取;1920x1080表示源大小,可调用SCREEN_PROPERTY_SOURCE_SIZE标志设置和获取。
  • source clip rectangle,源裁剪区域。source clip rectangle = (0,0;1920,1080)0,0表示裁剪源位置偏移,可调用SCREEN_PROPERTY_SOURCE_CLIP_POSITION标志设置或获取;1920,1080表示源的大小,主要它是相对于偏移位置,但是不能超过源的最大值
  • clipped source viewport, 源裁剪展示。 clipped source viewport = (0,0;1920,1080 1920x1080)0,0表示源裁剪偏移位置,1920,1080表示源裁剪大小,1920x1080表示源的大小
  • destination rectangle,目标显示大小,可通过SCREEN_PROPERTY_POSITIONSCREEN_PROPERTY_SIZE标志设置或获取显示位置偏移和大小
  • rotation,图像翻转。 可通过SCREEN_PROPERTY_ROTATION表示设置翻转度数
  • transparency,透明类型,可通过SCREEN_PROPERTY_TRANSPARENCY标示设置或者获取
  • color, 设置背景色,可通过SCREEN_PROPERTY_COLOR标志设置或者获取
  • global alpha, 设置透明度,可通过SCREEN_PROPERTY_GLOBAL_ALPHA标志设置或者获取

2. screencmd使用:

示例:

screencmd setcv grp-11 SCREEN_PROPERTY_NAME "My Group Name"
screencmd setiv win-1 SCREEN_PROPERTY_BUFFER_SIZE 100,100
screencmd setpv win-1 SCREEN_PROPERTY_ALTERNATE win-2
screencmd setllv dpy-1 SCREEN_PROPERTY_IDLE_TIMEOUT 1234
screencmd setgp win-1 "My Group Name"
screencmd apply

用法:

   screencmd [cmd]

[cmd]:

•setcv 设置对象属性为“string”型

•setiv 设置对象属性是"int"或者"int"类类型数组

•setllv 设置对象属性为"long"型

•setpv 设置对象属性为指针类型

•setgp 将对象加入到指定字符串所在的组,如果指定的字符串为空,则移除当前组

•apply 刷新修改

 

[设置的对象]:

 

Screen object

Prefix

context

ctx-

device

dev-

display

dpy-

group

grp-

pixmap

pix-

session

ssn-

stream

str-

window

win-

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的 QNX Screen 使用范例,用于创建一个窗口并显示一段文本: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <screen/screen.h> int main(int argc, char **argv) { // 创建屏幕上下文 screen_context_t context; screen_create_context(&context, 0); // 创建屏幕窗口 screen_window_t window; screen_create_window(&window, context); // 设置窗口大小和位置 int size[2] = {640, 480}; int pos[2] = {0, 0}; screen_set_window_property_iv(window, SCREEN_PROPERTY_SIZE, size); screen_set_window_property_iv(window, SCREEN_PROPERTY_POSITION, pos); // 将窗口提交到屏幕显示 screen_post_window(window, context, 0); // 显示文本 char *text = "Hello, QNX Screen!"; int len = strlen(text); int font_size = 24; int text_color[4] = {255, 255, 255, 255}; int bg_color[4] = {0, 0, 0, 255}; int text_pos[2] = {100, 100}; screen_buffer_t buf; screen_create_window_buffers(window, 1); screen_get_window_property_pv(window, SCREEN_PROPERTY_RENDER_BUFFERS, (void **)&buf); screen_fill(ctx, buf, bg_color); screen_draw_text(ctx, buf, text, len, text_pos[0], text_pos[1], SCREEN_TEXT_ALIGNMENT_LEFT, font_size, text_color); // 将绘制的内容提交到屏幕显示 int rect[4] = {0, 0, size[0], size[1]}; screen_post_window(window, buf, 1, rect, 0); // 等待用户输入 getchar(); // 销毁窗口和上下文 screen_destroy_window(window); screen_destroy_context(context); return 0; } ``` 以上代码中,首先使用 `screen_create_context()` 函数创建一个屏幕上下文,然后使用 `screen_create_window()` 函数创建一个窗口,并设置窗口大小和位置。接下来,使用 `screen_post_window()` 函数将窗口提交到屏幕显示。 然后,使用 `screen_draw_text()` 函数在窗口中绘制一段文本,并使用 `screen_post_window()` 函数将绘制的内容提交到屏幕显示。最后,使用 `getchar()` 函数等待用户输入,销毁窗口和上下文后返回。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值