SDL 2 with some patches plus png updates. So far, CG compiles but doen't

link yet
This commit is contained in:
Gerhard Stein
2013-10-09 21:06:11 +02:00
parent 4606e9c190
commit 111bb3ea82
700 changed files with 312872 additions and 541 deletions
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,684 @@
--- src/core/android/SDL_android.cpp 2013-10-08 17:46:42.468029488 +0200
+++ src/core/android/SDL_android.cpp 1970-01-01 01:00:00.000000000 +0100
@@ -1,681 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org>
-
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
-
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-*/
-#include "SDL_config.h"
-#include "SDL_stdinc.h"
-#include "SDL_assert.h"
-
-#ifdef __ANDROID__
-
-#include "SDL_android.h"
-
-extern "C" {
-#include "../../events/SDL_events_c.h"
-#include "../../video/android/SDL_androidkeyboard.h"
-#include "../../video/android/SDL_androidtouch.h"
-#include "../../video/android/SDL_androidvideo.h"
-
-#include <android/log.h>
-#define LOG_TAG "SDL_android"
-//#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
-//#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
-#define LOGI(...) do {} while (false)
-#define LOGE(...) do {} while (false)
-
-
-/* Implemented in audio/android/SDL_androidaudio.c */
-extern void Android_RunAudioThread();
-} // C
-
-/*******************************************************************************
- This file links the Java side of Android with libsdl
-*******************************************************************************/
-#include <jni.h>
-#include <android/log.h>
-
-
-/*******************************************************************************
- Globals
-*******************************************************************************/
-static JNIEnv* mEnv = NULL;
-static JNIEnv* mAudioEnv = NULL;
-static JavaVM* mJavaVM;
-
-// Main activity
-static jclass mActivityClass;
-
-// method signatures
-static jmethodID midCreateGLContext;
-static jmethodID midFlipBuffers;
-static jmethodID midAudioInit;
-static jmethodID midAudioWriteShortBuffer;
-static jmethodID midAudioWriteByteBuffer;
-static jmethodID midAudioQuit;
-
-// Accelerometer data storage
-static float fLastAccelerometer[3];
-static bool bHasNewData;
-
-/*******************************************************************************
- Functions called by JNI
-*******************************************************************************/
-
-// Library init
-extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)
-{
- JNIEnv *env;
- mJavaVM = vm;
- LOGI("JNI_OnLoad called");
- if (mJavaVM->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
- LOGE("Failed to get the environment using GetEnv()");
- return -1;
- }
-
- return JNI_VERSION_1_4;
-}
-
-// Called before SDL_main() to initialize JNI bindings
-extern "C" void SDL_Android_Init(JNIEnv* env, jclass cls)
-{
- __android_log_print(ANDROID_LOG_INFO, "SDL", "SDL_Android_Init()");
-
- mEnv = env;
- mActivityClass = (jclass)env->NewGlobalRef(cls);
-
- midCreateGLContext = mEnv->GetStaticMethodID(mActivityClass,
- "createGLContext","(II)Z");
- midFlipBuffers = mEnv->GetStaticMethodID(mActivityClass,
- "flipBuffers","()V");
- midAudioInit = mEnv->GetStaticMethodID(mActivityClass,
- "audioInit", "(IZZI)Ljava/lang/Object;");
- midAudioWriteShortBuffer = mEnv->GetStaticMethodID(mActivityClass,
- "audioWriteShortBuffer", "([S)V");
- midAudioWriteByteBuffer = mEnv->GetStaticMethodID(mActivityClass,
- "audioWriteByteBuffer", "([B)V");
- midAudioQuit = mEnv->GetStaticMethodID(mActivityClass,
- "audioQuit", "()V");
-
- bHasNewData = false;
-
- if(!midCreateGLContext || !midFlipBuffers || !midAudioInit ||
- !midAudioWriteShortBuffer || !midAudioWriteByteBuffer || !midAudioQuit) {
- __android_log_print(ANDROID_LOG_WARN, "SDL", "SDL: Couldn't locate Java callbacks, check that they're named and typed correctly");
- }
- __android_log_print(ANDROID_LOG_INFO, "SDL", "SDL_Android_Init() finished!");
-}
-
-// Resize
-extern "C" void Java_org_libsdl_app_SDLActivity_onNativeResize(
- JNIEnv* env, jclass jcls,
- jint width, jint height, jint format)
-{
- Android_SetScreenResolution(width, height, format);
-}
-
-// Keydown
-extern "C" void Java_org_libsdl_app_SDLActivity_onNativeKeyDown(
- JNIEnv* env, jclass jcls, jint keycode)
-{
- Android_OnKeyDown(keycode);
-}
-
-// Keyup
-extern "C" void Java_org_libsdl_app_SDLActivity_onNativeKeyUp(
- JNIEnv* env, jclass jcls, jint keycode)
-{
- Android_OnKeyUp(keycode);
-}
-
-// Touch
-extern "C" void Java_org_libsdl_app_SDLActivity_onNativeTouch(
- JNIEnv* env, jclass jcls,
- jint touch_device_id_in, jint pointer_finger_id_in,
- jint action, jfloat x, jfloat y, jfloat p)
-{
- Android_OnTouch(touch_device_id_in, pointer_finger_id_in, action, x, y, p);
-}
-
-// Accelerometer
-extern "C" void Java_org_libsdl_app_SDLActivity_onNativeAccel(
- JNIEnv* env, jclass jcls,
- jfloat x, jfloat y, jfloat z)
-{
- fLastAccelerometer[0] = x;
- fLastAccelerometer[1] = y;
- fLastAccelerometer[2] = z;
- bHasNewData = true;
-}
-
-// Quit
-extern "C" void Java_org_libsdl_app_SDLActivity_nativeQuit(
- JNIEnv* env, jclass cls)
-{
- // Inject a SDL_QUIT event
- SDL_SendQuit();
-}
-
-// Pause
-extern "C" void Java_org_libsdl_app_SDLActivity_nativePause(
- JNIEnv* env, jclass cls)
-{
- if (Android_Window) {
- SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_FOCUS_LOST, 0, 0);
- SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_MINIMIZED, 0, 0);
- }
-}
-
-// Resume
-extern "C" void Java_org_libsdl_app_SDLActivity_nativeResume(
- JNIEnv* env, jclass cls)
-{
- if (Android_Window) {
- SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_FOCUS_GAINED, 0, 0);
- SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_RESTORED, 0, 0);
- }
-}
-
-extern "C" void Java_org_libsdl_app_SDLActivity_nativeRunAudioThread(
- JNIEnv* env, jclass cls)
-{
- /* This is the audio thread, with a different environment */
- mAudioEnv = env;
-
- Android_RunAudioThread();
-}
-
-
-/*******************************************************************************
- Functions called by SDL into Java
-*******************************************************************************/
-
-class LocalReferenceHolder
-{
-private:
- static int s_active;
-
-public:
- static bool IsActive() {
- return s_active > 0;
- }
-
-public:
- LocalReferenceHolder() : m_env(NULL) { }
- ~LocalReferenceHolder() {
- if (m_env) {
- m_env->PopLocalFrame(NULL);
- --s_active;
- }
- }
-
- bool init(JNIEnv *env, jint capacity = 16) {
- if (env->PushLocalFrame(capacity) < 0) {
- SDL_SetError("Failed to allocate enough JVM local references");
- return false;
- }
- ++s_active;
- m_env = env;
- return true;
- }
-
-protected:
- JNIEnv *m_env;
-};
-int LocalReferenceHolder::s_active;
-
-extern "C" SDL_bool Android_JNI_CreateContext(int majorVersion, int minorVersion)
-{
- if (mEnv->CallStaticBooleanMethod(mActivityClass, midCreateGLContext, majorVersion, minorVersion)) {
- return SDL_TRUE;
- } else {
- return SDL_FALSE;
- }
-}
-
-extern "C" void Android_JNI_SwapWindow()
-{
- mEnv->CallStaticVoidMethod(mActivityClass, midFlipBuffers);
-}
-
-extern "C" void Android_JNI_SetActivityTitle(const char *title)
-{
- jmethodID mid;
-
- mid = mEnv->GetStaticMethodID(mActivityClass,"setActivityTitle","(Ljava/lang/String;)V");
- if (mid) {
- mEnv->CallStaticVoidMethod(mActivityClass, mid, mEnv->NewStringUTF(title));
- }
-}
-
-extern "C" SDL_bool Android_JNI_GetAccelerometerValues(float values[3])
-{
- int i;
- SDL_bool retval = SDL_FALSE;
-
- if (bHasNewData) {
- for (i = 0; i < 3; ++i) {
- values[i] = fLastAccelerometer[i];
- }
- bHasNewData = false;
- retval = SDL_TRUE;
- }
-
- return retval;
-}
-
-//
-// Audio support
-//
-static jboolean audioBuffer16Bit = JNI_FALSE;
-static jboolean audioBufferStereo = JNI_FALSE;
-static jobject audioBuffer = NULL;
-static void* audioBufferPinned = NULL;
-
-extern "C" int Android_JNI_OpenAudioDevice(int sampleRate, int is16Bit, int channelCount, int desiredBufferFrames)
-{
- int audioBufferFrames;
-
- int status;
- JNIEnv *env;
- static bool isAttached = false;
- status = mJavaVM->GetEnv((void **) &env, JNI_VERSION_1_4);
- if(status < 0) {
- LOGE("callback_handler: failed to get JNI environment, assuming native thread");
- status = mJavaVM->AttachCurrentThread(&env, NULL);
- if(status < 0) {
- LOGE("callback_handler: failed to attach current thread");
- return 0;
- }
- isAttached = true;
- }
-
-
- __android_log_print(ANDROID_LOG_VERBOSE, "SDL", "SDL audio: opening device");
- audioBuffer16Bit = is16Bit;
- audioBufferStereo = channelCount > 1;
-
- audioBuffer = env->CallStaticObjectMethod(mActivityClass, midAudioInit, sampleRate, audioBuffer16Bit, audioBufferStereo, desiredBufferFrames);
-
- if (audioBuffer == NULL) {
- __android_log_print(ANDROID_LOG_WARN, "SDL", "SDL audio: didn't get back a good audio buffer!");
- return 0;
- }
- audioBuffer = env->NewGlobalRef(audioBuffer);
-
- jboolean isCopy = JNI_FALSE;
- if (audioBuffer16Bit) {
- audioBufferPinned = env->GetShortArrayElements((jshortArray)audioBuffer, &isCopy);
- audioBufferFrames = env->GetArrayLength((jshortArray)audioBuffer);
- } else {
- audioBufferPinned = env->GetByteArrayElements((jbyteArray)audioBuffer, &isCopy);
- audioBufferFrames = env->GetArrayLength((jbyteArray)audioBuffer);
- }
- if (audioBufferStereo) {
- audioBufferFrames /= 2;
- }
-
- if (isAttached) {
- mJavaVM->DetachCurrentThread();
- }
-
- return audioBufferFrames;
-}
-
-extern "C" void * Android_JNI_GetAudioBuffer()
-{
- return audioBufferPinned;
-}
-
-extern "C" void Android_JNI_WriteAudioBuffer()
-{
- if (audioBuffer16Bit) {
- mAudioEnv->ReleaseShortArrayElements((jshortArray)audioBuffer, (jshort *)audioBufferPinned, JNI_COMMIT);
- mAudioEnv->CallStaticVoidMethod(mActivityClass, midAudioWriteShortBuffer, (jshortArray)audioBuffer);
- } else {
- mAudioEnv->ReleaseByteArrayElements((jbyteArray)audioBuffer, (jbyte *)audioBufferPinned, JNI_COMMIT);
- mAudioEnv->CallStaticVoidMethod(mActivityClass, midAudioWriteByteBuffer, (jbyteArray)audioBuffer);
- }
-
- /* JNI_COMMIT means the changes are committed to the VM but the buffer remains pinned */
-}
-
-extern "C" void Android_JNI_CloseAudioDevice()
-{
- int status;
- JNIEnv *env;
- static bool isAttached = false;
- status = mJavaVM->GetEnv((void **) &env, JNI_VERSION_1_4);
- if(status < 0) {
- LOGE("callback_handler: failed to get JNI environment, assuming native thread");
- status = mJavaVM->AttachCurrentThread(&env, NULL);
- if(status < 0) {
- LOGE("callback_handler: failed to attach current thread");
- return;
- }
- isAttached = true;
- }
-
- env->CallStaticVoidMethod(mActivityClass, midAudioQuit);
-
- if (audioBuffer) {
- env->DeleteGlobalRef(audioBuffer);
- audioBuffer = NULL;
- audioBufferPinned = NULL;
- }
-
- if (isAttached) {
- mJavaVM->DetachCurrentThread();
- }
-}
-
-// Test for an exception and call SDL_SetError with its detail if one occurs
-static bool Android_JNI_ExceptionOccurred()
-{
- SDL_assert(LocalReferenceHolder::IsActive());
-
- jthrowable exception = mEnv->ExceptionOccurred();
- if (exception != NULL) {
- jmethodID mid;
-
- // Until this happens most JNI operations have undefined behaviour
- mEnv->ExceptionClear();
-
- jclass exceptionClass = mEnv->GetObjectClass(exception);
- jclass classClass = mEnv->FindClass("java/lang/Class");
-
- mid = mEnv->GetMethodID(classClass, "getName", "()Ljava/lang/String;");
- jstring exceptionName = (jstring)mEnv->CallObjectMethod(exceptionClass, mid);
- const char* exceptionNameUTF8 = mEnv->GetStringUTFChars(exceptionName, 0);
-
- mid = mEnv->GetMethodID(exceptionClass, "getMessage", "()Ljava/lang/String;");
- jstring exceptionMessage = (jstring)mEnv->CallObjectMethod(exception, mid);
-
- if (exceptionMessage != NULL) {
- const char* exceptionMessageUTF8 = mEnv->GetStringUTFChars(
- exceptionMessage, 0);
- SDL_SetError("%s: %s", exceptionNameUTF8, exceptionMessageUTF8);
- mEnv->ReleaseStringUTFChars(exceptionMessage, exceptionMessageUTF8);
- } else {
- SDL_SetError("%s", exceptionNameUTF8);
- }
-
- mEnv->ReleaseStringUTFChars(exceptionName, exceptionNameUTF8);
-
- return true;
- }
-
- return false;
-}
-
-static int Android_JNI_FileOpen(SDL_RWops* ctx)
-{
- LocalReferenceHolder refs;
- int result = 0;
-
- jmethodID mid;
- jobject context;
- jobject assetManager;
- jobject inputStream;
- jclass channels;
- jobject readableByteChannel;
- jstring fileNameJString;
-
- if (!refs.init(mEnv)) {
- goto failure;
- }
-
- fileNameJString = (jstring)ctx->hidden.androidio.fileName;
-
- // context = SDLActivity.getContext();
- mid = mEnv->GetStaticMethodID(mActivityClass,
- "getContext","()Landroid/content/Context;");
- context = mEnv->CallStaticObjectMethod(mActivityClass, mid);
-
- // assetManager = context.getAssets();
- mid = mEnv->GetMethodID(mEnv->GetObjectClass(context),
- "getAssets", "()Landroid/content/res/AssetManager;");
- assetManager = mEnv->CallObjectMethod(context, mid);
-
- // inputStream = assetManager.open(<filename>);
- mid = mEnv->GetMethodID(mEnv->GetObjectClass(assetManager),
- "open", "(Ljava/lang/String;)Ljava/io/InputStream;");
- inputStream = mEnv->CallObjectMethod(assetManager, mid, fileNameJString);
- if (Android_JNI_ExceptionOccurred()) {
- goto failure;
- }
-
- ctx->hidden.androidio.inputStream = inputStream;
- ctx->hidden.androidio.inputStreamRef = mEnv->NewGlobalRef(inputStream);
-
- // Despite all the visible documentation on [Asset]InputStream claiming
- // that the .available() method is not guaranteed to return the entire file
- // size, comments in <sdk>/samples/<ver>/ApiDemos/src/com/example/ ...
- // android/apis/content/ReadAsset.java imply that Android's
- // AssetInputStream.available() /will/ always return the total file size
-
- // size = inputStream.available();
- mid = mEnv->GetMethodID(mEnv->GetObjectClass(inputStream),
- "available", "()I");
- ctx->hidden.androidio.size = mEnv->CallIntMethod(inputStream, mid);
- if (Android_JNI_ExceptionOccurred()) {
- goto failure;
- }
-
- // readableByteChannel = Channels.newChannel(inputStream);
- channels = mEnv->FindClass("java/nio/channels/Channels");
- mid = mEnv->GetStaticMethodID(channels,
- "newChannel",
- "(Ljava/io/InputStream;)Ljava/nio/channels/ReadableByteChannel;");
- readableByteChannel = mEnv->CallStaticObjectMethod(
- channels, mid, inputStream);
- if (Android_JNI_ExceptionOccurred()) {
- goto failure;
- }
-
- ctx->hidden.androidio.readableByteChannel = readableByteChannel;
- ctx->hidden.androidio.readableByteChannelRef =
- mEnv->NewGlobalRef(readableByteChannel);
-
- // Store .read id for reading purposes
- mid = mEnv->GetMethodID(mEnv->GetObjectClass(readableByteChannel),
- "read", "(Ljava/nio/ByteBuffer;)I");
- ctx->hidden.androidio.readMethod = mid;
-
- ctx->hidden.androidio.position = 0;
-
- if (false) {
-failure:
- result = -1;
-
- mEnv->DeleteGlobalRef((jobject)ctx->hidden.androidio.fileNameRef);
-
- if(ctx->hidden.androidio.inputStreamRef != NULL) {
- mEnv->DeleteGlobalRef((jobject)ctx->hidden.androidio.inputStreamRef);
- }
- }
-
- return result;
-}
-
-extern "C" int Android_JNI_FileOpen(SDL_RWops* ctx,
- const char* fileName, const char*)
-{
- LocalReferenceHolder refs;
-
- if (!refs.init(mEnv)) {
- return -1;
- }
-
- if (!ctx) {
- return -1;
- }
-
- jstring fileNameJString = mEnv->NewStringUTF(fileName);
- ctx->hidden.androidio.fileName = fileNameJString;
- ctx->hidden.androidio.fileNameRef = mEnv->NewGlobalRef(fileNameJString);
- ctx->hidden.androidio.inputStreamRef = NULL;
-
- return Android_JNI_FileOpen(ctx);
-}
-
-extern "C" size_t Android_JNI_FileRead(SDL_RWops* ctx, void* buffer,
- size_t size, size_t maxnum)
-{
- LocalReferenceHolder refs;
- int bytesRemaining = size * maxnum;
- int bytesRead = 0;
-
- if (!refs.init(mEnv)) {
- return -1;
- }
-
- jobject readableByteChannel = (jobject)ctx->hidden.androidio.readableByteChannel;
- jmethodID readMethod = (jmethodID)ctx->hidden.androidio.readMethod;
- jobject byteBuffer = mEnv->NewDirectByteBuffer(buffer, bytesRemaining);
-
- while (bytesRemaining > 0) {
- // result = readableByteChannel.read(...);
- int result = mEnv->CallIntMethod(readableByteChannel, readMethod, byteBuffer);
-
- if (Android_JNI_ExceptionOccurred()) {
- return 0;
- }
-
- if (result < 0) {
- break;
- }
-
- bytesRemaining -= result;
- bytesRead += result;
- ctx->hidden.androidio.position += result;
- }
-
- return bytesRead / size;
-}
-
-extern "C" size_t Android_JNI_FileWrite(SDL_RWops* ctx, const void* buffer,
- size_t size, size_t num)
-{
- SDL_SetError("Cannot write to Android package filesystem");
- return 0;
-}
-
-static int Android_JNI_FileClose(SDL_RWops* ctx, bool release)
-{
- LocalReferenceHolder refs;
- int result = 0;
-
- if (!refs.init(mEnv)) {
- SDL_SetError("Failed to allocate enough JVM local references");
- return -1;
- }
-
- if (ctx) {
- if (release) {
- mEnv->DeleteGlobalRef((jobject)ctx->hidden.androidio.fileNameRef);
- }
-
- jobject inputStream = (jobject)ctx->hidden.androidio.inputStream;
-
- // inputStream.close();
- jmethodID mid = mEnv->GetMethodID(mEnv->GetObjectClass(inputStream),
- "close", "()V");
- mEnv->CallVoidMethod(inputStream, mid);
- mEnv->DeleteGlobalRef((jobject)ctx->hidden.androidio.inputStreamRef);
- mEnv->DeleteGlobalRef((jobject)ctx->hidden.androidio.readableByteChannelRef);
- if (Android_JNI_ExceptionOccurred()) {
- result = -1;
- }
-
- if (release) {
- SDL_FreeRW(ctx);
- }
- }
-
- return result;
-}
-
-
-extern "C" long Android_JNI_FileSeek(SDL_RWops* ctx, long offset, int whence)
-{
- long newPosition;
-
- switch (whence) {
- case RW_SEEK_SET:
- newPosition = offset;
- break;
- case RW_SEEK_CUR:
- newPosition = ctx->hidden.androidio.position + offset;
- break;
- case RW_SEEK_END:
- newPosition = ctx->hidden.androidio.size + offset;
- break;
- default:
- SDL_SetError("Unknown value for 'whence'");
- return -1;
- }
- if (newPosition < 0) {
- newPosition = 0;
- }
- if (newPosition > ctx->hidden.androidio.size) {
- newPosition = ctx->hidden.androidio.size;
- }
-
- long movement = newPosition - ctx->hidden.androidio.position;
- jobject inputStream = (jobject)ctx->hidden.androidio.inputStream;
-
- if (movement > 0) {
- unsigned char buffer[1024];
-
- // The easy case where we're seeking forwards
- while (movement > 0) {
- long amount = (long) sizeof (buffer);
- if (amount > movement) {
- amount = movement;
- }
- size_t result = Android_JNI_FileRead(ctx, buffer, 1, amount);
-
- if (result <= 0) {
- // Failed to read/skip the required amount, so fail
- return -1;
- }
-
- movement -= result;
- }
- } else if (movement < 0) {
- // We can't seek backwards so we have to reopen the file and seek
- // forwards which obviously isn't very efficient
- Android_JNI_FileClose(ctx, false);
- Android_JNI_FileOpen(ctx);
- Android_JNI_FileSeek(ctx, newPosition, RW_SEEK_SET);
- }
-
- ctx->hidden.androidio.position = newPosition;
-
- return ctx->hidden.androidio.position;
-}
-
-extern "C" int Android_JNI_FileClose(SDL_RWops* ctx)
-{
- return Android_JNI_FileClose(ctx, true);
-}
-
-#endif /* __ANDROID__ */
-
-/* vi: set ts=4 sw=4 expandtab: */
@@ -0,0 +1,79 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
#include "SDL_config.h"
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
/* *INDENT-OFF* */
extern "C" {
/* *INDENT-ON* */
#endif
#include "SDL_rect.h"
/* Interface from the SDL library into the Android Java activity */
extern SDL_bool Android_JNI_CreateContext(int majorVersion, int minorVersion, int red, int green, int blue, int alpha, int buffer, int depth, int stencil, int buffers, int samples);
extern SDL_bool Android_JNI_DeleteContext(void);
extern void Android_JNI_SwapWindow();
extern void Android_JNI_SetActivityTitle(const char *title);
extern SDL_bool Android_JNI_GetAccelerometerValues(float values[3]);
extern void Android_JNI_ShowTextInput(SDL_Rect *inputRect);
extern void Android_JNI_HideTextInput();
/* Audio support */
extern int Android_JNI_OpenAudioDevice(int sampleRate, int is16Bit, int channelCount, int desiredBufferFrames);
extern void* Android_JNI_GetAudioBuffer();
extern void Android_JNI_WriteAudioBuffer();
extern void Android_JNI_CloseAudioDevice();
#include "SDL_rwops.h"
int Android_JNI_FileOpen(SDL_RWops* ctx, const char* fileName, const char* mode);
Sint64 Android_JNI_FileSize(SDL_RWops* ctx);
Sint64 Android_JNI_FileSeek(SDL_RWops* ctx, Sint64 offset, int whence);
size_t Android_JNI_FileRead(SDL_RWops* ctx, void* buffer, size_t size, size_t maxnum);
size_t Android_JNI_FileWrite(SDL_RWops* ctx, const void* buffer, size_t size, size_t num);
int Android_JNI_FileClose(SDL_RWops* ctx);
/* Clipboard support */
int Android_JNI_SetClipboardText(const char* text);
char* Android_JNI_GetClipboardText();
SDL_bool Android_JNI_HasClipboardText();
/* Power support */
int Android_JNI_GetPowerInfo(int* plugged, int* charged, int* battery, int* seconds, int* percent);
/* Threads */
#include <jni.h>
JNIEnv *Android_JNI_GetEnv(void);
int Android_JNI_SetupThread(void);
/* Generic messages */
int Android_JNI_SendMessage(int command, int param);
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
/* *INDENT-OFF* */
}
/* *INDENT-ON* */
#endif
/* vi: set ts=4 sw=4 expandtab: */
@@ -0,0 +1,79 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
#include "SDL_config.h"
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
/* *INDENT-OFF* */
extern "C" {
/* *INDENT-ON* */
#endif
#include "SDL_rect.h"
/* Interface from the SDL library into the Android Java activity */
extern SDL_bool Android_JNI_CreateContext(int majorVersion, int minorVersion, int red, int green, int blue, int alpha, int buffer, int depth, int stencil, int buffers, int samples);
extern SDL_bool Android_JNI_DeleteContext(void);
extern void Android_JNI_SwapWindow();
extern void Android_JNI_SetActivityTitle(const char *title);
extern SDL_bool Android_JNI_GetAccelerometerValues(float values[3]);
extern void Android_JNI_ShowTextInput(SDL_Rect *inputRect);
extern void Android_JNI_HideTextInput();
/* Audio support */
extern int Android_JNI_OpenAudioDevice(int sampleRate, int is16Bit, int channelCount, int desiredBufferFrames);
extern void* Android_JNI_GetAudioBuffer();
extern void Android_JNI_WriteAudioBuffer();
extern void Android_JNI_CloseAudioDevice();
#include "SDL_rwops.h"
int Android_JNI_FileOpen(SDL_RWops* ctx, const char* fileName, const char* mode);
Sint64 Android_JNI_FileSize(SDL_RWops* ctx);
Sint64 Android_JNI_FileSeek(SDL_RWops* ctx, Sint64 offset, int whence);
size_t Android_JNI_FileRead(SDL_RWops* ctx, void* buffer, size_t size, size_t maxnum);
size_t Android_JNI_FileWrite(SDL_RWops* ctx, const void* buffer, size_t size, size_t num);
int Android_JNI_FileClose(SDL_RWops* ctx);
/* Clipboard support */
int Android_JNI_SetClipboardText(const char* text);
char* Android_JNI_GetClipboardText();
SDL_bool Android_JNI_HasClipboardText();
/* Power support */
int Android_JNI_GetPowerInfo(int* plugged, int* charged, int* battery, int* seconds, int* percent);
/* Threads */
#include <jni.h>
JNIEnv *Android_JNI_GetEnv(void);
int Android_JNI_SetupThread(void);
/* Generic messages */
int Android_JNI_SendMessage(int command, int param);
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
/* *INDENT-OFF* */
}
/* *INDENT-ON* */
#endif
/* vi: set ts=4 sw=4 expandtab: */
@@ -0,0 +1,60 @@
--- src/core/android/SDL_android.h 2013-10-08 17:46:42.468029488 +0200
+++ src/core/android/SDL_android.h 1970-01-01 01:00:00.000000000 +0100
@@ -1,57 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org>
-
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
-
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-*/
-#include "SDL_config.h"
-
-/* Set up for C function definitions, even when using C++ */
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-extern "C" {
-/* *INDENT-ON* */
-#endif
-
-/* Interface from the SDL library into the Android Java activity */
-extern SDL_bool Android_JNI_CreateContext(int majorVersion, int minorVersion);
-extern void Android_JNI_SwapWindow();
-extern void Android_JNI_SetActivityTitle(const char *title);
-extern SDL_bool Android_JNI_GetAccelerometerValues(float values[3]);
-
-// Audio support
-extern int Android_JNI_OpenAudioDevice(int sampleRate, int is16Bit, int channelCount, int desiredBufferFrames);
-extern void* Android_JNI_GetAudioBuffer();
-extern void Android_JNI_WriteAudioBuffer();
-extern void Android_JNI_CloseAudioDevice();
-
-#include "SDL_rwops.h"
-
-int Android_JNI_FileOpen(SDL_RWops* ctx, const char* fileName, const char* mode);
-long Android_JNI_FileSeek(SDL_RWops* ctx, long offset, int whence);
-size_t Android_JNI_FileRead(SDL_RWops* ctx, void* buffer, size_t size, size_t maxnum);
-size_t Android_JNI_FileWrite(SDL_RWops* ctx, const void* buffer, size_t size, size_t num);
-int Android_JNI_FileClose(SDL_RWops* ctx);
-
-/* Ends C function definitions when using C++ */
-#ifdef __cplusplus
-/* *INDENT-OFF* */
-}
-/* *INDENT-ON* */
-#endif
-
-/* vi: set ts=4 sw=4 expandtab: */
@@ -0,0 +1,67 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
#include "SDL_config.h"
#ifdef __WIN32__
#include "SDL_error.h"
#include "SDL_windows.h"
#include "SDL_assert.h"
#include <objbase.h> /* for CoInitialize/CoUninitialize */
/* Sets an error message based on GetLastError() */
int
WIN_SetError(const char *prefix)
{
TCHAR buffer[1024];
char *message;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0,
buffer, SDL_arraysize(buffer), NULL);
message = WIN_StringToUTF8(buffer);
SDL_SetError("%s%s%s", prefix ? prefix : "", prefix ? ": " : "", message);
SDL_free(message);
return -1;
}
HRESULT
WIN_CoInitialize(void)
{
const HRESULT hr = CoInitialize(NULL);
/* S_FALSE means success, but someone else already initialized. */
/* You still need to call CoUninitialize in this case! */
if (hr == S_FALSE) {
return S_OK;
}
return hr;
}
void
WIN_CoUninitialize(void)
{
CoUninitialize();
}
#endif /* __WIN32__ */
/* vi: set ts=4 sw=4 expandtab: */
@@ -0,0 +1,55 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
/* This is an include file for windows.h with the SDL build settings */
#ifndef _INCLUDED_WINDOWS_H
#define _INCLUDED_WINDOWS_H
#define WIN32_LEAN_AND_MEAN
#define STRICT
#ifndef UNICODE
#define UNICODE 1
#endif
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x501 /* Need 0x410 for AlphaBlend() and 0x500 for EnumDisplayDevices(), 0x501 for raw input */
#include <windows.h>
/* Routines to convert from UTF8 to native Windows text */
#if UNICODE
#define WIN_StringToUTF8(S) SDL_iconv_string("UTF-8", "UCS-2-INTERNAL", (char *)(S), (SDL_wcslen(S)+1)*sizeof(WCHAR))
#define WIN_UTF8ToString(S) (WCHAR *)SDL_iconv_string("UCS-2-INTERNAL", "UTF-8", (char *)(S), SDL_strlen(S)+1)
#else
#define WIN_StringToUTF8(S) SDL_iconv_string("UTF-8", "ASCII", (char *)(S), (SDL_strlen(S)+1))
#define WIN_UTF8ToString(S) SDL_iconv_string("ASCII", "UTF-8", (char *)(S), SDL_strlen(S)+1)
#endif
/* Sets an error message based on GetLastError(). Always return -1. */
extern int WIN_SetError(const char *prefix);
/* Wrap up the oddities of CoInitialize() into a common function. */
extern HRESULT WIN_CoInitialize(void);
extern void WIN_CoUninitialize(void);
#endif /* _INCLUDED_WINDOWS_H */
/* vi: set ts=4 sw=4 expandtab: */