src/video/x11/SDL_x11opengles.h
author Sam Lantinga <slouken@libsdl.org>
Sun, 08 Jan 2012 13:31:22 -0500
changeset 6190 519380462400
parent 6188 e82023802002
child 6370 93187f7f7d5d
permissions -rwxr-xr-x
X11 OpenGL ES minor corrections

Scott Percival 2012-01-08 04:21:22 PST

I tested the new build on my two ARM machines, and fixed a few bugs:
- if SDL_VIDEO_DRIVER_UIKIT, SDL_VIDEO_DRIVER_ANDROID or
SDL_VIDEO_DRIVER_PANDORA are specified, function pointers are grabbed from the
compile-linked library instead of through SDL_GL_GetProcAddress. (not sure if
this is the best way to go about it)
- removing "/usr/lib/" from all the library names (hey, with multiarch you
can't be too sure anymore)
- added glFinish to glesfuncs.h
- changed the eglGetProcAddress arg type to "const char *" as per the EGL spec
- filled in the stubs for X11_GLES_SetSwapInterval and X11_GLES_GetSwapInterval
slouken@3190
     1
/*
slouken@5535
     2
  Simple DirectMedia Layer
slouken@6138
     3
  Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org>
slouken@3190
     4
slouken@5535
     5
  This software is provided 'as-is', without any express or implied
slouken@5535
     6
  warranty.  In no event will the authors be held liable for any damages
slouken@5535
     7
  arising from the use of this software.
slouken@3190
     8
slouken@5535
     9
  Permission is granted to anyone to use this software for any purpose,
slouken@5535
    10
  including commercial applications, and to alter it and redistribute it
slouken@5535
    11
  freely, subject to the following restrictions:
slouken@3190
    12
slouken@5535
    13
  1. The origin of this software must not be misrepresented; you must not
slouken@5535
    14
     claim that you wrote the original software. If you use this software
slouken@5535
    15
     in a product, an acknowledgment in the product documentation would be
slouken@5535
    16
     appreciated but is not required.
slouken@5535
    17
  2. Altered source versions must be plainly marked as such, and must not be
slouken@5535
    18
     misrepresented as being the original software.
slouken@5535
    19
  3. This notice may not be removed or altered from any source distribution.
slouken@3190
    20
*/
slouken@3190
    21
slouken@3190
    22
#include <GLES/gl.h>
slouken@3190
    23
#include <GLES/egl.h>
slouken@3190
    24
#include <dlfcn.h>
slouken@3190
    25
#if defined(__OpenBSD__) && !defined(__ELF__)
slouken@3190
    26
#define dlsym(x,y) dlsym(x, "_" y)
slouken@3190
    27
#endif
slouken@3190
    28
slouken@3190
    29
#include "../SDL_sysvideo.h"
slouken@3190
    30
slouken@3190
    31
typedef struct SDL_PrivateGLESData
slouken@3190
    32
{
slouken@3190
    33
    int egl_active;             /* to stop switching drivers while we have a valid context */
slouken@3190
    34
    XVisualInfo *egl_visualinfo;
slouken@6188
    35
    void *egl_dll_handle;
slouken@3190
    36
    EGLDisplay egl_display;
slouken@3190
    37
    EGLContext egl_context;     /* Current GLES context */
slouken@3190
    38
    EGLSurface egl_surface;
slouken@3190
    39
    EGLConfig egl_config;
slouken@6190
    40
    int egl_swapinterval;
slouken@3190
    41
slouken@3190
    42
      EGLDisplay(*eglGetDisplay) (NativeDisplayType display);
slouken@3190
    43
      EGLBoolean(*eglInitialize) (EGLDisplay dpy, EGLint * major,
slouken@3190
    44
                                  EGLint * minor);
slouken@3190
    45
      EGLBoolean(*eglTerminate) (EGLDisplay dpy);
slouken@3190
    46
slouken@6190
    47
    void *(*eglGetProcAddress) (const char * procName);
slouken@3190
    48
slouken@3190
    49
      EGLBoolean(*eglChooseConfig) (EGLDisplay dpy,
slouken@3190
    50
                                    const EGLint * attrib_list,
slouken@3190
    51
                                    EGLConfig * configs,
slouken@3190
    52
                                    EGLint config_size, EGLint * num_config);
slouken@3190
    53
slouken@3190
    54
      EGLContext(*eglCreateContext) (EGLDisplay dpy,
slouken@3190
    55
                                     EGLConfig config,
slouken@3190
    56
                                     EGLContext share_list,
slouken@3190
    57
                                     const EGLint * attrib_list);
slouken@3190
    58
slouken@3190
    59
      EGLBoolean(*eglDestroyContext) (EGLDisplay dpy, EGLContext ctx);
slouken@3190
    60
slouken@3190
    61
      EGLSurface(*eglCreateWindowSurface) (EGLDisplay dpy,
slouken@3190
    62
                                           EGLConfig config,
slouken@3190
    63
                                           NativeWindowType window,
slouken@3190
    64
                                           const EGLint * attrib_list);
slouken@3190
    65
      EGLBoolean(*eglDestroySurface) (EGLDisplay dpy, EGLSurface surface);
slouken@3190
    66
slouken@3190
    67
      EGLBoolean(*eglMakeCurrent) (EGLDisplay dpy, EGLSurface draw,
slouken@3190
    68
                                   EGLSurface read, EGLContext ctx);
slouken@3190
    69
slouken@3190
    70
      EGLBoolean(*eglSwapBuffers) (EGLDisplay dpy, EGLSurface draw);
slouken@3190
    71
slouken@6190
    72
      EGLBoolean(*eglSwapInterval) (EGLDisplay dpy, EGLint interval);
slouken@6190
    73
slouken@3190
    74
    const char *(*eglQueryString) (EGLDisplay dpy, EGLint name);
slouken@3190
    75
slouken@3190
    76
      EGLBoolean(*eglGetConfigAttrib) (EGLDisplay dpy, EGLConfig config,
slouken@3190
    77
                                       EGLint attribute, EGLint * value);
slouken@3190
    78
slouken@3190
    79
} SDL_PrivateGLESData;
slouken@3190
    80
slouken@3190
    81
/* OpenGLES functions */
slouken@3190
    82
extern SDL_GLContext X11_GLES_CreateContext(_THIS, SDL_Window * window);
slouken@3190
    83
extern XVisualInfo *X11_GLES_GetVisual(_THIS, Display * display, int screen);
slouken@3190
    84
extern int X11_GLES_MakeCurrent(_THIS, SDL_Window * window,
slouken@3190
    85
                                SDL_GLContext context);
slouken@3190
    86
extern int X11_GLES_GetAttribute(_THIS, SDL_GLattr attrib, int *value);
slouken@3190
    87
extern int X11_GLES_LoadLibrary(_THIS, const char *path);
slouken@3190
    88
extern void *X11_GLES_GetProcAddress(_THIS, const char *proc);
slouken@3190
    89
extern void X11_GLES_UnloadLibrary(_THIS);
slouken@3190
    90
slouken@3190
    91
extern int X11_GLES_SetSwapInterval(_THIS, int interval);
slouken@3190
    92
extern int X11_GLES_GetSwapInterval(_THIS);
slouken@3190
    93
extern void X11_GLES_SwapWindow(_THIS, SDL_Window * window);
slouken@3190
    94
extern void X11_GLES_DeleteContext(_THIS, SDL_GLContext context);