#include "../../SDL_internal.h"
#if SDL_VIDEO_DRIVER_OFFSCREEN
#include "../SDL_sysvideo.h"
#include "../SDL_egl_c.h"
#include "SDL_offscreenwindow.h"
int
OFFSCREEN_CreateWindow(_THIS, SDL_Window* window)
{
OFFSCREEN_Window *offscreen_window = SDL_calloc(1, sizeof(OFFSCREEN_Window));
if (!offscreen_window) {
return SDL_OutOfMemory();
}
window->driverdata = offscreen_window;
if (window->x == SDL_WINDOWPOS_UNDEFINED) {
window->x = 0;
}
if (window->y == SDL_WINDOWPOS_UNDEFINED) {
window->y = 0;
}
offscreen_window->sdl_window = window;
#if SDL_VIDEO_OPENGL_EGL
if (window->flags & SDL_WINDOW_OPENGL) {
if (!_this->egl_data) {
return SDL_SetError("Cannot create an OPENGL window invalid egl_data");
}
offscreen_window->egl_surface = SDL_EGL_CreateOffscreenSurface(_this, window->w, window->h);
if (offscreen_window->egl_surface == EGL_NO_SURFACE) {
return SDL_SetError("Failed to created an offscreen surface (EGL display: %p)",
_this->egl_data->egl_display);
}
} else {
offscreen_window->egl_surface = EGL_NO_SURFACE;
}
#endif
return 0;
}
void
OFFSCREEN_DestroyWindow(_THIS, SDL_Window* window)
{
OFFSCREEN_Window* offscreen_window = window->driverdata;
if (offscreen_window) {
#if SDL_VIDEO_OPENGL_EGL
SDL_EGL_DestroySurface(_this, offscreen_window->egl_surface);
#endif
SDL_free(offscreen_window);
}
window->driverdata = NULL;
}
#endif