1

私はAndroidでfreetype2.4.2をコンパイルしましたが、FT_Set_Char_Size()を使おうとすると、この行のFT_Request_Size()関数のftobjs.cファイルでクラッシュします。

error = clazz->request_size( face->size, req );    //line 2832

私のコードは、Windows、Linux、Mac、iPhone、iPadで完全に機能します。しかし、ここに取引があります。/ Za "Disable Language Extensions"を使用してfreetypeをコンパイルするまで、Windows(vc ++)の同じ場所でまったく同じ問題が発生していました。

したがって、クラッシュの原因となっているのは、Androidでfreetypeがコンパイルされている方法であると確信しています。私は無駄にアンドロイドで言語拡張機能を無効にする方法を調べました。

これがfreetype用の私のAndroid.mkファイルです

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_C_INCLUDES += \
    $(LOCAL_PATH)/builds \
    $(LOCAL_PATH)/include

LOCAL_SRC_FILES:= \
    src/base/ftbbox.c \
    src/base/ftbitmap.c \
    src/base/ftglyph.c \
    src/base/ftstroke.c \
    src/base/ftxf86.c \
    src/base/ftbase.c \
    src/base/ftsystem.c \
    src/base/ftinit.c \
    src/base/ftgasp.c \
    src/raster/raster.c \
    src/sfnt/sfnt.c \
    src/smooth/smooth.c \
    src/autofit/autofit.c \
    src/truetype/truetype.c \
    src/cff/cff.c \
    src/psnames/psnames.c \
    src/pshinter/pshinter.c \
    src/type1/type1.c \
    src/cid/type1cid.c \
    src/pfr/pfr.c \
    src/type42/type42.c \
    src/winfonts/winfnt.c \
    src/pcf/pcf.c \
    src/psaux/psaux.c \
    src/bdf/bdf.c \
    src/gzip/ftgzip.c \
    src/lzw/ftlzw.c

LOCAL_CFLAGS += -DFT2_BUILD_LIBRARY
LOCAL_MODULE := freetype
LOCAL_LDLIBS := -ldl -llog

include $(BUILD_STATIC_LIBRARY)

私の完全なプロジェクトはここにあります

    http://digitalknob.googlecode.com

正常にコンパイルされ、エラーは発生しません。FT_Set_Char_Size()を使用するとクラッシュするだけです。数日間私を夢中にさせてくれます:Pどんな助けでも大歓迎です。

4

1 に答える 1

1

これが答えです。.apk ファイルは技術的に圧縮されているため、.apk ファイルからフォント ファイルをロードしていたことがずっと問題であることがわかりました。SDL では、SDL_RWops を使用して、.apk ファイルの assets フォルダー内にフォント ファイルを読み込みます。ftgles を使用してフォント ファイルを OpenGLES に読み込みます。完全な例はwww.digitalknob.comにあります。

SDL_RWops *file = SDL_RWFromFile(filename, "rb"); 

unsigned long fileLen; 
SDL_RWseek(file,0,SEEK_END); 
fileLen=SDL_RWtell(file); 
SDL_RWseek(file,0,SEEK_SET); 

//Allocate memory 
buffer=(unsigned char *)malloc(fileLen+1); 
if (!buffer){ 
   printf("Memory error!\n"); 
   SDL_RWclose(file); 
   return; 
} 

//Read file contents into buffer 
SDL_RWread(file, buffer, fileLen, 1); 
SDL_RWclose(file); 

texture_font = new FTGLTextureFont(buffer, fileLen); 
texture_font->FaceSize(18); 

//don't forget to free your buffer later.
//free(buffer);

SDL を使用していない場合は、フォント ファイルにアクセスするために zlib などが必要になります。

于 2012-09-01T22:45:29.163 に答える