Intial Wayland EGL integration.

This commit is contained in:
James Grogan 2022-11-11 09:14:41 +00:00
parent a4d3019f04
commit 6af296409a
20 changed files with 278 additions and 44 deletions

View file

@ -0,0 +1,108 @@
#pragma once
#include "WaylandEglInterface.h"
#include <wayland-egl.h>
#include <EGL/egl.h>
#include <GLES2/gl2.h>
class WaylandEglWindowInterface
{
public:
WaylandEglWindowInterface(WaylandEglInterface* eglInterface)
: mEglInterface(eglInterface)
{
}
void initialize(wl_surface* surface, int width, int height)
{
if (mEglSurface)
{
return;
}
mEglWindow = wl_egl_window_create(surface, width, height);
if (mEglWindow == EGL_NO_SURFACE)
{
fprintf(stderr, "Can't create egl window\n");
return;
}
else
{
fprintf(stderr, "Created egl window\n");
}
mEglSurface = eglCreateWindowSurface(mEglInterface->getDisplay(), mEglInterface->getConfig(), mEglWindow, nullptr);
if (!mEglSurface)
{
switch(eglGetError())
{
//case EGL_NO_SURFACE:
//fprintf(stderr, "EGL_NO_SURFACE\n");
//break;
case EGL_BAD_DISPLAY:
fprintf(stderr, "EGL_BAD_DISPLAY\n");
break;
case EGL_NOT_INITIALIZED:
fprintf(stderr, "EGL_NOT_INITIALIZED\n");
break;
case EGL_BAD_CONFIG:
fprintf(stderr, "EGL_BAD_CONFIG\n");
break;
case EGL_BAD_NATIVE_WINDOW:
fprintf(stderr, "EGL_BAD_NATIVE_WINDOW\n");
break;
case EGL_BAD_ATTRIBUTE:
fprintf(stderr, "EGL_BAD_ATTRIBUTE\n");
break;
case EGL_BAD_ALLOC:
fprintf(stderr, "EGL_BAD_ALLOC\n");
break;
case EGL_BAD_MATCH:
fprintf(stderr, "EGL_BAD_MATCH\n");
break;
default:
fprintf(stderr, "Unknown EGL error\n");
}
fprintf(stderr, "Created surface failed\n");
}
}
void draw()
{
if (!mEglSurface)
{
return;
}
if (eglMakeCurrent(mEglInterface->getDisplay(), mEglSurface, mEglSurface, mEglInterface->getContext()))
{
fprintf(stderr, "Made current\n");
}
else {
fprintf(stderr, "Made current failed\n");
}
glClearColor(1.0, 1.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
if (eglSwapBuffers(mEglInterface->getDisplay(), mEglSurface))
{
fprintf(stderr, "Swapped buffers\n");
}
else {
fprintf(stderr, "Swapped buffers failed\n");
}
}
private:
wl_egl_window* mEglWindow{nullptr};
EGLSurface mEglSurface;
WaylandEglInterface* mEglInterface;
};