|
|
@ -29,7 +29,7 @@ struct zwlr_layer_surface_v1 *layer_surface;
|
|
|
|
static struct wl_output *wl_output;
|
|
|
|
static struct wl_output *wl_output;
|
|
|
|
|
|
|
|
|
|
|
|
struct wl_surface *wl_surface;
|
|
|
|
struct wl_surface *wl_surface;
|
|
|
|
struct wlr_egl egl;
|
|
|
|
struct wlr_egl *egl;
|
|
|
|
struct wl_egl_window *egl_window;
|
|
|
|
struct wl_egl_window *egl_window;
|
|
|
|
struct wlr_egl_surface *egl_surface;
|
|
|
|
struct wlr_egl_surface *egl_surface;
|
|
|
|
struct wl_callback *frame_callback;
|
|
|
|
struct wl_callback *frame_callback;
|
|
|
@ -93,7 +93,7 @@ static struct wl_callback_listener popup_frame_listener = {
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
static void draw(void) {
|
|
|
|
static void draw(void) {
|
|
|
|
eglMakeCurrent(egl.display, egl_surface, egl_surface, egl.context);
|
|
|
|
eglMakeCurrent(egl->display, egl_surface, egl_surface, egl->context);
|
|
|
|
struct timespec ts;
|
|
|
|
struct timespec ts;
|
|
|
|
clock_gettime(CLOCK_MONOTONIC, &ts);
|
|
|
|
clock_gettime(CLOCK_MONOTONIC, &ts);
|
|
|
|
|
|
|
|
|
|
|
@ -142,7 +142,7 @@ static void draw(void) {
|
|
|
|
frame_callback = wl_surface_frame(wl_surface);
|
|
|
|
frame_callback = wl_surface_frame(wl_surface);
|
|
|
|
wl_callback_add_listener(frame_callback, &frame_listener, NULL);
|
|
|
|
wl_callback_add_listener(frame_callback, &frame_listener, NULL);
|
|
|
|
|
|
|
|
|
|
|
|
eglSwapBuffers(egl.display, egl_surface);
|
|
|
|
eglSwapBuffers(egl->display, egl_surface);
|
|
|
|
|
|
|
|
|
|
|
|
demo.last_frame = ts;
|
|
|
|
demo.last_frame = ts;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -150,7 +150,7 @@ static void draw(void) {
|
|
|
|
static void draw_popup(void) {
|
|
|
|
static void draw_popup(void) {
|
|
|
|
static float alpha_mod = -0.01;
|
|
|
|
static float alpha_mod = -0.01;
|
|
|
|
|
|
|
|
|
|
|
|
eglMakeCurrent(egl.display, popup_egl_surface, popup_egl_surface, egl.context);
|
|
|
|
eglMakeCurrent(egl->display, popup_egl_surface, popup_egl_surface, egl->context);
|
|
|
|
glViewport(0, 0, popup_width, popup_height);
|
|
|
|
glViewport(0, 0, popup_width, popup_height);
|
|
|
|
glClearColor(popup_red, 0.5f, 0.5f, popup_alpha);
|
|
|
|
glClearColor(popup_red, 0.5f, 0.5f, popup_alpha);
|
|
|
|
popup_alpha += alpha_mod;
|
|
|
|
popup_alpha += alpha_mod;
|
|
|
@ -162,7 +162,7 @@ static void draw_popup(void) {
|
|
|
|
popup_frame_callback = wl_surface_frame(popup_wl_surface);
|
|
|
|
popup_frame_callback = wl_surface_frame(popup_wl_surface);
|
|
|
|
assert(popup_frame_callback);
|
|
|
|
assert(popup_frame_callback);
|
|
|
|
wl_callback_add_listener(popup_frame_callback, &popup_frame_listener, NULL);
|
|
|
|
wl_callback_add_listener(popup_frame_callback, &popup_frame_listener, NULL);
|
|
|
|
eglSwapBuffers(egl.display, popup_egl_surface);
|
|
|
|
eglSwapBuffers(egl->display, popup_egl_surface);
|
|
|
|
wl_surface_commit(popup_wl_surface);
|
|
|
|
wl_surface_commit(popup_wl_surface);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -187,7 +187,7 @@ static void xdg_popup_configure(void *data, struct xdg_popup *xdg_popup,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void popup_destroy(void) {
|
|
|
|
static void popup_destroy(void) {
|
|
|
|
wlr_egl_destroy_surface(&egl, popup_egl_surface);
|
|
|
|
wlr_egl_destroy_surface(egl, popup_egl_surface);
|
|
|
|
wl_egl_window_destroy(popup_egl_window);
|
|
|
|
wl_egl_window_destroy(popup_egl_window);
|
|
|
|
xdg_popup_destroy(popup);
|
|
|
|
xdg_popup_destroy(popup);
|
|
|
|
wl_surface_destroy(popup_wl_surface);
|
|
|
|
wl_surface_destroy(popup_wl_surface);
|
|
|
@ -241,7 +241,7 @@ static void create_popup(uint32_t serial) {
|
|
|
|
popup_wl_surface = surface;
|
|
|
|
popup_wl_surface = surface;
|
|
|
|
popup_egl_window = wl_egl_window_create(surface, popup_width, popup_height);
|
|
|
|
popup_egl_window = wl_egl_window_create(surface, popup_width, popup_height);
|
|
|
|
assert(popup_egl_window);
|
|
|
|
assert(popup_egl_window);
|
|
|
|
popup_egl_surface = wlr_egl_create_surface(&egl, popup_egl_window);
|
|
|
|
popup_egl_surface = wlr_egl_create_surface(egl, popup_egl_window);
|
|
|
|
assert(popup_egl_surface);
|
|
|
|
assert(popup_egl_surface);
|
|
|
|
draw_popup();
|
|
|
|
draw_popup();
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -259,7 +259,7 @@ static void layer_surface_configure(void *data,
|
|
|
|
|
|
|
|
|
|
|
|
static void layer_surface_closed(void *data,
|
|
|
|
static void layer_surface_closed(void *data,
|
|
|
|
struct zwlr_layer_surface_v1 *surface) {
|
|
|
|
struct zwlr_layer_surface_v1 *surface) {
|
|
|
|
wlr_egl_destroy_surface(&egl, egl_surface);
|
|
|
|
wlr_egl_destroy_surface(egl, egl_surface);
|
|
|
|
wl_egl_window_destroy(egl_window);
|
|
|
|
wl_egl_window_destroy(egl_window);
|
|
|
|
zwlr_layer_surface_v1_destroy(surface);
|
|
|
|
zwlr_layer_surface_v1_destroy(surface);
|
|
|
|
wl_surface_destroy(wl_surface);
|
|
|
|
wl_surface_destroy(wl_surface);
|
|
|
@ -611,7 +611,7 @@ int main(int argc, char **argv) {
|
|
|
|
assert(cursor_surface);
|
|
|
|
assert(cursor_surface);
|
|
|
|
|
|
|
|
|
|
|
|
EGLint attribs[] = { EGL_ALPHA_SIZE, 8, EGL_NONE };
|
|
|
|
EGLint attribs[] = { EGL_ALPHA_SIZE, 8, EGL_NONE };
|
|
|
|
wlr_egl_init(&egl, EGL_PLATFORM_WAYLAND_EXT, display, attribs);
|
|
|
|
egl = wlr_egl_create(EGL_PLATFORM_WAYLAND_EXT, display, attribs);
|
|
|
|
|
|
|
|
|
|
|
|
wl_surface = wl_compositor_create_surface(compositor);
|
|
|
|
wl_surface = wl_compositor_create_surface(compositor);
|
|
|
|
assert(wl_surface);
|
|
|
|
assert(wl_surface);
|
|
|
@ -633,7 +633,7 @@ int main(int argc, char **argv) {
|
|
|
|
|
|
|
|
|
|
|
|
egl_window = wl_egl_window_create(wl_surface, width, height);
|
|
|
|
egl_window = wl_egl_window_create(wl_surface, width, height);
|
|
|
|
assert(egl_window);
|
|
|
|
assert(egl_window);
|
|
|
|
egl_surface = wlr_egl_create_surface(&egl, egl_window);
|
|
|
|
egl_surface = wlr_egl_create_surface(egl, egl_window);
|
|
|
|
assert(egl_surface);
|
|
|
|
assert(egl_surface);
|
|
|
|
|
|
|
|
|
|
|
|
wl_display_roundtrip(display);
|
|
|
|
wl_display_roundtrip(display);
|
|
|
|