ืคึผืจื™ืคึผืขืจื™ื ื’ ืึท SDL2 ืคึผืจื•ื™ืขืงื˜ ืฆื• ืœื•ื™ืคืŸ ืื•ื™ืฃ ืึทื ื“ืจื•ื™ื“

ื ื’ื•ื˜ืŸ ื™ืขื“ืขืจ. ื”ื™ื™ึทื ื˜ ืžื™ืจ ื•ื•ืขืœืŸ ืงื•ืงืŸ ื•ื•ื™ ืฆื• ืฆื•ื’ืจื™ื™ื˜ืŸ ืึท ืคึผืจื•ื™ืขืงื˜ ืžื™ื˜ ื“ื™ sdl2 ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืฆื• ืœื•ื™ืคืŸ ืึท ืฉืคึผื™ืœ ืื•ื™ืฃ ืึทื ื“ืจื•ื™ื“.

ืขืจืฉื˜ืขืจ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืึธืคึผืœืึธื“ื™ืจืŸ ืึทื ื“ืจื•ื™ื“ ืกื˜ื•ื“ื™ืึธ, ื™ื ืกื˜ืึทืœื™ืจืŸ ืขืก ืื•ืŸ ืึทืœืฅ ื•ื•ืึธืก ืื™ื– ืคืืจืœืื ื’ื˜ ืื™ืŸ ื“ืขื ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืกื•ื•ื™ื•ื•ืข. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื™ืš ืื™ืฆื˜ ื”ืึธื‘ืŸ Kde Neon, ืื•ืŸ ืื•ื™ืฃ ื“ืขื ืกื™ืกื˜ืขื ืขืก ืื™ื– ืึท ื˜ืขืงืข /etc/environment, ื“ื™ ื–ืขืœื‘ืข ื˜ืขืงืข ื™ื’ื–ื™ืกืฅ ืื™ืŸ ื•ื‘ื•ื ื˜ื•. ื“ืืจืค ืŸ ื“ืืจ ืฃ ืืจืฒ ืŸ ื“ ื™ ืคืืœื’ื ื“ื™ืง ืข ื•ื•ืขืจื™ืึทื‘ืึทืœ ืŸ .

ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk

ืื™ืจ ืื•ื™ืš ื“ืึทืจืคึฟืŸ ืฆื• ืึธืคึผืœืึธื“ื™ืจืŸ NDK ืคึฟื•ืŸ ื“ืขืจ ื‘ืึทืึทืžื˜ืขืจ ื•ื•ืขื‘ื–ื™ื™ื˜ืœ, ืึทื ืคึผืึทืง ืขืก ืื™ืŸ ื“ื™ื™ืŸ ื”ื™ื™ื ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืื•ืŸ ืจืขื ืึทืžืข ืขืก ืฆื• NDK. ื“ืขืจื ืึธืš ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืึธืคึผืœืึธื“ื™ืจืŸ ื“ื™ SDL2 ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืคึฟื•ืŸ ื“ืขืจ ื•ื•ืขื‘ื–ื™ื™ื˜ืœ libsdl.org. ืฆื• ื ื•ืฆืŸ sdl2 ืคึฟืึทืจ ืึทื ื“ืจื•ื™ื“, ืขืก ืื™ื– ื•ื•ื™ื›ื˜ื™ืง ื ื™ืฉื˜ ืฆื• ื–ืึทืžืœืขืŸ ืขืก ืคึฟืึทืจ ื“ื™ ืงืึธืžืคึผื™ื•ื˜ืขืจ, ื•ื•ื™ื™ึทืœ ืขืก ื•ื•ืขื˜ ื ื™ืฉื˜ ืฆื•ื ื•ื™ืคื ืขืžืขืŸ ืคึฟืึทืจ ืึทื ื“ืจื•ื™ื“. ื›ึผื“ื™ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ื–ืึธืœ ืฆื•ื ื•ื™ืคืฉื˜ืขืœื  ื–ื™ืš, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืฉืึทืคึฟืŸ ืึท ืคึผืจื•ื™ืขืงื˜ ืื™ืŸ ืึทื ื“ืจื•ื™ื“ ืกื˜ื•ื“ื™ืึธ, ื™ืขื“ืขืจ ืื™ื™ื ืขืจ, ืฆื• ืึธื ื ืขืžืขืŸ ื“ื™ ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ, ืึทื ื“ืขืจืฉ 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)

ื•ื•ื™ ืื™ืจ ื”ืึธื˜ ืฉื•ื™ืŸ ื‘ืืžืขืจืงื˜, ืื™ืš ืื•ื™ืš ืึทืจื™ื™ึทื ื ืขืžืขืŸ ื“ื™ Freetype2 ื‘ื™ื‘ืœื™ืึธื˜ืขืง. ืื™ืš ื’ืขืคึฟื•ื ืขืŸ ืึท ื’ืจื™ื™ื˜-ื’ืขืžืื›ื˜ ืื™ื™ื ืขืจ ืื•ื™ืฃ ื’ื™ื˜ื”ื•ื‘ ืคึฟืึทืจ ืึทื ื“ืจื•ื™ื“, ืึธื‘ืขืจ ืขืก ื”ืื˜ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ, ืื™ืš ื“ืืจืฃ ืฆื• ื˜ื•ื™ืฉืŸ ืขืคึผืขืก. ืžื™ืจ ืื•ื™ืš ืžืึทื›ืŸ ืึท ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืึทืคึผ / src / ื”ื•ื™ืคึผื˜ / ืึทืกืขืฅ. ืžื™ืจ ืฉื˜ืขืœืŸ ืื•ื ื“ื–ืขืจ ืจืขืกื•ืจืกืŸ ืื™ืŸ ืขืก (ืคืึทื ืฅ, ืกืคึผืจื™ื˜ืขืก, 3 ื“ ืžืึธื“ืขืœืก).

ืื™ืฆื˜ ืœืึธื–ืŸ ืื•ื ื“ื– ืงืึทื ืคื™ื’ื™ืขืจ Freetype2 ืคึฟืึทืจ ืึทื ื“ืจื•ื™ื“. ืืจืืคืงืืคื™ืข ืคึฟื•ืŸ ืžื™ื™ืŸ ื’ื™ื˜ื”ื•ื‘ ืจื•ื ื’, ืื•ืŸ ื ืึธื›ืžืึทื›ืŸ ื“ื™ Freetype2 ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืฆื• ื“ื™ ืึทืคึผ / jni / ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ. ืึทืœืฅ ืื™ื– ื’ืจื™ื™ื˜. ืื™ืฆื˜ ืœื•ื™ืคืŸ ื“ื™ ื‘ืึทืคึฟืขืœ ./gradlew installDebug ืื™ืŸ com.xverizex.test. ืฆื• ืงืขื ืขืŸ ืฆื• ืœื™ื™ื’ืŸ ื“ืขื ืฉืคึผื™ืœ ืฆื• ืึทื ื“ืจื•ื™ื“, ื“ื™ื‘ืึทื’ื™ื ื’ ืžื•ื–ืŸ ื–ื™ื™ืŸ ืขื ื™ื™ื‘ืึทืœื“ ืื™ืŸ ืึทื ื“ืจื•ื™ื“. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื’ื™ื™ืŸ ืฆื• ืกืขื˜ื˜ื™ื ื’ืก, ื’ื™ื™ืŸ ืฆื• "ืกื™ืกื˜ืขื", ื’ื™ื™ืŸ ืฆื• "ื•ื•ืขื’ืŸ ื˜ืึทื‘ืœืขื˜" ืื•ืŸ ื’ื™ื˜ ื“ื™ "ื‘ื•ื™ืขืŸ ื ื•ืžืขืจ" ืึธืคึผืฆื™ืข ื•ื•ืขื’ืŸ ื–ืขืงืก ืžืืœ. ื“ืขืจื ืึธืš ื’ื™ื™ืŸ ืฆื•ืจื™ืง ืื•ืŸ ื“ื™ ืึธืคึผืฆื™ืข ืคึฟืึทืจ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ื•ื•ืขื˜ ื“ืขืจืฉื™ื™ึทื ืขืŸ. ื’ื™ื™ืŸ ืื™ืŸ ืื•ืŸ ืงืขืจ ืขืก ืื•ื™ืฃ, ืื•ื™ืš ืงืขืจ ืื•ื™ืฃ ื“ื™ "ื•ืกื‘ ื“ื™ื‘ืึทื’ื™ื ื’" ืึธืคึผืฆื™ืข. ืื™ืฆื˜ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืึท ืฉืœื™ืกืœ ืคึฟืึทืจ ื“ื™ ื˜ืึทื‘ืœืขื˜. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ ืึทื“ื‘ ืคึผืจืึธื’ืจืึทื. ืžื™ืจ ืงืึทื˜ืขืจ ื“ื™ ืึทื“ื‘ ืฉืึธืœ ืื™ืŸ ื“ื™ ืงืึทื ืกืึธื•ืœ, ืื•ืŸ ืึท ืฉืœื™ืกืœ ืื•ื™ืก ืื™ืŸ ื“ื™ ื˜ืึทื‘ืœืขื˜ ื•ื•ืึธืก ืžื•ื–ืŸ ื–ื™ื™ืŸ ืื ื’ืขื ื•ืžืขืŸ. ืึทื– ืก ืขืก, ืื™ืฆื˜ ืฉืคึผื™ืœืขืจื™ื™ึท ืงืขื ืขืŸ ื–ื™ื™ืŸ ื“ืึทื•ื ืœืึธื•ื“ื™ื“ ืฆื• ื“ื™ื™ืŸ ื˜ืึทื‘ืœืขื˜.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’