cscg22-gearboy

CSCG 2022 Challenge 'Gearboy'
git clone https://git.sinitax.com/sinitax/cscg22-gearboy
Log | Files | Refs | sfeed.txt

SDL_androidvideo.c (6059B)


      1/*
      2  Simple DirectMedia Layer
      3  Copyright (C) 1997-2014 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_internal.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_androidclipboard.h"
     37#include "SDL_androidevents.h"
     38#include "SDL_androidkeyboard.h"
     39#include "SDL_androidtouch.h"
     40#include "SDL_androidwindow.h"
     41
     42#define ANDROID_VID_DRIVER_NAME "Android"
     43
     44/* Initialization/Query functions */
     45static int Android_VideoInit(_THIS);
     46static void Android_VideoQuit(_THIS);
     47
     48#include "../SDL_egl_c.h"
     49/* GL functions (SDL_androidgl.c) */
     50extern SDL_GLContext Android_GLES_CreateContext(_THIS, SDL_Window * window);
     51extern int Android_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context);
     52extern void Android_GLES_SwapWindow(_THIS, SDL_Window * window);
     53extern int Android_GLES_LoadLibrary(_THIS, const char *path);
     54#define Android_GLES_GetProcAddress SDL_EGL_GetProcAddress
     55#define Android_GLES_UnloadLibrary SDL_EGL_UnloadLibrary
     56#define Android_GLES_SetSwapInterval SDL_EGL_SetSwapInterval
     57#define Android_GLES_GetSwapInterval SDL_EGL_GetSwapInterval
     58#define Android_GLES_DeleteContext SDL_EGL_DeleteContext
     59
     60/* Android driver bootstrap functions */
     61
     62
     63/* These are filled in with real values in Android_SetScreenResolution on init (before SDL_main()) */
     64int Android_ScreenWidth = 0;
     65int Android_ScreenHeight = 0;
     66Uint32 Android_ScreenFormat = SDL_PIXELFORMAT_UNKNOWN;
     67SDL_sem *Android_PauseSem = NULL, *Android_ResumeSem = NULL;
     68
     69/* Currently only one window */
     70SDL_Window *Android_Window = NULL;
     71
     72static int
     73Android_Available(void)
     74{
     75    return 1;
     76}
     77
     78static void
     79Android_SuspendScreenSaver(_THIS)
     80{
     81    Android_JNI_SuspendScreenSaver(_this->suspend_screensaver);
     82}
     83
     84static void
     85Android_DeleteDevice(SDL_VideoDevice * device)
     86{
     87    SDL_free(device);
     88}
     89
     90static SDL_VideoDevice *
     91Android_CreateDevice(int devindex)
     92{
     93    SDL_VideoDevice *device;
     94    SDL_VideoData *data;
     95
     96    /* Initialize all variables that we clean on shutdown */
     97    device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice));
     98    if (!device) {
     99        SDL_OutOfMemory();
    100        return NULL;
    101    }
    102
    103    data = (SDL_VideoData*) SDL_calloc(1, sizeof(SDL_VideoData));
    104    if (!data) {
    105        SDL_OutOfMemory();
    106        SDL_free(device);
    107        return NULL;
    108    }
    109
    110    device->driverdata = data;
    111
    112    /* Set the function pointers */
    113    device->VideoInit = Android_VideoInit;
    114    device->VideoQuit = Android_VideoQuit;
    115    device->PumpEvents = Android_PumpEvents;
    116
    117    device->CreateWindow = Android_CreateWindow;
    118    device->SetWindowTitle = Android_SetWindowTitle;
    119    device->DestroyWindow = Android_DestroyWindow;
    120    device->GetWindowWMInfo = Android_GetWindowWMInfo;
    121
    122    device->free = Android_DeleteDevice;
    123
    124    /* GL pointers */
    125    device->GL_LoadLibrary = Android_GLES_LoadLibrary;
    126    device->GL_GetProcAddress = Android_GLES_GetProcAddress;
    127    device->GL_UnloadLibrary = Android_GLES_UnloadLibrary;
    128    device->GL_CreateContext = Android_GLES_CreateContext;
    129    device->GL_MakeCurrent = Android_GLES_MakeCurrent;
    130    device->GL_SetSwapInterval = Android_GLES_SetSwapInterval;
    131    device->GL_GetSwapInterval = Android_GLES_GetSwapInterval;
    132    device->GL_SwapWindow = Android_GLES_SwapWindow;
    133    device->GL_DeleteContext = Android_GLES_DeleteContext;
    134
    135    /* Screensaver */
    136    device->SuspendScreenSaver = Android_SuspendScreenSaver;
    137
    138    /* Text input */
    139    device->StartTextInput = Android_StartTextInput;
    140    device->StopTextInput = Android_StopTextInput;
    141    device->SetTextInputRect = Android_SetTextInputRect;
    142
    143    /* Screen keyboard */
    144    device->HasScreenKeyboardSupport = Android_HasScreenKeyboardSupport;
    145    device->IsScreenKeyboardShown = Android_IsScreenKeyboardShown;
    146
    147    /* Clipboard */
    148    device->SetClipboardText = Android_SetClipboardText;
    149    device->GetClipboardText = Android_GetClipboardText;
    150    device->HasClipboardText = Android_HasClipboardText;
    151
    152    return device;
    153}
    154
    155VideoBootStrap Android_bootstrap = {
    156    ANDROID_VID_DRIVER_NAME, "SDL Android video driver",
    157    Android_Available, Android_CreateDevice
    158};
    159
    160
    161int
    162Android_VideoInit(_THIS)
    163{
    164    SDL_DisplayMode mode;
    165
    166    mode.format = Android_ScreenFormat;
    167    mode.w = Android_ScreenWidth;
    168    mode.h = Android_ScreenHeight;
    169    mode.refresh_rate = 0;
    170    mode.driverdata = NULL;
    171    if (SDL_AddBasicVideoDisplay(&mode) < 0) {
    172        return -1;
    173    }
    174
    175    SDL_AddDisplayMode(&_this->displays[0], &mode);
    176
    177    Android_InitKeyboard();
    178
    179    Android_InitTouch();
    180
    181    /* We're done! */
    182    return 0;
    183}
    184
    185void
    186Android_VideoQuit(_THIS)
    187{
    188}
    189
    190/* This function gets called before VideoInit() */
    191void
    192Android_SetScreenResolution(int width, int height, Uint32 format)
    193{
    194    Android_ScreenWidth = width;
    195    Android_ScreenHeight = height;
    196    Android_ScreenFormat = format;
    197
    198    if (Android_Window) {
    199        SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_RESIZED, width, height);
    200    }
    201}
    202
    203#endif /* SDL_VIDEO_DRIVER_ANDROID */
    204
    205/* vi: set ts=4 sw=4 expandtab: */