src/video/wayland/SDL_waylandopengles.c
author Gabriel Jacobo
Sat, 14 Dec 2013 20:18:43 -0300
changeset 8062 4fc5f66d63cc
child 8104 2e4f1bd21196
permissions -rw-r--r--
Wayland support

Based on the original port to Wayland by: Joel Teichroeb, Benjamin Franzke, Scott Moreau, et al.

Additional changes in this commit, done by me:

* Wayland uses the common EGL framework
* EGL can now create a desktop OpenGL context
* testgl2 loads GL functions dynamically, no need to link to libGL anymore
* Assorted fixes to the Wayland backend

Tested on the Weston Compositor (v1.0.5) that ships with Ubuntu 13.10,
running Weston under X. Tests ran: testrendercopyex (all backends), testgl2, testgles2,testintersections
gabomdq@8062
     1
/*
gabomdq@8062
     2
  Simple DirectMedia Layer
gabomdq@8062
     3
  Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
gabomdq@8062
     4
gabomdq@8062
     5
  This software is provided 'as-is', without any express or implied
gabomdq@8062
     6
  warranty.  In no event will the authors be held liable for any damages
gabomdq@8062
     7
  arising from the use of this software.
gabomdq@8062
     8
gabomdq@8062
     9
  Permission is granted to anyone to use this software for any purpose,
gabomdq@8062
    10
  including commercial applications, and to alter it and redistribute it
gabomdq@8062
    11
  freely, subject to the following restrictions:
gabomdq@8062
    12
gabomdq@8062
    13
  1. The origin of this software must not be misrepresented; you must not
gabomdq@8062
    14
     claim that you wrote the original software. If you use this software
gabomdq@8062
    15
     in a product, an acknowledgment in the product documentation would be
gabomdq@8062
    16
     appreciated but is not required.
gabomdq@8062
    17
  2. Altered source versions must be plainly marked as such, and must not be
gabomdq@8062
    18
     misrepresented as being the original software.
gabomdq@8062
    19
  3. This notice may not be removed or altered from any source distribution.
gabomdq@8062
    20
*/
gabomdq@8062
    21
#include "SDL_config.h"
gabomdq@8062
    22
gabomdq@8062
    23
#if SDL_VIDEO_DRIVER_WAYLAND && SDL_VIDEO_OPENGL_EGL
gabomdq@8062
    24
gabomdq@8062
    25
#include "SDL_waylandvideo.h"
gabomdq@8062
    26
#include "SDL_waylandopengles.h"
gabomdq@8062
    27
#include "SDL_waylandwindow.h"
gabomdq@8062
    28
#include "SDL_waylandevents_c.h"
gabomdq@8062
    29
gabomdq@8062
    30
/* EGL implementation of SDL OpenGL ES support */
gabomdq@8062
    31
gabomdq@8062
    32
int
gabomdq@8062
    33
Wayland_GLES_LoadLibrary(_THIS, const char *path) {
gabomdq@8062
    34
    int ret;
gabomdq@8062
    35
    SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
gabomdq@8062
    36
    
gabomdq@8062
    37
    ret = SDL_EGL_LoadLibrary(_this, path, (NativeDisplayType) data->display);
gabomdq@8062
    38
gabomdq@8062
    39
    Wayland_PumpEvents(_this);
gabomdq@8062
    40
    wayland_schedule_write(data);
gabomdq@8062
    41
    
gabomdq@8062
    42
    return ret;
gabomdq@8062
    43
}
gabomdq@8062
    44
gabomdq@8062
    45
gabomdq@8062
    46
SDL_GLContext
gabomdq@8062
    47
Wayland_GLES_CreateContext(_THIS, SDL_Window * window)
gabomdq@8062
    48
{
gabomdq@8062
    49
    SDL_GLContext context;
gabomdq@8062
    50
    context = SDL_EGL_CreateContext(_this, ((SDL_WindowData *) window->driverdata)->egl_surface);
gabomdq@8062
    51
    wayland_schedule_write(_this->driverdata);
gabomdq@8062
    52
    
gabomdq@8062
    53
    return context;
gabomdq@8062
    54
}
gabomdq@8062
    55
gabomdq@8062
    56
void
gabomdq@8062
    57
Wayland_GLES_SwapWindow(_THIS, SDL_Window *window)
gabomdq@8062
    58
{
gabomdq@8062
    59
    SDL_EGL_SwapBuffers(_this, ((SDL_WindowData *) window->driverdata)->egl_surface);
gabomdq@8062
    60
    wayland_schedule_write(_this->driverdata);
gabomdq@8062
    61
}
gabomdq@8062
    62
gabomdq@8062
    63
gabomdq@8062
    64
int
gabomdq@8062
    65
Wayland_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context)
gabomdq@8062
    66
{
gabomdq@8062
    67
    int ret;
gabomdq@8062
    68
    
gabomdq@8062
    69
    if (window && context) {
gabomdq@8062
    70
        ret = SDL_EGL_MakeCurrent(_this, ((SDL_WindowData *) window->driverdata)->egl_surface, context);
gabomdq@8062
    71
    }
gabomdq@8062
    72
    else {
gabomdq@8062
    73
        ret = SDL_EGL_MakeCurrent(_this, NULL, NULL);
gabomdq@8062
    74
    }
gabomdq@8062
    75
    
gabomdq@8062
    76
    wayland_schedule_write(_this->driverdata);
gabomdq@8062
    77
    
gabomdq@8062
    78
    return ret;
gabomdq@8062
    79
}
gabomdq@8062
    80
gabomdq@8062
    81
void 
gabomdq@8062
    82
Wayland_GLES_DeleteContext(_THIS, SDL_GLContext context)
gabomdq@8062
    83
{
gabomdq@8062
    84
    SDL_EGL_DeleteContext(_this, context);
gabomdq@8062
    85
    wayland_schedule_write(_this->driverdata);
gabomdq@8062
    86
}
gabomdq@8062
    87
gabomdq@8062
    88
#endif /* SDL_VIDEO_DRIVER_WAYLAND && SDL_VIDEO_OPENGL_EGL */
gabomdq@8062
    89
gabomdq@8062
    90
/* vi: set ts=4 sw=4 expandtab: */