summaryrefslogtreecommitdiffhomepage
path: root/templates/android_project/src/game_standalone.c
diff options
context:
space:
mode:
Diffstat (limited to 'templates/android_project/src/game_standalone.c')
-rw-r--r--templates/android_project/src/game_standalone.c684
1 files changed, 0 insertions, 684 deletions
diff --git a/templates/android_project/src/game_standalone.c b/templates/android_project/src/game_standalone.c
deleted file mode 100644
index eb83a6bf..00000000
--- a/templates/android_project/src/game_standalone.c
+++ /dev/null
@@ -1,684 +0,0 @@
-
-//#include <android/sensor.h> // Android sensors functions (accelerometer, gyroscope, light...)
-#include <errno.h>
-#include <android/log.h>
-#include <android/window.h> // Defines AWINDOW_FLAG_FULLSCREEN and others
-#include <android/asset_manager.h>
-#include <android_native_app_glue.h> // Defines basic app state struct and manages activity
-
-#include <EGL/egl.h> // Khronos EGL library - Native platform display device control functions
-#include <GLES2/gl2.h> // Khronos OpenGL ES 2.0 library
-
-#include <stdio.h> // Standard input / output lib
-#include <stdlib.h> // Required for: malloc(), free(), rand(), atexit()
-#include <stdint.h> // Required for: typedef unsigned long long int uint64_t, used by hi-res timer
-#include <stdarg.h> // Required for: va_list, va_start(), vfprintf(), va_end()
-#include <time.h> // Required for: time() - Android/RPI hi-res timer (NOTE: Linux only!)
-#include <math.h> // Required for: tan() [Used in Begin3dMode() to set perspective]
-#include <string.h> // Required for: strlen(), strrchr(), strcmp()
-
-//#define RLGL_STANDALONE
-//#include "rlgl.h" // rlgl library: OpenGL 1.1 immediate-mode style coding
-
-#ifndef __cplusplus
-// Boolean type
- #if !defined(_STDBOOL_H) || !defined(__STDBOOL_H) // CLang uses second form
- typedef enum { false, true } bool;
- #endif
-#endif
-
-// Trace log type
-typedef enum {
- LOG_INFO = 0,
- LOG_WARNING,
- LOG_ERROR,
- LOG_DEBUG,
- LOG_OTHER
-} LogType;
-
-static int screenWidth;
-static int screenHeight;
-
-static struct android_app *app; // Android activity
-static struct android_poll_source *source; // Android events polling source
-static int ident, events; // Android ALooper_pollAll() variables
-static const char *internalDataPath; // Android internal data path to write data (/data/data/<package>/files)
-
-static bool windowReady = false; // Used to detect display initialization
-static bool appEnabled = true; // Used to detec if app is active
-static bool contextRebindRequired = false; // Used to know context rebind required
-
-static EGLDisplay display; // Native display device (physical screen connection)
-static EGLSurface surface; // Surface to draw on, framebuffers (connected to context)
-static EGLContext context; // Graphic context, mode in which drawing can be done
-static EGLConfig config; // Graphic config
-static uint64_t baseTime; // Base time measure for hi-res timer
-static bool windowShouldClose = false; // Flag to set window for closing
-
-static AAssetManager *assetManager;
-
-static void AndroidCommandCallback(struct android_app *app, int32_t cmd); // Process Android activity lifecycle commands
-static int32_t AndroidInputCallback(struct android_app *app, AInputEvent *event); // Process Android inputs
-
-static void TraceLog(int msgType, const char *text, ...);
-
-static int android_read(void *cookie, char *buf, int size);
-static int android_write(void *cookie, const char *buf, int size);
-static fpos_t android_seek(void *cookie, fpos_t offset, int whence);
-static int android_close(void *cookie);
-
-static void InitWindow(int width, int height, void *state); // Initialize Android activity
-static void InitGraphicsDevice(int width, int height); // Initialize graphic device
-static void CloseWindow(void); // Close window and unload OpenGL context
-static bool WindowShouldClose(void); // Check if KEY_ESCAPE pressed or Close icon pressed
-
-static void BeginDrawing(void); // Setup canvas (framebuffer) to start drawing
-static void EndDrawing(void); // End canvas drawing and swap buffers (double buffering)
-static void SwapBuffers(void); // Copy back buffer to front buffers
-static void PollInputEvents(void); // Poll all input events
-
-//----------------------------------------------------------------------------------
-// Android Main entry point
-//----------------------------------------------------------------------------------
-void android_main(struct android_app *app)
-{
- InitWindow(1280, 720, app);
-
- while (!WindowShouldClose())
- {
- BeginDrawing();
-
-
- EndDrawing();
- }
-
- CloseWindow();
-}
-
-// Initialize Android activity
-static void InitWindow(int width, int height, void *state)
-{
- TraceLog(LOG_INFO, "Initializing raylib stripped");
-
- screenWidth = width;
- screenHeight = height;
-
- app = (struct android_app *)state;
- internalDataPath = app->activity->internalDataPath;
-
- // Set desired windows flags before initializing anything
- ANativeActivity_setWindowFlags(app->activity, AWINDOW_FLAG_FULLSCREEN, 0); //AWINDOW_FLAG_SCALED, AWINDOW_FLAG_DITHER
- //ANativeActivity_setWindowFlags(app->activity, AWINDOW_FLAG_FORCE_NOT_FULLSCREEN, AWINDOW_FLAG_FULLSCREEN);
-
- int orientation = AConfiguration_getOrientation(app->config);
-
- if (orientation == ACONFIGURATION_ORIENTATION_PORT) TraceLog(LOG_INFO, "PORTRAIT window orientation");
- else if (orientation == ACONFIGURATION_ORIENTATION_LAND) TraceLog(LOG_INFO, "LANDSCAPE window orientation");
-
- // TODO: Automatic orientation doesn't seem to work
- if (width <= height)
- {
- AConfiguration_setOrientation(app->config, ACONFIGURATION_ORIENTATION_PORT);
- TraceLog(LOG_WARNING, "Window set to portraid mode");
- }
- else
- {
- AConfiguration_setOrientation(app->config, ACONFIGURATION_ORIENTATION_LAND);
- TraceLog(LOG_WARNING, "Window set to landscape mode");
- }
-
- //AConfiguration_getDensity(app->config);
- //AConfiguration_getKeyboard(app->config);
- //AConfiguration_getScreenSize(app->config);
- //AConfiguration_getScreenLong(app->config);
-
- //state->userData = &engine;
- app->onAppCmd = AndroidCommandCallback;
- app->onInputEvent = AndroidInputCallback;
-
- assetManager = app->activity->assetManager;
-
- TraceLog(LOG_INFO, "Android app initialized successfully");
-
- // Wait for window to be initialized (display and context)
- while (!windowReady)
- {
- // Process events loop
- while ((ident = ALooper_pollAll(0, NULL, &events,(void**)&source)) >= 0)
- {
- // Process this event
- if (source != NULL) source->process(app, source);
-
- // NOTE: Never close window, native activity is controlled by the system!
- //if (app->destroyRequested != 0) windowShouldClose = true;
- }
- }
-}
-
-// Close window and unload OpenGL context
-static void CloseWindow(void)
-{
- //rlglClose(); // De-init rlgl
-
- // Close surface, context and display
- if (display != EGL_NO_DISPLAY)
- {
- eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
-
- if (surface != EGL_NO_SURFACE)
- {
- eglDestroySurface(display, surface);
- surface = EGL_NO_SURFACE;
- }
-
- if (context != EGL_NO_CONTEXT)
- {
- eglDestroyContext(display, context);
- context = EGL_NO_CONTEXT;
- }
-
- eglTerminate(display);
- display = EGL_NO_DISPLAY;
- }
-
- TraceLog(LOG_INFO, "Window closed successfully");
-}
-
-// Check if KEY_ESCAPE pressed or Close icon pressed
-static bool WindowShouldClose(void)
-{
- return windowShouldClose;
-}
-
-static void InitGraphicsDevice(int width, int height)
-{
- screenWidth = width; // User desired width
- screenHeight = height; // User desired height
-
- EGLint samples = 0;
- EGLint sampleBuffer = 0;
-
- const EGLint framebufferAttribs[] =
- {
- EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, // Type of context support -> Required on RPI?
- //EGL_SURFACE_TYPE, EGL_WINDOW_BIT, // Don't use it on Android!
- EGL_RED_SIZE, 8, // RED color bit depth (alternative: 5)
- EGL_GREEN_SIZE, 8, // GREEN color bit depth (alternative: 6)
- EGL_BLUE_SIZE, 8, // BLUE color bit depth (alternative: 5)
- //EGL_ALPHA_SIZE, 8, // ALPHA bit depth (required for transparent framebuffer)
- //EGL_TRANSPARENT_TYPE, EGL_NONE, // Request transparent framebuffer (EGL_TRANSPARENT_RGB does not work on RPI)
- EGL_DEPTH_SIZE, 16, // Depth buffer size (Required to use Depth testing!)
- //EGL_STENCIL_SIZE, 8, // Stencil buffer size
- EGL_SAMPLE_BUFFERS, sampleBuffer, // Activate MSAA
- EGL_SAMPLES, samples, // 4x Antialiasing if activated (Free on MALI GPUs)
- EGL_NONE
- };
-
- EGLint contextAttribs[] =
- {
- EGL_CONTEXT_CLIENT_VERSION, 2,
- EGL_NONE
- };
-
- EGLint numConfigs;
-
- // Get an EGL display connection
- display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
-
- // Initialize the EGL display connection
- eglInitialize(display, NULL, NULL);
-
- // Get an appropriate EGL framebuffer configuration
- eglChooseConfig(display, framebufferAttribs, &config, 1, &numConfigs);
-
- // Set rendering API
- eglBindAPI(EGL_OPENGL_ES_API);
-
- // Create an EGL rendering context
- context = eglCreateContext(display, config, EGL_NO_CONTEXT, contextAttribs);
-
- // Create an EGL window surface
- //---------------------------------------------------------------------------------
-#if defined(PLATFORM_ANDROID)
- EGLint displayFormat;
-
- int displayWidth = ANativeWindow_getWidth(app->window);
- int displayHeight = ANativeWindow_getHeight(app->window);
-
- // EGL_NATIVE_VISUAL_ID is an attribute of the EGLConfig that is guaranteed to be accepted by ANativeWindow_setBuffersGeometry()
- // As soon as we picked a EGLConfig, we can safely reconfigure the ANativeWindow buffers to match, using EGL_NATIVE_VISUAL_ID
- eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &displayFormat);
-
- // At this point we need to manage render size vs screen size
- // NOTE: This function use and modify global module variables: screenWidth/screenHeight and renderWidth/renderHeight and downscaleView
-
- //SetupFramebufferSize(displayWidth, displayHeight);
-
- //ANativeWindow_setBuffersGeometry(app->window, renderWidth, renderHeight, displayFormat);
- ANativeWindow_setBuffersGeometry(app->window, 0, 0, displayFormat); // Force use of native display size
-
- surface = eglCreateWindowSurface(display, config, app->window, NULL);
-#endif // defined(PLATFORM_ANDROID)
-
- //eglSwapInterval(display, 1);
-
- if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE)
- {
- TraceLog(LOG_ERROR, "Unable to attach EGL rendering context to EGL surface");
- }
- else
- {
- // Grab the width and height of the surface
- //eglQuerySurface(display, surface, EGL_WIDTH, &renderWidth);
- //eglQuerySurface(display, surface, EGL_HEIGHT, &renderHeight);
-
- TraceLog(LOG_INFO, "Display device initialized successfully");
- TraceLog(LOG_INFO, "Display size: %i x %i", displayWidth, displayHeight);
- }
-/*
- // Initialize OpenGL context (states and resources)
- // NOTE: screenWidth and screenHeight not used, just stored as globals
- rlglInit(screenWidth, screenHeight);
-
- // Setup default viewport
- rlViewport(0, 0, screenWidth, screenHeight);
-
- // Initialize internal projection and modelview matrices
- // NOTE: Default to orthographic projection mode with top-left corner at (0,0)
- rlMatrixMode(RL_PROJECTION); // Switch to PROJECTION matrix
- rlLoadIdentity(); // Reset current matrix (PROJECTION)
- rlOrtho(0, screenWidth, screenHeight, 0, 0.0f, 1.0f);
- rlMatrixMode(RL_MODELVIEW); // Switch back to MODELVIEW matrix
- rlLoadIdentity(); // Reset current matrix (MODELVIEW)
-
- // Clear full framebuffer (not only render area) to color
- rlClearColor(245, 245, 245, 255);
-*/
- glClearColor(1, 0, 0, 1);
-
-#if defined(PLATFORM_ANDROID)
- windowReady = true; // IMPORTANT!
-#endif
-}
-
-// Copy back buffer to front buffers
-static void SwapBuffers(void)
-{
-#if defined(PLATFORM_ANDROID) || defined(PLATFORM_RPI)
- eglSwapBuffers(display, surface);
-#endif
-}
-
-#if defined(PLATFORM_ANDROID)
-// Android: Process activity lifecycle commands
-static void AndroidCommandCallback(struct android_app *app, int32_t cmd)
-{
- switch (cmd)
- {
- case APP_CMD_START:
- {
- //rendering = true;
- TraceLog(LOG_INFO, "APP_CMD_START");
- } break;
- case APP_CMD_RESUME:
- {
- TraceLog(LOG_INFO, "APP_CMD_RESUME");
- } break;
- case APP_CMD_INIT_WINDOW:
- {
- TraceLog(LOG_INFO, "APP_CMD_INIT_WINDOW");
-
- if (app->window != NULL)
- {
- if (contextRebindRequired)
- {
- // Reset screen scaling to full display size
- EGLint displayFormat;
- eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &displayFormat);
- ANativeWindow_setBuffersGeometry(app->window, screenWidth, screenHeight, displayFormat);
-
- // Recreate display surface and re-attach OpenGL context
- surface = eglCreateWindowSurface(display, config, app->window, NULL);
- eglMakeCurrent(display, surface, surface, context);
-
- contextRebindRequired = false;
- }
- else
- {
- // Init graphics device (display device and OpenGL context)
- InitGraphicsDevice(screenWidth, screenHeight);
-
- // TODO: GPU assets reload in case of lost focus (lost context)
- // NOTE: This problem has been solved just unbinding and rebinding context from display
- /*
- if (assetsReloadRequired)
- {
- for (int i = 0; i < assetsCount; i++)
- {
- // TODO: Unload old asset if required
-
- // Load texture again to pointed texture
- (*textureAsset + i) = LoadTexture(assetPath[i]);
- }
- }
- */
-
- // Init hi-res timer
- //InitTimer(); // TODO.
- }
- }
- } break;
- case APP_CMD_GAINED_FOCUS:
- {
- TraceLog(LOG_INFO, "APP_CMD_GAINED_FOCUS");
- appEnabled = true;
- //ResumeMusicStream();
- } break;
- case APP_CMD_PAUSE:
- {
- TraceLog(LOG_INFO, "APP_CMD_PAUSE");
- } break;
- case APP_CMD_LOST_FOCUS:
- {
- //DrawFrame();
- TraceLog(LOG_INFO, "APP_CMD_LOST_FOCUS");
- appEnabled = false;
- //PauseMusicStream();
- } break;
- case APP_CMD_TERM_WINDOW:
- {
- // Dettach OpenGL context and destroy display surface
- // NOTE 1: Detaching context before destroying display surface avoids losing our resources (textures, shaders, VBOs...)
- // NOTE 2: In some cases (too many context loaded), OS could unload context automatically... :(
- eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
- eglDestroySurface(display, surface);
-
- contextRebindRequired = true;
-
- TraceLog(LOG_INFO, "APP_CMD_TERM_WINDOW");
- } break;
- case APP_CMD_SAVE_STATE:
- {
- TraceLog(LOG_INFO, "APP_CMD_SAVE_STATE");
- } break;
- case APP_CMD_STOP:
- {
- TraceLog(LOG_INFO, "APP_CMD_STOP");
- } break;
- case APP_CMD_DESTROY:
- {
- // TODO: Finish activity?
- //ANativeActivity_finish(app->activity);
-
- TraceLog(LOG_INFO, "APP_CMD_DESTROY");
- } break;
- case APP_CMD_CONFIG_CHANGED:
- {
- //AConfiguration_fromAssetManager(app->config, app->activity->assetManager);
- //print_cur_config(app);
-
- // Check screen orientation here!
-
- TraceLog(LOG_INFO, "APP_CMD_CONFIG_CHANGED");
- } break;
- default: break;
- }
-}
-
-// Android: Get input events
-static int32_t AndroidInputCallback(struct android_app *app, AInputEvent *event)
-{
- //http://developer.android.com/ndk/reference/index.html
-
- int type = AInputEvent_getType(event);
-
- if (type == AINPUT_EVENT_TYPE_MOTION)
- {
- /*
- // Get first touch position
- touchPosition[0].x = AMotionEvent_getX(event, 0);
- touchPosition[0].y = AMotionEvent_getY(event, 0);
-
- // Get second touch position
- touchPosition[1].x = AMotionEvent_getX(event, 1);
- touchPosition[1].y = AMotionEvent_getY(event, 1);
- */
- }
- else if (type == AINPUT_EVENT_TYPE_KEY)
- {
- int32_t keycode = AKeyEvent_getKeyCode(event);
- //int32_t AKeyEvent_getMetaState(event);
-
- // Save current button and its state
- // NOTE: Android key action is 0 for down and 1 for up
- if (AKeyEvent_getAction(event) == 0)
- {
- //currentKeyState[keycode] = 1; // Key down
- //lastKeyPressed = keycode;
- }
- //else currentKeyState[keycode] = 0; // Key up
-
- if (keycode == AKEYCODE_POWER)
- {
- // Let the OS handle input to avoid app stuck. Behaviour: CMD_PAUSE -> CMD_SAVE_STATE -> CMD_STOP -> CMD_CONFIG_CHANGED -> CMD_LOST_FOCUS
- // Resuming Behaviour: CMD_START -> CMD_RESUME -> CMD_CONFIG_CHANGED -> CMD_CONFIG_CHANGED -> CMD_GAINED_FOCUS
- // It seems like locking mobile, screen size (CMD_CONFIG_CHANGED) is affected.
- // NOTE: AndroidManifest.xml must have <activity android:configChanges="orientation|keyboardHidden|screenSize" >
- // Before that change, activity was calling CMD_TERM_WINDOW and CMD_DESTROY when locking mobile, so that was not a normal behaviour
- return 0;
- }
- else if ((keycode == AKEYCODE_BACK) || (keycode == AKEYCODE_MENU))
- {
- // Eat BACK_BUTTON and AKEYCODE_MENU, just do nothing... and don't let to be handled by OS!
- return 1;
- }
- else if ((keycode == AKEYCODE_VOLUME_UP) || (keycode == AKEYCODE_VOLUME_DOWN))
- {
- // Set default OS behaviour
- return 0;
- }
- }
-
- int32_t action = AMotionEvent_getAction(event);
- unsigned int flags = action & AMOTION_EVENT_ACTION_MASK;
-/*
- GestureEvent gestureEvent;
-
- // Register touch actions
- if (flags == AMOTION_EVENT_ACTION_DOWN) gestureEvent.touchAction = TOUCH_DOWN;
- else if (flags == AMOTION_EVENT_ACTION_UP) gestureEvent.touchAction = TOUCH_UP;
- else if (flags == AMOTION_EVENT_ACTION_MOVE) gestureEvent.touchAction = TOUCH_MOVE;
-
- // Register touch points count
- gestureEvent.pointCount = AMotionEvent_getPointerCount(event);
-
- // Register touch points id
- gestureEvent.pointerId[0] = AMotionEvent_getPointerId(event, 0);
- gestureEvent.pointerId[1] = AMotionEvent_getPointerId(event, 1);
-
- // Register touch points position
- // NOTE: Only two points registered
- gestureEvent.position[0] = (Vector2){ AMotionEvent_getX(event, 0), AMotionEvent_getY(event, 0) };
- gestureEvent.position[1] = (Vector2){ AMotionEvent_getX(event, 1), AMotionEvent_getY(event, 1) };
-
- // Normalize gestureEvent.position[x] for screenWidth and screenHeight
- gestureEvent.position[0].x /= (float)GetScreenWidth();
- gestureEvent.position[0].y /= (float)GetScreenHeight();
-
- gestureEvent.position[1].x /= (float)GetScreenWidth();
- gestureEvent.position[1].y /= (float)GetScreenHeight();
-
- // Gesture data is sent to gestures system for processing
- ProcessGestureEvent(gestureEvent);
-*/
- return 0; // return 1;
-}
-#endif
-
-#if defined(PLATFORM_ANDROID)
-/*
-// Initialize asset manager from android app
-void InitAssetManager(AAssetManager *manager)
-{
- assetManager = manager;
-}
-
-// Replacement for fopen
-FILE *android_fopen(const char *fileName, const char *mode)
-{
- if (mode[0] == 'w') return NULL;
-
- AAsset *asset = AAssetManager_open(assetManager, fileName, 0);
-
- if (!asset) return NULL;
-
- return funopen(asset, android_read, android_write, android_seek, android_close);
-}
-*/
-#endif
-
-//----------------------------------------------------------------------------------
-// Module specific Functions Definition
-//----------------------------------------------------------------------------------
-#if defined(PLATFORM_ANDROID)
-static int android_read(void *cookie, char *buf, int size)
-{
- return AAsset_read((AAsset *)cookie, buf, size);
-}
-
-static int android_write(void *cookie, const char *buf, int size)
-{
- TraceLog(LOG_ERROR, "Can't provide write access to the APK");
-
- return EACCES;
-}
-
-static fpos_t android_seek(void *cookie, fpos_t offset, int whence)
-{
- return AAsset_seek((AAsset *)cookie, offset, whence);
-}
-
-static int android_close(void *cookie)
-{
- AAsset_close((AAsset *)cookie);
- return 0;
-}
-#endif
-
-// Show trace log messages (LOG_INFO, LOG_WARNING, LOG_ERROR, LOG_DEBUG)
-static void TraceLog(int msgType, const char *text, ...)
-{
- static char buffer[128];
- int traceDebugMsgs = 0;
-
-#if defined(SUPPORT_TRACELOG_DEBUG)
- traceDebugMsgs = 1;
-#endif
-
- switch(msgType)
- {
- case LOG_INFO: strcpy(buffer, "INFO: "); break;
- case LOG_ERROR: strcpy(buffer, "ERROR: "); break;
- case LOG_WARNING: strcpy(buffer, "WARNING: "); break;
- case LOG_DEBUG: strcpy(buffer, "DEBUG: "); break;
- default: break;
- }
-
- strcat(buffer, text);
- strcat(buffer, "\n");
-
- va_list args;
- va_start(args, text);
-
-#if defined(PLATFORM_ANDROID)
- switch(msgType)
- {
- case LOG_INFO: __android_log_vprint(ANDROID_LOG_INFO, "raylib", buffer, args); break;
- case LOG_ERROR: __android_log_vprint(ANDROID_LOG_ERROR, "raylib", buffer, args); break;
- case LOG_WARNING: __android_log_vprint(ANDROID_LOG_WARN, "raylib", buffer, args); break;
- case LOG_DEBUG: if (traceDebugMsgs) __android_log_vprint(ANDROID_LOG_DEBUG, "raylib", buffer, args); break;
- default: break;
- }
-#else
- if ((msgType != LOG_DEBUG) || ((msgType == LOG_DEBUG) && (traceDebugMsgs))) vprintf(buffer, args);
-#endif
-
- va_end(args);
-
- if (msgType == LOG_ERROR) exit(1); // If LOG_ERROR message, exit program
-}
-
-// Setup canvas (framebuffer) to start drawing
-static void BeginDrawing(void)
-{
-/*
- currentTime = GetTime(); // Number of elapsed seconds since InitTimer() was called
- updateTime = currentTime - previousTime;
- previousTime = currentTime;
-*/
- //rlClearScreenBuffers(); // Clear current framebuffers
- //rlLoadIdentity(); // Reset current matrix (MODELVIEW)
-
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-}
-
-// End canvas drawing and swap buffers (double buffering)
-static void EndDrawing(void)
-{
- //rlglDraw(); // Draw Buffers (Only OpenGL 3+ and ES2)
-
- SwapBuffers(); // Copy back buffer to front buffer
- PollInputEvents(); // Poll user events
-
-/*
- // Frame time control system
- currentTime = GetTime();
- drawTime = currentTime - previousTime;
- previousTime = currentTime;
-
- frameTime = updateTime + drawTime;
-
- // Wait for some milliseconds...
- if (frameTime < targetTime)
- {
- Wait((targetTime - frameTime)*1000.0f);
-
- currentTime = GetTime();
- double extraTime = currentTime - previousTime;
- previousTime = currentTime;
-
- frameTime += extraTime;
- }
-*/
-}
-
-// Poll (store) all input events
-static void PollInputEvents(void)
-{
- // Reset last key pressed registered
- //lastKeyPressed = -1;
-
-#if defined(PLATFORM_ANDROID)
- // Register previous keys states
- // NOTE: Android supports up to 260 keys
- //for (int i = 0; i < 260; i++) previousKeyState[i] = currentKeyState[i];
-
- // Poll Events (registered events)
- // NOTE: Activity is paused if not enabled (appEnabled)
- while ((ident = ALooper_pollAll(appEnabled ? 0 : -1, NULL, &events,(void**)&source)) >= 0)
- {
- // Process this event
- if (source != NULL) source->process(app, source);
-
- // NOTE: Never close window, native activity is controlled by the system!
- if (app->destroyRequested != 0)
- {
- //TraceLog(LOG_INFO, "Closing Window...");
- //windowShouldClose = true;
- //ANativeActivity_finish(app->activity);
- }
- }
-#endif
-}
-
-