WaylandSurface.cpp [plain text]
#include "config.h"
#include "WaylandSurface.h"
#if PLATFORM(WAYLAND)
#include "GLContextEGL.h"
#include "IntSize.h"
#include "PlatformDisplayWayland.h"
#include <EGL/egl.h>
namespace WebCore {
void frameCallback(void*, struct wl_callback* callback, uint32_t)
{
if (callback)
wl_callback_destroy(callback);
}
static const struct wl_callback_listener frameListener = {
frameCallback
};
WaylandSurface::WaylandSurface(struct wl_surface* wlSurface, EGLNativeWindowType nativeWindow)
: m_wlSurface(wlSurface)
, m_nativeWindow(nativeWindow)
{
}
WaylandSurface::~WaylandSurface()
{
const PlatformDisplayWayland& waylandDisplay = downcast<PlatformDisplayWayland>(PlatformDisplay::sharedDisplay());
ASSERT(waylandDisplay.native());
eglMakeCurrent(waylandDisplay.native(), EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
wl_egl_window_destroy(m_nativeWindow);
wl_surface_destroy(m_wlSurface);
}
void WaylandSurface::resize(const IntSize& size)
{
wl_egl_window_resize(m_nativeWindow, size.width(), size.height(), 0, 0);
}
std::unique_ptr<GLContextEGL> WaylandSurface::createGLContext()
{
return GLContextEGL::createWindowContext(m_nativeWindow, GLContext::sharingContext());
}
void WaylandSurface::requestFrame()
{
struct wl_callback* frameCallback = wl_surface_frame(m_wlSurface);
wl_callback_add_listener(frameCallback, &frameListener, this);
}
}
#endif // PLATFORM(WAYLAND)