Fix window creation

This commit is contained in:
Phireh 2024-11-18 17:49:54 +01:00
commit 9d530777bc
4 changed files with 2530 additions and 8 deletions

View file

@ -5,12 +5,19 @@
#include <GL/gl.h>
#include <string.h>
#include <stdlib.h>
// Generated header using wayland-scanner
#include "xdg-shell-client-protocol.h"
struct wl_compositor *compositor = NULL;
struct wl_registry *registry = NULL;
struct wl_surface *surface = NULL;
struct xdg_wm_base *wm_base;
struct xdg_surface *xdg_surface;
struct xdg_toplevel *xdg_toplevel;
EGLBoolean errcode = 0;
void registry_handle_global(void *data, struct wl_registry *registry,
uint32_t name, const char *interface, uint32_t version)
{
@ -21,6 +28,11 @@ void registry_handle_global(void *data, struct wl_registry *registry,
fprintf(stdout, "Registering compositor...\n");
compositor = wl_registry_bind(registry, name, &wl_compositor_interface, 1);
}
if (!strcmp(interface, xdg_wm_base_interface.name))
{
fprintf(stdout, "Registering XDG WM base interface...\n");
wm_base = wl_registry_bind(registry, name, &xdg_wm_base_interface, 1);
}
}
@ -63,6 +75,10 @@ int main()
fprintf(stderr, "Can't create surface!\n");
}
xdg_surface = xdg_wm_base_get_xdg_surface(wm_base, surface);
xdg_toplevel = xdg_surface_get_toplevel(xdg_surface);
xdg_toplevel_set_title(xdg_toplevel, "Hi");
/* WL EGL initialization */
struct wl_egl_window *window = wl_egl_window_create(surface, 480, 460);
@ -247,23 +263,20 @@ int main()
break;
}
struct wl_region *region = wl_compositor_create_region(compositor);
wl_region_add(region, 0, 0, 480, 360);
wl_surface_set_opaque_region(surface, region);
/* NOTE: It would seem that having a non-zero swap interval can hang the Mesa driver forever, according to this SDL GH issue:
https://github.com/libsdl-org/SDL/issues/4335#issuecomment-829789881
*/
if (eglSwapInterval(egl_display, 0) != EGL_TRUE)
fprintf(stderr, "Could not set EGL swap interval\n");
wl_surface_commit(surface);
int framecount = 0;
// Main event loop
while (1)
{
wl_display_dispatch_pending(display);
fprintf(stdout, "Frame %d\n", framecount++);
//fprintf(stdout, "Frame %d\n", framecount++);
glClearColor(0.5, 0.3, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glFlush();