更新时间:2022-11-03 08:01:31
我不认为你需要编写所有的包装器。
一起来看看。
我的FreeType Android.Mk文件看起来像这样
LOCAL_PATH:= $(叫我-DIR)
包括$(CLEAR_VARS)
LOCAL_C_INCLUDES + = \
$(LOCAL_PATH)/构建\
$(LOCAL_PATH)/包括
LOCAL_SRC_FILES:= \
SRC /基/ ftbbox.c \
SRC /基/ ftbitmap.c \
SRC /基/ ftglyph.c \
SRC /基/ ftstroke.c \
SRC /基/ ftxf86.c \
SRC /基/ ftbase.c \
SRC /基/ ftsystem.c \
SRC /基/ ftinit.c \
SRC /基/ ftgasp.c \
SRC /光栅/ raster.c \
SRC / SFNT / sfnt.c \
SRC /平/ smooth.c \
SRC /自动调整/ 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
包括$(BUILD_STATIC_LIBRARY)
我ftgles Android.mk文件看起来像这样
LOCAL_PATH:= $(叫我-DIR)
包括$(CLEAR_VARS)
LOCAL_MODULE:= FTGLES
LOCAL_CFLAGS:= -I $(LOCAL_PATH)/../的FreeType /包括
LOCAL_C_INCLUDES:= $(LOCAL_PATH)/ src目录\
$(LOCAL_PATH)/src/iGLU-1.0.0/include
LOCAL_SRC_FILES:= \
SRC / FTBuffer.cpp \
SRC / FTCharmap.cpp \
SRC / FTContour.cpp \
SRC / FTFace.cpp \
SRC / FTFont / FTBitmapFont.cpp \
SRC / FTFont / FTBufferFont.cpp \
SRC / FTFont / FTFont.cpp \
SRC / FTFont / FTFontGlue.cpp \
SRC / FTFont / FTOutlineFont.cpp \
SRC / FTFont / FTPixmapFont.cpp \
SRC / FTFont / FTPolygonFont.cpp \
SRC / FTFont / FTTextureFont.cpp \
SRC / FTGL / ftglesGlue.cpp \
SRC / FTGlyph / FTBitmapGlyph.cpp \
SRC / FTGlyph / FTBufferGlyph.cpp \
SRC / FTGlyph / FTGlyph.cpp \
SRC / FTGlyph / FTGlyphGlue.cpp \
SRC / FTGlyph / FTOutlineGlyph.cpp \
SRC / FTGlyph / FTPixmapGlyph.cpp \
SRC / FTGlyph / FTPolygonGlyph.cpp \
SRC / FTGlyph / FTTextureGlyph.cpp \
SRC / FTGlyphContainer.cpp \
SRC / FTLayout / FTLayout.cpp \
SRC / FTLayout / FTLayoutGlue.cpp \
SRC / FTLayout / FTSimpleLayout.cpp \
SRC / FTLibrary.cpp \
SRC / FTPoint.cpp \
SRC / FTSize.cpp \
SRC / FTVectoriser.cpp \
SRC / IGLU-1.0.0 / libtess / dict.c \
SRC / IGLU-1.0.0 / libtess / geom.c \
SRC / IGLU-1.0.0 / libtess / memalloc.c \
SRC / IGLU-1.0.0 / libtess / mesh.c \
SRC / IGLU-1.0.0 / libtess / normal.c \
SRC / IGLU-1.0.0 / libtess / priorityq.c \
SRC / IGLU-1.0.0 / libtess / render.c \
SRC / IGLU-1.0.0 / libtess / sweep.c \
SRC / IGLU-1.0.0 / libtess / tess.c \
SRC / IGLU-1.0.0 / libtess / tessmono.c \
SRC / IGLU-1.0.0 / libutil中/ error.c \
SRC / IGLU-1.0.0 / libutil中/ glue.c \
SRC / IGLU-1.0.0 / libutil中/ project.c \
SRC / IGLU-1.0.0 / libutil中/ registry.c
LOCAL_CFLAGS + = -DGL_GLEXT_PROTOTYPES -DFTGL_LIBRARY_STATIC
LOCAL_LDLIBS:= -ldl -lGLESv1_CM -lGLESv2 -llog
LOCAL_STATIC_LIBRARIES:=的FreeType
包括$(BUILD_SHARED_LIBRARY)
您可能会得到一些找不到gl.h错误。解决这些问题指向正确的地方。
现在我的主要Android.mk文件
LOCAL_PATH:= $(叫我-DIR)
包括$(CLEAR_VARS)
LOCAL_MODULE:=主
SDL_PATH:= ../SDL
LOCAL_C_INCLUDES:= \
$(LOCAL_PATH)/ $(SDL_PATH)/包括\
$(LOCAL_PATH)/../的FreeType /包括\
$(LOCAL_PATH)/../ ftgles / src目录\
../../../src/TestApp
LOCAL_CFLAGS:= \
-DFTGL_LIBRARY_STATIC
LOCAL_SRC_FILES:= $(SDL_PATH)/src/main/android/SDL_android_main.cpp \
../../../src/TestApp/app.cpp
LOCAL_SHARED_LIBRARIES:= SDL2 FTGLES
LOCAL_LDLIBS:= -lGLESv1_CM -llog
包括$(BUILD_SHARED_LIBRARY)
一切编译和伟大工程。我可以调用的FreeType和ftgles所有的C / C ++函数。我不能调整字体但是。 我有一个线程约在这里。
Freetype FT_Request_Size()崩溃在Android
I am tasked with writing an application that uses OpenGL ES 1.0 (or 1.1 if necessary) and I need to be able to render text on the screen. Bitmap text and textured fonts aren't really a choice here. I know for iOS there's FTGLES, which states that android support is in the "near future", but given the deadlines on my project, I need an answer (whether it works/could work/doesn't work/etc) much sooner than "the near future" unfortunately.
I've scoured through posts here and other places and haven't found much of anything that helps. I've tried using the JNI and NDK in Eclipse, but also nothing useful has come from that. I'd greatly appreciate if someone can point me in the right direction. I've also tried jumpcore, but the application isn't native code, it's all written in Java. I'm a bit surprised someone hasn't already resolved this (in a fashion that I could have found by now). Thanks to any and all that help me find a solution for this.
EDIT:
In the JNI folder, I placed the source (each in its own subfolder) for freetype and ftgles. I also had to compile a different version of sqlite to enable RTREE. I was getting caught up initially because I was compiling the wrong files. Hopefully this proves to be helpful.
Here's the Make file for the FTGLES Portion of the native code:
include $(CLEAR_VARS)
include $(JNI_DIR)/freetype/Android.mk
LOCAL_PATH := $(JNI_DIR)
include $(CLEAR_VARS)
GLES_PATH := $(JNI_DIR)/include/
FTGL_PATH := ftgles
FREETYPE_PATH := freetype
GLU_PATH := $(FTGL_PATH)/src/iGLU-1.0.0
FULL_FTGL_PATH := $(LOCAL_PATH)/$(FTGL_PATH)
FULL_FT_PATH := $(LOCAL_PATH)/$(FREETYPE_PATH)
FULL_GLU_PATH := $(LOCAL_PATH)/$(GLU_PATH)
FTGL_INCLUDE := -I$(FULL_FTGL_PATH) -I$(FULL_FTGL_PATH)/src -I$(FULL_FTGL_PATH)/src/FTGL -I$(FULL_FTGL_PATH)/src/FTFont -I$(FULL_FTGL_PATH)/src/FTGlyph -I$(FULL_FTGL_PATH)/src/FTLayout
FREETYPE_INCLUDE := -I$(FULL_FT_PATH) -I$(FULL_FT_PATH)/include -I$(FULL_FT_PATH)/include/freetype -I$(FULL_FT_PATH)/include/freetype/config -I$(FULL_FT_PATH)/include/freetype/internal -I$(FULL_FT_PATH)/include/freetype/internal/services -I$(FULL_FT_PATH)/freetype/include/freetype2/freetype -I$(FULL_FT_PATH)/freetype/include/freetype2/freetype/config
GLU_INCLUDE := -I$(FULL_GLU_PATH) -I$(FULL_GLU_PATH)/include -I$(FULL_GLU_PATH)/libtess -I$(FULL_GLU_PATH)/libutil -I$(GLES_PATH)
FTGL_FTFONT_SRC := $(FTGL_PATH)/src/FTFont/FTFont.cpp $(FTGL_PATH)/src/FTFont/FTFontGlue.cpp $(FTGL_PATH)/src/FTFont/FTOutlineFont.cpp $(FTGL_PATH)/src/FTFont/FTPolygonFont.cpp $(FTGL_PATH)/src/FTFont/FTTextureFont.cpp
FTGL_FTGLYPH_SRC := $(FTGL_PATH)/src/FTGlyph/FTGlyph.cpp $(FTGL_PATH)/src/FTGlyph/FTGlyphGlue.cpp $(FTGL_PATH)/src/FTGlyph/FTOutlineGlyph.cpp $(FTGL_PATH)/src/FTGlyph/FTPolygonGlyph.cpp $(FTGL_PATH)/src/FTGlyph/FTTextureGlyph.cpp
FTGL_FTLAYOUT_SRC := $(FTGL_PATH)/src/FTLayout/FTLayout.cpp $(FTGL_PATH)/src/FTLayout/FTLayoutGlue.cpp $(FTGL_PATH)/src/FTLayout/FTSimpleLayout.cpp
FTGL_SRC := $(FTGL_PATH)/src/FTBuffer.cpp $(FTGL_PATH)/src/FTCharmap.cpp $(FTGL_PATH)/src/FTContour.cpp $(FTGL_PATH)/src/FTFace.cpp $(FTGL_FTFONT_SRC) $(FTGL_PATH)/src/FTGL/ftglesglue.cpp $(FTGL_FTGLYPH_SRC) $(FTGL_PATH)/src/FTGlyphContainer.cpp $(FTGL_FTLAYOUT_SRC) $(FTGL_PATH)/src/FTLibrary.cpp $(FTGL_PATH)/src/FTPoint.cpp $(FTGL_PATH)/src/FTSize.cpp $(FTGL_PATH)/src/FTVectoriser.cpp
GLU_SRC := $(GLU_PATH)/libtess/dict.c $(GLU_PATH)/libtess/geom.c $(GLU_PATH)/libtess/memalloc.c $(GLU_PATH)/libtess/mesh.c $(GLU_PATH)/libtess/normal.c $(GLU_PATH)/libtess/priorityq.c $(GLU_PATH)/libtess/render.c $(GLU_PATH)/libtess/sweep.c $(GLU_PATH)/libtess/tess.c $(GLU_PATH)/libtess/tessmono.c
GLU_SRC2 := $(GLU_PATH)/libutil/error.c $(GLU_PATH)/libutil/glue.c $(GLU_PATH)/libutil/project.c $(GLU_PATH)/libutil/registry.c
#DEBUG MODE: Uncomment this and set android:debuggable in the manifest to true
# DEBUGMODE_FLAGS := -DSELF_EDIT
#RELEASE MODE: Comment the above line, uncomment below, android:debuggable false
DEBUGMODE_FLAGS := -DNDEBUG
LOCAL_MODULE := ftgl
LOCAL_CFLAGS := -Werror -DFT2_BUILD_LIBRARY=1 -DTARGET_ANDROID $(FTGL_INCLUDE) $(FREETYPE_INCLUDE) $(GLU_INCLUDE) $(DEBUGMODE_FLAGS)
LOCAL_SRC_FILES := $(FTGL_SRC) $(GLU_SRC) $(GLU_SRC2)
LOCAL_LDLIBS := -llog -lGLESv1_CM -lGLESv2 -landroid -lEGL -lOpenSLES
LOCAL_STATIC_LIBRARIES := freetype2-static
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := ftgles
LOCAL_CFLAGS := -Werror -DFT2_BUILD_LIBRARY=1 -DTARGET_ANDROID $(FTGL_INCLUDE) $(FREETYPE_INCLUDE) $(GLU_INCLUDE) $(DEBUGMODE_FLAGS)
LOCAL_LDLIBS := -llog -lGLESv1_CM -lGLESv2 -landroid -lEGL -lOpenSLES
LOCAL_SRC_FILES := ftgleswrapper.cpp
LOCAL_STATIC_LIBRARIES := ftgl freetype2-static
include $(BUILD_SHARED_LIBRARY)
I don't think you need to write all of those wrappers.
Take a look.
My freetype Android.Mk file looks like this
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)
My ftgles Android.mk file looks like this
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := FTGLES
LOCAL_CFLAGS := -I$(LOCAL_PATH)/../freetype/include
LOCAL_C_INCLUDES := $(LOCAL_PATH)/src \
$(LOCAL_PATH)/src/iGLU-1.0.0/include
LOCAL_SRC_FILES := \
src/FTBuffer.cpp \
src/FTCharmap.cpp \
src/FTContour.cpp \
src/FTFace.cpp \
src/FTFont/FTBitmapFont.cpp \
src/FTFont/FTBufferFont.cpp \
src/FTFont/FTFont.cpp \
src/FTFont/FTFontGlue.cpp \
src/FTFont/FTOutlineFont.cpp \
src/FTFont/FTPixmapFont.cpp \
src/FTFont/FTPolygonFont.cpp \
src/FTFont/FTTextureFont.cpp \
src/FTGL/ftglesGlue.cpp \
src/FTGlyph/FTBitmapGlyph.cpp \
src/FTGlyph/FTBufferGlyph.cpp \
src/FTGlyph/FTGlyph.cpp \
src/FTGlyph/FTGlyphGlue.cpp \
src/FTGlyph/FTOutlineGlyph.cpp \
src/FTGlyph/FTPixmapGlyph.cpp \
src/FTGlyph/FTPolygonGlyph.cpp \
src/FTGlyph/FTTextureGlyph.cpp \
src/FTGlyphContainer.cpp \
src/FTLayout/FTLayout.cpp \
src/FTLayout/FTLayoutGlue.cpp \
src/FTLayout/FTSimpleLayout.cpp \
src/FTLibrary.cpp \
src/FTPoint.cpp \
src/FTSize.cpp \
src/FTVectoriser.cpp \
src/iGLU-1.0.0/libtess/dict.c \
src/iGLU-1.0.0/libtess/geom.c \
src/iGLU-1.0.0/libtess/memalloc.c \
src/iGLU-1.0.0/libtess/mesh.c \
src/iGLU-1.0.0/libtess/normal.c \
src/iGLU-1.0.0/libtess/priorityq.c \
src/iGLU-1.0.0/libtess/render.c \
src/iGLU-1.0.0/libtess/sweep.c \
src/iGLU-1.0.0/libtess/tess.c \
src/iGLU-1.0.0/libtess/tessmono.c \
src/iGLU-1.0.0/libutil/error.c \
src/iGLU-1.0.0/libutil/glue.c \
src/iGLU-1.0.0/libutil/project.c \
src/iGLU-1.0.0/libutil/registry.c
LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DFTGL_LIBRARY_STATIC
LOCAL_LDLIBS := -ldl -lGLESv1_CM -lGLESv2 -llog
LOCAL_STATIC_LIBRARIES := freetype
include $(BUILD_SHARED_LIBRARY)
You may get some can't find gl.h errors. Fix them to point to the right place.
Now my main Android.mk file
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := main
SDL_PATH := ../SDL
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/$(SDL_PATH)/include \
$(LOCAL_PATH)/../freetype/include \
$(LOCAL_PATH)/../ftgles/src \
../../../src/TestApp
LOCAL_CFLAGS := \
-DFTGL_LIBRARY_STATIC
LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.cpp \
../../../src/TestApp/app.cpp
LOCAL_SHARED_LIBRARIES := SDL2 FTGLES
LOCAL_LDLIBS := -lGLESv1_CM -llog
include $(BUILD_SHARED_LIBRARY)
Everything compiles and works great. I can call all c/c++ functions in freetype and ftgles. I can not resize fonts however. I have a thread about it here.