diff --git a/changeAppSettings.sh b/changeAppSettings.sh
index be46c7745..0abb3b700 100755
--- a/changeAppSettings.sh
+++ b/changeAppSettings.sh
@@ -60,6 +60,7 @@ if [ "$SwVideoMode" = "y" ]; then
NeedDepthBuffer=n
NeedStencilBuffer=n
NeedGles2=n
+ NeedGles3=n
fi
@@ -178,10 +179,14 @@ echo >> AndroidAppSettings.cfg
echo "# Enable OpenGL stencil buffer (needed only for 3-d applications, small speed decrease) (y) or (n)" >> AndroidAppSettings.cfg
echo NeedStencilBuffer=$NeedStencilBuffer >> AndroidAppSettings.cfg
echo >> AndroidAppSettings.cfg
-echo "# Try to use GLES 2.x context - will revert to GLES 1.X if unsupported by device" >> AndroidAppSettings.cfg
+echo "# Use GLES 2.x context" >> AndroidAppSettings.cfg
echo "# you need this option only if you're developing 3-d app (y) or (n)" >> AndroidAppSettings.cfg
echo NeedGles2=$NeedGles2 >> AndroidAppSettings.cfg
echo >> AndroidAppSettings.cfg
+echo "# Use GLES 3.x context" >> AndroidAppSettings.cfg
+echo "# you need this option only if you're developing 3-d app (y) or (n)" >> AndroidAppSettings.cfg
+echo NeedGles3=$NeedGles3 >> AndroidAppSettings.cfg
+echo >> AndroidAppSettings.cfg
echo "# Use glshim library for provide OpenGL 1.x functionality to OpenGL ES accelerated cards (y) or (n)" >> AndroidAppSettings.cfg
echo UseGlshim=$UseGlshim >> AndroidAppSettings.cfg
echo >> AndroidAppSettings.cfg
@@ -483,12 +488,6 @@ else
NeedStencilBuffer=false
fi
-if [ "$NeedGles2" = "y" ] ; then
- NeedGles2=true
-else
- NeedGles2=false
-fi
-
if [ "$UseGlshim" = "y" ] ; then
UseGlshimCFlags=-DUSE_GLSHIM=1
else
@@ -831,6 +830,20 @@ else
ImmersiveMode=true
fi
+if [ "$NeedGles2" = "y" ] ; then
+ NeedGles2=true
+else
+ NeedGles2=false
+ $SEDI "/==GLES2==/ d" project/AndroidManifest.xml
+fi
+
+if [ "$NeedGles3" = "y" ] ; then
+ NeedGles3=true
+else
+ NeedGles3=false
+ $SEDI "/==GLES3==/ d" project/AndroidManifest.xml
+fi
+
echo Patching project/src/Globals.java
$SEDI "s/public static String ApplicationName = .*;/public static String ApplicationName = \"$AppShortName\";/" project/src/Globals.java
$SEDI "s/public static final boolean Using_SDL_1_3 = .*;/public static final boolean Using_SDL_1_3 = $UsingSdl13;/" project/src/Globals.java
@@ -848,6 +861,7 @@ $SEDI "s/public static int VideoDepthBpp = .*;/public static int VideoDepthBpp =
$SEDI "s/public static boolean NeedDepthBuffer = .*;/public static boolean NeedDepthBuffer = $NeedDepthBuffer;/" project/src/Globals.java
$SEDI "s/public static boolean NeedStencilBuffer = .*;/public static boolean NeedStencilBuffer = $NeedStencilBuffer;/" project/src/Globals.java
$SEDI "s/public static boolean NeedGles2 = .*;/public static boolean NeedGles2 = $NeedGles2;/" project/src/Globals.java
+$SEDI "s/public static boolean NeedGles3 = .*;/public static boolean NeedGles3 = $NeedGles3;/" project/src/Globals.java
$SEDI "s/public static boolean CompatibilityHacksVideo = .*;/public static boolean CompatibilityHacksVideo = $CompatibilityHacksForceScreenUpdate;/" project/src/Globals.java
$SEDI "s/public static boolean CompatibilityHacksStaticInit = .*;/public static boolean CompatibilityHacksStaticInit = $CompatibilityHacksStaticInit;/" project/src/Globals.java
$SEDI "s/public static boolean CompatibilityHacksTextInputEmulatesHwKeyboard = .*;/public static boolean CompatibilityHacksTextInputEmulatesHwKeyboard = $CompatibilityHacksTextInputEmulatesHwKeyboard;/" project/src/Globals.java
@@ -944,10 +958,9 @@ mkdir -p project/libs
if [ "$GooglePlayGameServicesId" = "n" -o -z "$GooglePlayGameServicesId" ] ; then
$SEDI "/==GOOGLEPLAYGAMESERVICES==/ d" project/AndroidManifest.xml
GooglePlayGameServicesId=""
- grep 'google-play-services' project/local.properties > /dev/null && {
- $SEDI 's/.*android.library.reference.*//g' project/local.properties
+ grep '=play-services' project/local.properties > /dev/null && {
+ $SEDI 's/.*=play-services.*//g' project/local.properties
rm -f project/libs/android-support-v4.jar
- rm -f project/libs/play-services-games.jar
}
else
for F in $JAVA_SRC_PATH/googleplaygameservices/*.java; do
diff --git a/project/AndroidManifestTemplate.xml b/project/AndroidManifestTemplate.xml
index 7956ad1c7..f6f4d12c0 100644
--- a/project/AndroidManifestTemplate.xml
+++ b/project/AndroidManifestTemplate.xml
@@ -64,5 +64,7 @@
+
+
diff --git a/project/java/GLSurfaceView_SDL.java b/project/java/GLSurfaceView_SDL.java
index 9a1df2a74..def5bf25b 100644
--- a/project/java/GLSurfaceView_SDL.java
+++ b/project/java/GLSurfaceView_SDL.java
@@ -284,7 +284,7 @@ public class GLSurfaceView_SDL extends SurfaceView implements SurfaceHolder.Call
"setRenderer has already been called for this instance.");
}
if (mEGLConfigChooser == null) {
- mEGLConfigChooser = getEglConfigChooser(16, false, false, false);
+ mEGLConfigChooser = getEglConfigChooser(16, false, false, false, false);
}
mGLThread = new GLThread(renderer);
mGLThread.start();
@@ -323,8 +323,8 @@ public class GLSurfaceView_SDL extends SurfaceView implements SurfaceHolder.Call
*
* @param needDepth
*/
- public void setEGLConfigChooser(int bpp, boolean needDepth, boolean stencil, boolean gles2) {
- setEGLConfigChooser(getEglConfigChooser(bpp, needDepth, stencil, gles2));
+ public void setEGLConfigChooser(int bpp, boolean needDepth, boolean stencil, boolean gles2, boolean gles3) {
+ setEGLConfigChooser(getEglConfigChooser(bpp, needDepth, stencil, gles2, gles3));
}
/**
@@ -341,9 +341,9 @@ public class GLSurfaceView_SDL extends SurfaceView implements SurfaceHolder.Call
*
*/
public void setEGLConfigChooser(int redSize, int greenSize, int blueSize,
- int alphaSize, int depthSize, int stencilSize, boolean gles2) {
+ int alphaSize, int depthSize, int stencilSize, boolean gles2, boolean gles3) {
setEGLConfigChooser(new ComponentSizeChooser(redSize, greenSize,
- blueSize, alphaSize, depthSize, stencilSize, gles2));
+ blueSize, alphaSize, depthSize, stencilSize, gles2, gles3));
}
/**
* Set the rendering mode. When renderMode is
@@ -636,6 +636,7 @@ public class GLSurfaceView_SDL extends SurfaceView implements SurfaceHolder.Call
*/
EGLConfig chooseConfig(EGL10 egl, EGLDisplay display);
public boolean isGles2Required();
+ public boolean isGles3Required();
}
private static abstract class BaseConfigChooser
@@ -672,7 +673,7 @@ public class GLSurfaceView_SDL extends SurfaceView implements SurfaceHolder.Call
private static class ComponentSizeChooser extends BaseConfigChooser {
public ComponentSizeChooser(int redSize, int greenSize, int blueSize,
- int alphaSize, int depthSize, int stencilSize, boolean isGles2) {
+ int alphaSize, int depthSize, int stencilSize, boolean isGles2, boolean isGles3) {
super(new int[] {EGL10.EGL_NONE}); // Get all possible configs
mValue = new int[1];
mRedSize = redSize;
@@ -682,6 +683,7 @@ public class GLSurfaceView_SDL extends SurfaceView implements SurfaceHolder.Call
mDepthSize = depthSize;
mStencilSize = stencilSize;
mIsGles2 = isGles2;
+ mIsGles3 = isGles3;
}
@Override
@@ -693,7 +695,7 @@ public class GLSurfaceView_SDL extends SurfaceView implements SurfaceHolder.Call
int idx = 0;
int selectidx = -1;
- Log.v("SDL", "Desired GL config: " + "R" + mRedSize + "G" + mGreenSize + "B" + mBlueSize + "A" + mAlphaSize + " depth " + mDepthSize + " stencil " + mStencilSize + " type " + (mIsGles2 ? "GLES2" : "GLES"));
+ Log.v("SDL", "Desired GL config: " + "R" + mRedSize + "G" + mGreenSize + "B" + mBlueSize + "A" + mAlphaSize + " depth " + mDepthSize + " stencil " + mStencilSize + " type " + (mIsGles3 ? "GLES3" : mIsGles2 ? "GLES2" : "GLES"));
for(EGLConfig config : configs) {
if ( config == null )
continue;
@@ -711,7 +713,7 @@ public class GLSurfaceView_SDL extends SurfaceView implements SurfaceHolder.Call
EGL10.EGL_STENCIL_SIZE, 0);
int rendertype = findConfigAttrib(egl, display, config,
EGL10.EGL_RENDERABLE_TYPE, 0);
- int desiredtype = mIsGles2 ? EGL_OPENGL_ES2_BIT : EGL_OPENGL_ES_BIT;
+ int desiredtype = mIsGles3 ? EGL_OPENGL_ES3_BIT : mIsGles2 ? EGL_OPENGL_ES2_BIT : EGL_OPENGL_ES_BIT;
int nativeRender = findConfigAttrib(egl, display, config,
EGL10.EGL_NATIVE_RENDERABLE, 0);
int caveat = findConfigAttrib(egl, display, config,
@@ -743,6 +745,8 @@ public class GLSurfaceView_SDL extends SurfaceView implements SurfaceHolder.Call
cfgcur += "GLES";
if((rendertype & EGL_OPENGL_ES2_BIT) != 0)
cfgcur += " GLES2";
+ if((rendertype & EGL_OPENGL_ES3_BIT) != 0)
+ cfgcur += " GLES3";
if((rendertype & EGL_OPENGL_BIT) != 0)
cfgcur += " OPENGL";
if((rendertype & EGL_OPENVG_BIT) != 0)
@@ -782,6 +786,11 @@ public class GLSurfaceView_SDL extends SurfaceView implements SurfaceHolder.Call
return mIsGles2;
}
+ public boolean isGles3Required()
+ {
+ return mIsGles3;
+ }
+
private int[] mValue;
// Subclasses can adjust these values:
protected int mRedSize;
@@ -791,11 +800,13 @@ public class GLSurfaceView_SDL extends SurfaceView implements SurfaceHolder.Call
protected int mDepthSize;
protected int mStencilSize;
protected boolean mIsGles2 = false;
+ protected boolean mIsGles3 = false;
public static final int EGL_OPENGL_ES_BIT = 1;
public static final int EGL_OPENVG_BIT = 2;
public static final int EGL_OPENGL_ES2_BIT = 4;
public static final int EGL_OPENGL_BIT = 8;
+ public static final int EGL_OPENGL_ES3_BIT = 16;
}
/**
@@ -804,8 +815,8 @@ public class GLSurfaceView_SDL extends SurfaceView implements SurfaceHolder.Call
*
*/
private static class SimpleEGLConfigChooser16 extends ComponentSizeChooser {
- public SimpleEGLConfigChooser16(boolean withDepthBuffer, boolean stencil, boolean gles2) {
- super(4, 4, 4, 0, withDepthBuffer ? 16 : 0, stencil ? 8 : 0, gles2);
+ public SimpleEGLConfigChooser16(boolean withDepthBuffer, boolean stencil, boolean gles2, boolean gles3) {
+ super(4, 4, 4, 0, withDepthBuffer ? 16 : 0, stencil ? 8 : 0, gles2, gles3);
// Adjust target values. This way we'll accept a 4444 or
// 555 buffer if there's no 565 buffer available.
mRedSize = 5;
@@ -815,8 +826,8 @@ public class GLSurfaceView_SDL extends SurfaceView implements SurfaceHolder.Call
}
private static class SimpleEGLConfigChooser24 extends ComponentSizeChooser {
- public SimpleEGLConfigChooser24(boolean withDepthBuffer, boolean stencil, boolean gles2) {
- super(8, 8, 8, 0, withDepthBuffer ? 16 : 0, stencil ? 8 : 0, gles2);
+ public SimpleEGLConfigChooser24(boolean withDepthBuffer, boolean stencil, boolean gles2, boolean gles3) {
+ super(8, 8, 8, 0, withDepthBuffer ? 16 : 0, stencil ? 8 : 0, gles2, gles3);
mRedSize = 8;
mGreenSize = 8;
mBlueSize = 8;
@@ -824,21 +835,21 @@ public class GLSurfaceView_SDL extends SurfaceView implements SurfaceHolder.Call
}
private static class SimpleEGLConfigChooser32 extends ComponentSizeChooser {
- public SimpleEGLConfigChooser32(boolean withDepthBuffer, boolean stencil, boolean gles2) {
- super(8, 8, 8, 8, withDepthBuffer ? 16 : 0, stencil ? 8 : 0, gles2);
+ public SimpleEGLConfigChooser32(boolean withDepthBuffer, boolean stencil, boolean gles2, boolean gles3) {
+ super(8, 8, 8, 8, withDepthBuffer ? 16 : 0, stencil ? 8 : 0, gles2, gles3);
mRedSize = 8;
mGreenSize = 8;
mBlueSize = 8;
mAlphaSize = 8;
}
}
- private static ComponentSizeChooser getEglConfigChooser(int videoDepthBpp, boolean withDepthBuffer, boolean stencil, boolean gles2) {
+ private static ComponentSizeChooser getEglConfigChooser(int videoDepthBpp, boolean withDepthBuffer, boolean stencil, boolean gles2, boolean gles3) {
if(videoDepthBpp == 16)
- return new SimpleEGLConfigChooser16(withDepthBuffer, stencil, gles2);
+ return new SimpleEGLConfigChooser16(withDepthBuffer, stencil, gles2, gles3);
if(videoDepthBpp == 24)
- return new SimpleEGLConfigChooser24(withDepthBuffer, stencil, gles2);
+ return new SimpleEGLConfigChooser24(withDepthBuffer, stencil, gles2, gles3);
if(videoDepthBpp == 32)
- return new SimpleEGLConfigChooser32(withDepthBuffer, stencil, gles2);
+ return new SimpleEGLConfigChooser32(withDepthBuffer, stencil, gles2, gles3);
return null;
};
@@ -883,9 +894,12 @@ public class GLSurfaceView_SDL extends SurfaceView implements SurfaceHolder.Call
*/
final int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
final int[] gles2_attrib_list = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE };
+ final int[] gles3_attrib_list = {EGL_CONTEXT_CLIENT_VERSION, 3, EGL10.EGL_NONE };
mEglContext = mEgl.eglCreateContext(mEglDisplay, mEglConfig,
- EGL10.EGL_NO_CONTEXT, mEGLConfigChooser.isGles2Required() ? gles2_attrib_list : null );
+ EGL10.EGL_NO_CONTEXT,
+ mEGLConfigChooser.isGles3Required() ? gles3_attrib_list :
+ mEGLConfigChooser.isGles2Required() ? gles2_attrib_list : null );
if( mEglContext == null || mEglContext == EGL10.EGL_NO_CONTEXT )
Log.e("SDL", "GLSurfaceView_SDL::EglHelper::start(): mEglContext is EGL_NO_CONTEXT, error: " + mEgl.eglGetError());
diff --git a/project/java/Globals.java b/project/java/Globals.java
index 81f710ac0..2d8ca7d5b 100644
--- a/project/java/Globals.java
+++ b/project/java/Globals.java
@@ -40,6 +40,7 @@ class Globals
public static boolean NeedDepthBuffer = false;
public static boolean NeedStencilBuffer = false;
public static boolean NeedGles2 = false;
+ public static boolean NeedGles3 = false;
public static boolean CompatibilityHacksVideo = false;
public static boolean CompatibilityHacksForceScreenUpdateMouseClick = true;
public static boolean CompatibilityHacksStaticInit = false;
diff --git a/project/java/MainActivity.java b/project/java/MainActivity.java
index db7ce5f86..8fd8caacc 100644
--- a/project/java/MainActivity.java
+++ b/project/java/MainActivity.java
@@ -1251,13 +1251,20 @@ public class MainActivity extends Activity
{
try
{
- if(Globals.NeedGles2)
+ if(Globals.NeedGles3)
+ {
+ System.loadLibrary("GLESv3");
+ Log.i("SDL", "libSDL: loaded GLESv3 lib");
+ }
+ else if(Globals.NeedGles2)
+ {
System.loadLibrary("GLESv2");
- Log.i("SDL", "libSDL: loaded GLESv2 lib");
+ Log.i("SDL", "libSDL: loaded GLESv2 lib");
+ }
}
catch ( UnsatisfiedLinkError e )
{
- Log.i("SDL", "libSDL: Cannot load GLESv2 lib");
+ Log.i("SDL", "libSDL: Cannot load GLESv3 or GLESv2 lib");
}
// Load all libraries
diff --git a/project/java/Settings.java b/project/java/Settings.java
index 92911adb9..39df48471 100644
--- a/project/java/Settings.java
+++ b/project/java/Settings.java
@@ -553,7 +553,7 @@ class Settings
static void Apply(MainActivity p)
{
setEnvVars(p);
- nativeSetVideoDepth(Globals.VideoDepthBpp, Globals.NeedGles2 ? 1 : 0);
+ nativeSetVideoDepth(Globals.VideoDepthBpp, Globals.NeedGles2 ? 1 : 0, Globals.NeedGles3 ? 1 : 0);
if(Globals.VideoLinearFilter)
nativeSetVideoLinearFilter();
if( Globals.CompatibilityHacksVideo )
@@ -958,7 +958,7 @@ class Settings
private static native void nativeSetMultitouchUsed();
private static native void nativeSetTouchscreenKeyboardUsed();
private static native void nativeSetVideoLinearFilter();
- private static native void nativeSetVideoDepth(int bpp, int gles2);
+ private static native void nativeSetVideoDepth(int bpp, int gles2, int gles3);
private static native void nativeSetCompatibilityHacks();
private static native void nativeSetVideoMultithreaded();
private static native void nativeSetVideoForceSoftwareMode();
diff --git a/project/java/Video.java b/project/java/Video.java
index d96bae253..3454ad472 100644
--- a/project/java/Video.java
+++ b/project/java/Video.java
@@ -991,7 +991,7 @@ class DemoGLSurfaceView extends GLSurfaceView_SDL {
public DemoGLSurfaceView(MainActivity context) {
super(context);
mParent = context;
- setEGLConfigChooser(Globals.VideoDepthBpp, Globals.NeedDepthBuffer, Globals.NeedStencilBuffer, Globals.NeedGles2);
+ setEGLConfigChooser(Globals.VideoDepthBpp, Globals.NeedDepthBuffer, Globals.NeedStencilBuffer, Globals.NeedGles2, Globals.NeedGles3);
mRenderer = new DemoRenderer(context);
setRenderer(mRenderer);
}
diff --git a/project/jni/application/ninslash/AndroidAppSettings.cfg b/project/jni/application/ninslash/AndroidAppSettings.cfg
index aaf486b08..df1a838a1 100644
--- a/project/jni/application/ninslash/AndroidAppSettings.cfg
+++ b/project/jni/application/ninslash/AndroidAppSettings.cfg
@@ -46,9 +46,13 @@ NeedDepthBuffer=n
# Enable OpenGL stencil buffer (needed only for 3-d applications, small speed decrease) (y) or (n)
NeedStencilBuffer=n
-# Try to use GLES 2.x context - will revert to GLES 1.X if unsupported by device
+# Use GLES 2.x context
# you need this option only if you're developing 3-d app (y) or (n)
-NeedGles2=y
+NeedGles2=n
+
+# Use GLES 3.x context
+# you need this option only if you're developing 3-d app (y) or (n)
+NeedGles3=y
# Use glshim library for provide OpenGL 1.x functionality to OpenGL ES accelerated cards (y) or (n)
UseGlshim=
@@ -253,7 +257,7 @@ CompiledLibraries="sdl_image freetype glu"
CustomBuildScript=n
# Aditional CFLAGS for application
-AppCflags='-O2 -flto'
+AppCflags='-O2 -flto -isystem jni/application/src/src/src/base/android'
# Aditional C++-specific compiler flags for application, added after AppCflags
AppCppflags=''
@@ -265,7 +269,7 @@ AppLdflags='-lEGL -flto'
AppOverlapsSystemHeaders=n
# Build only following subdirs (empty will build all dirs, ignored with custom script)
-AppSubdirsBuild='src/src src/src/base/system.c src/src/engine src/src/engine/client src/src/engine/shared src/src/engine/external/pnglite src/src/engine/external/wavpack src/src/engine/external/json-parser src/src/game src/src/game/client/* src/src/game/editor src/src/game/generated/protocol.cpp src/src/game/generated/client_data.cpp'
+AppSubdirsBuild='src/src src/src/base/android src/src/base/system.c src/src/engine src/src/engine/client src/src/engine/shared src/src/engine/external/pnglite src/src/engine/external/wavpack src/src/engine/external/json-parser src/src/game src/src/game/client/* src/src/game/editor src/src/game/generated/protocol.cpp src/src/game/generated/client_data.cpp'
# Exclude these files from build
AppBuildExclude=''
diff --git a/project/jni/application/ninslash/AndroidPreBuild.sh b/project/jni/application/ninslash/AndroidPreBuild.sh
index 7ff73dd8a..1b6a7b7cf 100755
--- a/project/jni/application/ninslash/AndroidPreBuild.sh
+++ b/project/jni/application/ninslash/AndroidPreBuild.sh
@@ -28,7 +28,7 @@ zip -r ../AndroidData/data.zip data *.txt *.cfg >/dev/null
for ARCH in armeabi-v7a x86; do
[ -e ../AndroidData/binaries-$ARCH.zip ] && continue
- rm -rf teeworlds_srv
+ rm -rf ninslash_srv
mkdir -p objs
# server-sources.txt generated by running bam server_release 2>&1 | tee build.log
# and parsing logs with grep -o ' [^ ]*[.]cp\?p\?' build.log | grep -v /zlib/ > ../server-sources.txt
@@ -47,13 +47,13 @@ for ARCH in armeabi-v7a x86; do
$CXX $CFLAGS -fno-exceptions -fno-rtti $OBJS $LDFLAGS -pie -flto -pthread -o ninslash_srv || exit 1
$STRIP --strip-unneeded ninslash_srv
' || exit 1
- mkdir -p bin-$ARCH
- cp ninslash_srv bin-$ARCH/
- cd bin-$ARCH
- zip ../../AndroidData/binaries-$ARCH.zip *
- cd ..
+ mkdir -p bin/$ARCH
+ mv -f ninslash_srv bin/$ARCH/
+ cd bin/$ARCH
+ zip ../../../AndroidData/binaries-$ARCH.zip *
+ cd ../..
done
-cp -f logo.png ../AndroidData/
+ln -s ../src/logo.png ../AndroidData/
exit 0
diff --git a/project/jni/application/ninslash/src b/project/jni/application/ninslash/src
index 1e7d43a87..cc10a1392 160000
--- a/project/jni/application/ninslash/src
+++ b/project/jni/application/ninslash/src
@@ -1 +1 @@
-Subproject commit 1e7d43a87129824b115722474e089934e333fe3b
+Subproject commit cc10a13927e52227ec5d04eb3f0f4e3a28cd1220
diff --git a/project/jni/sdl-1.2/include/SDL_clipboard.h b/project/jni/sdl-1.2/include/SDL_clipboard.h
new file mode 100644
index 000000000..a927b2402
--- /dev/null
+++ b/project/jni/sdl-1.2/include/SDL_clipboard.h
@@ -0,0 +1,28 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2016 Sam Lantinga
+
+ 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.
+*/
+
+/**
+ * \file SDL_clipboard.h
+ *
+ * Include file for SDL clipboard handling
+ */
+
+#include "SDL_screenkeyboard.h" /* SDL2 lololol */
diff --git a/project/jni/sdl-1.2/src/video/android/SDL_androidvideo-1.2.c b/project/jni/sdl-1.2/src/video/android/SDL_androidvideo-1.2.c
index 271c35ad1..0fa2e980a 100644
--- a/project/jni/sdl-1.2/src/video/android/SDL_androidvideo-1.2.c
+++ b/project/jni/sdl-1.2/src/video/android/SDL_androidvideo-1.2.c
@@ -146,7 +146,6 @@ SDL_Surface *SDL_CurrentVideoSurface = NULL;
static int HwSurfaceCount = 0;
static SDL_Surface ** HwSurfaceList = NULL;
void * glLibraryHandle = NULL;
-void * gl2LibraryHandle = NULL;
static Uint32 SDL_VideoThreadID = 0;
int SDL_ANDROID_InsideVideoThread()
@@ -218,13 +217,21 @@ static SDL_VideoDevice *ANDROID_CreateDevice(int devindex)
device->handles_any_size = 1; // Any video mode is OK
- glLibraryHandle = dlopen("libGLESv1_CM.so", RTLD_NOW | RTLD_GLOBAL);
- if(SDL_ANDROID_UseGles2)
+ if ( SDL_ANDROID_UseGles3 )
{
- gl2LibraryHandle = dlopen("libGLESv2.so", RTLD_NOW | RTLD_GLOBAL);
- __android_log_print(ANDROID_LOG_INFO, "libSDL", "Loading libGLESv2.so: %p", gl2LibraryHandle);
+ glLibraryHandle = dlopen("libGLESv3.so", RTLD_LAZY | RTLD_GLOBAL);
+ __android_log_print(ANDROID_LOG_INFO, "libSDL", "Loading libGLESv3.so: %p", glLibraryHandle);
}
-
+ else if ( SDL_ANDROID_UseGles2 )
+ {
+ glLibraryHandle = dlopen("libGLESv2.so", RTLD_LAZY | RTLD_GLOBAL);
+ __android_log_print(ANDROID_LOG_INFO, "libSDL", "Loading libGLESv2.so: %p", glLibraryHandle);
+ }
+ else
+ {
+ glLibraryHandle = dlopen("libGLESv1_CM.so", RTLD_LAZY | RTLD_GLOBAL);
+ }
+
return device;
}
@@ -1240,11 +1247,9 @@ void SDL_ANDROID_VideoContextRecreated()
static void* ANDROID_GL_GetProcAddress(_THIS, const char *proc)
{
#ifdef USE_GLSHIM
- void * func = glXGetProcAddress(proc);
+ void * func = glXGetProcAddress(proc);
#else
void * func = dlsym(glLibraryHandle, proc);
- if(!func && gl2LibraryHandle)
- func = dlsym(gl2LibraryHandle, proc);
#endif
__android_log_print(ANDROID_LOG_INFO, "libSDL", "ANDROID_GL_GetProcAddress(\"%s\"): %p", proc, func);
return func;
diff --git a/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c b/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c
index a71c3214e..db8ff94fa 100644
--- a/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c
+++ b/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c
@@ -99,6 +99,7 @@ int SDL_ANDROID_CompatibilityHacks = 0;
int SDL_ANDROID_BYTESPERPIXEL = 2;
int SDL_ANDROID_BITSPERPIXEL = 16;
int SDL_ANDROID_UseGles2 = 0;
+int SDL_ANDROID_UseGles3 = 0;
int SDL_ANDROID_ShowMouseCursor = 0;
SDL_Rect SDL_ANDROID_VideoDebugRect;
SDL_Color SDL_ANDROID_VideoDebugRectColor;
@@ -431,11 +432,12 @@ JAVA_EXPORT_NAME(Settings_nativeSetCompatibilityHacks) (JNIEnv* env, jobject thi
}
JNIEXPORT void JNICALL
-JAVA_EXPORT_NAME(Settings_nativeSetVideoDepth) (JNIEnv* env, jobject thiz, jint bpp, jint UseGles2)
+JAVA_EXPORT_NAME(Settings_nativeSetVideoDepth) (JNIEnv* env, jobject thiz, jint bpp, jint UseGles2, jint UseGles3)
{
SDL_ANDROID_BITSPERPIXEL = bpp;
SDL_ANDROID_BYTESPERPIXEL = SDL_ANDROID_BITSPERPIXEL / 8;
SDL_ANDROID_UseGles2 = UseGles2;
+ SDL_ANDROID_UseGles3 = UseGles3;
}
void SDLCALL SDL_ANDROID_GetClipboardText(char * buf, int len)
diff --git a/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.h b/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.h
index 8e8f99dd3..74733b174 100644
--- a/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.h
+++ b/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.h
@@ -55,6 +55,7 @@ extern int SDL_ANDROID_VideoForceSoftwareMode;
extern int SDL_ANDROID_CompatibilityHacks;
extern int SDL_ANDROID_ShowMouseCursor;
extern int SDL_ANDROID_UseGles2;
+extern int SDL_ANDROID_UseGles3;
extern int SDL_ANDROID_BYTESPERPIXEL;
extern int SDL_ANDROID_BITSPERPIXEL;
extern void SDL_ANDROID_TextInputInit(char * buffer, int len);
diff --git a/todo.txt b/todo.txt
index ef4ee70ca..b2350ab5c 100644
--- a/todo.txt
+++ b/todo.txt
@@ -17,8 +17,6 @@ TODO, which will get actually done
- UQM HD: add fonts from http://mosc-portal.bursa.ru/showthread.php?t=206 and switch back to joystick controls, set 4:3 aspect ratio as default.
-- SDL: implement SDL_GL_LoadLibrary() / SDL_GL_GetProcAddress() / SDL_GL_SetAttribute() / SDL_GL_GetAttribute().
-
- SDL: CompatibilityHacksForceScreenUpdate=y does not redraw screen after putting to background and restoring.
- SDL: request SD card permission on Android 6.