weston出图调试

weston.ini配置

复制代码
# configuration file for Weston
[core]
shell=ivi-shell.so
modules=ivi-controller.so
idle-time=0
backend=drm-backend.so
repaint-window=10
require-outputs=none
require-input=false
gbm-format=abgr8888

[ivi-shell]
ivi-input-module=ivi-input-controller.so
ivi-id-agent-module=ivi-id-agent.so
bkgnd-surface-id=1
bkgnd-color=0x00000000
ivi-client-name=/usr/bin/simple-weston-client

[desktop-app-default]
default-surface-id=2000000
default-surface-id-max=2001000

[output]
name=DSI-1
mode=current

[output]
name=DP-1
mode=current

1 配置环境

复制代码
export XDG_RUNTIME_DIR=/run/user/root
export WAYLAND_DISPLAY=wayland-0

配置命令

复制代码
layer-add-surfaces -l 1000 -s 1 &
weston-simple-egl &
LayerManagerControl create layer 1000 1920 720
LayerManagerControl set screen 1 render order 1000
LayerManagerControl get surfaces
LayerManagerControl add surface 2000000 to layer 1000
LayerManagerControl set layer 1000 visibility 1
LayerManagerControl set surface 2000000 visibility 1

LayerManagerControl set surface 2000000 source region 0 0 1920 720
LayerManagerControl set surface 2000000 destination region 0 0 1920 720
  • Layer(图层):屏幕上的一个透明画布,有层级、大小、可见性,是界面的容器
  • Surface(界面):应用(如 weston-simple-egl)渲染出的具体画面,需要绑定到图层才能显示
  • LayerManager:系统底层服务,统一管理所有图层和界面的显示规则

命令解释

1. 启动应用与后台进程

复制代码
layer-add-surfaces -l 1000 -s 1 &
  • 作用 :后台启动图层界面绑定工具 ,创建 ID 为1000的图层关联,生成 ID 为1的界面(surface)

  • 参数:

    • -l 1000:指定关联的图层 ID 为 1000

    • -s 1:指定界面 ID 为 1

      weston-simple-egl &

  • 作用 :后台启动Weston 的 EGL 渲染测试程序(一个简单的彩色 / 动态界面应用)

  • 这个程序运行后,会自动生成一个Wayland 界面(Surface) ,ID 为2000000(后续命令用到的固定 ID)


2. 创建图层

复制代码
LayerManagerControl create layer 1000 1920 720
  • 核心命令 :通过图层管理工具创建一个新图层
  • 参数:
    • create layer:创建图层指令
    • 1000图层唯一 ID(自定义数字,后续操作都用这个 ID)
    • 1920:图层宽度(像素)
    • 720:图层高度(像素)
  • 效果:在显示系统中创建了一个1920x720、ID 为 1000 的空白画布

3. 设置图层渲染层级

复制代码
LayerManagerControl set screen 1 render order 1000
  • 作用 :指定屏幕 1的图层渲染优先级(显示层级)
  • 参数:
    • screen 1:操作目标为第 1 块物理屏幕
    • render order 1000:渲染序号为 1000(数字越大,图层越靠上显示,不会被其他图层遮挡)

4. 查询系统所有界面

复制代码
LayerManagerControl get surfaces
  • 作用查询并打印当前系统中所有正在运行的应用界面(Surface)列表
  • 目的:确认weston-simple-egl生成的界面2000000已成功创建

5. 将界面绑定到图层

复制代码
LayerManagerControl add surface 2000000 to layer 1000
  • 核心命令 :把应用界面 挂载到图层上(只有绑定后,界面才能通过图层显示)
  • 参数:
    • surface 2000000:目标界面 ID(weston-simple-egl 的界面)
    • to layer 1000:绑定到 ID 为 1000 的图层

6. 显示图层与界面

复制代码
LayerManagerControl set layer 1000 visibility 1
  • 作用:设置图层可见性

  • 参数:visibility 1 = 显示图层(0= 隐藏图层)

    LayerManagerControl set surface 2000000 visibility 1

  • 作用:设置界面可见性

  • 参数:visibility 1 = 显示界面(0= 隐藏界面)

  • 此时:图层 + 界面都已显示,屏幕上能看到 weston-simple-egl 的画面


7. 裁剪界面(源区域)

复制代码
LayerManagerControl set surface 2000000 source region 0 0 1920 720
  • 作用截取应用界面的一部分显示(源区域:界面本身的区域)
  • 参数含义:X起点 Y起点 宽度 高度
    • 0 0:从界面左上角开始截取
    • 1920 720:截取宽度 1920、高度 720 的完整界面
  • 效果:不裁剪,使用应用界面的全部内容

8. 显示位置(目标区域)

复制代码
LayerManagerControl set surface 2000000 destination region 0 0 1920 720
  • 作用 :设置界面在屏幕上的显示位置和大小(目标区域:屏幕上的绘制区域)
  • 参数含义:X坐标 Y坐标 宽度 高度
    • 0 0:显示在屏幕左上角
    • 1920 720:显示尺寸和图层 / 界面一致
  • 效果:界面全屏铺满图层,无偏移、无缩放

总结

这组命令完成了从无到有显示一个应用界面的完整流程:

  1. 启动测试应用 → 生成界面
  2. 创建图层 → 设置显示层级
  3. 绑定界面到图层
  4. 开启可见性 → 让画面显示
  5. 配置裁剪 / 位置 → 固定界面显示规则

2 添加一个surfaces

复制代码
layer-add-surfaces -l 1000 -s 1 &

3 启动测试程序egl

复制代码
weston-simple-egl &

4 配置参数

复制代码
//这里的1000对应上面添加layer 1000(layer-add-surfaces -l 1000 -s 1 &)
LayerManagerControl create layer 1000 1920 720 // 这里1920 720修改成对应的分辨率
LayerManagerControl set screen 1 render order 1000 

//获取surfaces 下面2000000 是这里获取到的值
LayerManagerControl get surfaces

LayerManagerControl add surface 2000000 to layer 1000
LayerManagerControl set layer 1000 visibility 1
LayerManagerControl set surface 2000000 visibility 1

LayerManagerControl set surface 2000000 source region 0 0 1920 720
LayerManagerControl set surface 2000000 destination region 0 0 1920 720

其他:

复制代码
LayerManagerControl get surfaces
LayerManagerControl get layers
LayerManagerControl get scene
相关推荐
是店小二呀15 小时前
鸿蒙PC_Dart-Sass-ohos适配全记录
linux·运维·windows
充电zcx1 天前
Linux:4:开发工具详解
linux·运维·服务器
码农客栈1 天前
linux 交叉编译tslib
linux
鱼月半1 天前
两台电脑直连网络不通怎么办?
linux·网络协议
光电笑映1 天前
网络通信基础:从协议分层到 Socket 编程预备
linux·运维·服务器·网络
酸菜。1 天前
dw_apb_gpio总结
linux
wunaiqiezixin1 天前
MIT 6.S081 file system 实验篇(lab9):Large files (moderate)
linux·unix·os·xv6·mit6.s081
GeW1 天前
RHCE 考试通过率提升:核心考点、实验环境与排错技巧
linux
吴声子夜歌1 天前
Shell编程实例——与解析相关的任务(二)
linux·运维·shell
mengge.cloud1 天前
0917Docker 小白实验教程(理论+实操)
linux·服务器·网络·docker