ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅ Π²ΡΠΈΡΠΊΠΈ. ΠΠ½Π΅Ρ ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° sdl2, Π·Π° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΈΠ³ΡΠ°ΡΠ° Π½Π° android.
ΠΡΡΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈΡΠ΅ Android Studio, Π΄Π° Π³ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΈ Π²ΡΠΈΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π² ΡΠ°Π·ΠΈ ΡΡΠ΅Π΄Π° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠΌΠ°ΠΌ Kde Neon ΠΈ ΠΈΠΌΠ° ΡΠ°ΠΉΠ» /etc/environment Π½Π° ΡΠ°Π·ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°, ΡΡΡΠΈΡΡ ΡΠ°ΠΉΠ» ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° Π² ubuntu. Π’Π°ΠΌ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Ρ ΡΠ°ΠΊΠΈΠ²Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈΡΠ΅ NDK ΠΎΡ ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈΡ ΡΠ°ΠΉΡ, Π΄Π° Π³ΠΎ ΡΠ°Π·Π°ΡΡ
ΠΈΠ²ΠΈΡΠ°ΡΠ΅ Π²ΡΠ² Π²Π°ΡΠ°ΡΠ° Π΄ΠΎΠΌΠ°ΡΠ½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΈ Π΄Π° Π³ΠΎ ΠΏΡΠ΅ΠΈΠΌΠ΅Π½ΡΠ²Π°ΡΠ΅ Π½Π° NDK. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° SDL2 ΠΎΡ ΡΠ°ΠΉΡΠ°
ΠΠ° Π΄Π° ΡΠ΅ΡΠ΅ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π² android ΠΎΡ Π°ΠΊΡΠΈΠ²ΠΈ, ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ 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 Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π·Π° ΡΡΠΏΠ΅ΡΠ½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π·Π° Android.
#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. Π‘Π΅Π³Π° ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ android-ΠΏΡΠΎΠ΅ΠΊΡ. ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°, ΡΠ°Π·ΠΎΠΏΠ°ΠΊΠΎΠ²Π°ΠΉΡΠ΅ Π°ΡΡ ΠΈΠ²Π° SDL2. ΠΡΠΈΠ΄Π΅ΡΠ΅ Π½Π° build-scripts. Π Π½ΠΈΠ΅ Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠΌ.
./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)
ΠΠ°ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅ Π±ΠΈ ΡΡΠ΅ Π·Π°Π±Π΅Π»ΡΠ·Π°Π»ΠΈ, Π²ΠΊΠ»ΡΡΠ²Π°ΠΌ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Freetype2. ΠΠ°ΠΌΠ΅ΡΠΈΡ Π΅Π΄ΠΈΠ½ Π³ΠΎΡΠΎΠ² Π² github Π·Π° android, Π½ΠΎ Π½Π΅ ΡΡΠ°Π½Π°, ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½Ρ Π½Π΅ΡΠΎ. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° app/src/main/assets. ΠΠΈΠ΅ Π²Π»Π°Π³Π°ΠΌΠ΅ Π½Π°ΡΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π² Π½Π΅Π³ΠΎ (ΡΡΠΈΡΡΠΎΠ²Π΅, ΡΠΏΡΠ°ΠΉΡΠΎΠ²Π΅, 3D ΠΌΠΎΠ΄Π΅Π»ΠΈ).
Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Π½Π°ΡΡΡΠΎΠΈΠΌ Freetype2 Π·Π° Android. ΠΠ·ΡΠ΅Π³Π»Π΅ΡΠ΅ ΠΎΡ ΠΌΠΎΡ github
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com