赞
踩
本文主要介绍如何在 linux 下使用 egl + opengles2.0 相关接口渲染一个三角形的 wayland client 最简程序实例
软硬件环境:
硬件:PC
软件:ubuntu18.04, egl1.4 , opengles2.0, weston3.0
ubuntu上确保已安装weston 程序,如果没有安装,可以使用 sudo apt install weston 命令来安装, 如下图所示
可以使用 glxinfo | grep “OpenGL ES” 命令来确定 ubuntu 上的 opengles 版本, 如下图所示, 可以看到我的 ubuntu18.04 上 安装的是 opengles2.0
如果提示没有安装 glxinfo 程序,可以使用 sudo apt-get install mesa-utils libgles2-mesa-dev 命令来安装,如下图所示
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 window { struct wl_display *display; struct wl_compositor *compositor; struct wl_shell *shell; struct wl_registry *registry; 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) { struct window *window = (struct window *)data; if (!strcmp(interface, "wl_compositor")) { window->compositor = wl_registry_bind(registry, name, &wl_compositor_interface, 1); } else if(!strcmp(interface, "wl_shell")) { window->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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。