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

news2024/12/23 9:48:13

文章目录

  • 前言
  • 一、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 480

struct 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.coloradmin.cn/o/1409198.html

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

相关文章

单点登陆(SSO)基于CAS实现前后端分离的SSO系统开发「IDP发起」

关于其他前端常见登录实现单点登录方案&#xff0c;请见「前端常见登录实现方案 单点登录方案 」 前沿 单点登录&#xff08;SSO&#xff09;&#xff0c;英文全称为 Single Sign On。 SSO 是指在多个应用系统中&#xff0c;用户只需要登录一次&#xff0c;就可以访问所有相互…

❤css实用

❤ css实用 渐变色边框&#xff08;Gradient borders方法的汇总 5种-代码可直接下载&#xff09; 资源链接 https://download.csdn.net/download/weixin_43615570/88779950?spm1001.2014.3001.5503 给 border 设置渐变色是很常见的效果&#xff0c;实现这个效果有很多思路 1…

SAP EXCEL上传如何实现指定读取某一个sheet页(ALSM_EXCEL_TO_INTERNAL_TABLE)

如何读取指定的EXCEL sheet 页签&#xff0c;比如要读取下图中第二个输出sheet页签 具体实现方法如下&#xff1a; 拷贝标准的函数ALSM_EXCEL_TO_INTERNAL_TABLE封装成一个自定义函数ZCALSM_EXCEL_TO_INTERNAL_TABLE 在自定义函数导入参数页签新增一个参数SHEET_NAME 在源代码…

MacOS 无法ping 通 github.com 解决方案

ping github.com 会显示请求超时&#xff1a; PING github.com (192.30.253.112): 56 data bytes Request timeout for icmp_seq 0 Request timeout for icmp_seq 1 Request timeout for icmp_seq 2 Request timeout for icmp_seq 3 Request timeout for icmp_seq 4 Request …

硬件-11-服务器的基础知识

参考服务器基础知识大科普 1 电视剧背景 服务器被誉为互联网之魂。 电视剧《创业年代》是一部有冯绍峰和袁姗姗等人联手主演的一部讲述我国第一批科技创业者创业故事的电视剧&#xff0c;可以说是他们铲下了建设中关村的第一捧土。 电视剧《创业年代》中的潮信公司并没有…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-Tag标签管理实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…

特征抽取-----机器学习pycharm软件

导入包 from sklearn.datasets import load_iris # 方法datasets_demo()数据集使用 from sklearn.feature_extraction import DictVectorizer # 方法dict_demo()字典特征抽取用 from sklearn.feature_extraction.text import CountVectorizer # 方法count_demo()文本特征抽…

【Web前端实操11】定位实操_照片墙(无序摆放)

设置一个板块&#xff0c;将照片随意无序摆放在墙上&#xff0c;从而形成照片墙。本来效果应该是很唯美好看的&#xff0c;就像这种&#xff0c;但是奈何本人手太笨&#xff0c;只好设置能达到照片墙的效果就可。 代码如下&#xff1a; <!DOCTYPE html> <html lang&…

企业为何对数据可视化越发看重?

数据可视化&#xff0c;作为信息时代的一项重要技术&#xff0c;正在企业中崭露头角&#xff0c;逐渐成为业务决策和运营管理的得力助手。企业之所以对数据可视化如此重视&#xff0c;是因为它为企业带来了诸多实际利益和战略优势。 首先&#xff0c;数据可视化为企业提供了更…

人工蜂群算法解决Rastrigin函数全局最小值问题的python示例实现

人工蜂群优化算法&#xff08;Artificial Bee Colony Optimization&#xff0c;简称ABC算法&#xff09;是一种基于蜜蜂觅食行为的优化算法&#xff0c;由Karaboga于2005年提出。该算法模拟了蜜蜂群体在寻找食物过程中的行为&#xff0c;通过不断地搜索和信息交流来寻找最优解。…

mapstruct中在怎样将String转化为List

最近在公司遇到了这样一个为题&#xff0c;前端传过来的是一个List<Manager>,往数据库中保存到时候是String&#xff0c;这个String使用谷歌的json转化器。 当查询的时候在将这个数据库中String的数据以List<Manager>的形式返回给前端。 使用mapstruct中在怎样将St…

应对算力资源紧缺需求,猿界算力推出A100高性能算力GPU服务器租赁整体解决方案

在当今科技快速发展的浪潮下&#xff0c;人工智能、大数据分析和科学研究等领域对高性能计算资源的需求越来越大。然而&#xff0c;当前的算力市场却面临着资源紧缺的挑战&#xff0c;给科研机构、企业和个人用户的计算密集型任务带来了很大的困扰。为了解决这一问题&#xff0…

蓝桥杯官网填空题(01串的熵)

问题描述 答案提交 这是一道结果填空的题, 你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。 import java.util.*;public class Main {public static void main(String[] args) {for(double zero1;zero<2333…

【CodeTop】TOP 100 刷题 51-60

文章目录 51. 缺失的第一个正数题目描述代码与解题思路 52. 训练计划 II题目描述代码与解题思路 53. 子集题目描述代码与解题思路 54. 最小覆盖子串题目描述代码与解题思路 55. 从前序与中序遍历序列构造二叉树题目描述代码与解题思路 56. 零钱兑换题目描述代码与解题思路 57. …

如何生成漂亮的静态文档说明页

分享&#xff1a;如何生成漂亮的静态文档说明页 最近经常被问 https://t.itmuch.com/doc.html 文档页是怎么制作的&#xff0c;考虑到步骤略复杂&#xff0c;写篇手记总结下吧。 TIPS https://t.itmuch.com/doc.html 是个人在慕课网视频《 面向未来微服务:Spring Cloud Alibab…

3.7V升5V 12V 24V 30V 24V/5A升压恒压芯片-H6922

升压恒压芯片是一种电源管理集成电路&#xff0c;其主要功能是将输入电压提升到稳定的输出电压。以下是升压恒压芯片的一些优点&#xff1a; 稳定输出电压&#xff1a;升压恒压芯片能够确保输出电压维持在一个恒定的水平&#xff0c;不受输入电压波动的影响。这有助于提供稳定的…

数字图像处理(实践篇)二十九 OpenCV-Python在图像中检测矩形、正方形和三角形的实践

目录 1 方案 2 实践 1 方案 ①检测矩形和正方形 ⒈检测图像中的所有轮廓。 ⒉循环检查所有检测到的轮廓。 ⒊为每个轮廓找到近似的轮廓。如果近似轮廓中的顶点数为4,则计算宽高比用来区分矩形和正方形。如果宽高比在0.9到1.1之间,则认为为正方形,否则的话,则为矩形。…

Pyecharts绘图

文章目录 柱状图折线图饼图组合图 柱状图 #柱状图 from pyecharts.charts import Bar from pyecharts import options as opts #去掉警告信息 import pyecharts pyecharts.globals._WarningControl.ShowWarning False # 数据 cate t1[行政区].tolist() data1 t1[单价].tolist…

引领AI变革:边缘计算与自然语言处理结合的无尽可能

引言 讲到Ai&#xff0c;你第一时间会想到什么&#xff1f;是Chagpt和文心一言这样与人类交流自然的Ai生成式对话服务&#xff1f;还是根据关键字快速制图的Ai绘图&#xff1f;这些都是近年来人们所常知的Ai用途&#xff0c;我们今天来讲讲以自然语言处理为辅&#xff0c;在Ai赋…

java web 校园健康管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web校园健康管理系统是一套完善的java web信息管理系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysq…