wayland(wl_shell) + egl + opengles 最简实例

文章目录

  • 前言
  • 一、ubuntu 上相关环境准备
    • 1. ubuntu 上安装 weston
    • 2. 确定ubuntu 上安装的opengles 版本
    • 3. 确定安装的 weston 是否支持 wl_shell 接口
  • 二、窗口管理器接口 wl_shell 介绍
  • 二、代码实例
    • 1.egl_wayland_demo.c
    • 2. 编译和运行
    • 2.1 编译
    • 2.2 运行
  • 总结
  • 参考资料


前言

本文主要介绍如何在 linux 下使用 egl + opengles2.0 相关接口渲染一个三角形的 wayland client 最简程序实例
软硬件环境:
硬件:PC
软件:ubuntu18.04, egl1.4 , opengles2.0, weston3.0


一、ubuntu 上相关环境准备

1. ubuntu 上安装 weston

ubuntu上确保已安装weston 程序,如果没有安装,可以使用 sudo apt install weston 命令来安装, 如下图所示
在这里插入图片描述

2. 确定ubuntu 上安装的opengles 版本

可以使用 glxinfo | grep “OpenGL ES” 命令来确定 ubuntu 上的 opengles 版本, 如下图所示, 可以看到我的 ubuntu18.04 上 安装的是 opengles2.0
在这里插入图片描述
如果提示没有安装 glxinfo 程序,可以使用 sudo apt-get install mesa-utils libgles2-mesa-dev 命令来安装,如下图所示
在这里插入图片描述

3. 确定安装的 weston 是否支持 wl_shell 接口

  1. 先运行 weston ,如下图所示,代表weston 运行成功(weston 版本为3.0.0)
    在这里插入图片描述
  2. 运行 weston-info 命令,查看 weston 是否支持 wl_shell
    如下图所示,可以看到当前 ubuntu 上安装的 weston 是支持 wl_shell 接口的
    在这里插入图片描述

二、窗口管理器接口 wl_shell 介绍

  • wl_shell 是Wayland协议早期版本中定义的一种窗口管理器接口
  • wl_shell 提供了一组固定的窗口管理功能,比如创建新窗口、设置窗口标题和边框、调整窗口大小和位置等;
  • wl_shell 的设计相对较简单,适用于基本的窗口管理需求;
  • 由于wl_shell 功能有限,不符合所有窗口管理器的需求,因此在后续的Wayland协议中被 xdg_wm_base 取代,从2023.5.19 Ubuntu 22.04.2 LTS开始,wl_shell 就被废弃了;

二、代码实例

1.egl_wayland_demo.c

egl_wayland_demo.c 代码如下,其实质就是一个wayland client(weston 是一个wayland server)

#include <wayland-client.h>
#include <wayland-server.h>
#include <wayland-egl.h>
#include <EGL/egl.h>
#include <GLES2/gl2.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define WIDTH 640
#define HEIGHT 480struct wl_display *display = NULL;
struct wl_compositor *compositor = NULL;
struct wl_shell *shell = NULL;
struct wl_registry *registry = NULL;struct window {struct wl_surface *surface;struct wl_shell_surface *shell_surface;struct wl_egl_window *egl_window;
};// Index to bind the attributes to vertex shaders
const unsigned int VertexArray = 0;/*for registry listener*/
static void registry_add_object(void *data, struct wl_registry *registry, uint32_t name, const char *interface, uint32_t version) 
{if (!strcmp(interface, "wl_compositor")) {compositor = wl_registry_bind(registry, name, &wl_compositor_interface, 1);} else if(!strcmp(interface, "wl_shell")) {shell = wl_registry_bind(registry, name, &wl_shell_interface, 1);} 
}void registry_remove_object(void *data, struct wl_registry *registry, uint32_t name) 
{}static struct wl_registry_listener registry_listener = {registry_add_object, registry_remove_object};/*for shell surface listener*/static void shell_surface_ping (void *data, struct wl_shell_surface *shell_surface, uint32_t serial) 
{wl_shell_surface_pong (shell_surface, serial);
}
static void shell_surface_configure (void *data, struct wl_shell_surface *shell_surface, uint32_t edges, 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/639319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5 C++学习笔记 FString FName FText相互转换

1.FString 是UE里的String。最接近std::string, 唯一可以修改的字符串类型。性能更低 TEXT(string) TEXT宏&#xff0c;作用是将字符串转换成Unicode&#xff0c;切记UE中使用字符串输出要使用该宏 2. FName 是UE里特有的类型。它更注重于表示名称不区分大小写&#xff0c;不…

基于taro搭建小程序多项目框架,记重点了!!!

前言 为什么需要这样一个框架&#xff0c;以及这个框架带来的好处是什么&#xff1f; 从字面意思上理解&#xff1a;该框架可以用来同时管理多个小程序&#xff0c;并且可以抽离公用组件或业务逻辑供各个小程序使用。当你工作中面临这种同时维护多个小程序的业务场景时&#…

web架构师编辑器内容-完成属性设置的优化

对于业务组件来说&#xff0c;其属性是有很多的&#xff0c;如果把所有属性都平铺在页面上&#xff0c;就会非常长&#xff0c;而且想要更改其中的某些属性&#xff0c;可能需要向下滚动很久才能找到&#xff0c;对于UI的交互不是很友好&#xff0c;需要对属性的不同特性进行分…

KDJ指标的算法、原理和特性

KDJ的完整中文名称是随机摆动指标&#xff0c;是短线交易者最常用的指标之一。作为应用最广泛的指标之一&#xff0c;KDJ的用法网上随处可见&#xff0c;但大部分介绍都只会告诉你超买超卖&#xff0c;金叉死叉&#xff0c;详细点的讲讲背离和钝化&#xff0c;至于为什么这么用…

填空题如何去掉答案?教你3个去除小妙招

填空题如何去掉答案&#xff1f;在日常学习过程中&#xff0c;将写过的试卷填空题去掉答案&#xff0c;是一种非常有效的学习方法&#xff0c;可以帮助学生们更好地巩固和扩充知识点。首先&#xff0c;去掉答案可以让学生们重新审视题目&#xff0c;加深对知识点的理解。其次&a…

【RT-DETR有效改进】Google | EfficientNetV2一种超轻量又高效的网络 (轻量化网络)

前言 大家好&#xff0c;我是Snu77&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持Re…

鸿蒙开发笔记(二十): 常用组件 TextInput/TextArea, 弹窗,视频播放Video

1. 文本输入 TextInput/TextArea TextInput为单行输入框、TextArea为多行输入框。通过以下接口来创建。 TextArea(value?:{placeholder?: ResourceStr, text?: ResourceStr, controller?: TextAreaController})TextInput(value?:{placeholder?: ResourceStr, text?: R…

小型洗衣机怎么用?实用的迷你洗衣机推荐

由于我们的内衣、内裤和袜子等等贴身小件衣物的清洁频率比一般的衣物要高。而且&#xff0c;如果我们人工手洗的话&#xff0c;不仅会大大浪费了我们的时间&#xff0c;而且还不能进行对这些贴身的以为进行深层消毒和除菌。这种情况下&#xff0c;就得需要一台专门用于清洗内衣…

数据结构·顺序表应用

本节应用是要用顺序表实现一个通讯录&#xff0c;收录联系人的姓名、性别、电话号码、住址、年龄 ​​​​​​​ 顺序表的实现在上一节中已经完成了&#xff0c;本节的任务其实就是应用上节写出来的代码的那些接口函数功能&#xff0c;做出来一个好看的&#xff0c;可…

晨控CK-FR03-EC与欧姆龙NX系列EtherCAT通讯连接说明手册

晨控CK-FR03-EC与欧姆龙NX系列EtherCAT通讯连接说明手册 晨控CK-FR03-EC是一款基于射频识别技术的高频RFID标签读卡器&#xff0c;读卡器工作频率为13.56MHZ&#xff0c;支持对I-CODE 2、I-CODE SLI等符合ISO15693国际标准协议格式标签的读取。 读卡器同时支持标准工业通讯协…

【Linux C | 进程】进程环境 | 什么是进程?进程的开始、终止、存储空间布局、命令行参数、环境变量

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

OPC UA网关BL121 支持Modbus转OPC UA协议转换

随着物联网技术的迅猛发展&#xff0c;人们深刻认识到在智能化生产和生活中&#xff0c;实时、可靠、安全的数据传输至关重要。在此背景下&#xff0c;高性能的物联网数据传输解决方案——协议转换网关应运而生&#xff0c;广泛应用于工业自动化和数字化工厂应用环境中。 钡铼…

从心理学角度看海外网红营销:品牌与消费者的心理互动

近年来&#xff0c;随着社交媒体的蓬勃发展&#xff0c;海外网红营销成为品牌推广的一种独特而有效的手段。这种新型营销方式不仅仅依赖于产品本身的特性&#xff0c;更加注重通过网红与消费者之间的心理互动来建立品牌形象&#xff0c;激发购买欲望。本文Nox聚星将和大家从心理…

17.用户身份与能力

Linux系统的管理员之所以是root&#xff0c;并不是因为它的名字叫root&#xff0c;而是因为该用户的身 份号码即UID&#xff08;User IDentification&#xff09;的数值为 0。在 Linux 系统中&#xff0c;UID就像我们的身份证号 码一样具有唯一性&#xff0c;因此可通过用户的U…

【明道云】学习笔记1-了解APaaS

【背景】 APaaS (Application Platform As A Service) &#xff0c;即应用程序平台即服务&#xff0c;这是基于PaaS&#xff08;平台即服务&#xff09;的一种解决方案&#xff0c;支持应用程序在云端的开发、部署和运行&#xff0c;提供软件开发中的基础工具给用户&#xff0…

基于XG24-EK2703A的BLE HID蓝牙键盘+鼠标复合设备功能开发(BLE+HID+FreeRTOS+Gecko SDK)

目录 项目介绍硬件介绍项目设计开发环境及工程参考总体流程图硬件基本配置应用初始化按键中断回调定时器回调按键响应任务蓝牙事件回调BLE HIDReport Map及报文键盘设备鼠标设备复合设备 发送字符串上/下滚动 功能展示项目总结 &#x1f449; 【Funpack3-1】基于XG24-EK2703A的…

Java streamFile

1.Stream流 1.1体验Stream流【理解】 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合&#xff0c;存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集合 把"张"开头的集合中的长度为3的元素存储到一个新的集合 遍历上一步得…

使用Scrapy 爬取“http://tuijian.hao123.com/”网页中左上角“娱乐”、“体育”、“财经”、“科技”、历史等名称和URL

一、网页信息 二、检查网页&#xff0c;找出目标内容 三、根据网页格式写正常爬虫代码 from bs4 import BeautifulSoup import requestsheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/53…

每天10个前端小知识 <Day 12>

前端面试基础知识题 1. Promise中&#xff0c;resolve后面的语句是否还会执行&#xff1f; 会被执行。如果不需要执行&#xff0c;需要在 resolve 语句前加上 return。 2. 什么是内存泄漏&#xff1f;什么原因会导致呢&#xff1f; 内存泄露的解释&#xff1a;程序中己动态…

酒店网络SIP融合对讲系统联动110方案

酒店网络SIP融合对讲系统联动110方案 酒店对讲系统设计采用了基于网络传输的对讲系统&#xff0c;利用网络平台&#xff0c;把管理中心和前端各个求助点连接起来&#xff0c;所有的通讯信号和控制协议通过网络进行传输&#xff0c;采用基于网络数字SIP网络对讲系统&#xff0c…