From f120f9a2bb5ce852006471984e25d62298858e83 Mon Sep 17 00:00:00 2001 From: Dongkun Lee Date: Fri, 17 Nov 2023 21:33:27 +0900 Subject: [PATCH] Modify LoadBM Font --- projects/BMFontExtender.zip | Bin 15279 -> 0 bytes projects/BMFontExtender/LoadBMFontEX.patch | 0 projects/BMFontExtender/Makefile | 405 -------------------- projects/BMFontExtender/Makefile.Android | 300 --------------- projects/BMFontExtender/main.c | 94 ----- projects/BMFontExtender/main.code-workspace | 19 - projects/BMFontExtender/resources/LICENSE | 1 - src/rtext.c | 162 +------- 8 files changed, 8 insertions(+), 973 deletions(-) delete mode 100644 projects/BMFontExtender.zip delete mode 100644 projects/BMFontExtender/LoadBMFontEX.patch delete mode 100644 projects/BMFontExtender/Makefile delete mode 100644 projects/BMFontExtender/Makefile.Android delete mode 100644 projects/BMFontExtender/main.c delete mode 100644 projects/BMFontExtender/main.code-workspace delete mode 100644 projects/BMFontExtender/resources/LICENSE diff --git a/projects/BMFontExtender.zip b/projects/BMFontExtender.zip deleted file mode 100644 index c6057f615566389955ce7e8399c104552c5b8e77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15279 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⋘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 NJp=f6f#Z)~{|`)? Windows - ifeq ($(OS),Windows_NT) - PLATFORM_OS=WINDOWS - export PATH := $(COMPILER_PATH):$(PATH) - else - UNAMEOS=$(shell uname) - ifeq ($(UNAMEOS),Linux) - PLATFORM_OS=LINUX - endif - ifeq ($(UNAMEOS),FreeBSD) - PLATFORM_OS=BSD - endif - ifeq ($(UNAMEOS),OpenBSD) - PLATFORM_OS=BSD - endif - ifeq ($(UNAMEOS),NetBSD) - PLATFORM_OS=BSD - endif - ifeq ($(UNAMEOS),DragonFly) - PLATFORM_OS=BSD - endif - ifeq ($(UNAMEOS),Darwin) - PLATFORM_OS=OSX - endif - endif -endif -ifeq ($(PLATFORM),PLATFORM_RPI) - UNAMEOS=$(shell uname) - ifeq ($(UNAMEOS),Linux) - PLATFORM_OS=LINUX - endif -endif - -# RAYLIB_PATH adjustment for different platforms. -# If using GNU make, we can get the full path to the top of the tree. Windows? BSD? -# Required for ldconfig or other tools that do not perform path expansion. -ifeq ($(PLATFORM),PLATFORM_DESKTOP) - ifeq ($(PLATFORM_OS),LINUX) - RAYLIB_PREFIX ?= .. - RAYLIB_PATH = $(realpath $(RAYLIB_PREFIX)) - endif -endif -# Default path for raylib on Raspberry Pi, if installed in different path, update it! -# This is not currently used by src/Makefile. Not sure of its origin or usage. Refer to wiki. -# TODO: update install: target in src/Makefile for RPI, consider relation to LINUX. -ifeq ($(PLATFORM),PLATFORM_RPI) - RAYLIB_PATH ?= /home/pi/raylib -endif - -ifeq ($(PLATFORM),PLATFORM_WEB) - # Emscripten required variables - EMSDK_PATH ?= C:/emsdk - EMSCRIPTEN_PATH ?= $(EMSDK_PATH)/upstream/emscripten - CLANG_PATH = $(EMSDK_PATH)/upstream/bin - PYTHON_PATH = $(EMSDK_PATH)/python/3.9.2-1_64bit - NODE_PATH = $(EMSDK_PATH)/node/14.18.2_64bit/bin - export PATH = $(EMSDK_PATH);$(EMSCRIPTEN_PATH);$(CLANG_PATH);$(NODE_PATH);$(PYTHON_PATH):$$(PATH) -endif - -# Define raylib release directory for compiled library. -# RAYLIB_RELEASE_PATH points to provided binaries or your freshly built version -RAYLIB_RELEASE_PATH ?= $(RAYLIB_PATH)/src - -# EXAMPLE_RUNTIME_PATH embeds a custom runtime location of libraylib.so or other desired libraries -# into each example binary compiled with RAYLIB_LIBTYPE=SHARED. It defaults to RAYLIB_RELEASE_PATH -# so that these examples link at runtime with your version of libraylib.so in ../release/libs/linux -# without formal installation from ../src/Makefile. It aids portability and is useful if you have -# multiple versions of raylib, have raylib installed to a non-standard location, or want to -# bundle libraylib.so with your game. Change it to your liking. -# NOTE: If, at runtime, there is a libraylib.so at both EXAMPLE_RUNTIME_PATH and RAYLIB_INSTALL_PATH, -# The library at EXAMPLE_RUNTIME_PATH, if present, will take precedence over RAYLIB_INSTALL_PATH, -# Implemented for LINUX below with CFLAGS += -Wl,-rpath,$(EXAMPLE_RUNTIME_PATH) -# To see the result, run readelf -d core/core_basic_window; looking at the RPATH or RUNPATH attribute. -# To see which libraries a built example is linking to, ldd core/core_basic_window; -# Look for libraylib.so.1 => $(RAYLIB_INSTALL_PATH)/libraylib.so.1 or similar listing. -EXAMPLE_RUNTIME_PATH ?= $(RAYLIB_RELEASE_PATH) - -# Define default C compiler: gcc -# NOTE: define g++ compiler if using C++ -CC = gcc - -ifeq ($(PLATFORM),PLATFORM_DESKTOP) - ifeq ($(PLATFORM_OS),OSX) - # OSX default compiler - CC = clang - endif - ifeq ($(PLATFORM_OS),BSD) - # FreeBSD, OpenBSD, NetBSD, DragonFly default compiler - CC = clang - endif -endif -ifeq ($(PLATFORM),PLATFORM_RPI) - ifeq ($(USE_RPI_CROSS_COMPILER),TRUE) - # Define RPI cross-compiler - #CC = armv6j-hardfloat-linux-gnueabi-gcc - CC = $(RPI_TOOLCHAIN)/bin/arm-linux-gnueabihf-gcc - endif -endif -ifeq ($(PLATFORM),PLATFORM_WEB) - # HTML5 emscripten compiler - # WARNING: To compile to HTML5, code must be redesigned - # to use emscripten.h and emscripten_set_main_loop() - CC = emcc -endif - -# Define default make program: Mingw32-make -MAKE = mingw32-make - -ifeq ($(PLATFORM),PLATFORM_DESKTOP) - ifeq ($(PLATFORM_OS),LINUX) - MAKE = make - endif - ifeq ($(PLATFORM_OS),OSX) - MAKE = make - endif -endif - -# Define compiler flags: -# -O0 defines optimization level (no optimization, better for debugging) -# -O1 defines optimization level -# -g include debug information on compilation -# -s strip unnecessary data from build -> do not use in debug builds -# -Wall turns on most, but not all, compiler warnings -# -std=c99 defines C language mode (standard C from 1999 revision) -# -std=gnu99 defines C language mode (GNU C from 1999 revision) -# -Wno-missing-braces ignore invalid warning (GCC bug 53119) -# -D_DEFAULT_SOURCE use with -std=c99 on Linux and PLATFORM_WEB, required for timespec -CFLAGS += -Wall -std=c99 -D_DEFAULT_SOURCE -Wno-missing-braces - -ifeq ($(BUILD_MODE),DEBUG) - CFLAGS += -g -O0 -else - CFLAGS += -s -O1 -endif - -# Additional flags for compiler (if desired) -#CFLAGS += -Wextra -Wmissing-prototypes -Wstrict-prototypes -ifeq ($(PLATFORM),PLATFORM_DESKTOP) - ifeq ($(PLATFORM_OS),WINDOWS) - # resource file contains windows executable icon and properties - # -Wl,--subsystem,windows hides the console window - CFLAGS += $(RAYLIB_PATH)/src/raylib.rc.data -Wl,--subsystem,windows - endif - ifeq ($(PLATFORM_OS),LINUX) - ifeq ($(RAYLIB_LIBTYPE),STATIC) - CFLAGS += -D_DEFAULT_SOURCE - endif - ifeq ($(RAYLIB_LIBTYPE),SHARED) - # Explicitly enable runtime link to libraylib.so - CFLAGS += -Wl,-rpath,$(EXAMPLE_RUNTIME_PATH) - endif - endif -endif -ifeq ($(PLATFORM),PLATFORM_RPI) - CFLAGS += -std=gnu99 -endif -ifeq ($(PLATFORM),PLATFORM_WEB) - # -Os # size optimization - # -O2 # optimization level 2, if used, also set --memory-init-file 0 - # -s USE_GLFW=3 # Use glfw3 library (context/input management) - # -s ALLOW_MEMORY_GROWTH=1 # to allow memory resizing -> WARNING: Audio buffers could FAIL! - # -s TOTAL_MEMORY=16777216 # to specify heap memory size (default = 16MB) - # -s USE_PTHREADS=1 # multithreading support - # -s WASM=0 # disable Web Assembly, emitted by default - # -s EMTERPRETIFY=1 # enable emscripten code interpreter (very slow) - # -s EMTERPRETIFY_ASYNC=1 # support synchronous loops by emterpreter - # -s FORCE_FILESYSTEM=1 # force filesystem to load/save files data - # -s ASSERTIONS=1 # enable runtime checks for common memory allocation errors (-O1 and above turn it off) - # --profiling # include information for code profiling - # --memory-init-file 0 # to avoid an external memory initialization code file (.mem) - # --preload-file resources # specify a resources folder for data compilation - CFLAGS += -Os -s USE_GLFW=3 -s TOTAL_MEMORY=16777216 --preload-file resources - ifeq ($(BUILD_MODE), DEBUG) - CFLAGS += -s ASSERTIONS=1 --profiling - endif - - # Define a custom shell .html and output extension - CFLAGS += --shell-file $(RAYLIB_PATH)/src/shell.html - EXT = .html -endif - -# Define include paths for required headers -# NOTE: Several external required libraries (stb and others) -INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external - -# Define additional directories containing required header files -ifeq ($(PLATFORM),PLATFORM_RPI) - # RPI required libraries - INCLUDE_PATHS += -I/opt/vc/include - INCLUDE_PATHS += -I/opt/vc/include/interface/vmcs_host/linux - INCLUDE_PATHS += -I/opt/vc/include/interface/vcos/pthreads -endif -ifeq ($(PLATFORM),PLATFORM_DESKTOP) - ifeq ($(PLATFORM_OS),BSD) - # Consider -L$(RAYLIB_H_INSTALL_PATH) - INCLUDE_PATHS += -I/usr/local/include - endif - ifeq ($(PLATFORM_OS),LINUX) - # Reset everything. - # Precedence: immediately local, installed version, raysan5 provided libs -I$(RAYLIB_H_INSTALL_PATH) -I$(RAYLIB_PATH)/release/include - INCLUDE_PATHS = -I$(RAYLIB_H_INSTALL_PATH) -isystem. -isystem$(RAYLIB_PATH)/src -isystem$(RAYLIB_PATH)/release/include -isystem$(RAYLIB_PATH)/src/external - endif -endif - -# Define library paths containing required libs. -LDFLAGS = -L. -L$(RAYLIB_RELEASE_PATH) -L$(RAYLIB_PATH)/src - -ifeq ($(PLATFORM),PLATFORM_DESKTOP) - ifeq ($(PLATFORM_OS),BSD) - # Consider -L$(RAYLIB_INSTALL_PATH) - LDFLAGS += -L. -Lsrc -L/usr/local/lib - endif - ifeq ($(PLATFORM_OS),LINUX) - # Reset everything. - # Precedence: immediately local, installed version, raysan5 provided libs - LDFLAGS = -L. -L$(RAYLIB_INSTALL_PATH) -L$(RAYLIB_RELEASE_PATH) - endif -endif - -ifeq ($(PLATFORM),PLATFORM_RPI) - LDFLAGS += -L/opt/vc/lib -endif - -# Define any libraries required on linking -# if you want to link libraries (libname.so or libname.a), use the -lname -ifeq ($(PLATFORM),PLATFORM_DESKTOP) - ifeq ($(PLATFORM_OS),WINDOWS) - # Libraries for Windows desktop compilation - # NOTE: WinMM library required to set high-res timer resolution - LDLIBS = -lraylib -lopengl32 -lgdi32 -lwinmm - endif - ifeq ($(PLATFORM_OS),LINUX) - # Libraries for Debian GNU/Linux desktop compiling - # NOTE: Required packages: libegl1-mesa-dev - LDLIBS = -lraylib -lGL -lm -lpthread -ldl -lrt - - # On X11 requires also below libraries - LDLIBS += -lX11 - # NOTE: It seems additional libraries are not required any more, latest GLFW just dlopen them - #LDLIBS += -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor - - # On Wayland windowing system, additional libraries requires - ifeq ($(USE_WAYLAND_DISPLAY),TRUE) - LDLIBS += -lwayland-client -lwayland-cursor -lwayland-egl -lxkbcommon - endif - # Explicit link to libc - ifeq ($(RAYLIB_LIBTYPE),SHARED) - LDLIBS += -lc - endif - endif - ifeq ($(PLATFORM_OS),OSX) - # Libraries for OSX 10.9 desktop compiling - # NOTE: Required packages: libopenal-dev libegl1-mesa-dev - LDLIBS = -lraylib -framework OpenGL -framework OpenAL -framework Cocoa - endif - ifeq ($(PLATFORM_OS),BSD) - # Libraries for FreeBSD, OpenBSD, NetBSD, DragonFly desktop compiling - # NOTE: Required packages: mesa-libs - LDLIBS = -lraylib -lGL -lpthread -lm - - # On XWindow requires also below libraries - LDLIBS += -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor - endif - ifeq ($(USE_EXTERNAL_GLFW),TRUE) - # NOTE: It could require additional packages installed: libglfw3-dev - LDLIBS += -lglfw - endif -endif -ifeq ($(PLATFORM),PLATFORM_RPI) - # Libraries for Raspberry Pi compiling - # NOTE: Required packages: libasound2-dev (ALSA) - LDLIBS = -lraylib -lbrcmGLESv2 -lbrcmEGL -lpthread -lrt -lm -lbcm_host -ldl -endif -ifeq ($(PLATFORM),PLATFORM_WEB) - # Libraries for web (HTML5) compiling - LDLIBS = $(RAYLIB_RELEASE_PATH)/libraylib.a -endif - -# Define a recursive wildcard function -rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d)) - -# Define all source files required -SRC_DIR = src -OBJ_DIR = obj - -# Define all object files from source files -SRC = $(call rwildcard, *.c, *.h) -#OBJS = $(SRC:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o) -OBJS ?= main.c - -# For Android platform we call a custom Makefile.Android -ifeq ($(PLATFORM),PLATFORM_ANDROID) - MAKEFILE_PARAMS = -f Makefile.Android - export PROJECT_NAME - export SRC_DIR -else - MAKEFILE_PARAMS = $(PROJECT_NAME) -endif - -# Default target entry -# NOTE: We call this Makefile target or Makefile.Android target -all: - $(MAKE) $(MAKEFILE_PARAMS) - -# Project target defined by PROJECT_NAME -$(PROJECT_NAME): $(OBJS) - $(CC) -o $(PROJECT_NAME)$(EXT) $(OBJS) $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) - -# Compile source files -# NOTE: This pattern will compile every module defined on $(OBJS) -#%.o: %.c -$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c - $(CC) -c $< -o $@ $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) - -# Clean everything -clean: -ifeq ($(PLATFORM),PLATFORM_DESKTOP) - ifeq ($(PLATFORM_OS),WINDOWS) - del *.o *.exe /s - endif - ifeq ($(PLATFORM_OS),LINUX) - find -type f -executable | xargs file -i | grep -E 'x-object|x-archive|x-sharedlib|x-executable' | rev | cut -d ':' -f 2- | rev | xargs rm -fv - endif - ifeq ($(PLATFORM_OS),OSX) - find . -type f -perm +ugo+x -delete - rm -f *.o - endif -endif -ifeq ($(PLATFORM),PLATFORM_RPI) - find . -type f -executable -delete - rm -fv *.o -endif -ifeq ($(PLATFORM),PLATFORM_WEB) - del *.o *.html *.js -endif - @echo Cleaning done - diff --git a/projects/BMFontExtender/Makefile.Android b/projects/BMFontExtender/Makefile.Android deleted file mode 100644 index 7e41ea52f..000000000 --- a/projects/BMFontExtender/Makefile.Android +++ /dev/null @@ -1,300 +0,0 @@ -#************************************************************************************************** -# -# raylib makefile for Android project (APK building) -# -# Copyright (c) 2017 Ramon Santamaria (@raysan5) -# -# This software is provided "as-is", without any express or implied warranty. In no event -# will the authors be held liable for any damages arising from the use of this software. -# -# Permission is granted to anyone to use this software for any purpose, including commercial -# applications, and to alter it and redistribute it freely, subject to the following restrictions: -# -# 1. The origin of this software must not be misrepresented; you must not claim that you -# wrote the original software. If you use this software in a product, an acknowledgment -# in the product documentation would be appreciated but is not required. -# -# 2. Altered source versions must be plainly marked as such, and must not be misrepresented -# as being the original software. -# -# 3. This notice may not be removed or altered from any source distribution. -# -#************************************************************************************************** - -# Define required raylib variables -PLATFORM ?= PLATFORM_ANDROID -RAYLIB_PATH ?= ..\.. - -# Define Android architecture (armeabi-v7a, arm64-v8a, x86, x86-64) and API version -ANDROID_ARCH ?= ARM -ANDROID_API_VERSION = 21 -ifeq ($(ANDROID_ARCH),ARM) - ANDROID_ARCH_NAME = armeabi-v7a -endif -ifeq ($(ANDROID_ARCH),ARM64) - ANDROID_ARCH_NAME = arm64-v8a -endif - -# Required path variables -# NOTE: JAVA_HOME must be set to JDK -JAVA_HOME ?= C:/JavaJDK -ANDROID_HOME = C:/android-sdk -ANDROID_TOOLCHAIN = C:/android_toolchain_$(ANDROID_ARCH)_API$(ANDROID_API_VERSION) -ANDROID_BUILD_TOOLS = $(ANDROID_HOME)/build-tools/28.0.1 -ANDROID_PLATFORM_TOOLS = $(ANDROID_HOME)/platform-tools - -# Android project configuration variables -PROJECT_NAME ?= raylib_game -PROJECT_LIBRARY_NAME ?= main -PROJECT_BUILD_PATH ?= android.$(PROJECT_NAME) -PROJECT_RESOURCES_PATH ?= resources -PROJECT_SOURCE_FILES ?= raylib_game.c - -# Some source files are placed in directories, when compiling to some -# output directory other than source, that directory must pre-exist. -# Here we get a list of required folders that need to be created on -# code output folder $(PROJECT_BUILD_PATH)\obj to avoid GCC errors. -PROJECT_SOURCE_DIRS = $(sort $(dir $(PROJECT_SOURCE_FILES))) - -# Android app configuration variables -APP_LABEL_NAME ?= rGame -APP_COMPANY_NAME ?= raylib -APP_PRODUCT_NAME ?= rgame -APP_VERSION_CODE ?= 1 -APP_VERSION_NAME ?= 1.0 -APP_ICON_LDPI ?= $(RAYLIB_PATH)\logo\raylib_36x36.png -APP_ICON_MDPI ?= $(RAYLIB_PATH)\logo\raylib_48x48.png -APP_ICON_HDPI ?= $(RAYLIB_PATH)\logo\raylib_72x72.png -APP_SCREEN_ORIENTATION ?= landscape -APP_KEYSTORE_PASS ?= raylib - -# Library type used for raylib: STATIC (.a) or SHARED (.so/.dll) -RAYLIB_LIBTYPE ?= STATIC - -# Library path for libraylib.a/libraylib.so -RAYLIB_LIB_PATH = $(RAYLIB_PATH)\src - -# Shared libs must be added to APK if required -# NOTE: Generated NativeLoader.java automatically load those libraries -ifeq ($(RAYLIB_LIBTYPE),SHARED) - PROJECT_SHARED_LIBS = lib/$(ANDROID_ARCH_NAME)/libraylib.so -endif - -# Compiler and archiver -# NOTE: GCC is being deprecated in Android NDK r16 -ifeq ($(ANDROID_ARCH),ARM) - CC = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-clang - AR = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-ar -endif -ifeq ($(ANDROID_ARCH),ARM64) - CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-clang - AR = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-ar -endif - -# Compiler flags for arquitecture -ifeq ($(ANDROID_ARCH),ARM) - CFLAGS = -std=c99 -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -endif -ifeq ($(ANDROID_ARCH),ARM64) - CFLAGS = -std=c99 -target aarch64 -mfix-cortex-a53-835769 -endif -# Compilation functions attributes options -CFLAGS += -ffunction-sections -funwind-tables -fstack-protector-strong -fPIC -# Compiler options for the linker -CFLAGS += -Wall -Wa,--noexecstack -Wformat -Werror=format-security -no-canonical-prefixes -# Preprocessor macro definitions -CFLAGS += -DANDROID -DPLATFORM_ANDROID -D__ANDROID_API__=$(ANDROID_API_VERSION) - -# Paths containing required header files -INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external/android/native_app_glue - -# Linker options -LDFLAGS = -Wl,-soname,lib$(PROJECT_LIBRARY_NAME).so -Wl,--exclude-libs,libatomic.a -LDFLAGS += -Wl,--build-id -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings -# Force linking of library module to define symbol -LDFLAGS += -u ANativeActivity_onCreate -# Library paths containing required libs -LDFLAGS += -L. -L$(PROJECT_BUILD_PATH)/obj -L$(PROJECT_BUILD_PATH)/lib/$(ANDROID_ARCH_NAME) -L$(ANDROID_TOOLCHAIN)\sysroot\usr\lib - -# Define any libraries to link into executable -# if you want to link libraries (libname.so or libname.a), use the -lname -LDLIBS = -lm -lc -lraylib -llog -landroid -lEGL -lGLESv2 -lOpenSLES -ldl - -# Generate target objects list from PROJECT_SOURCE_FILES -OBJS = $(patsubst %.c, $(PROJECT_BUILD_PATH)/obj/%.o, $(PROJECT_SOURCE_FILES)) - -# Android APK building process... some steps required... -# NOTE: typing 'make' will invoke the default target entry called 'all', -all: create_temp_project_dirs \ - copy_project_required_libs \ - copy_project_resources \ - generate_loader_script \ - generate_android_manifest \ - generate_apk_keystore \ - config_project_package \ - compile_project_code \ - compile_project_class \ - compile_project_class_dex \ - create_project_apk_package \ - sign_project_apk_package \ - zipalign_project_apk_package - -# Create required temp directories for APK building -create_temp_project_dirs: - if not exist $(PROJECT_BUILD_PATH) mkdir $(PROJECT_BUILD_PATH) - if not exist $(PROJECT_BUILD_PATH)\obj mkdir $(PROJECT_BUILD_PATH)\obj - if not exist $(PROJECT_BUILD_PATH)\src mkdir $(PROJECT_BUILD_PATH)\src - if not exist $(PROJECT_BUILD_PATH)\src\com mkdir $(PROJECT_BUILD_PATH)\src\com - if not exist $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME) mkdir $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME) - if not exist $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME)\$(APP_PRODUCT_NAME) mkdir $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME)\$(APP_PRODUCT_NAME) - if not exist $(PROJECT_BUILD_PATH)\lib mkdir $(PROJECT_BUILD_PATH)\lib - if not exist $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME) mkdir $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME) - if not exist $(PROJECT_BUILD_PATH)\bin mkdir $(PROJECT_BUILD_PATH)\bin - if not exist $(PROJECT_BUILD_PATH)\res mkdir $(PROJECT_BUILD_PATH)\res - if not exist $(PROJECT_BUILD_PATH)\res\drawable-ldpi mkdir $(PROJECT_BUILD_PATH)\res\drawable-ldpi - if not exist $(PROJECT_BUILD_PATH)\res\drawable-mdpi mkdir $(PROJECT_BUILD_PATH)\res\drawable-mdpi - if not exist $(PROJECT_BUILD_PATH)\res\drawable-hdpi mkdir $(PROJECT_BUILD_PATH)\res\drawable-hdpi - if not exist $(PROJECT_BUILD_PATH)\res\values mkdir $(PROJECT_BUILD_PATH)\res\values - if not exist $(PROJECT_BUILD_PATH)\assets mkdir $(PROJECT_BUILD_PATH)\assets - if not exist $(PROJECT_BUILD_PATH)\assets\$(PROJECT_RESOURCES_PATH) mkdir $(PROJECT_BUILD_PATH)\assets\$(PROJECT_RESOURCES_PATH) - if not exist $(PROJECT_BUILD_PATH)\obj\screens mkdir $(PROJECT_BUILD_PATH)\obj\screens - $(foreach dir, $(PROJECT_SOURCE_DIRS), $(call create_dir, $(dir))) - -define create_dir - if not exist $(PROJECT_BUILD_PATH)\obj\$(1) mkdir $(PROJECT_BUILD_PATH)\obj\$(1) -endef - -# Copy required shared libs for integration into APK -# NOTE: If using shared libs they are loaded by generated NativeLoader.java -copy_project_required_libs: -ifeq ($(RAYLIB_LIBTYPE),SHARED) - copy /Y $(RAYLIB_LIB_PATH)\libraylib.so $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME)\libraylib.so -endif -ifeq ($(RAYLIB_LIBTYPE),STATIC) - copy /Y $(RAYLIB_LIB_PATH)\libraylib.a $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME)\libraylib.a -endif - -# Copy project required resources: strings.xml, icon.png, assets -# NOTE: Required strings.xml is generated and game resources are copied to assets folder -# TODO: Review xcopy usage, it can not be found in some systems! -copy_project_resources: - copy $(APP_ICON_LDPI) $(PROJECT_BUILD_PATH)\res\drawable-ldpi\icon.png /Y - copy $(APP_ICON_MDPI) $(PROJECT_BUILD_PATH)\res\drawable-mdpi\icon.png /Y - copy $(APP_ICON_HDPI) $(PROJECT_BUILD_PATH)\res\drawable-hdpi\icon.png /Y - @echo ^ > $(PROJECT_BUILD_PATH)/res/values/strings.xml - @echo ^^$(APP_LABEL_NAME)^^ >> $(PROJECT_BUILD_PATH)/res/values/strings.xml - if exist $(PROJECT_RESOURCES_PATH) C:\Windows\System32\xcopy $(PROJECT_RESOURCES_PATH) $(PROJECT_BUILD_PATH)\assets\$(PROJECT_RESOURCES_PATH) /Y /E /F - -# Generate NativeLoader.java to load required shared libraries -# NOTE: Probably not the bet way to generate this file... but it works. -generate_loader_script: - @echo package com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME); > $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java - @echo. >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java - @echo public class NativeLoader extends android.app.NativeActivity { >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java - @echo static { >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java -ifeq ($(RAYLIB_LIBTYPE),SHARED) - @echo System.loadLibrary("raylib"); >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java -endif - @echo System.loadLibrary("$(PROJECT_LIBRARY_NAME)"); >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java - @echo } >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java - @echo } >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java - -# Generate AndroidManifest.xml with all the required options -# NOTE: Probably not the bet way to generate this file... but it works. -generate_android_manifest: - @echo ^ > $(PROJECT_BUILD_PATH)/AndroidManifest.xml - @echo ^> $(PROJECT_BUILD_PATH)/AndroidManifest.xml - @echo package="com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME)" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml - @echo android:versionCode="$(APP_VERSION_CODE)" android:versionName="$(APP_VERSION_NAME)" ^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml - @echo ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml - @echo ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml - @echo ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml - @echo ^> $(PROJECT_BUILD_PATH)/AndroidManifest.xml - @echo android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml - @echo android:configChanges="orientation|keyboardHidden|screenSize" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml - @echo android:screenOrientation="$(APP_SCREEN_ORIENTATION)" android:launchMode="singleTask" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml - @echo android:clearTaskOnLaunch="true"^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml - @echo ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml - @echo ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml - @echo ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml - @echo ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml - @echo ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml - @echo ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml - @echo ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml - @echo ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml - -# Generate storekey for APK signing: $(PROJECT_NAME).keystore -# NOTE: Configure here your Distinguished Names (-dname) if required! -generate_apk_keystore: - if not exist $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore $(JAVA_HOME)/bin/keytool -genkeypair -validity 1000 -dname "CN=$(APP_COMPANY_NAME),O=Android,C=ES" -keystore $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore -storepass $(APP_KEYSTORE_PASS) -keypass $(APP_KEYSTORE_PASS) -alias $(PROJECT_NAME)Key -keyalg RSA - -# Config project package and resource using AndroidManifest.xml and res/values/strings.xml -# NOTE: Generates resources file: src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/R.java -config_project_package: - $(ANDROID_BUILD_TOOLS)/aapt package -f -m -S $(PROJECT_BUILD_PATH)/res -J $(PROJECT_BUILD_PATH)/src -M $(PROJECT_BUILD_PATH)/AndroidManifest.xml -I $(ANDROID_HOME)/platforms/android-$(ANDROID_API_VERSION)/android.jar - -# Compile native_app_glue code as static library: obj/libnative_app_glue.a -compile_native_app_glue: - $(CC) -c $(RAYLIB_PATH)/src/external/android/native_app_glue/android_native_app_glue.c -o $(PROJECT_BUILD_PATH)/obj/native_app_glue.o $(CFLAGS) - $(AR) rcs $(PROJECT_BUILD_PATH)/obj/libnative_app_glue.a $(PROJECT_BUILD_PATH)/obj/native_app_glue.o - -# Compile project code into a shared library: lib/lib$(PROJECT_LIBRARY_NAME).so -compile_project_code: $(OBJS) - $(CC) -o $(PROJECT_BUILD_PATH)/lib/$(ANDROID_ARCH_NAME)/lib$(PROJECT_LIBRARY_NAME).so $(OBJS) -shared $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) - -# Compile all .c files required into object (.o) files -# NOTE: Those files will be linked into a shared library -$(PROJECT_BUILD_PATH)/obj/%.o:%.c - $(CC) -c $^ -o $@ $(INCLUDE_PATHS) $(CFLAGS) --sysroot=$(ANDROID_TOOLCHAIN)/sysroot - -# Compile project .java code into .class (Java bytecode) -compile_project_class: - $(JAVA_HOME)/bin/javac -verbose -source 1.7 -target 1.7 -d $(PROJECT_BUILD_PATH)/obj -bootclasspath $(JAVA_HOME)/jre/lib/rt.jar -classpath $(ANDROID_HOME)/platforms/android-$(ANDROID_API_VERSION)/android.jar;$(PROJECT_BUILD_PATH)/obj -sourcepath $(PROJECT_BUILD_PATH)/src $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/R.java $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java - -# Compile .class files into Dalvik executable bytecode (.dex) -# NOTE: Since Android 5.0, Dalvik interpreter (JIT) has been replaced by ART (AOT) -compile_project_class_dex: - $(ANDROID_BUILD_TOOLS)/dx --verbose --dex --output=$(PROJECT_BUILD_PATH)/bin/classes.dex $(PROJECT_BUILD_PATH)/obj - -# Create Android APK package: bin/$(PROJECT_NAME).unsigned.apk -# NOTE: Requires compiled classes.dex and lib$(PROJECT_LIBRARY_NAME).so -# NOTE: Use -A resources to define additional directory in which to find raw asset files -create_project_apk_package: - $(ANDROID_BUILD_TOOLS)/aapt package -f -M $(PROJECT_BUILD_PATH)/AndroidManifest.xml -S $(PROJECT_BUILD_PATH)/res -A $(PROJECT_BUILD_PATH)/assets -I $(ANDROID_HOME)/platforms/android-$(ANDROID_API_VERSION)/android.jar -F $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).unsigned.apk $(PROJECT_BUILD_PATH)/bin - cd $(PROJECT_BUILD_PATH) && $(ANDROID_BUILD_TOOLS)/aapt add bin/$(PROJECT_NAME).unsigned.apk lib/$(ANDROID_ARCH_NAME)/lib$(PROJECT_LIBRARY_NAME).so $(PROJECT_SHARED_LIBS) - -# Create signed APK package using generated Key: bin/$(PROJECT_NAME).signed.apk -sign_project_apk_package: - $(JAVA_HOME)/bin/jarsigner -keystore $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore -storepass $(APP_KEYSTORE_PASS) -keypass $(APP_KEYSTORE_PASS) -signedjar $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).signed.apk $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).unsigned.apk $(PROJECT_NAME)Key - -# Create zip-aligned APK package: $(PROJECT_NAME).apk -zipalign_project_apk_package: - $(ANDROID_BUILD_TOOLS)/zipalign -f 4 $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).signed.apk $(PROJECT_NAME).apk - -# Install $(PROJECT_NAME).apk to default emulator/device -# NOTE: Use -e (emulator) or -d (device) parameters if required -install: - $(ANDROID_PLATFORM_TOOLS)/adb install --abi $(ANDROID_ARCH_NAME) -rds $(PROJECT_NAME).apk - -# Check supported ABI for the device (armeabi-v7a, arm64-v8a, x86, x86_64) -check_device_abi: - $(ANDROID_PLATFORM_TOOLS)/adb shell getprop ro.product.cpu.abi - -# Monitorize output log coming from device, only raylib tag -logcat: - $(ANDROID_PLATFORM_TOOLS)/adb logcat -c - $(ANDROID_PLATFORM_TOOLS)/adb logcat raylib:V *:S - -# Install and monitorize $(PROJECT_NAME).apk to default emulator/device -deploy: - $(ANDROID_PLATFORM_TOOLS)/adb install -r $(PROJECT_NAME).apk - $(ANDROID_PLATFORM_TOOLS)/adb logcat -c - $(ANDROID_PLATFORM_TOOLS)/adb logcat raylib:V *:S - -#$(ANDROID_PLATFORM_TOOLS)/adb logcat *:W - -# Clean everything -clean: - del $(PROJECT_BUILD_PATH)\* /f /s /q - rmdir $(PROJECT_BUILD_PATH) /s /q - @echo Cleaning done diff --git a/projects/BMFontExtender/main.c b/projects/BMFontExtender/main.c deleted file mode 100644 index e9e674908..000000000 --- a/projects/BMFontExtender/main.c +++ /dev/null @@ -1,94 +0,0 @@ -/******************************************************************************************* -* -* raylib [core] example - Basic 3d example -* -* Welcome to raylib! -* -* To compile example, just press F5. -* Note that compiled executable is placed in the same folder as .c file -* -* You can find all basic examples on C:\raylib\raylib\examples folder or -* raylib official webpage: www.raylib.com -* -* Enjoy using raylib. :) -* -* This example has been created using raylib 1.0 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Copyright (c) 2013-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_WEB) - #include -#endif - -//---------------------------------------------------------------------------------- -// Main entry point -//---------------------------------------------------------------------------------- -int main() -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 1200; - const int screenHeight = 900; - - InitWindow(screenWidth, screenHeight, "raylib"); - - // Font - Font fontnice = LoadFont("Assets/font/elandnice.fnt"); - Font fontstrawberry = LoadFont("Assets/font/gostrawberry.fnt"); - Font fontgukdae = LoadFont("Assets/font/gukdae.fnt"); - - const char* beautifulhangul = "한글은 아름다워요. 예뻐요. 그림 같아요"; - const char* hun[7]; - hun[0] = "나랏말싸미 듕귁에 달아 문자와로 서로 사맛디 아니할새"; - hun[1] = "이런 젼차로 어린백성이 니르고자 할배 있어도"; - hun[2] = "마참내 그 뜻을 시려펴디 못할 놈이 하노라"; - hun[3] = "내 이를 위하여 어여삐 여겨"; - hun[4] = "새로 스물여덟자를 맹그나니"; - hun[5] = "사람마다 해여 수비녀겨 날로 쓰매"; - hun[6] = "편한케 하고져 할 따르미니라"; - const char* author = "대한민국 변호사, 이동근이 만들었어요. 2023. 11. 2."; - - //-------------------------------------------------------------------------------------- - -#if defined(PLATFORM_WEB) - emscripten_set_main_loop(UpdateDrawFrame, 60, 1); -#else - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - BeginDrawing(); - ClearBackground(BLACK); - DrawTextEx(fontnice, beautifulhangul , (Vector2) { 100, 110 }, 48, 5, DARKGREEN); - - for (int i =0; i < 7; i++) - { - Vector2 length = MeasureTextEx(fontstrawberry, hun[i], 36, 5); // font height is 36 - Vector2 pos = { screenWidth / 2 - length.x / 2, (float)260 + (float)i * (float)40 }; // middle alignment - DrawTextEx(fontstrawberry, hun[i], pos, 36, 5, RAYWHITE ); - } - - - DrawTextEx(fontgukdae, author, (Vector2) { 360, 800 }, 32, 5, VIOLET ); - EndDrawing(); - } -#endif - - UnloadFont(fontnice); - UnloadFont(fontstrawberry); - UnloadFont(fontgukdae); - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - diff --git a/projects/BMFontExtender/main.code-workspace b/projects/BMFontExtender/main.code-workspace deleted file mode 100644 index 2c9896f4d..000000000 --- a/projects/BMFontExtender/main.code-workspace +++ /dev/null @@ -1,19 +0,0 @@ -{ - "folders": [ - { - "path": "." - }, - { - "path": "../../../../LoadBMFontExtender/Assets" - } - ], - "settings": { - "files.associations": { - "raylib.h": "c", - "math.h": "c", - "blocks.h": "c", - "stdio.h": "c", - "*.m": "c" - } - } -} \ No newline at end of file diff --git a/projects/BMFontExtender/resources/LICENSE b/projects/BMFontExtender/resources/LICENSE deleted file mode 100644 index ebde2c573..000000000 --- a/projects/BMFontExtender/resources/LICENSE +++ /dev/null @@ -1 +0,0 @@ -Assets license. diff --git a/src/rtext.c b/src/rtext.c index 4aa8e14ac..23d7caa5f 100644 --- a/src/rtext.c +++ b/src/rtext.c @@ -126,7 +126,6 @@ static Font defaultFont = { 0 }; //---------------------------------------------------------------------------------- #if defined(SUPPORT_FILEFORMAT_FNT) static Font LoadBMFont(const char *fileName); // Load a BMFont file (AngelCode font file) -static Font LoadBMFontEx(const char *fileName); // Load a BMFont file (AngelCode font file) #endif static int textLineSpacing = 15; // Text vertical line spacing in pixels @@ -333,7 +332,7 @@ Font LoadFont(const char *fileName) else #endif #if defined(SUPPORT_FILEFORMAT_FNT) - if (IsFileExtension(fileName, ".fnt")) font = LoadBMFontEx(fileName); + if (IsFileExtension(fileName, ".fnt")) font = LoadBMFont(fileName); else #endif { @@ -2028,156 +2027,9 @@ static Font LoadBMFont(const char *fileName) int fontSize = 0; int glyphCount = 0; - int imWidth = 0; - int imHeight = 0; - char imFileName[129] = { 0 }; - - int base = 0; // Useless data - int readBytes = 0; // Data bytes read - int readVars = 0; // Variables filled by sscanf() - - char *fileText = LoadFileText(fileName); - - if (fileText == NULL) return font; - - char *fileTextPtr = fileText; - - // NOTE: We skip first line, it contains no useful information - readBytes = GetLine(fileTextPtr, buffer, MAX_BUFFER_SIZE); - fileTextPtr += (readBytes + 1); - - // Read line data - readBytes = GetLine(fileTextPtr, buffer, MAX_BUFFER_SIZE); - searchPoint = strstr(buffer, "lineHeight"); - readVars = sscanf(searchPoint, "lineHeight=%i base=%i scaleW=%i scaleH=%i", &fontSize, &base, &imWidth, &imHeight); - fileTextPtr += (readBytes + 1); - - if (readVars < 4) { UnloadFileText(fileText); return font; } // Some data not available, file malformed - - readBytes = GetLine(fileTextPtr, buffer, MAX_BUFFER_SIZE); - searchPoint = strstr(buffer, "file"); - readVars = sscanf(searchPoint, "file=\"%128[^\"]\"", imFileName); - fileTextPtr += (readBytes + 1); - - if (readVars < 1) { UnloadFileText(fileText); return font; } // No fileName read - - readBytes = GetLine(fileTextPtr, buffer, MAX_BUFFER_SIZE); - searchPoint = strstr(buffer, "count"); - readVars = sscanf(searchPoint, "count=%i", &glyphCount); - fileTextPtr += (readBytes + 1); - - if (readVars < 1) { UnloadFileText(fileText); return font; } // No glyphCount read - - // Compose correct path using route of .fnt file (fileName) and imFileName - char *imPath = NULL; - char *lastSlash = NULL; - - lastSlash = strrchr(fileName, '/'); - if (lastSlash == NULL) lastSlash = strrchr(fileName, '\\'); - - if (lastSlash != NULL) - { - // NOTE: We need some extra space to avoid memory corruption on next allocations! - imPath = (char *)RL_CALLOC(TextLength(fileName) - TextLength(lastSlash) + TextLength(imFileName) + 4, 1); - memcpy(imPath, fileName, TextLength(fileName) - TextLength(lastSlash) + 1); - memcpy(imPath + TextLength(fileName) - TextLength(lastSlash) + 1, imFileName, TextLength(imFileName)); - } - else imPath = imFileName; - - TRACELOGD(" > Image loading path: %s", imPath); - - Image imFont = LoadImage(imPath); - - if (imFont.format == PIXELFORMAT_UNCOMPRESSED_GRAYSCALE) - { - // Convert image to GRAYSCALE + ALPHA, using the mask as the alpha channel - Image imFontAlpha = { - .data = RL_CALLOC(imFont.width*imFont.height, 2), - .width = imFont.width, - .height = imFont.height, - .mipmaps = 1, - .format = PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA - }; - - for (int p = 0, i = 0; p < (imFont.width*imFont.height*2); p += 2, i++) - { - ((unsigned char *)(imFontAlpha.data))[p] = 0xff; - ((unsigned char *)(imFontAlpha.data))[p + 1] = ((unsigned char *)imFont.data)[i]; - } - - UnloadImage(imFont); - imFont = imFontAlpha; - } - - font.texture = LoadTextureFromImage(imFont); - - if (lastSlash != NULL) RL_FREE(imPath); - - // Fill font characters info data - font.baseSize = fontSize; - font.glyphCount = glyphCount; - font.glyphPadding = 0; - font.glyphs = (GlyphInfo *)RL_MALLOC(glyphCount*sizeof(GlyphInfo)); - font.recs = (Rectangle *)RL_MALLOC(glyphCount*sizeof(Rectangle)); - - int charId, charX, charY, charWidth, charHeight, charOffsetX, charOffsetY, charAdvanceX; - - for (int i = 0; i < glyphCount; i++) - { - readBytes = GetLine(fileTextPtr, buffer, MAX_BUFFER_SIZE); - readVars = sscanf(buffer, "char id=%i x=%i y=%i width=%i height=%i xoffset=%i yoffset=%i xadvance=%i", - &charId, &charX, &charY, &charWidth, &charHeight, &charOffsetX, &charOffsetY, &charAdvanceX); - fileTextPtr += (readBytes + 1); - - if (readVars == 8) // Make sure all char data has been properly read - { - // Get character rectangle in the font atlas texture - font.recs[i] = (Rectangle){ (float)charX, (float)charY, (float)charWidth, (float)charHeight }; - - // Save data properly in sprite font - font.glyphs[i].value = charId; - font.glyphs[i].offsetX = charOffsetX; - font.glyphs[i].offsetY = charOffsetY; - font.glyphs[i].advanceX = charAdvanceX; - - // Fill character image data from imFont data - font.glyphs[i].image = ImageFromImage(imFont, font.recs[i]); - } - else TRACELOG(LOG_WARNING, "FONT: [%s] Some characters data not correctly provided", fileName); - } - - UnloadImage(imFont); - UnloadFileText(fileText); - - if (font.texture.id == 0) - { - UnloadFont(font); - font = GetFontDefault(); - TRACELOG(LOG_WARNING, "FONT: [%s] Failed to load texture, reverted to default font", fileName); - } - else TRACELOG(LOG_INFO, "FONT: [%s] Font loaded successfully (%i glyphs)", fileName, font.glyphCount); - - return font; -} - -// Extender of LoadBMFont. Load a BMFont file (AngelCode font file) -// REQUIRES: strstr(), sscanf(), strrchr(), memcpy() -static Font LoadBMFontEX(const char *fileName) -{ - #define MAX_BUFFER_SIZE 256 - - Font font = { 0 }; - - char buffer[MAX_BUFFER_SIZE] = { 0 }; - char *searchPoint = NULL; - - int fontSize = 0; - int glyphCount = 0; - int imWidth = 0; int imHeight = 0; int totalPage = 1; // page variable - int curPage = 0; char imFileName[10][129] = { 0 }; // up to ten png file. int base = 0; // Useless data @@ -2241,7 +2093,10 @@ static Font LoadBMFontEX(const char *fileName) TRACELOGD(" > Image loading path: %s", imPath[i]); } - Image imFont[totalPage]; + // Resize and ReDraw Font Image + Image fullFont = LoadImage(imPath[0]);; + + Image imFont[totalPage]; // font atlas for (int i = 0; i < totalPage; i++) { @@ -2269,15 +2124,14 @@ static Font LoadBMFontEX(const char *fileName) } if (lastSlash != NULL) RL_FREE(imPath[i]); - } + } - // Resize and ReDraw Font Image - Image fullFont; - fullFont = imFont[0]; + fullFont = imFont[0]; // If multiple atlas, then merge atlas if (totalPage > 1) { + // Resize and ReDraw Font Image ImageResizeCanvas(&fullFont, imWidth, imHeight * totalPage, 0, 0, BLACK); for (int index = 1; index <= totalPage; index++)