ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ. Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΌΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ 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 ΠΈΠ· assets, Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ 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-project. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅ΠΌ Π°ΡΡ ΠΈΠ² 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
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com