เชเซเชฎ เชเซ เชฌเชงเชพ. เชเชเซ เชเชชเชฃเซ Android เชชเชฐ เชเซเชฎ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ sdl2 เชฒเชพเชเชฌเซเชฐเซเชฐเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชชเซเชฐเซเชเซเชเซเช เชเซเชตเซ เชฐเซเชคเซ เชคเซเชฏเชพเชฐ เชเชฐเชตเซ เชคเซ เชเซเชเชถเซเช.
เชชเซเชฐเชฅเชฎ เชคเชฎเชพเชฐเซ Android เชธเซเชเซเชกเชฟเชฏเซ เชกเชพเชเชจเชฒเซเชก เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ, เชคเซเชจเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซ เช
เชจเซ เช เชตเชฟเชเชพเชธ เชตเชพเชคเชพเชตเชฐเชฃเชฎเชพเช เชเชฐเซเชฐเซ เชเซ เชคเซ เชฌเชงเซเช. เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชฎเชพเชฐเซ เชชเชพเชธเซ เชนเชตเซ Kde Neon เชเซ, เช
เชจเซ เช เชธเชฟเชธเซเชเชฎ เชชเชฐ เชซเชพเชเชฒ /etc/environment เชเซ, เชคเซ เช เชซเชพเชเชฒ เชเชฌเซเชจเซเชเซเชฎเชพเช เช
เชธเซเชคเชฟเชคเซเชตเชฎเชพเช เชเซ. เชจเซเชเซเชจเชพ เชเชฒเซเชจเซ เชคเซเชฏเชพเช เชฆเชพเชเชฒ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
เชคเชฎเชพเชฐเซ เชธเชคเซเชคเชพเชตเชพเชฐ เชตเซเชฌเชธเชพเชเช เชชเชฐเชฅเซ NDK เชกเชพเชเชจเชฒเซเชก เชเชฐเชตเชพเชจเซ เชชเชฃ เชเชฐเซเชฐ เชเซ, เชคเซเชจเซ เชคเชฎเชพเชฐเซ เชนเซเชฎ เชกเชฟเชฐเซเชเซเชเชฐเซเชฎเชพเช เช
เชจเชชเซ
เช เชเชฐเซ เช
เชจเซ เชคเซเชจเซเช เชจเชพเชฎ NDK เชฐเชพเชเซ. เชเชเชณ เชคเชฎเชพเชฐเซ เชตเซเชฌเชธเชพเชเช เชชเชฐเชฅเซ SDL2 เชฒเชพเชเชฌเซเชฐเซเชฐเซ เชกเชพเชเชจเชฒเซเชก เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ
เชเชธเซเชเซเชธเชฎเชพเชเชฅเซ เชเชจเซเชกเซเชฐเซเชเชกเชฎเชพเช เชซเชพเชเชฒเซ เชตเชพเชเชเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ SDL_RWops เชซเชเชเซเชถเชจเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เช เชนเซเช เชซเซเชจเซเช เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ เชเซเชกเชจเชพ เชเชชเชฏเซเชเชจเซเช เชเชฆเชพเชนเชฐเชฃ เชเซ. เช เชเชฟเชธเซเชธเชพเชฎเชพเช, เช เชฎเซ FT_New_Face เชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเชคเชพ เชจเชฅเซ, เชชเชฐเชเชคเซ เชคเซเชจเชพ เชฌเชฆเชฒเซ เชชเชนเซเชฒเชพเชฅเซ เชตเชพเชเชเซเชฒ เชกเซเชเชพเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเซ FT_New_Memory_Face เชจเซ เชเชชเชฏเซเช เชเชฐเซเชถเซเช.
#ifdef __ANDROID__
snprintf ( path, 254, "fonts/%s", file );
SDL_RWops *rw = SDL_RWFromFile(path, "r" );
char *memory = ( char * ) calloc ( rw->hidden.androidio.size, 1 );
SDL_RWread(rw, memory, 1, rw->hidden.androidio.size );
FT_New_Memory_Face(*this->ft_library, ( const FT_Byte * )memory, rw->hidden.androidio.size, 0, &this;->face );
SDL_RWclose(rw);
free ( memory );
#else
snprintf ( path, 254, "%s/fonts/%s", DEFAULT_ASSETS, file );
if ( access ( path, F_OK ) ) {
fprintf ( stderr, "not found font: %sn", path );
exit ( EXIT_FAILURE );
}
struct stat st;
stat ( path, &st; );
FILE *rw = fopen ( path, "r" );
char *memory = ( char * ) calloc ( st.st_size, 1 );
fread ( memory, 1, st.st_size, rw );
FT_New_Memory_Face ( *this->ft_library, ( const FT_Byte * ) memory, st.st_size, 0, &this;->face );
fclose ( rw );
free ( memory );
#endif
เชฎเซเช SDL2 เชนเซเชกเชฐเซเชจเซ เชเชจเซเชเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชนเซเชกเชฐ เชซเชพเชเชฒ เชชเชฃ เชฌเชจเชพเชตเซ เชเซ. เชเชจเซเชกเซเชฐเซเชเชก เชชเชฐ เชธเชซเชณ เชฅเชตเชพ เชฎเชพเชเซ เชธเชเชเชฒเชจ เชฎเชพเชเซ NO_SDL_GLEXT เชเชฐเซเชฐเซ เชเซ.
#ifdef __ANDROID__
#include "SDL.h"
#include "SDL_video.h"
#include "SDL_events.h"
#define NO_SDL_GLEXT
#include "SDL_opengl.h"
#include "SDL_opengles2.h"
#else
#include <SDL2/SDL.h>
#include <SDL2/SDL_video.h>
#include <SDL2/SDL_opengl.h>
#include <SDL2/SDL_opengles2.h>
#endif
เชคเซเชฅเซ เชชเซเชฐเซเชเซเชเซเช เชคเซเชฏเชพเชฐ เชเซ, Opengl Es 3.0 เชฎเชพเชเซ เชถเซเชกเชฐเซเชธ เชคเซเชฏเชพเชฐ เชเซ. เชนเชตเซ เชเชชเชฃเซ เชเชจเซเชกเซเชฐเซเชเชก-เชชเซเชฐเซเชเซเชเซเช เชฌเชจเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เช เชเชฐเชตเชพ เชฎเชพเชเซ, SDL2 เชเชฐเซเชเชพเชเชตเชจเซ เช เชจเชชเซเช เชเชฐเซ. เชฌเชฟเชฒเซเชก-เชธเซเชเซเชฐเซเชชเซเช เชชเชฐ เชเชพเช. เช เชจเซ เช เชฎเซ เชคเซเชจเซ เช เชฐเซเชคเซ เชเชฐเซเช เชเซเช.
./androidbuild.sh com.xverizex.test main.cpp
เชจเซเชเซเชจเซ เชธเชเชฆเซเชถ เชฆเซเชเชพเชถเซ.
To build and install to a device for testing, run the following:
cd /home/cf/programs/SDL2-2.0.10/build/com.xverizex.test
./gradlew installDebug
com.xverizex.test เชชเชฐ เชเชพเช. com.xverizex.test/app/jni/src เชชเชฐ เชเชพเช. เช เชฎเซ เช เชฎเชพเชฐเชพ เชเซเชฎ เชชเซเชฐเซเชเซเชเซเชเชจเซ เชจเชเชฒ เชเชฐเซเช เชเซเช. เช เชจเซ เช เชฎเซ Android.mk เชซเชพเชเชฒ เชฌเชฆเชฒเซเช เชเซเช, เชฎเชพเชฐเชพ เชเชฟเชธเซเชธเชพเชฎเชพเช เชคเซ เชเชจเชพ เชเซเชตเซเช เชฒเชพเชเซ เชเซ.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := main
SDL_PATH := ../SDL
FREETYPE_PATH := ../Freetype2
LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include $(LOCAL_PATH)/$(FREETYPE_PATH)/include
# Add your application source files here...
LOCAL_SRC_FILES := ./engine/lang.cpp ./engine/actor.cpp ./engine/sprite.cpp ./engine/shaders.cpp ./engine/box.cpp ./engine/menubox.cpp ./engine/load_manager.cpp ./engine/main.cpp ./engine/font.cpp ./engine/model.cpp ./engine/button.cpp ./theme.cpp ./level_manager.cpp ./menu/menu.cpp
LOCAL_SHARED_LIBRARIES := SDL2 Freetype2
LOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -llog
include $(BUILD_SHARED_LIBRARY)
เชเซเชฎ เชคเชฎเซ เชชเชนเซเชฒเซเชฅเซ เช เชจเซเชเชงเซเชฏเซเช เชนเชถเซ, เชนเซเช เชซเซเชฐเซเชเชพเชเชช 2 เชฒเชพเชเชฌเซเชฐเซเชฐเซเชจเซ เชชเชฃ เชธเชฎเชพเชตเซเชถ เชเชฐเซเช เชเซเช. เชฎเชจเซ เชเชจเซเชกเซเชฐเซเชเชก เชฎเชพเชเซ เชเซเชฅเชฌ เชชเชฐ เชคเซเชฏเชพเชฐ เชเช เชฎเชณเซเชฏเซเช, เชชเชฐเชเชคเซ เชคเซ เชเชพเชฎ เชเชฐเชคเซเช เชจเชฅเซ, เชฎเชพเชฐเซ เชเชเชเช เชฌเชฆเชฒเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เช เชฎเซ เชกเชฟเชฐเซเชเซเชเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจ/src/main/assets เชชเชฃ เชฌเชจเชพเชตเซเช เชเซเช. เช เชฎเซ เชคเซเชฎเชพเช เช เชฎเชพเชฐเชพ เชธเชเชธเชพเชงเชจเซ เชฎเซเชเซเช เชเซเช (เชซเซเชจเซเชเซเชธ, เชธเซเชชเซเชฐเชพเชเชเซเชธ, 3D เชฎเซเชกเชฒ).
เชนเชตเซ เชเชพเชฒเซ Android เชฎเชพเชเซ Freetype2 เชจเซ เชเซเช เชตเซเช. เชฎเชพเชฐเชพ เชเซเชฅเชฌ เชชเชฐเชฅเซ เชกเชพเชเชจเชฒเซเชก เชเชฐเซ
เชธเซเชฐเซเชธ: www.habr.com