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
相关推荐
Web3探索者1 小时前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
zylyehuo3 小时前
Linux系统中网线与USB网络共享冲突
linux
Sokach10151 天前
Linux Shell 脚本从零到能用:一个新手的一天学习总结
linux
AlfredZhao2 天前
Docker 容器时区不对,`timedatectl` 不存在怎么办?
linux·timezone
zzzzzz3103 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode3 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
A小辣椒5 天前
TShark:Wireshark CLI 功能
linux
A小辣椒5 天前
TShark:基础知识
linux
AlfredZhao5 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao6 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi