Fixed video output for emulator, some support for NDK r8b
This commit is contained in:
4
build.sh
4
build.sh
@@ -14,8 +14,10 @@ if ( grep "package $AppFullName;" project/src/Globals.java > /dev/null && \
|
||||
fi
|
||||
|
||||
MYARCH=linux-x86
|
||||
NCPU=4
|
||||
if uname -s | grep -i "linux" > /dev/null ; then
|
||||
MYARCH=linux-x86
|
||||
NCPU=`cat /proc/cpuinfo | grep -c -i processor`
|
||||
fi
|
||||
if uname -s | grep -i "darwin" > /dev/null ; then
|
||||
MYARCH=darwin-x86
|
||||
@@ -26,7 +28,7 @@ fi
|
||||
|
||||
rm -r -f project/bin/* # New Android SDK introduced some lame-ass optimizations to the build system which we should take care about
|
||||
|
||||
cd project && env PATH=$NDKBUILDPATH nice -n19 ndk-build V=1 -j4 && \
|
||||
cd project && env PATH=$NDKBUILDPATH nice -n19 ndk-build V=1 -j$NCPU && \
|
||||
{ grep "CustomBuildScript=y" ../AndroidAppSettings.cfg > /dev/null && \
|
||||
[ -`which ndk-build | xargs readlink -f | grep '/android-ndk-r[56789]'` != - ] && \
|
||||
echo Stripping libapplication.so by hand \
|
||||
|
||||
@@ -17,6 +17,10 @@ $(warning Cannot determine NDK version, assuming NDK r5c - please do not rename
|
||||
NDK_VERSION := r5c
|
||||
endif
|
||||
|
||||
ifneq ($(findstring r8b,$(NDK_VERSION))$(findstring r8,$(NDK_VERSION))$(findstring r9,$(NDK_VERSION)),)
|
||||
#$(info Building with NDK r8b or newer)
|
||||
NDK_R8B_TOOLCHAIN := 1
|
||||
endif
|
||||
ifneq ($(findstring r4-crystax,$(NDK_VERSION)),)
|
||||
#$(info Building with CrystaX r4 toolchain - internal STLPort disabled)
|
||||
CRYSTAX_TOOLCHAIN := 1
|
||||
|
||||
@@ -41,7 +41,9 @@ LOCAL_SHARED_LIBRARIES := sdl-$(SDL_VERSION) $(filter-out $(APP_AVAILABLE_STATIC
|
||||
|
||||
LOCAL_STATIC_LIBRARIES := $(filter $(APP_AVAILABLE_STATIC_LIBS), $(COMPILED_LIBRARIES))
|
||||
|
||||
#LOCAL_STATIC_LIBRARIES += gnustl_static
|
||||
APP_STL := gnustl_static
|
||||
|
||||
LOCAL_STATIC_LIBRARIES += gnustl_static
|
||||
|
||||
LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog -lz
|
||||
|
||||
@@ -49,9 +51,13 @@ LOCAL_LDFLAGS := -Lobj/local/armeabi
|
||||
|
||||
LOCAL_LDFLAGS += $(APPLICATION_ADDITIONAL_LDFLAGS)
|
||||
|
||||
#ifneq ($NDK_R8B_TOOLCHAIN,) # They've changed the path, yet again
|
||||
#LOCAL_C_INCLUDES += $(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/$(NDK_TOOLCHAIN_VERSION)/include $(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/$(NDK_TOOLCHAIN_VERSION)/libs/$(TARGET_ARCH_ABI)/include
|
||||
#LOCAL_LDLIBS += -L$(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/$(NDK_TOOLCHAIN_VERSION)/libs/$(TARGET_ARCH_ABI) -lgnustl_static
|
||||
#else
|
||||
ifneq ($(NDK_R7_TOOLCHAIN)$(CRYSTAX_R7_TOOLCHAIN),) # NDK r7 broke it even more
|
||||
LOCAL_C_INCLUDES += $(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/include
|
||||
LOCAL_LDLIBS += -L$(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/libs/$(TARGET_ARCH_ABI) -lgnustl_static
|
||||
#LOCAL_C_INCLUDES += $(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/include
|
||||
#LOCAL_LDLIBS += -L$(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/libs/$(TARGET_ARCH_ABI) -lgnustl_static
|
||||
# You can have multiple C++ file extensions starting from NDK r7
|
||||
LOCAL_CPP_EXTENSION := .cpp .cxx .cc
|
||||
else
|
||||
@@ -60,6 +66,7 @@ LOCAL_C_INCLUDES += $(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/include
|
||||
LOCAL_LDLIBS += -L$(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/libs/$(TARGET_ARCH_ABI) -lstdc++
|
||||
endif
|
||||
endif
|
||||
#endif
|
||||
|
||||
#LIBS_WITH_LONG_SYMBOLS := $(strip $(shell \
|
||||
# for f in $(LOCAL_PATH)/../../obj/local/armeabi/*.so ; do \
|
||||
|
||||
@@ -33,7 +33,7 @@ RedefinedKeysScreenKb="0 1 2 3 4 5 6 7 8 9"
|
||||
StartupMenuButtonTimeout=3000
|
||||
HiddenMenuOptions='OptionalDownloadConfig'
|
||||
FirstStartMenuOptions=''
|
||||
MultiABI=y
|
||||
MultiABI=n
|
||||
AppVersionCode=101
|
||||
AppVersionName="1.01"
|
||||
ResetSdlConfigForThisVersion=n
|
||||
|
||||
@@ -23,9 +23,11 @@
|
||||
/*----------------------------------------------------------
|
||||
Definitions...
|
||||
----------------------------------------------------------*/
|
||||
|
||||
#define SCREEN_W 320
|
||||
#define SCREEN_H 240
|
||||
|
||||
|
||||
#define BALLS 300
|
||||
|
||||
#define COLORS 2
|
||||
@@ -405,49 +407,6 @@ void tiled_back(SDL_Surface *back, SDL_Surface *screen, int xo, int yo)
|
||||
SDL_BlitSurface(back, NULL, screen, &r);
|
||||
}
|
||||
|
||||
#pragma GCC push_options
|
||||
#pragma GCC optimize ("O0")
|
||||
extern "C" unsigned misaligned_mem_access(unsigned value, unsigned shift);
|
||||
|
||||
unsigned misaligned_mem_access(unsigned value, unsigned shift)
|
||||
{
|
||||
volatile unsigned *iptr = NULL;
|
||||
volatile char *cptr = NULL;
|
||||
volatile unsigned ret = 0;
|
||||
|
||||
#if defined(__GNUC__)
|
||||
# if defined(__i386__)
|
||||
/* Enable Alignment Checking on x86 */
|
||||
__asm__("pushf\norl $0x40000,(%esp)\npopf");
|
||||
# elif defined(__x86_64__)
|
||||
/* Enable Alignment Checking on x86_64 */
|
||||
__asm__("pushf\norl $0x40000,(%rsp)\npopf");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* malloc() always provides aligned memory */
|
||||
cptr = (volatile char *)malloc(sizeof(unsigned) + 10);
|
||||
|
||||
/* Increment the pointer by one, making it misaligned */
|
||||
iptr = (volatile unsigned *) (cptr + shift);
|
||||
|
||||
/* Dereference it as an int pointer, causing an unaligned access */
|
||||
/* GCC usually tries to optimize this, thus our test succeeds when it should fail, if we remove "volatile" specifiers */
|
||||
*iptr = value;
|
||||
//memcpy( &ret, iptr, sizeof(unsigned) );
|
||||
ret = *iptr;
|
||||
/*
|
||||
*((volatile char *)(&ret) + 0) = cptr[shift+0];
|
||||
*((volatile char *)(&ret) + 1) = cptr[shift+1];
|
||||
*((volatile char *)(&ret) + 2) = cptr[shift+2];
|
||||
*((volatile char *)(&ret) + 3) = cptr[shift+3];
|
||||
*/
|
||||
free((void *)cptr);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#pragma GCC pop_options
|
||||
|
||||
/*----------------------------------------------------------
|
||||
main()
|
||||
----------------------------------------------------------*/
|
||||
@@ -604,23 +563,7 @@ int main(int argc, char* argv[])
|
||||
fps = (float)fps_count * 1000.0 / (tick - fps_start);
|
||||
fps_count = 0;
|
||||
fps_start = tick;
|
||||
|
||||
*((unsigned char *)(&val0) + 0) += 1;
|
||||
*((unsigned char *)(&val0) + 1) += 1;
|
||||
*((unsigned char *)(&val0) + 2) += 1;
|
||||
*((unsigned char *)(&val0) + 3) += 1;
|
||||
}
|
||||
// MISALIGNED MEMORY ACCESS HERE! However all the devices that I have won't report it and won't send a signal or write to the /proc/kmsg,
|
||||
// despite the /proc/cpu/alignment flag set.
|
||||
val1 = misaligned_mem_access(val0, 1);
|
||||
val2 = misaligned_mem_access(val0, 2);
|
||||
val3 = misaligned_mem_access(val0, 3);
|
||||
/*
|
||||
print_num_hex(screen, font_hex, 0, 40, val0);
|
||||
print_num_hex(screen, font_hex, 0, 60, val1);
|
||||
print_num_hex(screen, font_hex, 0, 80, val2);
|
||||
print_num_hex(screen, font_hex, 0, 100, val3);
|
||||
*/
|
||||
|
||||
print_num(screen, font, screen->w-37, screen->h-12, fps);
|
||||
++fps_count;
|
||||
|
||||
@@ -14,13 +14,12 @@ NDK=`readlink -f $NDK`
|
||||
LOCAL_PATH=`dirname $0`
|
||||
LOCAL_PATH=`cd $LOCAL_PATH && pwd`
|
||||
|
||||
SCRIPT=setEnvironment-r4b.sh
|
||||
CRYSTAX_WCHAR=
|
||||
if [ -n "`echo $NDK | grep 'android-ndk-r[56789]'`" ]; then
|
||||
if [ -n "`echo $NDK | grep 'android-ndk-r\(8b\|9\)'`" ]; then
|
||||
SCRIPT=setEnvironment-r8b.sh
|
||||
elif [ -n "`echo $NDK | grep 'android-ndk-r[5678]'`" ]; then
|
||||
SCRIPT=setEnvironment-r5b.sh
|
||||
# if [ -n "`echo $NDK | grep 'android-ndk-r[56789]-crystax'`" ]; then
|
||||
# CRYSTAX_WCHAR=1
|
||||
# fi
|
||||
else
|
||||
SCRIPT=setEnvironment-r4b.sh
|
||||
fi
|
||||
|
||||
env CRYSTAX_WCHAR=$CRYSTAX_WCHAR $LOCAL_PATH/$SCRIPT "$@"
|
||||
env $LOCAL_PATH/$SCRIPT "$@"
|
||||
|
||||
@@ -115,7 +115,9 @@ oldGlState;
|
||||
static inline void beginDrawingTex()
|
||||
{
|
||||
// Save OpenGL state
|
||||
// TODO: this code does not work on 1.6 emulator, and on some older devices
|
||||
glGetError(); // Clear error flag
|
||||
// This code does not work on 1.6 emulator, and on some older devices
|
||||
// However GLES 1.1 spec defines all theese values, so it's a device fault for not implementing them
|
||||
oldGlState.texture2d = glIsEnabled(GL_TEXTURE_2D);
|
||||
glGetIntegerv(GL_TEXTURE_BINDING_2D, &oldGlState.textureId);
|
||||
glGetFloatv(GL_CURRENT_COLOR, &(oldGlState.color[0]));
|
||||
@@ -126,6 +128,18 @@ static inline void beginDrawingTex()
|
||||
glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, &oldGlState.texFilter1);
|
||||
glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &oldGlState.texFilter2);
|
||||
// It's very unlikely that some app will use GL_TEXTURE_CROP_RECT_OES, so just skip it
|
||||
if( glGetError() != GL_NO_ERROR )
|
||||
{
|
||||
// Make the video somehow work on emulator
|
||||
oldGlState.texture2d = GL_FALSE;
|
||||
oldGlState.textureId = 0;
|
||||
oldGlState.texEnvMode = GL_MODULATE;
|
||||
oldGlState.blend = GL_FALSE;
|
||||
oldGlState.blend1 = GL_SRC_ALPHA;
|
||||
oldGlState.blend2 = GL_ONE_MINUS_SRC_ALPHA;
|
||||
oldGlState.texFilter1 = GL_NEAREST;
|
||||
oldGlState.texFilter2 = GL_NEAREST;
|
||||
}
|
||||
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
}
|
||||
@@ -133,12 +147,12 @@ static inline void beginDrawingTex()
|
||||
static inline void endDrawingTex()
|
||||
{
|
||||
// Restore OpenGL state
|
||||
if( oldGlState.texture2d == GL_FALSE)
|
||||
if( oldGlState.texture2d == GL_FALSE )
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
glBindTexture(GL_TEXTURE_2D, oldGlState.textureId);
|
||||
glColor4f(oldGlState.color[0], oldGlState.color[1], oldGlState.color[2], oldGlState.color[3]);
|
||||
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, oldGlState.texEnvMode);
|
||||
if( oldGlState.blend == GL_FALSE)
|
||||
if( oldGlState.blend == GL_FALSE )
|
||||
glDisable(GL_BLEND);
|
||||
glBlendFunc(oldGlState.blend1, oldGlState.blend2);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, oldGlState.texFilter1);
|
||||
|
||||
Reference in New Issue
Block a user