src/video/x11/SDL_x11opengles.c
author Sam Lantinga <slouken@libsdl.org>
Wed, 18 Jul 2012 15:17:27 -0700
changeset 6370 93187f7f7d5d
parent 6368 fcbbd0e2da5e
child 6373 494e0436525f
permissions -rwxr-xr-x
Improved simultaneous support for OpenGL and OpenGL ES From Scott Percival Okay, I think I have something for this. Tested it on GL and GLES machines, it seems to work okay. - Add a new SDL GL attribute SDL_GL_CONTEXT_EGL: - Only useful for the X11 video driver at the moment - Set to 1 for an EGL context, 0 to use the default for the video driver - Default is 0, unless library is built for EGL only - Should be set after SDL init, but before window/context creation (i.e. same place you'd specify attributes for major/minor GL version) - After a lot of agony pondering the least-terrible way to go about it, made it so that X11_GL_LoadLibrary and X11_GLES_LoadLibrary check SDL_GL_CONTEXT_EGL. If no GL context exists yet, and the attribute choice doesn't match with the checking function, then it changes all the function pointers in the video driver and passes control on to the new LoadLibrary method. - Likewise, make X11_CreateWindow check this attribute before firing off a call to X11_GL_GetVisual/X11_GLES_GetVisual - Added a sanity check to the start of X11_GL_LoadLibrary - Tidied up SDL_x11opengles.h - Moved ownership of the gles_data structure over to X11_GLES_LoadLibrary/UnloadLibrary - Should incorporate the 3 fixes posted by Andre Heider This is obviously quite a bit to take in, but is (at least) a proof of concept for the approach I think EGL/GLX mingling should take. Any comments/criticism is much appreciated.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     1
/*
5535
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
     2
  Simple DirectMedia Layer
6138
4c64952a58fb Happy New Year!
Sam Lantinga <slouken@libsdl.org>
parents: 6044
diff changeset
     3
  Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org>
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     4
5535
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
     5
  This software is provided 'as-is', without any express or implied
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
     6
  warranty.  In no event will the authors be held liable for any damages
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
     7
  arising from the use of this software.
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     8
5535
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
     9
  Permission is granted to anyone to use this software for any purpose,
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
    10
  including commercial applications, and to alter it and redistribute it
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
    11
  freely, subject to the following restrictions:
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    12
5535
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
    13
  1. The origin of this software must not be misrepresented; you must not
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
    14
     claim that you wrote the original software. If you use this software
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
    15
     in a product, an acknowledgment in the product documentation would be
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
    16
     appreciated but is not required.
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
    17
  2. Altered source versions must be plainly marked as such, and must not be
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
    18
     misrepresented as being the original software.
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
    19
  3. This notice may not be removed or altered from any source distribution.
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    20
*/
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    21
#include "SDL_config.h"
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    22
6044
35448a5ea044 Lots of fixes importing SDL source wholesale into a new iOS project
Sam Lantinga <slouken@libsdl.org>
parents: 5535
diff changeset
    23
#if SDL_VIDEO_DRIVER_X11 && SDL_VIDEO_OPENGL_ES
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    24
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    25
#include "SDL_x11video.h"
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    26
#include "SDL_x11opengles.h"
6370
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
    27
#include "SDL_x11opengl.h"
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    28
6190
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
    29
#define DEFAULT_EGL "libEGL.so"
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
    30
#define DEFAULT_OGL_ES2 "libGLESv2.so"
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
    31
#define DEFAULT_OGL_ES_PVR "libGLES_CM.so"
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
    32
#define DEFAULT_OGL_ES "libGLESv1_CM.so"
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    33
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    34
#define LOAD_FUNC(NAME) \
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    35
	*((void**)&_this->gles_data->NAME) = dlsym(handle, #NAME); \
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    36
	if (!_this->gles_data->NAME) \
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    37
	{ \
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    38
		SDL_SetError("Could not retrieve EGL function " #NAME); \
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    39
		return -1; \
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    40
	}
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    41
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    42
/* GLES implementation of SDL OpenGL support */
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    43
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    44
void *
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    45
X11_GLES_GetProcAddress(_THIS, const char *proc)
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    46
{
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    47
    static char procname[1024];
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    48
    void *handle;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    49
    void *retval;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    50
6188
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
    51
    handle = _this->gles_data->egl_dll_handle;
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    52
    if (_this->gles_data->eglGetProcAddress) {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    53
        retval = _this->gles_data->eglGetProcAddress(proc);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    54
        if (retval) {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    55
            return retval;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    56
        }
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    57
    }
6188
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
    58
    
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
    59
    handle = _this->gl_config.dll_handle;
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    60
#if defined(__OpenBSD__) && !defined(__ELF__)
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    61
#undef dlsym(x,y);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    62
#endif
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    63
    retval = dlsym(handle, proc);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    64
    if (!retval && strlen(proc) <= 1022) {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    65
        procname[0] = '_';
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    66
        strcpy(procname + 1, proc);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    67
        retval = dlsym(handle, procname);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    68
    }
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    69
    return retval;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    70
}
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    71
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    72
void
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    73
X11_GLES_UnloadLibrary(_THIS)
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    74
{
6370
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
    75
    if ((_this->gles_data) && (_this->gl_config.driver_loaded)) {
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    76
        _this->gles_data->eglTerminate(_this->gles_data->egl_display);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    77
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    78
        dlclose(_this->gl_config.dll_handle);
6188
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
    79
        dlclose(_this->gles_data->egl_dll_handle);
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    80
6370
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
    81
        SDL_free(_this->gles_data);
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
    82
        _this->gles_data = NULL;
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    83
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    84
        _this->gl_config.dll_handle = NULL;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    85
        _this->gl_config.driver_loaded = 0;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    86
    }
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    87
}
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    88
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    89
int
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    90
X11_GLES_LoadLibrary(_THIS, const char *path)
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    91
{
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    92
    void *handle;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    93
    int dlopen_flags;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    94
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    95
    SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    96
6370
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
    97
    if (_this->gles_data) {
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    98
        SDL_SetError("OpenGL ES context already created");
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    99
        return -1;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   100
    }
6370
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   101
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   102
#if SDL_VIDEO_OPENGL_GLX
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   103
    /* If SDL_GL_CONTEXT_EGL has been changed to 0, switch over to X11_GL functions  */
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   104
    if (_this->gl_config.use_egl == 0) {
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   105
        _this->GL_LoadLibrary = X11_GL_LoadLibrary;
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   106
        _this->GL_GetProcAddress = X11_GL_GetProcAddress;
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   107
        _this->GL_UnloadLibrary = X11_GL_UnloadLibrary;
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   108
        _this->GL_CreateContext = X11_GL_CreateContext;
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   109
        _this->GL_MakeCurrent = X11_GL_MakeCurrent;
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   110
        _this->GL_SetSwapInterval = X11_GL_SetSwapInterval;
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   111
        _this->GL_GetSwapInterval = X11_GL_GetSwapInterval;
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   112
        _this->GL_SwapWindow = X11_GL_SwapWindow;
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   113
        _this->GL_DeleteContext = X11_GL_DeleteContext;
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   114
        return X11_GL_LoadLibrary(_this, path);
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   115
    }
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   116
#endif
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   117
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   118
#ifdef RTLD_GLOBAL
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   119
    dlopen_flags = RTLD_LAZY | RTLD_GLOBAL;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   120
#else
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   121
    dlopen_flags = RTLD_LAZY;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   122
#endif
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   123
    handle = dlopen(path, dlopen_flags);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   124
    /* Catch the case where the application isn't linked with EGL */
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   125
    if ((dlsym(handle, "eglChooseConfig") == NULL) && (path == NULL)) {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   126
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   127
        dlclose(handle);
6368
fcbbd0e2da5e Rename envvar to overwrite X11 EGL library name.
Sam Lantinga <slouken@libsdl.org>
parents: 6190
diff changeset
   128
        path = getenv("SDL_VIDEO_EGL_DRIVER");
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   129
        if (path == NULL) {
6188
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   130
            path = DEFAULT_EGL;
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   131
        }
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   132
        handle = dlopen(path, dlopen_flags);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   133
    }
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   134
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   135
    if (handle == NULL) {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   136
        SDL_SetError("Could not load OpenGL ES/EGL library");
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   137
        return -1;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   138
    }
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   139
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   140
    /* Unload the old driver and reset the pointers */
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   141
    X11_GLES_UnloadLibrary(_this);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   142
6370
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   143
    _this->gles_data = (struct SDL_PrivateGLESData *) SDL_calloc(1, sizeof(SDL_PrivateGLESData));
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   144
    if (!_this->gles_data) {
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   145
        SDL_OutOfMemory();
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   146
        return -1;
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   147
    }
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   148
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   149
    /* Load new function pointers */
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   150
    LOAD_FUNC(eglGetDisplay);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   151
    LOAD_FUNC(eglInitialize);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   152
    LOAD_FUNC(eglTerminate);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   153
    LOAD_FUNC(eglGetProcAddress);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   154
    LOAD_FUNC(eglChooseConfig);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   155
    LOAD_FUNC(eglGetConfigAttrib);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   156
    LOAD_FUNC(eglCreateContext);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   157
    LOAD_FUNC(eglDestroyContext);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   158
    LOAD_FUNC(eglCreateWindowSurface);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   159
    LOAD_FUNC(eglDestroySurface);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   160
    LOAD_FUNC(eglMakeCurrent);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   161
    LOAD_FUNC(eglSwapBuffers);
6190
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   162
    LOAD_FUNC(eglSwapInterval);
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   163
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   164
    _this->gles_data->egl_display =
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   165
        _this->gles_data->eglGetDisplay((NativeDisplayType) data->display);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   166
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   167
    if (!_this->gles_data->egl_display) {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   168
        SDL_SetError("Could not get EGL display");
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   169
        return -1;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   170
    }
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   171
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   172
    if (_this->gles_data->
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   173
        eglInitialize(_this->gles_data->egl_display, NULL,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   174
                      NULL) != EGL_TRUE) {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   175
        SDL_SetError("Could not initialize EGL");
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   176
        return -1;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   177
    }
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   178
6188
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   179
    _this->gles_data->egl_dll_handle = handle;
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   180
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   181
    path = getenv("SDL_VIDEO_GL_DRIVER");
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   182
    handle = dlopen(path, dlopen_flags);
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   183
    if ((path == NULL) | (handle == NULL)) {
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   184
        if (_this->gl_config.major_version > 1) {
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   185
            path = DEFAULT_OGL_ES2;
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   186
            handle = dlopen(path, dlopen_flags);
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   187
        } else {
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   188
            path = DEFAULT_OGL_ES;
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   189
            handle = dlopen(path, dlopen_flags);
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   190
            if (handle == NULL) {
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   191
                path = DEFAULT_OGL_ES_PVR;
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   192
                handle = dlopen(path, dlopen_flags);
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   193
            }
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   194
        }
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   195
    }
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   196
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   197
    if (handle == NULL) {
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   198
        SDL_SetError("Could not initialize OpenGL ES library");
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   199
        return -1;
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   200
    }
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   201
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   202
    _this->gl_config.dll_handle = handle;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   203
    _this->gl_config.driver_loaded = 1;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   204
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   205
    if (path) {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   206
        strncpy(_this->gl_config.driver_path, path,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   207
                sizeof(_this->gl_config.driver_path) - 1);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   208
    } else {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   209
        strcpy(_this->gl_config.driver_path, "");
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   210
    }
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   211
    return 0;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   212
}
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   213
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   214
XVisualInfo *
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   215
X11_GLES_GetVisual(_THIS, Display * display, int screen)
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   216
{
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   217
    /* 64 seems nice. */
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   218
    EGLint attribs[64];
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   219
    EGLint found_configs = 0;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   220
    VisualID visual_id;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   221
    int i;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   222
6370
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   223
    if (!_this->gles_data) {
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   224
        /* The EGL library wasn't loaded, SDL_GetError() should have info */
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   225
        return NULL;
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   226
    }
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   227
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   228
    i = 0;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   229
    attribs[i++] = EGL_RED_SIZE;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   230
    attribs[i++] = _this->gl_config.red_size;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   231
    attribs[i++] = EGL_GREEN_SIZE;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   232
    attribs[i++] = _this->gl_config.green_size;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   233
    attribs[i++] = EGL_BLUE_SIZE;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   234
    attribs[i++] = _this->gl_config.blue_size;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   235
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   236
    if (_this->gl_config.alpha_size) {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   237
        attribs[i++] = EGL_ALPHA_SIZE;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   238
        attribs[i++] = _this->gl_config.alpha_size;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   239
    }
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   240
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   241
    if (_this->gl_config.buffer_size) {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   242
        attribs[i++] = EGL_BUFFER_SIZE;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   243
        attribs[i++] = _this->gl_config.buffer_size;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   244
    }
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   245
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   246
    attribs[i++] = EGL_DEPTH_SIZE;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   247
    attribs[i++] = _this->gl_config.depth_size;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   248
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   249
    if (_this->gl_config.stencil_size) {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   250
        attribs[i++] = EGL_STENCIL_SIZE;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   251
        attribs[i++] = _this->gl_config.stencil_size;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   252
    }
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   253
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   254
    if (_this->gl_config.multisamplebuffers) {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   255
        attribs[i++] = EGL_SAMPLE_BUFFERS;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   256
        attribs[i++] = _this->gl_config.multisamplebuffers;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   257
    }
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   258
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   259
    if (_this->gl_config.multisamplesamples) {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   260
        attribs[i++] = EGL_SAMPLES;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   261
        attribs[i++] = _this->gl_config.multisamplesamples;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   262
    }
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   263
6188
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   264
    attribs[i++] = EGL_RENDERABLE_TYPE;
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   265
    if (_this->gl_config.major_version == 2) {
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   266
        attribs[i++] = EGL_OPENGL_ES2_BIT;
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   267
    } else {
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   268
        attribs[i++] = EGL_OPENGL_ES_BIT;
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   269
    }
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   270
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   271
    attribs[i++] = EGL_NONE;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   272
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   273
    if (_this->gles_data->eglChooseConfig(_this->gles_data->egl_display,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   274
                                          attribs,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   275
                                          &_this->gles_data->egl_config, 1,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   276
                                          &found_configs) == EGL_FALSE ||
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   277
        found_configs == 0) {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   278
        SDL_SetError("Couldn't find matching EGL config");
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   279
        return NULL;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   280
    }
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   281
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   282
    if (_this->gles_data->eglGetConfigAttrib(_this->gles_data->egl_display,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   283
                                             _this->gles_data->egl_config,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   284
                                             EGL_NATIVE_VISUAL_ID,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   285
                                             (EGLint *) & visual_id) ==
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   286
        EGL_FALSE || !visual_id) {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   287
        /* Use the default visual when all else fails */
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   288
        XVisualInfo vi_in;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   289
        int out_count;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   290
        vi_in.screen = screen;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   291
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   292
        _this->gles_data->egl_visualinfo = XGetVisualInfo(display,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   293
                                                          VisualScreenMask,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   294
                                                          &vi_in, &out_count);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   295
    } else {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   296
        XVisualInfo vi_in;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   297
        int out_count;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   298
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   299
        vi_in.screen = screen;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   300
        vi_in.visualid = visual_id;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   301
        _this->gles_data->egl_visualinfo = XGetVisualInfo(display,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   302
                                                          VisualScreenMask |
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   303
                                                          VisualIDMask,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   304
                                                          &vi_in, &out_count);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   305
    }
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   306
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   307
    return _this->gles_data->egl_visualinfo;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   308
}
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   309
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   310
SDL_GLContext
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   311
X11_GLES_CreateContext(_THIS, SDL_Window * window)
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   312
{
6188
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   313
    EGLint context_attrib_list[] = {
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   314
        EGL_CONTEXT_CLIENT_VERSION,
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   315
        1,
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   316
        EGL_NONE
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   317
    };
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   318
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   319
    SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   320
    Display *display = data->videodata->display;
6190
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   321
    SDL_GLContext context = 1;
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   322
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   323
    XSync(display, False);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   324
6188
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   325
    if (_this->gl_config.major_version) {
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   326
        context_attrib_list[1] = _this->gl_config.major_version;
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   327
    }
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   328
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   329
    _this->gles_data->egl_context =
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   330
        _this->gles_data->eglCreateContext(_this->gles_data->egl_display,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   331
                                           _this->gles_data->egl_config,
6188
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   332
                                           EGL_NO_CONTEXT, context_attrib_list);
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   333
    XSync(display, False);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   334
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   335
    if (_this->gles_data->egl_context == EGL_NO_CONTEXT) {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   336
        SDL_SetError("Could not create EGL context");
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   337
        return NULL;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   338
    }
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   339
6190
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   340
    _this->gles_data->egl_swapinterval = 0;
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   341
6188
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   342
    if (X11_GLES_MakeCurrent(_this, window, context) < 0) {
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   343
        X11_GLES_DeleteContext(_this, context);
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   344
        return NULL;
e82023802002 Fixed bug 1242 - PATCH: Improve support for OpenGL ES under X11
Sam Lantinga <slouken@libsdl.org>
parents: 6138
diff changeset
   345
    }
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   346
6190
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   347
    return context;
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   348
}
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   349
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   350
int
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   351
X11_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context)
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   352
{
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   353
    int retval;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   354
3218
81773a1eac83 Patch from David Carre:
Sam Lantinga <slouken@libsdl.org>
parents: 3190
diff changeset
   355
//    SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
81773a1eac83 Patch from David Carre:
Sam Lantinga <slouken@libsdl.org>
parents: 3190
diff changeset
   356
//    Display *display = data->videodata->display;
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   357
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   358
    retval = 1;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   359
    if (!_this->gles_data->eglMakeCurrent(_this->gles_data->egl_display,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   360
                                          _this->gles_data->egl_surface,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   361
                                          _this->gles_data->egl_surface,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   362
                                          _this->gles_data->egl_context)) {
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   363
        SDL_SetError("Unable to make EGL context current");
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   364
        retval = -1;
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   365
    }
3218
81773a1eac83 Patch from David Carre:
Sam Lantinga <slouken@libsdl.org>
parents: 3190
diff changeset
   366
//    XSync(display, False);
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   367
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   368
    return (retval);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   369
}
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   370
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   371
int
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   372
X11_GLES_SetSwapInterval(_THIS, int interval)
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   373
{
6370
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   374
    if (_this->gles_data) {
6190
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   375
        SDL_SetError("OpenGL ES context not active");
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   376
        return -1;
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   377
    }
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   378
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   379
    EGLBoolean status;
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   380
    status = _this->gles_data->eglSwapInterval(_this->gles_data->egl_display, interval);
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   381
    if (status == EGL_TRUE) {
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   382
        _this->gles_data->egl_swapinterval = interval;
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   383
        return 0; 
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   384
    }
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   385
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   386
    SDL_SetError("Unable to set the EGL swap interval");
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   387
    return -1;
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   388
}
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   389
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   390
int
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   391
X11_GLES_GetSwapInterval(_THIS)
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   392
{
6370
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   393
    if (_this->gles_data) {
6190
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   394
        SDL_SetError("OpenGL ES context not active");
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   395
        return -1;
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   396
    }
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   397
519380462400 X11 OpenGL ES minor corrections
Sam Lantinga <slouken@libsdl.org>
parents: 6188
diff changeset
   398
    return _this->gles_data->egl_swapinterval;
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   399
}
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   400
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   401
void
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   402
X11_GLES_SwapWindow(_THIS, SDL_Window * window)
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   403
{
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   404
    _this->gles_data->eglSwapBuffers(_this->gles_data->egl_display,
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   405
                                     _this->gles_data->egl_surface);
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   406
}
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   407
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   408
void
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   409
X11_GLES_DeleteContext(_THIS, SDL_GLContext context)
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   410
{
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   411
    /* Clean up GLES and EGL */
6370
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   412
    if (_this->gles_data) {  
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   413
        if (_this->gles_data->egl_context != EGL_NO_CONTEXT ||
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   414
            _this->gles_data->egl_surface != EGL_NO_SURFACE) {
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   415
            _this->gles_data->eglMakeCurrent(_this->gles_data->egl_display,
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   416
                                             EGL_NO_SURFACE, EGL_NO_SURFACE,
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   417
                                             EGL_NO_CONTEXT);
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   418
6370
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   419
            if (_this->gles_data->egl_context != EGL_NO_CONTEXT) {
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   420
                _this->gles_data->eglDestroyContext(_this->gles_data->egl_display,
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   421
                                                    _this->gles_data->
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   422
                                                    egl_context);
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   423
                _this->gles_data->egl_context = EGL_NO_CONTEXT;
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   424
            }
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   425
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   426
            if (_this->gles_data->egl_surface != EGL_NO_SURFACE) {
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   427
                _this->gles_data->eglDestroySurface(_this->gles_data->egl_display,
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   428
                                                    _this->gles_data->
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   429
                                                    egl_surface);
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   430
                _this->gles_data->egl_surface = EGL_NO_SURFACE;
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   431
            }
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   432
        }
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   433
6370
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   434
        /* crappy fix */
93187f7f7d5d Improved simultaneous support for OpenGL and OpenGL ES
Sam Lantinga <slouken@libsdl.org>
parents: 6368
diff changeset
   435
        X11_GLES_UnloadLibrary(_this);
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   436
    }
3218
81773a1eac83 Patch from David Carre:
Sam Lantinga <slouken@libsdl.org>
parents: 3190
diff changeset
   437
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   438
}
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   439
6044
35448a5ea044 Lots of fixes importing SDL source wholesale into a new iOS project
Sam Lantinga <slouken@libsdl.org>
parents: 5535
diff changeset
   440
#endif /* SDL_VIDEO_DRIVER_X11 && SDL_VIDEO_OPENGL_ES */
3190
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   441
c68d2ca5970f Added missing files for OpenGL ES support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   442
/* vi: set ts=4 sw=4 expandtab: */