src/video/android/SDL_androidvideo.c
author Sam Lantinga <slouken@libsdl.org>
Mon, 31 Oct 2011 05:56:58 -0400
changeset 6044 35448a5ea044
parent 5535 96594ac5fd1a
child 6138 4c64952a58fb
permissions -rw-r--r--
Lots of fixes importing SDL source wholesale into a new iOS project
     1 /*
     2   Simple DirectMedia Layer
     3   Copyright (C) 1997-2011 Sam Lantinga <slouken@libsdl.org>
     4 
     5   This software is provided 'as-is', without any express or implied
     6   warranty.  In no event will the authors be held liable for any damages
     7   arising from the use of this software.
     8 
     9   Permission is granted to anyone to use this software for any purpose,
    10   including commercial applications, and to alter it and redistribute it
    11   freely, subject to the following restrictions:
    12 
    13   1. The origin of this software must not be misrepresented; you must not
    14      claim that you wrote the original software. If you use this software
    15      in a product, an acknowledgment in the product documentation would be
    16      appreciated but is not required.
    17   2. Altered source versions must be plainly marked as such, and must not be
    18      misrepresented as being the original software.
    19   3. This notice may not be removed or altered from any source distribution.
    20 */
    21 #include "SDL_config.h"
    22 
    23 #if SDL_VIDEO_DRIVER_ANDROID
    24 
    25 /* Android SDL video driver implementation
    26 */
    27 
    28 #include "SDL_video.h"
    29 #include "SDL_mouse.h"
    30 #include "../SDL_sysvideo.h"
    31 #include "../SDL_pixels_c.h"
    32 #include "../../events/SDL_events_c.h"
    33 #include "../../events/SDL_windowevents_c.h"
    34 
    35 #include "SDL_androidvideo.h"
    36 #include "SDL_androidevents.h"
    37 #include "SDL_androidkeyboard.h"
    38 #include "SDL_androidwindow.h"
    39 
    40 #define ANDROID_VID_DRIVER_NAME "Android"
    41 
    42 /* Initialization/Query functions */
    43 static int Android_VideoInit(_THIS);
    44 static void Android_VideoQuit(_THIS);
    45 
    46 /* GL functions (SDL_androidgl.c) */
    47 extern int Android_GL_LoadLibrary(_THIS, const char *path);
    48 extern void *Android_GL_GetProcAddress(_THIS, const char *proc);
    49 extern void Android_GL_UnloadLibrary(_THIS);
    50 //extern int *Android_GL_GetVisual(_THIS, Display * display, int screen);
    51 extern SDL_GLContext Android_GL_CreateContext(_THIS, SDL_Window * window);
    52 extern int Android_GL_MakeCurrent(_THIS, SDL_Window * window,
    53                               SDL_GLContext context);
    54 extern int Android_GL_SetSwapInterval(_THIS, int interval);
    55 extern int Android_GL_GetSwapInterval(_THIS);
    56 extern void Android_GL_SwapWindow(_THIS, SDL_Window * window);
    57 extern void Android_GL_DeleteContext(_THIS, SDL_GLContext context);
    58 
    59 /* Android driver bootstrap functions */
    60 
    61 
    62 // These are filled in with real values in Android_SetScreenResolution on 
    63 // init (before SDL_main())
    64 int Android_ScreenWidth = 0;
    65 int Android_ScreenHeight = 0;
    66 Uint32 Android_ScreenFormat = SDL_PIXELFORMAT_UNKNOWN;
    67 
    68 /* Currently only one window */
    69 SDL_Window *Android_Window = NULL;
    70 
    71 static int
    72 Android_Available(void)
    73 {
    74     return 1;
    75 }
    76 
    77 static void
    78 Android_DeleteDevice(SDL_VideoDevice * device)
    79 {
    80     SDL_free(device);
    81 }
    82 
    83 static SDL_VideoDevice *
    84 Android_CreateDevice(int devindex)
    85 {
    86     printf("Creating video device\n");
    87     SDL_VideoDevice *device;
    88 
    89     /* Initialize all variables that we clean on shutdown */
    90     device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice));
    91     if (!device) {
    92         SDL_OutOfMemory();
    93         if (device) {
    94             SDL_free(device);
    95         }
    96         return (0);
    97     }
    98 
    99     /* Set the function pointers */
   100     device->VideoInit = Android_VideoInit;
   101     device->VideoQuit = Android_VideoQuit;
   102     device->PumpEvents = Android_PumpEvents;
   103 
   104     device->CreateWindow = Android_CreateWindow;
   105     device->SetWindowTitle = Android_SetWindowTitle;
   106     device->DestroyWindow = Android_DestroyWindow;
   107 
   108     device->free = Android_DeleteDevice;
   109 
   110     /* GL pointers */
   111     device->GL_LoadLibrary = Android_GL_LoadLibrary;
   112     device->GL_GetProcAddress = Android_GL_GetProcAddress;
   113     device->GL_UnloadLibrary = Android_GL_UnloadLibrary;
   114     device->GL_CreateContext = Android_GL_CreateContext;
   115     device->GL_MakeCurrent = Android_GL_MakeCurrent;
   116     device->GL_SetSwapInterval = Android_GL_SetSwapInterval;
   117     device->GL_GetSwapInterval = Android_GL_GetSwapInterval;
   118     device->GL_SwapWindow = Android_GL_SwapWindow;
   119     device->GL_DeleteContext = Android_GL_DeleteContext;
   120 
   121     return device;
   122 }
   123 
   124 VideoBootStrap Android_bootstrap = {
   125     ANDROID_VID_DRIVER_NAME, "SDL Android video driver",
   126     Android_Available, Android_CreateDevice
   127 };
   128 
   129 
   130 int
   131 Android_VideoInit(_THIS)
   132 {
   133     SDL_DisplayMode mode;
   134 
   135     mode.format = Android_ScreenFormat;
   136     mode.w = Android_ScreenWidth;
   137     mode.h = Android_ScreenHeight;
   138     mode.refresh_rate = 0;
   139     mode.driverdata = NULL;
   140     if (SDL_AddBasicVideoDisplay(&mode) < 0) {
   141         return -1;
   142     }
   143 
   144     SDL_zero(mode);
   145     SDL_AddDisplayMode(&_this->displays[0], &mode);
   146 
   147     Android_InitKeyboard();
   148 
   149     /* We're done! */
   150     return 0;
   151 }
   152 
   153 void
   154 Android_VideoQuit(_THIS)
   155 {
   156 }
   157 
   158 /* This function gets called before VideoInit() */
   159 void
   160 Android_SetScreenResolution(int width, int height, Uint32 format)
   161 {
   162     Android_ScreenWidth = width;
   163     Android_ScreenHeight = height;   
   164     Android_ScreenFormat = format;
   165 
   166     if (Android_Window) {
   167         SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_RESIZED, width, height);
   168     }
   169 }
   170 
   171 #endif /* SDL_VIDEO_DRIVER_ANDROID */
   172 
   173 /* vi: set ts=4 sw=4 expandtab: */